Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/geometry/magneticfield/src/G4RK547FEq1.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /geometry/magneticfield/src/G4RK547FEq1.cc (Version 11.3.0) and /geometry/magneticfield/src/G4RK547FEq1.cc (Version 9.1)


  1 //                                                  1 
  2 // *******************************************    
  3 // * License and Disclaimer                       
  4 // *                                              
  5 // * The  Geant4 software  is  copyright of th    
  6 // * the Geant4 Collaboration.  It is provided    
  7 // * conditions of the Geant4 Software License    
  8 // * LICENSE and available at  http://cern.ch/    
  9 // * include a list of copyright holders.         
 10 // *                                              
 11 // * Neither the authors of this software syst    
 12 // * institutes,nor the agencies providing fin    
 13 // * work  make  any representation or  warran    
 14 // * regarding  this  software system or assum    
 15 // * use.  Please see the license in the file     
 16 // * for the full disclaimer and the limitatio    
 17 // *                                              
 18 // * This  code  implementation is the result     
 19 // * technical work of the GEANT4 collaboratio    
 20 // * By using,  copying,  modifying or  distri    
 21 // * any work based  on the software)  you  ag    
 22 // * use  in  resulting  scientific  publicati    
 23 // * acceptance of all terms of the Geant4 Sof    
 24 // *******************************************    
 25 //                                                
 26 // G4RK547FEq1 implementation                     
 27 //                                                
 28 // The Butcher table of the Higham & Hall 5(4)    
 29 //                                                
 30 //   0  |                                         
 31 //  2/9 |      2/9                                
 32 //  1/3 |      1/12      1/4                      
 33 //  1/2 |      1/8       0          3/8           
 34 //  3/5 |      91/500    -27/100    78/125        
 35 //   1  |      -11/20    27/20      12/5          
 36 //   1  |      1/12      0          27/32         
 37 //--------------------------------------------    
 38 //             1/12      0          27/32         
 39 //             2/15      0          27/80         
 40 //                                                
 41 // Author: Dmitry Sorokin, Google Summer of Co    
 42 // Supervision: John Apostolakis, CERN            
 43 // -------------------------------------------    
 44                                                   
 45 #include "G4RK547FEq1.hh"                         
 46 #include "G4LineSection.hh"                       
 47 #include "G4FieldUtils.hh"                        
 48                                                   
 49 using namespace field_utils;                      
 50                                                   
 51 G4RK547FEq1::G4RK547FEq1(G4EquationOfMotion* E    
 52   : G4MagIntegratorStepper(EqRhs, integrationV    
 53 {                                                 
 54 }                                                 
 55                                                   
 56 void G4RK547FEq1::makeStep( const G4double yIn    
 57                             const G4double dyd    
 58                             const G4double hst    
 59                                   G4double yOu    
 60                                   G4double* dy    
 61                                   G4double* yE    
 62 {                                                 
 63     G4double yTemp[G4FieldTrack::ncompSVEC];      
 64     for (G4int i=GetNumberOfVariables(); i<Get    
 65     {                                             
 66         yOutput[i] = yTemp[i] = yInput[i];        
 67     }                                             
 68                                                   
 69     G4double ak2[G4FieldTrack::ncompSVEC],        
 70              ak3[G4FieldTrack::ncompSVEC],        
 71              ak4[G4FieldTrack::ncompSVEC],        
 72              ak5[G4FieldTrack::ncompSVEC],        
 73              ak6[G4FieldTrack::ncompSVEC];        
 74                                                   
 75     const G4double b21 = 2./9.,                   
 76                    b31 = 1./12., b32 = 1./4.,     
 77                    b41 = 1./8., b42 = 0., b43     
 78                    b51 = 91./500., b52 = -27./    
 79                      b53 = 78./125., b54 = 8./    
 80                    b61 = -11./20., b62 = 27./2    
 81                      b64 = -36./5., b65 = 5.,     
 82                    b71 = 1./12.,    b72 = 0.,     
 83                      b74 = -4./3., b75 = 125./    
 84                                                   
 85     const G4double dc1 = b71 - 2./15.,            
 86                    dc2 = b72 - 0.,                
 87                    dc3 = b73 - 27./80.,           
 88                    dc4 = b74 + 2./15.,            
 89                    dc5 = b75 - 25./48.,           
 90                    dc6 = b76 - 1./24.,            
 91                    dc7 = 0. - 1./10.;             
 92                                                   
 93     // RightHandSide(yInput, dydx);               
 94     for(G4int i = 0; i < GetNumberOfVariables(    
 95     {                                             
 96       yTemp[i] = yInput[i] + hstep * b21 * dyd    
 97     }                                             
 98                                                   
 99     RightHandSide(yTemp, ak2);                    
100     for(G4int i = 0; i < GetNumberOfVariables(    
101     {                                             
102       yTemp[i] = yInput[i] + hstep * (b31 * dy    
103     }                                             
104                                                   
105     RightHandSide(yTemp, ak3);                    
106     for(G4int i = 0;i < GetNumberOfVariables()    
107     {                                             
108       yTemp[i] = yInput[i] + hstep * (b41 * dy    
109                                       b43 * ak    
110     }                                             
111                                                   
112     RightHandSide(yTemp, ak4);                    
113     for(G4int i = 0; i < GetNumberOfVariables(    
114     {                                             
115       yTemp[i] = yInput[i] + hstep * (b51 * dy    
116                                       b53 * ak    
117     }                                             
118                                                   
119     RightHandSide(yTemp, ak5);                    
120     for(G4int i = 0; i < GetNumberOfVariables(    
121     {                                             
122       yTemp[i] = yInput[i] + hstep * (b61 * dy    
123                                       b63 * ak    
124                                       b65 * ak    
125     }                                             
126                                                   
127     RightHandSide(yTemp, ak6);                    
128     for(G4int i = 0; i < GetNumberOfVariables(    
129     {                                             
130       yOutput[i] = yInput[i] + hstep * (b71 *     
131                                         b73 *     
132                                         b75 *     
133     }                                             
134     if ((dydxOutput != nullptr) && (yError !=     
135     {                                             
136         RightHandSide(yOutput, dydxOutput);       
137         for(G4int i = 0; i < GetNumberOfVariab    
138         {                                         
139           yError[i] = hstep * (dc1 * dydx[i] +    
140                                dc4 * ak4[i] +     
141                                dc7 * dydxOutpu    
142         }                                         
143     }                                             
144 }                                                 
145                                                   
146 void G4RK547FEq1::Stepper( const G4double yInp    
147                            const G4double dydx    
148                                  G4double hste    
149                                  G4double yOut    
150                                  G4double yErr    
151 {                                                 
152     copy(fyIn, yInput);                           
153     copy(fdydx, dydx);                            
154     fhstep = hstep;                               
155                                                   
156     makeStep(fyIn, fdydx, fhstep, fyOut, fdydx    
157                                                   
158     copy(yOutput, fyOut);                         
159 }                                                 
160                                                   
161 void G4RK547FEq1::Stepper( const G4double yInp    
162                            const G4double dydx    
163                                  G4double hste    
164                                  G4double yOut    
165                                  G4double yErr    
166                                  G4double dydx    
167 {                                                 
168     copy(fyIn, yInput);                           
169     copy(fdydx, dydx);                            
170     fhstep = hstep;                               
171                                                   
172     makeStep(fyIn,fdydx, fhstep, fyOut, fdydxO    
173                                                   
174     copy(yOutput, fyOut);                         
175     copy(dydxOutput, fdydxOut);                   
176 }                                                 
177                                                   
178 G4double G4RK547FEq1::DistChord() const           
179 {                                                 
180     G4double yMid[G4FieldTrack::ncompSVEC];       
181     makeStep(fyIn, fdydx, fhstep / 2., yMid);     
182                                                   
183     const G4ThreeVector begin = makeVector(fyI    
184     const G4ThreeVector mid = makeVector(yMid,    
185     const G4ThreeVector end = makeVector(fyOut    
186                                                   
187     return G4LineSection::Distline(mid, begin,    
188 }                                                 
189