Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4SimpleHeum.cc
Go to the documentation of this file.
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 //
27 // $Id: G4SimpleHeum.cc 66356 2012-12-18 09:02:32Z gcosmo $
28 //
29 // Simple Heum:
30 // x_1 = x_0 + h *
31 // 1/4 * dx(t0,x0) +
32 // 3/4 * dx(t0+2/3*h, x0+2/3*h*(dx(t0+h/3,x0+h/3*dx(t0,x0))))
33 //
34 // Third order solver.
35 //
36 // W.Wander <wwc@mit.edu> 12/09/97
37 // -------------------------------------------------------------------
38 
39 #include "G4SimpleHeum.hh"
40 #include "G4ThreeVector.hh"
41 
42 ///////////////////////////////////////////////////////////////////////////
43 //
44 // Constructor
45 
47  G4MagErrorStepper(EqRhs, num_variables),
48  fNumberOfVariables(num_variables)
49 {
50  dydxTemp = new G4double[fNumberOfVariables] ;
51  dydxTemp2 = new G4double[fNumberOfVariables] ;
52  yTemp = new G4double[fNumberOfVariables] ;
53  yTemp2 = new G4double[fNumberOfVariables] ;
54 }
55 
56 
57 //////////////////////////////////////////////////////////////////////////
58 //
59 // Destructor
60 
62 {
63  delete[] dydxTemp;
64  delete[] dydxTemp2;
65  delete[] yTemp;
66  delete[] yTemp2;
67 }
68 
69 
70 //////////////////////////////////////////////////////////////////////
71 //
72 //
73 
74 void
76  const G4double dydx[],
77  G4double h,
78  G4double yOut[])
79 {
80  G4int i;
81  for( i = 0; i < fNumberOfVariables; i++ )
82  {
83  yTemp[i] = yIn[i] + (1.0/3.0) * h * dydx[i] ;
84  }
85 
86  RightHandSide(yTemp,dydxTemp);
87 
88  for( i = 0; i < fNumberOfVariables; i++ )
89  {
90  yTemp2[i] = yIn[i] + (2.0/3.0) * h * dydxTemp[i] ;
91  }
92 
93  RightHandSide(yTemp2,dydxTemp2);
94 
95  for( i = 0; i < fNumberOfVariables; i++ )
96  {
97  yOut[i] = yIn[i] + h * (0.25 * dydx[i] + 0.75 * dydxTemp2[i]);
98  }
99 
100  if ( fNumberOfVariables == 12 ) { NormalisePolarizationVector( yOut ); }
101 }
void DumbStepper(const G4double y[], const G4double dydx[], G4double h, G4double yout[])
Definition: G4SimpleHeum.cc:75
int G4int
Definition: G4Types.hh:78
G4SimpleHeum(G4EquationOfMotion *EqRhs, G4int num_variables=6)
Definition: G4SimpleHeum.cc:46
void RightHandSide(const double y[], double dydx[])
void NormalisePolarizationVector(G4double vec[12])
double G4double
Definition: G4Types.hh:76