Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/geometry/magneticfield/include/G4VFSALIntegrationStepper.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  1 //
  2 // ********************************************************************
  3 // * License and Disclaimer                                           *
  4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.                             *
 10 // *                                                                  *
 11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                                                  *
 18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // ********************************************************************
 25 //
 26 // G4VFSALIntegrationStepper
 27 //
 28 // Class description:
 29 //
 30 // Class similar to G4VMagIntegratorStepper, for steppers which
 31 // estimate the value of the derivative at the projected endpoint
 32 // of integration - at each successful step.
 33 // This ability is known as 'First Same As Last' (FSAL). It
 34 // reduces the number of required calls to the equation's 
 35 // RightHandSide method, and, as such the number of calls to the 
 36 // (potentially expensive) field evaluation methods.
 37 //
 38 // Based on G4VMagIntegratorStepper
 39 
 40 // Author: Somnath Banerjee, Google Summer of Code 2015
 41 // Supervision: John Apostolakis, CERN
 42 // --------------------------------------------------------------------
 43 #ifndef G4VFSALINTEGRATOR_STEPPER_HH
 44 #define G4VFSALINTEGRATOR_STEPPER_HH
 45 
 46 #include "G4Types.hh"
 47 #include "G4EquationOfMotion.hh"
 48 
 49 class G4VFSALIntegrationStepper
 50 {
 51   public:  // with description
 52 
 53      G4VFSALIntegrationStepper (G4EquationOfMotion* Equation,
 54                                 G4int               numIntegrationVariables,
 55                                 G4int               numStateVariables = 12);
 56      virtual ~G4VFSALIntegrationStepper() = default;
 57        // Constructor and destructor. No actions.
 58 
 59      G4VFSALIntegrationStepper(const G4VFSALIntegrationStepper&) = delete;
 60      G4VFSALIntegrationStepper& operator=(const G4VFSALIntegrationStepper&) = delete;
 61 
 62      virtual void Stepper( const G4double y[],
 63                            const G4double dydx[],
 64                                  G4double h,
 65                                  G4double yout[],
 66                                  G4double yerr[],
 67                                  G4double lastDydx[]) = 0;
 68        // The stepper for the Runge Kutta integration.
 69        // The stepsize is fixed, with the Step size given by h.
 70        // Integrates ODE starting values y[0 to 6].
 71        // Outputs yout[] and its estimated error yerr[].
 72 
 73      virtual G4double DistChord() const = 0; 
 74        // Estimate the maximum distance of a chord from the true path
 75        // over the segment last integrated.
 76     
 77      inline void NormaliseTangentVector( G4double vec[6] );
 78        // Simple utility function to (re)normalise 'unit velocity' vector.
 79 
 80      inline void NormalisePolarizationVector( G4double vec[12] );
 81        // Simple utility function to (re)normalise 'unit spin' vector.
 82 
 83       void RightHandSide( const double y[], double dydx[] );
 84        // Utility method to supply the standard Evaluation of the
 85        // Right Hand side of the associated equation.
 86 
 87      inline G4int GetNumberOfVariables() const;
 88        // Get the number of variables that the stepper will integrate over.
 89 
 90      inline G4int GetNumberOfStateVariables() const;
 91        // Get the number of variables of state variables (>= above, integration)
 92 
 93      virtual G4int IntegratorOrder() const = 0;
 94        // Returns the order of the integrator
 95        // i.e. its error behaviour is of the order O(h^order).
 96 
 97      inline G4EquationOfMotion* GetEquationOfMotion(); 
 98        // As some steppers (eg RKG3) require other methods of Eq_Rhs
 99        // this function allows for access to them.
100      inline void SetEquationOfMotion(G4EquationOfMotion* newEquation); 
101 
102   public:  // without description
103 
104     // Debug functions...
105 
106     inline G4int GetfNoRHSCalls() { return fNoRHSCalls; }
107     void increasefNORHSCalls();
108     inline void ResetfNORHSCalls() { fNoRHSCalls = 0; }
109 
110   private:
111 
112     G4EquationOfMotion* fEquation_Rhs = nullptr;
113     const G4int fNoIntegrationVariables = 0; // Variables in integration
114     const G4int fNoStateVariables = 0;       // Number required for FieldTrack
115     
116     G4int fNoRHSCalls = 0;
117       // Debug...
118 };
119 
120 #include "G4VFSALIntegrationStepper.icc"
121 
122 #endif
123