CLHEP VERSION Reference Documentation
   
CLHEP Home Page     CLHEP Documentation     CLHEP Bug Reports

RungeKuttaClassicalSolver.cc
Go to the documentation of this file.
4namespace Classical {
5 //
6 // This is the private innards of RungeKuttaSolver
7 //
9 public:
10
11 Clockwork(Genfun::GENFUNCTION gH, const PhaseSpace & mphaseSpace):H(gH),phaseSpace(mphaseSpace), integrator(NULL){
12 }
16 std::vector<Genfun::Parameter*> startingQ;
17 std::vector<Genfun::Parameter*> startingP;
19 };
20
22 c->integrator=new Genfun::RKIntegrator(stepper);
23 //
24 // Dimension (of coords, or phase space)
25 //
26 const unsigned int DIM=c->phaseSpace.dim();
27 //
28 // Equations of motion via hamilton's equations:
29 //
32
33 for (unsigned int i=0;i<DIM;i++) {
34 Genfun::GENFUNCTION DXDT = c->H.partial(P[i].index());
35 c->startingQ.push_back(c->integrator->addDiffEquation(&DXDT,"X",c->phaseSpace.startValue(X[i])));
36 }
37 for (unsigned int i=0;i<DIM;i++) {
38 Genfun::GENFUNCTION DPDT = -c->H.partial(X[i].index());
39 c->startingP.push_back(c->integrator->addDiffEquation(&DPDT,"P",c->phaseSpace.startValue(P[i])));
40 }
41 c->energy=NULL;
42
43 }
45 delete c->integrator;
46 delete c->energy;
47 delete c;
48 }
49
60 if (!c->energy) c->energy=new Genfun::EnergyFunction(*this);
61 return *c->energy;
62 }
63
65 double defStartingValue,
66 double startingValueMin,
67 double startingValueMax) const {
68 return c->integrator->createControlParameter(variableName, defStartingValue, startingValueMin, startingValueMax) ;
69 }
70
72 return c->startingQ[index];
73 }
75 return c->startingP[index];
76 }
77
78}
const Component & momenta() const
Definition PhaseSpace.cc:70
const Component & coordinates() const
Definition PhaseSpace.cc:66
double startValue(const Genfun::Variable &component) const
Definition PhaseSpace.cc:87
unsigned int dim() const
Definition PhaseSpace.cc:98
Clockwork(Genfun::GENFUNCTION gH, const PhaseSpace &mphaseSpace)
std::vector< Genfun::Parameter * > startingQ
std::vector< Genfun::Parameter * > startingP
virtual Genfun::GENFUNCTION hamiltonian() const
virtual Genfun::Parameter * createControlParameter(const std::string &variableName="anon", double defStartingValue=0.0, double startingValueMin=0.0, double startingValueMax=0.0) const
virtual Genfun::GENFUNCTION equationOf(const Genfun::Variable &v) const
virtual Genfun::GENFUNCTION energy() const
virtual Genfun::Parameter * takeP0(unsigned int index)
virtual Genfun::Parameter * takeQ0(unsigned int index)
RungeKuttaSolver(Genfun::GENFUNCTION H, const PhaseSpace &phaseSpace, const Genfun::RKIntegrator::RKStepper *stepper=NULL)
virtual const PhaseSpace & phaseSpace() const
virtual Derivative partial(unsigned int) const
Parameter * addDiffEquation(const AbsFunction *diffEquation, const std::string &variableName="anon", double defStartingValue=0.0, double startingValueMin=0.0, double startingValueMax=0.0)
Parameter * createControlParameter(const std::string &variableName="anon", double defStartingValue=0.0, double startingValueMin=0.0, double startingValueMax=0.0)
const RKFunction * getFunction(unsigned int i) const
unsigned int index() const
Definition Variable.cc:34