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

RungeKuttaClassicalSolver.cc
Go to the documentation of this file.
4 namespace 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 
21  RungeKuttaSolver::RungeKuttaSolver(Genfun::GENFUNCTION gH, const PhaseSpace & mphaseSpace, const Genfun::RKIntegrator::RKStepper *stepper):c(new Clockwork(gH,mphaseSpace)){
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 
51  return *c->integrator->getFunction(v.index());
52  }
54  return c->H;
55  }
57  return c->phaseSpace;
58  }
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 }
virtual Genfun::Parameter * takeP0(unsigned int index)
unsigned int dim() const
Definition: PhaseSpace.cc:98
virtual const PhaseSpace & phaseSpace() const
double startValue(const Genfun::Variable &component) const
Definition: PhaseSpace.cc:87
virtual Genfun::GENFUNCTION energy() const
std::vector< Genfun::Parameter * > startingP
RungeKuttaSolver(Genfun::GENFUNCTION H, const PhaseSpace &phaseSpace, const Genfun::RKIntegrator::RKStepper *stepper=NULL)
virtual Derivative partial(unsigned int) const
Definition: AbsFunction.cc:40
unsigned int index() const
Definition: Variable.cc:34
virtual Genfun::Parameter * createControlParameter(const std::string &variableName="anon", double defStartingValue=0.0, double startingValueMin=0.0, double startingValueMax=0.0) const
const Component & momenta() const
Definition: PhaseSpace.cc:70
virtual Genfun::GENFUNCTION equationOf(const Genfun::Variable &v) const
const RKFunction * getFunction(unsigned int i) const
Parameter * createControlParameter(const std::string &variableName="anon", double defStartingValue=0.0, double startingValueMin=0.0, double startingValueMax=0.0)
Parameter * addDiffEquation(const AbsFunction *diffEquation, const std::string &variableName="anon", double defStartingValue=0.0, double startingValueMin=0.0, double startingValueMax=0.0)
std::vector< Genfun::Parameter * > startingQ
Clockwork(Genfun::GENFUNCTION gH, const PhaseSpace &mphaseSpace)
virtual Genfun::Parameter * takeQ0(unsigned int index)
const Component & coordinates() const
Definition: PhaseSpace.cc:66
virtual Genfun::GENFUNCTION hamiltonian() const