Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // G4MagInt_Driver inline methods implementati << 27 // 26 // 28 // V.Grichine, 07.10.1996 - Created << 27 // $Id$ >> 28 // 29 // ------------------------------------------- 29 // -------------------------------------------------------------------- 30 30 31 inline 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 32 G4double G4MagInt_Driver::GetHmin() const 48 { 33 { 49 return fMinimumStep; << 34 return fMinimumStep; 50 } 35 } 51 36 52 inline 37 inline 53 G4double G4MagInt_Driver::Hmin() const 38 G4double G4MagInt_Driver::Hmin() const 54 { 39 { 55 return fMinimumStep; << 40 return fMinimumStep; 56 } 41 } 57 42 58 inline 43 inline 59 G4double G4MagInt_Driver::GetSafety() const 44 G4double G4MagInt_Driver::GetSafety() const 60 { 45 { 61 return safety; << 46 return safety; 62 } 47 } 63 48 64 inline 49 inline 65 G4double G4MagInt_Driver::GetPshrnk() const 50 G4double G4MagInt_Driver::GetPshrnk() const 66 { 51 { 67 return pshrnk; << 52 return pshrnk; 68 } 53 } 69 54 70 inline 55 inline 71 G4double G4MagInt_Driver::GetPgrow() const 56 G4double G4MagInt_Driver::GetPgrow() const 72 { 57 { 73 return pgrow; << 58 return pgrow; 74 } 59 } 75 60 76 inline 61 inline 77 G4double G4MagInt_Driver::GetErrcon() const 62 G4double G4MagInt_Driver::GetErrcon() const 78 { 63 { 79 return errcon; << 64 return errcon; 80 } 65 } 81 66 82 inline 67 inline 83 void G4MagInt_Driver::SetHmin(G4double newval) 68 void G4MagInt_Driver::SetHmin(G4double newval) 84 { 69 { 85 fMinimumStep = newval; << 70 fMinimumStep = newval; 86 } 71 } 87 72 88 inline 73 inline 89 G4double G4MagInt_Driver::ComputeAndSetErrcon( 74 G4double G4MagInt_Driver::ComputeAndSetErrcon() 90 { 75 { 91 errcon = std::pow(max_stepping_increase/GetS << 76 errcon = std::pow(max_stepping_increase/GetSafety(),1.0/GetPgrow()); 92 return errcon; << 77 return errcon; 93 } 78 } 94 79 95 inline 80 inline 96 void G4MagInt_Driver::ReSetParameters(G4double 81 void G4MagInt_Driver::ReSetParameters(G4double new_safety) 97 { 82 { 98 safety = new_safety; << 83 safety = new_safety; 99 pshrnk = -1.0 / pIntStepper->IntegratorOrder << 84 pshrnk = -1.0 / pIntStepper->IntegratorOrder(); 100 pgrow = -1.0 / (1.0 + pIntStepper->Integrat << 85 pgrow = -1.0 / (1.0 + pIntStepper->IntegratorOrder()); 101 ComputeAndSetErrcon(); << 86 ComputeAndSetErrcon(); 102 } 87 } 103 88 104 inline 89 inline 105 void G4MagInt_Driver::SetSafety(G4double val) 90 void G4MagInt_Driver::SetSafety(G4double val) 106 { 91 { 107 safety = val; << 92 safety=val; 108 ComputeAndSetErrcon(); << 93 ComputeAndSetErrcon(); 109 } 94 } 110 95 111 inline 96 inline 112 void G4MagInt_Driver::SetPgrow(G4double val) 97 void G4MagInt_Driver::SetPgrow(G4double val) 113 { 98 { 114 pgrow = val; << 99 pgrow=val; 115 ComputeAndSetErrcon(); << 100 ComputeAndSetErrcon(); 116 } 101 } 117 102 118 inline 103 inline 119 void G4MagInt_Driver::SetErrcon(G4double val) 104 void G4MagInt_Driver::SetErrcon(G4double val) 120 { 105 { 121 errcon = val; << 106 errcon=val; >> 107 } >> 108 >> 109 inline >> 110 void G4MagInt_Driver::RenewStepperAndAdjust(G4MagIntegratorStepper *pItsStepper) >> 111 { >> 112 pIntStepper = pItsStepper; >> 113 ReSetParameters(); >> 114 } >> 115 >> 116 inline >> 117 void G4MagInt_Driver::SetChargeMomentumMass(G4double particleCharge, // e+ >> 118 G4double MomentumXc, >> 119 G4double Mass ) >> 120 { >> 121 pIntStepper->GetEquationOfMotion() >> 122 ->SetChargeMomentumMass(particleCharge, MomentumXc, Mass); >> 123 } >> 124 >> 125 inline >> 126 const G4MagIntegratorStepper* G4MagInt_Driver::GetStepper() const >> 127 { >> 128 return pIntStepper; 122 } 129 } 123 130 124 inline 131 inline 125 G4int G4MagInt_Driver::GetMaxNoSteps() const 132 G4int G4MagInt_Driver::GetMaxNoSteps() const 126 { 133 { 127 return fMaxNoSteps; 134 return fMaxNoSteps; 128 } 135 } 129 136 130 inline 137 inline 131 void G4MagInt_Driver::SetMaxNoSteps(G4int val) 138 void G4MagInt_Driver::SetMaxNoSteps(G4int val) 132 { 139 { 133 fMaxNoSteps = val; << 140 fMaxNoSteps= val; 134 } 141 } 135 142 136 inline 143 inline 137 G4int G4MagInt_Driver::GetVerboseLevel() const << 144 void G4MagInt_Driver::GetDerivatives(const G4FieldTrack &y_curr, // const, INput >> 145 G4double dydx[]) // OUTput >> 146 { >> 147 G4double tmpValArr[G4FieldTrack::ncompSVEC]; >> 148 y_curr.DumpToArray( tmpValArr ); >> 149 pIntStepper -> RightHandSide( tmpValArr , dydx ); >> 150 } >> 151 >> 152 inline >> 153 G4double G4MagInt_Driver::GetVerboseLevel() const 138 { 154 { 139 return fVerboseLevel; << 155 return fVerboseLevel; 140 } 156 } 141 157 142 inline 158 inline 143 void G4MagInt_Driver::SetVerboseLevel(G4int ne 159 void G4MagInt_Driver::SetVerboseLevel(G4int newLevel) 144 { 160 { 145 fVerboseLevel = newLevel; << 161 fVerboseLevel= newLevel; 146 } 162 } 147 163 148 inline 164 inline 149 G4double G4MagInt_Driver::GetSmallestFraction( 165 G4double G4MagInt_Driver::GetSmallestFraction() const 150 { 166 { 151 return fSmallestFraction; << 167 return fSmallestFraction; 152 } << 168 } 153 169