Geant4 Cross Reference |
>> 1 // This code implementation is the intellectual property of >> 2 // the GEANT4 collaboration. 1 // 3 // 2 // ******************************************* << 4 // By copying, distributing or modifying the Program (or any work 3 // * License and Disclaimer << 5 // based on the Program) you indicate your acceptance of this statement, 4 // * << 6 // and all its terms. 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 // 7 // 26 // G4MagInt_Driver inline methods implementati << 8 // $Id: G4MagIntegratorDriver.icc,v 1.2.6.1 1999/12/07 20:48:02 gunter Exp $ >> 9 // GEANT4 tag $Name: geant4-01-00 $ 27 // 10 // 28 // V.Grichine, 07.10.1996 - Created << 11 inline G4double G4MagInt_Driver::ComputeAndSetErrcon() 29 // ------------------------------------------- << 30 << 31 inline << 32 G4double G4MagInt_Driver:: << 33 AdvanceChordLimited(G4FieldTrack& track, G4dou << 34 G4double epsStep, G4double << 35 { << 36 return ChordFinderDelegate::AdvanceChordLimi << 37 << 38 } << 39 << 40 inline << 41 void G4MagInt_Driver::OnStartTracking() << 42 { << 43 ChordFinderDelegate::ResetStepEstimate(); << 44 } << 45 << 46 inline << 47 G4double G4MagInt_Driver::GetHmin() const << 48 { << 49 return fMinimumStep; << 50 } << 51 << 52 inline << 53 G4double G4MagInt_Driver::Hmin() const << 54 { << 55 return fMinimumStep; << 56 } << 57 << 58 inline << 59 G4double G4MagInt_Driver::GetSafety() const << 60 { << 61 return safety; << 62 } << 63 << 64 inline << 65 G4double G4MagInt_Driver::GetPshrnk() const << 66 { << 67 return pshrnk; << 68 } << 69 << 70 inline << 71 G4double G4MagInt_Driver::GetPgrow() const << 72 { 12 { 73 return pgrow; << 13 errcon = pow(max_stepping_increase/GetSafety(),1.0/GetPgrow()); 74 } << 14 return errcon; 75 << 76 inline << 77 G4double G4MagInt_Driver::GetErrcon() const << 78 { << 79 return errcon; << 80 } << 81 << 82 inline << 83 void G4MagInt_Driver::SetHmin(G4double newval) << 84 { << 85 fMinimumStep = newval; << 86 } 15 } 87 16 88 inline << 17 inline void G4MagInt_Driver::ReSetParameters( G4double new_safety ) 89 G4double G4MagInt_Driver::ComputeAndSetErrcon( << 90 { 18 { 91 errcon = std::pow(max_stepping_increase/GetS << 19 safety = new_safety; 92 return errcon; << 20 pshrnk = -1.0 / pIntStepper->IntegratorOrder(); 93 } << 21 pgrow = -1.0 / (1.0 + pIntStepper->IntegratorOrder()); 94 << 22 ComputeAndSetErrcon(); 95 inline << 96 void G4MagInt_Driver::ReSetParameters(G4double << 97 { << 98 safety = new_safety; << 99 pshrnk = -1.0 / pIntStepper->IntegratorOrder << 100 pgrow = -1.0 / (1.0 + pIntStepper->Integrat << 101 ComputeAndSetErrcon(); << 102 } 23 } 103 24 104 inline << 25 inline void G4MagInt_Driver::SetSafety(G4double val) 105 void G4MagInt_Driver::SetSafety(G4double val) << 106 { 26 { 107 safety = val; << 27 safety=val; 108 ComputeAndSetErrcon(); << 28 ComputeAndSetErrcon(); 109 } 29 } 110 30 111 inline << 31 inline void G4MagInt_Driver::SetPgrow(G4double val) 112 void G4MagInt_Driver::SetPgrow(G4double val) << 113 { 32 { 114 pgrow = val; << 33 pgrow=val; 115 ComputeAndSetErrcon(); << 34 ComputeAndSetErrcon(); 116 } 35 } 117 36 118 inline << 37 inline void G4MagInt_Driver::SetErrcon(G4double val) 119 void G4MagInt_Driver::SetErrcon(G4double val) << 120 { 38 { 121 errcon = val; << 39 errcon=val; 122 } 40 } 123 41 124 inline << 42 inline void G4MagInt_Driver::RenewStepperAndAdjust(G4MagIntegratorStepper *pItsStepper) 125 G4int G4MagInt_Driver::GetMaxNoSteps() const << 43 { 126 { << 44 pIntStepper = pItsStepper; 127 return fMaxNoSteps; << 45 ReSetParameters(); 128 } 46 } 129 47 130 inline << 48 inline void G4MagInt_Driver:: SetChargeMomentumMass( 131 void G4MagInt_Driver::SetMaxNoSteps(G4int val) << 49 const G4double particleCharge, // in e+ units 132 { << 50 const G4double MomentumXc, 133 fMaxNoSteps = val; << 51 const G4double Mass ) >> 52 { >> 53 pIntStepper->GetEquationOfMotion() >> 54 ->SetChargeMomentumMass(particleCharge, MomentumXc, Mass); 134 } 55 } 135 56 136 inline << 57 // Constructor 137 G4int G4MagInt_Driver::GetVerboseLevel() const << 58 // 138 { << 59 inline G4MagInt_Driver::G4MagInt_Driver( G4double hminimum, 139 return fVerboseLevel; << 60 G4MagIntegratorStepper *pItsStepper, 140 } << 61 G4int numComponents) 141 << 62 : nvar(numComponents) 142 inline << 63 { 143 void G4MagInt_Driver::SetVerboseLevel(G4int ne << 64 RenewStepperAndAdjust( pItsStepper ); 144 { << 65 hminimum_val= hminimum; 145 fVerboseLevel = newLevel; << 66 fMaxNoSteps = fMaxStepBase / pIntStepper->IntegratorOrder(); >> 67 } >> 68 >> 69 inline G4MagIntegratorStepper* G4MagInt_Driver::GetStepper() >> 70 { return pIntStepper; } >> 71 >> 72 inline G4int G4MagInt_Driver::GetMaxNoSteps() >> 73 { return fMaxNoSteps; } >> 74 >> 75 inline void G4MagInt_Driver::SetMaxNoSteps(G4int val) >> 76 { fMaxNoSteps= val; } >> 77 >> 78 inline void G4MagInt_Driver::GetDerivatives( >> 79 const G4FieldTrack y_curr, // const, INput >> 80 G4double dydx[] ) // OUTput >> 81 { >> 82 G4double tmpValArr[G4FieldTrack::ncompSVEC]; >> 83 y_curr.DumpToArray( tmpValArr ); >> 84 pIntStepper -> RightHandSide( tmpValArr , dydx ); >> 85 146 } 86 } 147 87 148 inline << 149 G4double G4MagInt_Driver::GetSmallestFraction( << 150 { << 151 return fSmallestFraction; << 152 } << 153 88