Geant4-11
Public Member Functions | Static Public Attributes | Protected Member Functions | Private Attributes
G4TSimpleRunge< T_Equation, N > Class Template Reference

#include <G4TSimpleRunge.hh>

Inheritance diagram for G4TSimpleRunge< T_Equation, N >:
G4TMagErrorStepper< G4TSimpleRunge< T_Equation, N >, T_Equation, N > G4MagIntegratorStepper

Public Member Functions

G4double DistChord () const override final
 
void DumbStepper (const G4double yIn[], const G4double dydx[], G4double h, G4double yOut[])
 
 G4TSimpleRunge (T_Equation *EqRhs, G4int numberOfVariables=6)
 
G4EquationOfMotionGetEquationOfMotion ()
 
const G4EquationOfMotionGetEquationOfMotion () const
 
unsigned long GetfNoRHSCalls ()
 
G4int GetNumberOfStateVariables () const
 
G4int GetNumberOfVariables () const
 
G4int IntegrationOrder ()
 
G4int IntegratorOrder () const
 
G4bool IsFSAL () const
 
void NormalisePolarizationVector (G4double vec[12])
 
void NormaliseTangentVector (G4double vec[6])
 
void ResetfNORHSCalls ()
 
void RightHandSide (const G4double y[], G4double dydx[]) const
 
void RightHandSide (const G4double y[], G4double dydx[], G4double field[]) const
 
void RightHandSide (G4double y[], G4double dydx[])
 
void SetEquationOfMotion (G4EquationOfMotion *newEquation)
 
void Stepper (const G4double yInput[], const G4double dydx[], G4double hstep, G4double yOutput[], G4double yError[]) override final
 
 ~G4TSimpleRunge ()
 

Static Public Attributes

static constexpr double IntegratorCorrection = 1. / ((1 << 2) - 1)
 

Protected Member Functions

void SetFSAL (G4bool flag=true)
 
void SetIntegrationOrder (G4int order)
 

Private Attributes

G4double dydxMid [N< 8 ? 8 :N]
 
G4double dydxTemp [N > 12 ? N :12]
 
T_Equation * fEquation_Rhs
 
G4ThreeVector fFinalPoint
 
G4ThreeVector fInitialPoint
 
G4int fIntegrationOrder = -1
 
G4bool fIsFSAL = false
 
G4ThreeVector fMidPoint
 
const G4int fNoIntegrationVariables = 0
 
unsigned long fNoRHSCalls = 0UL
 
const G4int fNoStateVariables = 0
 
G4int fNumberOfVariables
 
G4double yInitial [N< 8 ? 8 :N]
 
G4double yMiddle [N< 8 ? 8 :N]
 
G4double yOneStep [N< 8 ? 8 :N]
 
G4double yTemp [N > 12 ? N :12]
 

Detailed Description

template<class T_Equation, int N>
class G4TSimpleRunge< T_Equation, N >

Definition at line 45 of file G4TSimpleRunge.hh.

Constructor & Destructor Documentation

◆ G4TSimpleRunge()

template<class T_Equation , int N>
G4TSimpleRunge< T_Equation, N >::G4TSimpleRunge ( T_Equation *  EqRhs,
G4int  numberOfVariables = 6 
)
inline

Definition at line 51 of file G4TSimpleRunge.hh.

53 EqRhs, numberOfVariables)
54 , fNumberOfVariables(numberOfVariables)
55 , fEquation_Rhs(EqRhs)
56
57 {
58 // default GetNumberOfStateVariables() == 12
59 assert(this->GetNumberOfStateVariables() <= 12);
60 }
G4int GetNumberOfStateVariables() const
T_Equation * fEquation_Rhs
G4int fNumberOfVariables

References G4MagIntegratorStepper::GetNumberOfStateVariables().

◆ ~G4TSimpleRunge()

template<class T_Equation , int N>
G4TSimpleRunge< T_Equation, N >::~G4TSimpleRunge ( )
inline

Definition at line 62 of file G4TSimpleRunge.hh.

