ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4VFSALIntegrationStepper.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4VFSALIntegrationStepper.hh
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 
50 {
51  public: // with description
52 
54  G4int numIntegrationVariables,
55  G4int numStateVariables = 12);
56  virtual ~G4VFSALIntegrationStepper() = default;
57  // Constructor and destructor. No actions.
58 
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 
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 
113  const G4int fNoIntegrationVariables = 0; // Variables in integration
114  const G4int fNoStateVariables = 0; // Number required for FieldTrack
115 
117  // Debug...
118 };
119 
120 #include "G4VFSALIntegrationStepper.icc"
121 
122 #endif