G4SimpleHeum.cc

Go to the documentation of this file.
00001 //
00002 // ********************************************************************
00003 // * License and Disclaimer                                           *
00004 // *                                                                  *
00005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
00006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
00007 // * conditions of the Geant4 Software License,  included in the file *
00008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
00009 // * include a list of copyright holders.                             *
00010 // *                                                                  *
00011 // * Neither the authors of this software system, nor their employing *
00012 // * institutes,nor the agencies providing financial support for this *
00013 // * work  make  any representation or  warranty, express or implied, *
00014 // * regarding  this  software system or assume any liability for its *
00015 // * use.  Please see the license in the file  LICENSE  and URL above *
00016 // * for the full disclaimer and the limitation of liability.         *
00017 // *                                                                  *
00018 // * This  code  implementation is the result of  the  scientific and *
00019 // * technical work of the GEANT4 collaboration.                      *
00020 // * By using,  copying,  modifying or  distributing the software (or *
00021 // * any work based  on the software)  you  agree  to acknowledge its *
00022 // * use  in  resulting  scientific  publications,  and indicate your *
00023 // * acceptance of all terms of the Geant4 Software license.          *
00024 // ********************************************************************
00025 //
00026 //
00027 // $Id: G4SimpleHeum.cc 69786 2013-05-15 09:38:51Z gcosmo $
00028 //
00029 //  Simple Heum:
00030 //        x_1 = x_0 + h *
00031 //                1/4 * dx(t0,x0)  +
00032 //                3/4 * dx(t0+2/3*h, x0+2/3*h*(dx(t0+h/3,x0+h/3*dx(t0,x0)))) 
00033 //
00034 // Third order solver.
00035 //
00036 //  W.Wander <wwc@mit.edu> 12/09/97 
00037 // -------------------------------------------------------------------
00038 
00039 #include "G4SimpleHeum.hh"
00040 #include "G4ThreeVector.hh"
00041 
00043 //
00044 // Constructor
00045 
00046 G4SimpleHeum::G4SimpleHeum(G4EquationOfMotion *EqRhs, G4int num_variables): 
00047   G4MagErrorStepper(EqRhs, num_variables),
00048   fNumberOfVariables(num_variables)
00049 {
00050   dydxTemp  = new G4double[fNumberOfVariables] ; 
00051   dydxTemp2 = new G4double[fNumberOfVariables] ;
00052   yTemp     = new G4double[fNumberOfVariables] ; 
00053   yTemp2    = new G4double[fNumberOfVariables] ;
00054 }
00055 
00056 
00058 //
00059 // Destructor
00060 
00061 G4SimpleHeum::~G4SimpleHeum()
00062 {
00063   delete[] dydxTemp;
00064   delete[] dydxTemp2;
00065   delete[] yTemp;
00066   delete[] yTemp2;
00067 }
00068 
00069 
00071 //
00072 //
00073 
00074 void
00075 G4SimpleHeum::DumbStepper( const G4double  yIn[],
00076                            const G4double  dydx[],
00077                                  G4double  h,
00078                                  G4double  yOut[])
00079 {
00080   G4int i;
00081   for( i = 0; i < fNumberOfVariables; i++ ) 
00082   {
00083     yTemp[i] = yIn[i] + (1.0/3.0) * h *  dydx[i] ;
00084   }
00085   
00086   RightHandSide(yTemp,dydxTemp);
00087 
00088   for( i = 0; i < fNumberOfVariables; i++ ) 
00089   {
00090     yTemp2[i] = yIn[i] + (2.0/3.0) * h * dydxTemp[i] ;
00091   }
00092 
00093   RightHandSide(yTemp2,dydxTemp2);
00094 
00095   for( i = 0; i < fNumberOfVariables; i++ ) 
00096   {
00097     yOut[i] = yIn[i] + h * (0.25 * dydx[i] + 0.75 * dydxTemp2[i]);
00098   }
00099       
00100   if ( fNumberOfVariables == 12 ) { NormalisePolarizationVector( yOut ); }
00101 }  

Generated on Mon May 27 17:49:50 2013 for Geant4 by  doxygen 1.4.7