62{ ; }

Member Function Documentation

◆ DistChord()

G4double G4TMagErrorStepper< G4TSimpleRunge< T_Equation, N > , T_Equation, N >::DistChord
inlinefinaloverridevirtualinherited

Implements G4MagIntegratorStepper.

Definition at line 67 of file G4TMagErrorStepper.hh.

154{
155 // Estimate the maximum distance from the curve to the chord
156 //
157 // We estimate this using the distance of the midpoint to
158 // chord (the line between
159 //
160 // Method below is good only for angle deviations < 2 pi,
161 // This restriction should not a problem for the Runge cutta methods,
162 // which generally cannot integrate accurately for large angle deviations.
163 G4double distLine, distChord;
164
166 {
168 // This is a class method that gives distance of Mid
169 // from the Chord between the Initial and Final points.
170
171 distChord = distLine;
172 }
173 else
174 {
175 distChord = (fMidPoint - fInitialPoint).mag();
176 }
177
178 return distChord;
179}
double G4double
Definition: G4Types.hh:83
static G4double Distline(const G4ThreeVector &OtherPnt, const G4ThreeVector &LinePntA, const G4ThreeVector &LinePntB)

◆ DumbStepper()

template<class T_Equation , int N>
void G4TSimpleRunge< T_Equation, N >::DumbStepper ( const G4double  yIn[],
const G4double  dydx[],
G4double  h,
G4double  yOut[] 
)
inline

Definition at line 70 of file G4TSimpleRunge.hh.

73 {
74 // Initialise time to t0, needed when it is not updated by the integration.
75 yTemp[7] = yOut[7] = yIn[7]; // Better to set it to NaN; // TODO
76
77 for(G4int i = 0; i < N; ++i)
78 {
79 yTemp[i] = yIn[i] + 0.5 * h * dydx[i];
80 }
81
83
84 for(G4int i = 0; i < N; ++i)
85 {
86 yOut[i] = yIn[i] + h * (dydxTemp[i]);
87 }
88 }
int G4int
Definition: G4Types.hh:85
G4double yTemp[N > 12 ? N :12]
G4double dydxTemp[N > 12 ? N :12]
void RightHandSide(G4double y[], G4double dydx[])

References G4TSimpleRunge< T_Equation, N >::dydxTemp, G4TSimpleRunge< T_Equation, N >::RightHandSide(), and G4TSimpleRunge< T_Equation, N >::yTemp.

◆ GetEquationOfMotion() [1/2]

G4EquationOfMotion * G4MagIntegratorStepper::GetEquationOfMotion ( )
inlineinherited

◆ GetEquationOfMotion() [2/2]

const G4EquationOfMotion * G4MagIntegratorStepper::GetEquationOfMotion ( ) const
inlineinherited

◆ GetfNoRHSCalls()

unsigned long G4MagIntegratorStepper::GetfNoRHSCalls ( )
inlineinherited

◆ GetNumberOfStateVariables()

G4int G4MagIntegratorStepper::GetNumberOfStateVariables ( ) const
inlineinherited

◆ GetNumberOfVariables()

G4int G4MagIntegratorStepper::GetNumberOfVariables ( ) const
inlineinherited

◆ IntegrationOrder()

G4int G4MagIntegratorStepper::IntegrationOrder ( )
inlineinherited

◆ IntegratorOrder()

template<class T_Equation , int N>
G4int G4TSimpleRunge< T_Equation, N >::IntegratorOrder ( ) const
inlinevirtual

Implements G4MagIntegratorStepper.

Definition at line 91 of file G4TSimpleRunge.hh.

91{ return 2; }

◆ IsFSAL()

G4bool G4MagIntegratorStepper::IsFSAL ( ) const
inlineinherited

◆ NormalisePolarizationVector()

void G4MagIntegratorStepper::NormalisePolarizationVector ( G4double  vec[12])
inlineinherited

◆ NormaliseTangentVector()

