48 G4int noIntegrationVariables,
51 fLastStepLength(0.), fAuxStepper(0)
53 const G4int numberOfVariables =
55 ( ( (noIntegrationVariables-1)/4 + 1 ) * 4 ) );
58 ak2 =
new G4double[numberOfVariables] ;
59 ak3 =
new G4double[numberOfVariables] ;
60 ak4 =
new G4double[numberOfVariables] ;
61 ak5 =
new G4double[numberOfVariables] ;
62 ak6 =
new G4double[numberOfVariables] ;
74 fLastInitialVector =
new G4double[numStateVars] ;
75 fLastFinalVector =
new G4double[numStateVars] ;
76 fLastDyDx =
new G4double[numberOfVariables];
78 fMidVector =
new G4double[numStateVars];
79 fMidError =
new G4double[numStateVars];
101 delete[] fLastInitialVector;
102 delete[] fLastFinalVector;
132 b31 = 3.0/40.0 , b32 = 9.0/40.0 ,
133 b41 = 0.3 , b42 = -0.9 , b43 = 1.2 ,
135 b51 = -11.0/54.0 , b52 = 2.5 , b53 = -70.0/27.0 ,
138 b61 = 1631.0/55296.0 , b62 = 175.0/512.0 ,
139 b63 = 575.0/13824.0 , b64 = 44275.0/110592.0 ,
142 c1 = 37.0/378.0 , c3 = 250.0/621.0 , c4 = 125.0/594.0 ,
144 dc5 = -277.0/14336.0 ;
146 const G4double dc1 =
c1 - 2825.0/27648.0 , dc3 = c3 - 18575.0/48384.0 ,
147 dc4 = c4 - 13525.0/55296.0 , dc6 = c6 - 0.25 ;
152 yOut[7] = yTemp[7] = yIn[7];
159 for(i=0;i<numberOfVariables;i++)
165 for(i=0;i<numberOfVariables;i++)
167 yTemp[i] = yIn[i] + b21*Step*dydx[i] ;
171 for(i=0;i<numberOfVariables;i++)
173 yTemp[i] = yIn[i] + Step*(b31*dydx[i] + b32*ak2[i]) ;
177 for(i=0;i<numberOfVariables;i++)
179 yTemp[i] = yIn[i] + Step*(b41*dydx[i] + b42*ak2[i] + b43*ak3[i]) ;
183 for(i=0;i<numberOfVariables;i++)
185 yTemp[i] = yIn[i] + Step*(b51*dydx[i] + b52*ak2[i] + b53*ak3[i] +
190 for(i=0;i<numberOfVariables;i++)
192 yTemp[i] = yIn[i] + Step*(b61*dydx[i] + b62*ak2[i] + b63*ak3[i] +
193 b64*ak4[i] + b65*ak5[i]) ;
197 for(i=0;i<numberOfVariables;i++)
201 yOut[i] = yIn[i] + Step*(
c1*dydx[i] + c3*ak3[i] + c4*ak4[i] + c6*ak6[i]) ;
206 yErr[i] = Step*(dc1*dydx[i] + dc3*ak3[i] + dc4*ak4[i] +
207 dc5*ak5[i] + dc6*ak6[i]) ;
210 fLastInitialVector[i] = yIn[i] ;
211 fLastFinalVector[i] = yOut[i];
212 fLastDyDx[i] = dydx[i];
216 fLastStepLength =Step;
224 G4CashKarpRKF45::StepWithEst(
const G4double*,
233 G4Exception(
"G4CashKarpRKF45::StepWithEst()",
"GeomField0001",
247 fLastInitialVector[1], fLastInitialVector[2]);
249 fLastFinalVector[1], fLastFinalVector[2]);
253 fAuxStepper->
Stepper( fLastInitialVector, fLastDyDx, 0.5 * fLastStepLength,
254 fMidVector, fMidError );
256 midPoint =
G4ThreeVector( fMidVector[0], fMidVector[1], fMidVector[2]);
262 if (initialPoint != finalPoint)
265 distChord = distLine;
269 distChord = (midPoint-initialPoint).mag();
CLHEP::Hep3Vector G4ThreeVector
G4CashKarpRKF45(G4EquationOfMotion *EqRhs, G4int numberOfVariables=6, G4bool primary=true)
static G4double Distline(const G4ThreeVector &OtherPnt, const G4ThreeVector &LinePntA, const G4ThreeVector &LinePntB)
G4int GetNumberOfVariables() const
void Stepper(const G4double y[], const G4double dydx[], G4double h, G4double yout[], G4double yerr[])
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4double DistChord() const
G4int GetNumberOfStateVariables() const
void RightHandSide(const double y[], double dydx[])