184 const G4double b21 = 0.2, b31 = 3.0 / 40.0, b32 = 9.0 / 40.0, b41 = 0.3,
185 b42 = -0.9, b43 = 1.2,
187 b51 = -11.0 / 54.0, b52 = 2.5, b53 = -70.0 / 27.0,
190 b61 = 1631.0 / 55296.0, b62 = 175.0 / 512.0,
191 b63 = 575.0 / 13824.0, b64 = 44275.0 / 110592.0,
192 b65 = 253.0 / 4096.0,
194 c1 = 37.0 / 378.0, c3 = 250.0 / 621.0, c4 = 125.0 / 594.0,
195 c6 = 512.0 / 1771.0, dc5 = -277.0 / 14336.0;
197 const G4double dc1 = c1 - 2825.0 / 27648.0, dc3 = c3 - 18575.0 / 48384.0,
198 dc4 = c4 - 13525.0 / 55296.0, dc6 = c6 - 0.25;
206 for(
unsigned int i = 0; i <
N; ++i)
212 for(
unsigned int i = 0; i <
N; ++i)
214 yTemp[i] = yIn[i] + b21 * Step * dydx[i];
218 for(
unsigned int i = 0; i <
N; ++i)
220 yTemp[i] = yIn[i] + Step * (b31 * dydx[i] + b32 * ak2[i]);
224 for(
unsigned int i = 0; i <
N; ++i)
226 yTemp[i] = yIn[i] + Step * (b41 * dydx[i] + b42 * ak2[i] + b43 * ak3[i]);
230 for(
unsigned int i = 0; i <
N; ++i)
232 yTemp[i] = yIn[i] + Step * (b51 * dydx[i] + b52 * ak2[i] + b53 * ak3[i] +
237 for(
unsigned int i = 0; i <
N; ++i)
239 yTemp[i] = yIn[i] + Step * (b61 * dydx[i] + b62 * ak2[i] + b63 * ak3[i] +
240 b64 * ak4[i] + b65 * ak5[i]);
244 for(
unsigned int i = 0; i <
N; ++i)
249 Step * (c1 * dydx[i] + c3 * ak3[i] + c4 * ak4[i] + c6 * ak6[i]);
251 for(
unsigned int i = 0; i <
N; ++i)
256 yErr[i] = Step * (dc1 * dydx[i] + dc3 * ak3[i] + dc4 * ak4[i] +
257 dc5 * ak5[i] + dc6 * ak6[i]);
259 for(
unsigned int i = 0; i <
N; ++i)
262 fLastInitialVector[i] = yIn[i];
263 fLastFinalVector[i] = yOut[i];
264 fLastDyDx[i] = dydx[i];
268 fLastStepLength = Step;
282 initialPoint =
G4ThreeVector(fLastInitialVector[0], fLastInitialVector[1],
283 fLastInitialVector[2]);
284 finalPoint =
G4ThreeVector(fLastFinalVector[0], fLastFinalVector[1],
285 fLastFinalVector[2]);
289 fAuxStepper->G4TCashKarpRKF45::Stepper(fLastInitialVector, fLastDyDx,
290 0.5 * fLastStepLength, fMidVector,
293 midPoint =
G4ThreeVector(fMidVector[0], fMidVector[1], fMidVector[2]);
298 if(initialPoint != finalPoint)
301 distChord = distLine;
305 distChord = (midPoint - initialPoint).mag();