35#ifndef G4BORIS_DRIVER_HH
36#define G4BORIS_DRIVER_HH
61 G4int numberOfComponents = 6,
211 void StreamInfo( std::ostream& os )
const override;
221 inline G4int GetNumberOfVariables()
const;
250 static constexpr G4int fMaxNoSteps = 300;
251 static constexpr G4double fSmallestFraction= 1e-12;
253 static constexpr G4int fIntegratorOrder= 2;
254 static constexpr G4double fSafetyFactor = 0.9;
256 static constexpr G4double fMaxSteppingIncrease= 10.0;
257 static constexpr G4double fMaxSteppingDecrease= 0.1;
258 static constexpr G4double fPowerShrink = -1.0 / fIntegratorOrder;
259 static constexpr G4double fPowerGrow = -1.0 / (1.0 + fIntegratorOrder);
261 static const G4double fErrorConstraintShrink;
262 static const G4double fErrorConstraintGrow;
267#include "G4BorisDriver.icc"
CLHEP::Hep3Vector G4ThreeVector
G4MagIntegratorStepper * GetStepper() override
void OneGoodStep(G4double yCurrentState[], G4double &curveLength, G4double htry, G4double epsilon_rel, G4double restMass, G4double charge, G4double &hdid, G4double &hnext)
G4EquationOfMotion * GetEquationOfMotion() override
void StreamInfo(std::ostream &os) const override
G4double ShrinkStepSize2(G4double h, G4double error2) const
void GetDerivatives(const G4FieldTrack &track, G4double dydx[]) const override
G4BorisDriver(G4double hminimum, G4BorisScheme *Boris, G4int numberOfComponents=6, G4bool verbosity=false)
void SetEquationOfMotion(G4EquationOfMotion *equation) override
G4double AdvanceChordLimited(G4FieldTrack &track, G4double hstep, G4double eps, G4double chordDistance) override
void OnComputeStep(const G4FieldTrack *) override
G4double ComputeNewStepSize(G4double errMaxNorm, G4double hstepCurrent) override
G4bool AccurateAdvance(G4FieldTrack &track, G4double stepLen, G4double eps, G4double beginStep=0) override
void SetVerboseLevel(G4int level) override
G4int GetVerboseLevel() const override
~G4BorisDriver() override=default
G4bool DoesReIntegrate() const override
G4bool QuickAdvance(G4FieldTrack &y_val, const G4double dydx[], G4double hstep, G4double &missDist, G4double &dyerr) override
const G4EquationOfMotion * GetEquationOfMotion() const
void OnStartTracking() override
G4BorisDriver(const G4BorisDriver &)=delete
const G4MagIntegratorStepper * GetStepper() const override
G4BorisDriver & operator=(const G4BorisDriver &)=delete
G4double GrowStepSize2(G4double h, G4double error2) const
The G4BorisScheme class implements of the Boris algorithm for advancing charged particles in an elect...
G4ChordFinderDelegate is a templated class for a common algorithm of finding step size with distance ...
G4EquationOfMotion is the abstract base class for the right hand size of the equation of motion of a ...
G4FieldTrack defines a data structure bringing together a magnetic track's state (position,...
G4MagIntegratorStepper is an abstract base class for integrator of particle's equation of motion,...