void G4MagIntegratorStepper::NormaliseTangentVector ( G4double  vec[6])
inlineinherited

◆ ResetfNORHSCalls()

void G4MagIntegratorStepper::ResetfNORHSCalls ( )
inlineinherited

◆ RightHandSide() [1/3]

void G4MagIntegratorStepper::RightHandSide ( const G4double  y[],
G4double  dydx[] 
) const
inlineinherited

◆ RightHandSide() [2/3]

void G4MagIntegratorStepper::RightHandSide ( const G4double  y[],
G4double  dydx[],
G4double  field[] 
) const
inlineinherited

◆ RightHandSide() [3/3]

template<class T_Equation , int N>
void G4TSimpleRunge< T_Equation, N >::RightHandSide ( G4double  y[],
G4double  dydx[] 
)
inline

Definition at line 64 of file G4TSimpleRunge.hh.

66 {
67 fEquation_Rhs->T_Equation::RightHandSide(y, dydx);
68 }

References G4TSimpleRunge< T_Equation, N >::fEquation_Rhs.

Referenced by G4TSimpleRunge< T_Equation, N >::DumbStepper().

◆ SetEquationOfMotion()

void G4MagIntegratorStepper::SetEquationOfMotion ( G4EquationOfMotion newEquation)
inlineinherited

◆ SetFSAL()

void G4MagIntegratorStepper::SetFSAL ( G4bool  flag = true)
inlineprotectedinherited

◆ SetIntegrationOrder()

void G4MagIntegratorStepper::SetIntegrationOrder ( G4int  order)
inlineprotectedinherited

◆ Stepper()

void G4TMagErrorStepper< G4TSimpleRunge< T_Equation, N > , T_Equation, N >::Stepper ( const G4double  yInput[],
const G4double  dydx[],
G4double  hstep,
G4double  yOutput[],
G4double  yError[] 
)
inlinefinaloverridevirtualinherited

Implements G4MagIntegratorStepper.

Definition at line 64 of file G4TMagErrorStepper.hh.

104{
105 const unsigned int maxvar = GetNumberOfStateVariables();
106
107 // Saving yInput because yInput and yOutput can be aliases for same array
108 for(unsigned int i = 0; i < N; ++i)
109 yInitial[i] = yInput[i];
110 yInitial[7] =
111 yInput[7]; // Copy the time in case ... even if not really needed
112 yMiddle[7] = yInput[7]; // Copy the time from initial value
113 yOneStep[7] = yInput[7]; // As it contributes to final value of yOutput ?
114 // yOutput[7] = yInput[7]; // -> dumb stepper does it too for RK4
115 for(unsigned int i = N; i < maxvar; ++i)
116 yOutput[i] = yInput[i];
117
118 G4double halfStep = hstep * 0.5;
119
120 // Do two half steps
121
122 static_cast<T_Stepper*>(this)->DumbStepper(yInitial, dydx, halfStep,
123 yMiddle);
125 static_cast<T_Stepper*>(this)->DumbStepper(yMiddle, dydxMid, halfStep,
126 yOutput);
127
128 // Store midpoint, chord calculation
129
131
132 // Do a full Step
133 static_cast<T_Stepper*>(this)->DumbStepper(yInitial, dydx, hstep, yOneStep);
134 for(unsigned int i = 0; i < N; ++i)
135 {
136 yError[i] = yOutput[i] - yOneStep[i];
137 yOutput[i] +=
138 yError[i] *
139 T_Stepper::IntegratorCorrection; // Provides accuracy increased
140 // by 1 order via the
141 // Richardson Extrapolation
142 }
143
145 fFinalPoint = G4ThreeVector(yOutput[0], yOutput[1], yOutput[2]);
146
147 return;
148}
CLHEP::Hep3Vector G4ThreeVector

Field Documentation

◆ dydxMid

G4double G4TMagErrorStepper< G4TSimpleRunge< T_Equation, N > , T_Equation, N >::dydxMid[N< 8 ? 8 :N]
privateinherited

Definition at line 82 of file G4TMagErrorStepper.hh.

