Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:59:02

0001 // ********************************************************************
0002 // * License and Disclaimer                                           *
0003 // *                                                                  *
0004 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0005 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0006 // * conditions of the Geant4 Software License,  included in the file *
0007 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0008 // * include a list of copyright holders.                             *
0009 // *                                                                  *
0010 // * Neither the authors of this software system, nor their employing *
0011 // * institutes,nor the agencies providing financial support for this *
0012 // * work  make  any representation or  warranty, express or implied, *
0013 // * regarding  this  software system or assume any liability for its *
0014 // * use.  Please see the license in the file  LICENSE  and URL above *
0015 // * for the full disclaimer and the limitation of liability.         *
0016 // *                                                                  *
0017 // * This  code  implementation is the result of  the  scientific and *
0018 // * technical work of the GEANT4 collaboration.                      *
0019 // * By using,  copying,  modifying or  distributing the software (or *
0020 // * any work based  on the software)  you  agree  to acknowledge its *
0021 // * use  in  resulting  scientific  publications,  and indicate your *
0022 // * acceptance of all terms of the Geant4 Software license.          *
0023 // ********************************************************************
0024 //
0025 // G4RK547FEq1
0026 //
0027 // Class description:
0028 //
0029 // An implementation of the 7 stage embedded Runge-Kutta 4,5 pair (RK547FEq1)
0030 // from the paper:
0031 //   D. J. Higham and G. Hall,
0032 //   "Embedded Runge-Kutta formulae with stable equilibrium states",
0033 //   J. Comput. Appl. Math., vol. 29, no. 1, pp. 25-33, 1990.
0034 
0035 // Author: Dmitry Sorokin, Google Summer of Code 2017
0036 // Supervision: John Apostolakis, CERN
0037 // --------------------------------------------------------------------
0038 #ifndef G4RK547FEQ1_HH
0039 #define G4RK547FEQ1_HH
0040 
0041 #include "G4MagIntegratorStepper.hh"
0042 #include "G4FieldTrack.hh"
0043 
0044 class G4RK547FEq1 : public G4MagIntegratorStepper
0045 {
0046   public:
0047 
0048     G4RK547FEq1(G4EquationOfMotion* EqRhs, G4int integrationVariables = 6);
0049 
0050     G4RK547FEq1(const G4RK547FEq1&) = delete;
0051     G4RK547FEq1& operator= (const G4RK547FEq1&) = delete;
0052 
0053     void Stepper( const G4double yInput[],
0054                   const G4double dydx[],
0055                         G4double hstep,
0056                         G4double yOutput[],
0057                         G4double yError[] ) override;
0058 
0059     void Stepper( const G4double yInput[],
0060                   const G4double dydx[],
0061                         G4double hstep,
0062                         G4double yOutput[],
0063                         G4double yError[],
0064                         G4double dydxOutput[] );
0065 
0066     G4double DistChord() const override;
0067     G4int IntegratorOrder() const override { return 4; }
0068 
0069   private:
0070 
0071     void makeStep( const G4double yInput[],
0072                    const G4double dydx[],
0073                    const G4double hstep,
0074                          G4double yOutput[],
0075                          G4double* dydxOutput = nullptr,
0076                          G4double* yError = nullptr) const;
0077 
0078   private:
0079 
0080     G4double fyIn[G4FieldTrack::ncompSVEC],
0081              fdydx[G4FieldTrack::ncompSVEC],
0082              fyOut[G4FieldTrack::ncompSVEC],
0083              fdydxOut[G4FieldTrack::ncompSVEC];
0084 
0085     G4double fhstep = -1.0;
0086 };
0087 
0088 #endif