Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
G4BulirschStoerDriver.hh
이 파일의 문서화 페이지로 가기
1 // ********************************************************************
2 // * License and Disclaimer *
3 // * *
4 // * The Geant4 software is copyright of the Copyright Holders of *
5 // * the Geant4 Collaboration. It is provided under the terms and *
6 // * conditions of the Geant4 Software License, included in the file *
7 // * LICENSE and available at http://cern.ch/geant4/license . These *
8 // * include a list of copyright holders. *
9 // * *
10 // * Neither the authors of this software system, nor their employing *
11 // * institutes,nor the agencies providing financial support for this *
12 // * work make any representation or warranty, express or implied, *
13 // * regarding this software system or assume any liability for its *
14 // * use. Please see the license in the file LICENSE and URL above *
15 // * for the full disclaimer and the limitation of liability. *
16 // * *
17 // * This code implementation is the result of the scientific and *
18 // * technical work of the GEANT4 collaboration. *
19 // * By using, copying, modifying or distributing the software (or *
20 // * any work based on the software) you agree to acknowledge its *
21 // * use in resulting scientific publications, and indicate your *
22 // * acceptance of all terms of the Geant4 Software license. *
23 // ********************************************************************
24 //
25 //
26 // $Id: $
27 //
28 // Helper namespace 'magneticfield'
29 //
30 // Description:
31 // class G4IntegrationDriver<G4BulirschStoer> implementation by Dmitry Sorokin
32 // This driver class uses Bulirsch-Stoer method to integrate
33 // the equation of motion
34 //
35 // Implementation by Dmitry Sorokin - GSoC 2016
36 // Work supported by Google as part of Google Summer of Code 2016.
37 // Supervision / code review: John Apostolakis
38 //
40 
41 #ifndef G4BULIRSCH_STOER_DRIVER_HH
42 #define G4BULIRSCH_STOER_DRIVER_HH
43 
44 #include "G4IntegrationDriver.hh"
45 #include "G4BulirschStoer.hh"
46 
47 template <>
49 public:
51  G4double hminimum,
52  G4BulirschStoer* stepper,
53  G4int numberOfComponents = 6,
54  G4int statisticsVerbosity = 1);
55 
56  ~G4IntegrationDriver() = default;
57 
60 
61  virtual G4bool AccurateAdvance(
63  G4double stepLen,
64  G4double eps,
65  G4double beginStep = 0) override;
66 
67  virtual G4bool QuickAdvance(
68  G4FieldTrack& y_val,
69  const G4double dydx[],
70  G4double hstep,
71  G4double& missDist,
72  G4double& dyerr) override;
73 
74  void OneGoodStep(
75  G4double y[],
76  const G4double dydx[],
77  G4double& curveLength,
78  G4double htry,
79  G4double eps,
80  G4double& hdid,
81  G4double& hnext);
82 
83  virtual void GetDerivatives(
84  const G4FieldTrack& track,
85  G4double dydx[]) const override;
86 
87  virtual void SetVerboseLevel(G4int level) override;
88  virtual G4int GetVerboseLevel() const override;
89 
91  G4double errMaxNorm, // normalised error
92  G4double hstepCurrent) override; // current step size
93 
94  virtual G4EquationOfMotion* GetEquationOfMotion() override;
96  virtual void SetEquationOfMotion(G4EquationOfMotion* equation) override;
97 
98  virtual const G4MagIntegratorStepper* GetStepper() const override;
99  virtual G4MagIntegratorStepper* GetStepper() override;
100 
101 private:
102  G4int GetNumberOfVarialbles() const;
103 
106 
109 
115  yError[G4FieldTrack::ncompSVEC];
116 
117 
120 
122 
123  const G4int interval_sequence[2];
124 };
125 
126 #include "G4BulirschStoerDriver.icc"
127 
128 #endif
void OneGoodStep(G4double yVar[], const G4double dydx[], G4double &curveLength, G4double htry, G4double eps, G4double &hdid, G4double &hnext)
virtual void SetVerboseLevel(G4int newLevel) override
virtual G4EquationOfMotion * GetEquationOfMotion() override
Float_t y
Definition: compare.C:6
virtual G4bool AccurateAdvance(G4FieldTrack &track, G4double hstep, G4double eps, G4double hinitial=0) override
virtual G4bool QuickAdvance(G4FieldTrack &fieldTrack, const G4double dydx[], G4double hstep, G4double &dchord_step, G4double &dyerr) override
virtual G4int GetVerboseLevel() const override
double G4double
Definition: G4Types.hh:76
bool G4bool
Definition: G4Types.hh:79
G4IntegrationDriver(G4double hminimum, T *stepper, G4int numberOfComponents=6, G4int statisticsVerbosity=1)
virtual ~G4IntegrationDriver() override
int G4int
Definition: G4Types.hh:78
virtual const T * GetStepper() const override
virtual G4double ComputeNewStepSize(G4double errMaxNorm, G4double hstepCurrent) override
static const G4double eps
virtual void GetDerivatives(const G4FieldTrack &track, G4double dydx[]) const override
const G4IntegrationDriver & operator=(const G4IntegrationDriver &)=delete
virtual void SetEquationOfMotion(G4EquationOfMotion *equation) override