◆ dydxTemp

template<class T_Equation , int N>
G4double G4TSimpleRunge< T_Equation, N >::dydxTemp[N > 12 ? N :12]
private

Definition at line 95 of file G4TSimpleRunge.hh.

Referenced by G4TSimpleRunge< T_Equation, N >::DumbStepper().

◆ fEquation_Rhs

template<class T_Equation , int N>
T_Equation* G4TSimpleRunge< T_Equation, N >::fEquation_Rhs
private

Definition at line 98 of file G4TSimpleRunge.hh.

Referenced by G4TSimpleRunge< T_Equation, N >::RightHandSide().

◆ fFinalPoint

G4ThreeVector G4TMagErrorStepper< G4TSimpleRunge< T_Equation, N > , T_Equation, N >::fFinalPoint
privateinherited

Definition at line 76 of file G4TMagErrorStepper.hh.

◆ fInitialPoint

G4ThreeVector G4TMagErrorStepper< G4TSimpleRunge< T_Equation, N > , T_Equation, N >::fInitialPoint
privateinherited

Definition at line 76 of file G4TMagErrorStepper.hh.

◆ fIntegrationOrder

G4int G4MagIntegratorStepper::fIntegrationOrder = -1
privateinherited

Definition at line 134 of file G4MagIntegratorStepper.hh.

◆ fIsFSAL

G4bool G4MagIntegratorStepper::fIsFSAL = false
privateinherited

Definition at line 136 of file G4MagIntegratorStepper.hh.

◆ fMidPoint

G4ThreeVector G4TMagErrorStepper< G4TSimpleRunge< T_Equation, N > , T_Equation, N >::fMidPoint
privateinherited

Definition at line 76 of file G4TMagErrorStepper.hh.

◆ fNoIntegrationVariables

const G4int G4MagIntegratorStepper::fNoIntegrationVariables = 0
privateinherited

Definition at line 125 of file G4MagIntegratorStepper.hh.

◆ fNoRHSCalls

unsigned long G4MagIntegratorStepper::fNoRHSCalls = 0UL
mutableprivateinherited

Definition at line 128 of file G4MagIntegratorStepper.hh.

◆ fNoStateVariables

const G4int G4MagIntegratorStepper::fNoStateVariables = 0
privateinherited

Definition at line 126 of file G4MagIntegratorStepper.hh.

◆ fNumberOfVariables

template<class T_Equation , int N>
G4int G4TSimpleRunge< T_Equation, N >::fNumberOfVariables
private

Definition at line 94 of file G4TSimpleRunge.hh.

◆ IntegratorCorrection

template<class T_Equation , int N>
constexpr double G4TSimpleRunge< T_Equation, N >::IntegratorCorrection = 1. / ((1 << 2) - 1)
staticconstexpr

Definition at line 49 of file G4TSimpleRunge.hh.

◆ yInitial

G4double G4TMagErrorStepper< G4TSimpleRunge< T_Equation, N > , T_Equation, N >::yInitial[N< 8 ? 8 :N]
privateinherited

Definition at line 80 of file G4TMagErrorStepper.hh.

◆ yMiddle

G4double G4TMagErrorStepper< G4TSimpleRunge< T_Equation, N > , T_Equation, N >::yMiddle[N< 8 ? 8 :N]
privateinherited

Definition at line 81 of file G4TMagErrorStepper.hh.

◆ yOneStep

G4double G4TMagErrorStepper< G4TSimpleRunge< T_Equation, N > , T_Equation, N >::yOneStep[N< 8 ? 8 :N]
privateinherited

Definition at line 83 of file G4TMagErrorStepper.hh.

◆ yTemp

template<class T_Equation , int N>
G4double G4TSimpleRunge< T_Equation, N >::yTemp[N > 12 ? N :12]
private

Definition at line 96 of file G4TSimpleRunge.hh.

Referenced by G4TSimpleRunge< T_Equation, N >::DumbStepper().


The documentation for this class was generated from the following file: