Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4QSSDriverCreator.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// G4QSSDriverCreator implementation
27//
28// Author: J.Apostolakis - October 2021 - February 2023
29// --------------------------------------------------------------------
30
31#include "G4QSSDriverCreator.hh"
32
35
36#include "G4QSSDriver.hh"
37#include "G4QSStepper.hh"
38#include "G4QSS2.hh"
39#include "G4QSS3.hh"
40
41#include "G4Mag_UsualEqRhs.hh"
42
43#include <cassert>
44
47{
48 G4VIntegrationDriver* driver = nullptr;
49// pStepper->build_driver(stepMinimum, true); // Original - QSS
50 auto qss2stepper = dynamic_cast<G4QSStepper<G4QSS2>*>(pStepper);
51 if( qss2stepper != nullptr ) {
52 // driver = new G4QSSDriver<G4QSStepper<G4QSS2>>(qss2stepper);
53 driver = CreateDriver( qss2stepper );
54 }
55 auto qss3stepper = dynamic_cast<G4QSStepper<G4QSS3>*>(pStepper);
56 if( qss3stepper != nullptr ) {
57 // driver = new G4QSSDriver<G4QSStepper<G4QSS3>>(qss3stepper);
58 driver= CreateDriver( qss3stepper );
59 }
60 return driver;
61}
62
65{
66 G4cout << "---- G4QSSDriver<G4QSS2>* G4QSSDriverCreator::CreateDriver(G4QSStepper<G4QSS2>* ) called.\n";
67 return new G4QSSDriver<G4QSStepper<G4QSS2>>(qss2stepper);
68}
69
70static constexpr G4int numOfVars= 6;
71
74{
75 G4cout << "---- G4QSSDriver<G4QSS3>* G4QSSDriverCreator::CreateDriver(G4QSStepper<G4QSS3>* ) called.\n";
76 return new G4QSSDriver<G4QSStepper<G4QSS3>>(qss3stepper);
77}
78
79G4QSStepper<G4QSS2>* G4QSSDriverCreator::G4QSSDriverCreator::CreateQss2Stepper(G4Mag_EqRhs* Equation)
80{
81 G4cout << "---- G4QSStepper<G4QSS2>* CreateQss2Stepper(G4Mag_EqRhs* ) CALLED\n";
82 return G4QSStepper<G4QSS2>::build_QSS2( Equation, numOfVars, true);
83}
84
86{
87 G4cout << "---- G4QSStepper<G4QSS3>* CreateQss3Stepper(G4Mag_EqRhs* ) CALLED\n";
88 return G4QSStepper<G4QSS3>::build_QSS3( Equation, numOfVars, true);
89}
90
92{
93 assert( dynamic_cast<G4Mag_UsualEqRhs*>(Equation) != nullptr );
94 // assert( Equation->GetNumberOfVariables() == numOfVars );
95
96 auto qss2stepper = G4QSStepper<G4QSS2>::build_QSS2( Equation, numOfVars, true);
97 return CreateDriver( qss2stepper );
98}
99
102{
103 assert( dynamic_cast<G4Mag_UsualEqRhs*>(Equation) != nullptr );
104 // assert( Equation->GetNumberOfVariables() == numOfVars );
105
106 auto qss3stepper = G4QSStepper<G4QSS3>::build_QSS3( Equation, numOfVars, true);
107 return CreateDriver( qss3stepper );
108}
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
G4GLOB_DLL std::ostream G4cout
static G4VIntegrationDriver * CreateQss3Driver(G4Mag_EqRhs *Equation)
static G4QSStepper< G4QSS3 > * CreateQss3Stepper(G4Mag_EqRhs *Equation)
static G4VIntegrationDriver * CreateQss2Driver(G4Mag_EqRhs *Equation)
static G4VIntegrationDriver * CreateDriver(G4MagIntegratorStepper *pStepper, G4double)
static G4QSStepper< G4QSS2 > * build_QSS2(G4EquationOfMotion *EqRhs, G4int numberOfVariables=6, G4bool primary=true)
static G4QSStepper< G4QSS3 > * build_QSS3(G4EquationOfMotion *EqRhs, G4int numberOfVariables=6, G4bool primary=true)