source: trunk/source/geometry/magneticfield/src/G4SimpleHeum.cc @ 831

Last change on this file since 831 was 831, checked in by garnier, 16 years ago

import all except CVS

File size: 3.4 KB
Line 
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,v 1.8 2006/06/29 18:24:51 gunter Exp $
28// GEANT4 tag $Name:  $
29//
30//  Simple Heum:
31//        x_1 = x_0 + h *
32//                1/4 * dx(t0,x0)  +
33//                3/4 * dx(t0+2/3*h, x0+2/3*h*(dx(t0+h/3,x0+h/3*dx(t0,x0))))
34//
35// Third order solver.
36//
37//  W.Wander <wwc@mit.edu> 12/09/97
38// -------------------------------------------------------------------
39
40#include "G4SimpleHeum.hh"
41#include "G4ThreeVector.hh"
42
43///////////////////////////////////////////////////////////////////////////
44//
45// Constructor
46
47G4SimpleHeum::G4SimpleHeum(G4EquationOfMotion *EqRhs, G4int num_variables): 
48  G4MagErrorStepper(EqRhs, num_variables),
49  fNumberOfVariables(num_variables)
50{
51  dydxTemp  = new G4double[fNumberOfVariables] ; 
52  dydxTemp2 = new G4double[fNumberOfVariables] ;
53  yTemp     = new G4double[fNumberOfVariables] ; 
54  yTemp2    = new G4double[fNumberOfVariables] ;
55}
56
57
58//////////////////////////////////////////////////////////////////////////
59//
60// Destructor
61
62G4SimpleHeum::~G4SimpleHeum()
63{
64  delete[] dydxTemp;
65  delete[] dydxTemp2;
66  delete[] yTemp;
67  delete[] yTemp2;
68}
69
70
71//////////////////////////////////////////////////////////////////////
72//
73//
74
75void
76G4SimpleHeum::DumbStepper( const G4double  yIn[],
77                           const G4double  dydx[],
78                                 G4double  h,
79                                 G4double  yOut[])
80{
81  //  const G4int nvar = 6 ;
82
83  G4int i;
84
85  for( i = 0; i < fNumberOfVariables; i++ ) 
86  {
87    yTemp[i] = yIn[i] + (1.0/3.0) * h *  dydx[i] ;
88  }
89 
90  RightHandSide(yTemp,dydxTemp);
91
92  for( i = 0; i < fNumberOfVariables; i++ ) 
93  {
94    yTemp2[i] = yIn[i] + (2.0/3.0) * h * dydxTemp[i] ;
95  }
96
97  RightHandSide(yTemp2,dydxTemp2);
98
99  for( i = 0; i < fNumberOfVariables; i++ ) 
100  {
101    yOut[i] = yIn[i] + h * ( 0.25 * dydx[i] +
102                             0.75 * dydxTemp2[i]);
103  }
104     
105  // NormaliseTangentVector( yOut );           
106} 
Note: See TracBrowser for help on using the repository browser.