## Geant4 Particle Transportation » History » Version 10

Soon Jun, 06/17/2015 07:03 PM

 1 2 3 1 Soon Jun `h1. Geant4 Particle Transportation` 1 Soon Jun 1 Soon Jun `h2. Top-Down Transportation Chain:` 1 Soon Jun 1 Soon Jun `## test the existence of a magnetic field and whether the particle is charged ` 1 Soon Jun ` if(charged particle && non-zero-BField) G4PropagatorInField::ComputeStep in http://www-geant4.kek.jp/lxr/source/geometry/navigation/src/G4PropagatorInField.cc` 1 Soon Jun ` else G4Navigator::ComputeStep in http://www-geant4.kek.jp/lxr/source/geometry/navigation/src/G4Navigator.cc ` 8 Soon Jun `## determine **epsilon** (local error bound) using **DeltaOneStep** (distance unit, default = 0.01 mm), **epsilonMin** and **epsilonMax** (unit-less), ` 8 Soon Jun `and the given physical step size (h)` 6 Soon Jun `
epsilon = DeltaOneStep / ProposedStepLength`
6  Soon Jun  `if(epsilon < epsilonMin) epsilon = epsilonMin            (for the case that h is relatively a small step)`
6  Soon Jun  `if(epsilon > epsilonMax) epsilon = epsilonMax            (for the case that h is relatively a large step)`
6  Soon Jun  `
see again G4PropagatorInField::ComputeStep http://www-geant4.kek.jp/lxr/source/geometry/navigation/src/G4PropagatorInField.cc` 1 Soon Jun `## do-while loop inside G4PropagatorInField::ComputeStep` 6 Soon Jun ` until sum(h_i) < step where` 6 Soon Jun ` h_i (step length taken) = G4ChordFinder::AdvanceChordLimited in http://www-geant4.kek.jp/lxr/source/geometry/magneticfield/src/G4ChordFinder.cc` 7 Soon Jun ` and find the crossing point **if** the resultant chord intersects with a geometrical boundary with` 7 Soon Jun ` IntersectChord in http://www-geant4.kek.jp/lxr/source/geometry/navigation/src/G4MultiLevelLocator.cc` 7 Soon Jun ` The accuracy of the intersection is controlled by **DeltaIntersection** (distance unit, default = 1 micron) which is the distance between the segment and ` 7 Soon Jun ` the ending position of the stepper near the volume boundary by the iterative approach inside the routine. ` 1 Soon Jun `## test for a quick advance or an accurate advance inside G4ChordFinder::AdvanceChordLimited` 6 Soon Jun ` do while QuickAdvance if (delta < DeltaChord) where delta is the shortest distance to chord (**sagitta**) and **DeltaChord** is the **miss-distance** (default = 0.25mm or set to the smallest volume dimension) ` 6 Soon Jun ` then if (step possible x epsilon) > epsilon0) invoke G4MagInt_Driver::AccurateAdvance in http://www-geant4.kek.jp/lxr/source/geometry/magneticfield/src/G4MagIntegratorDriver.cc ` 6 Soon Jun ` where epsilon0 is the local truncated error from the stepper ` 9 Soon Jun `## G4MagInt_Driver::AccurateAdvance test for h_i < **stepMinimum** (do-while loop until sum(h_i) < hstep) where stepMinimum is the minimum step size for G4MagInt_Driver::QuickAdvance ` 9 Soon Jun ` (otherwise, use G4MagInt_Driver::OneGoodStep) - h_i is calculated by either QuickAdvance or AccurateAdvance.` 1 Soon Jun `## G4MagInt_Driver::QuickAdvance ` 10 Soon Jun ` OneGoodStep loops over the Stepper and evaluates the truncation error (for-loop test epsilon0 < epsilon before break) (and then adjust the step size control if necessary)` 1 Soon Jun ` G4MagInt_Driver::QuickAdvance call Stepper and DistanceChord` 1 Soon Jun ` default Stepper: G4ClassicalRK4::DumbStepper in http://www-geant4.kek.jp/lxr/source/geometry/magneticfield/src/G4ClassicalRK4.cc ` 4 Soon Jun `## G4ClassicalRK4::Stepper calls G4EquationOfMotion::EvaluateRhsReturnB in http://www-geant4.kek.jp/lxr/source/geometry/magneticfield/src/G4EquationOfMotion.cc` 2 Soon Jun `## G4EquationOfMotion::EvaluateRhsReturnB calls G4MagneticField::GetFieldValue (pure virtual) in http://www-geant4.kek.jp/lxr/source/geometry/magneticfield/include/G4MagneticField.hh ` 3 Soon Jun 1 Soon Jun `h2. Soon's (scratch) Diagram: `