ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
Home page
Related Pages
Modules
Namespaces
Classes
Files
External Links
File List
File Members
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
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
geant4
tree
geant4-10.6-release
source
geometry
magneticfield
include
G4VFSALIntegrationStepper.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:16
using
1.8.2 with
ECCE GitHub integration