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

SimpleRKStepper.cc
Go to the documentation of this file.
2 #include <cmath>
3 #include <stdexcept>
4 namespace Genfun {
5  SimpleRKStepper::SimpleRKStepper(const ButcherTableau & mtableau,double xstepsize):
6  tableau(mtableau),
7  stepsize(xstepsize)
8  {
9  }
10 
12  const RKIntegrator::RKData::Data & s,
14  double timeLimit ) const {
15  const double h = timeLimit==0 ? stepsize : timeLimit - s.time;
16  if (h<=0) throw std::runtime_error ("SimpleRKStepper: negative stepsize");
17  const unsigned int nvar = s.variable.size();
18  // Compute all of the k's..:
19  //
20  std::vector<std::vector<double> >k(tableau.nSteps());
21  for (unsigned int i=0;i<tableau.nSteps();i++) {
22  k[i].resize(nvar,0);
23  Argument arg(nvar);
24  for (unsigned int v=0;v<nvar;v++) arg[v]=s.variable[v];
25  for (unsigned int j=0;j<i;j++) {
26  for (unsigned int v=0;v<nvar;v++) arg[v] += h*tableau.A(i,j)*k[j][v];
27  }
28  for (unsigned int v=0;v<nvar;v++) k[i][v]=(*data->_diffEqn[v])(arg);
29  }
30  //
31  // Final result.
32  //
33  for (unsigned int v=0;v<nvar;v++) d.firstDerivative[v] = 0;
34  for (unsigned int i=0;i<tableau.nSteps();i++) {
35  for (unsigned int v=0;v<nvar;v++) d.firstDerivative[v] += tableau.b(i)*k[i][v];
36  }
37  for (unsigned int v=0;v<nvar;v++) d.variable[v] =s.variable[v]+h*d.firstDerivative[v];
38  d.time = timeLimit==0 ? s.time + h : timeLimit;
39 
40  }
41 
43 
45  return new SimpleRKStepper(*this);
46  }
47 }
Genfun::RKIntegrator::RKData::Data::time
double time
Definition: CLHEP/GenericFunctions/RKIntegrator.hh:112
Genfun::SimpleRKStepper::step
virtual void step(const RKIntegrator::RKData *data, const RKIntegrator::RKData::Data &sdata, RKIntegrator::RKData::Data &ddata, double timeLimit) const
Definition: SimpleRKStepper.cc:11
Genfun::ButcherTableau::b
double & b(unsigned int i)
Genfun::SimpleRKStepper::~SimpleRKStepper
virtual ~SimpleRKStepper()
Definition: SimpleRKStepper.cc:42
Genfun::ButcherTableau::A
double & A(unsigned int i, unsigned int j)
Genfun::SimpleRKStepper
Definition: CLHEP/GenericFunctions/SimpleRKStepper.hh:17
Genfun::RKIntegrator::RKData::Data
Definition: CLHEP/GenericFunctions/RKIntegrator.hh:108
Genfun::RKIntegrator::RKData::Data::variable
std::vector< double > variable
Definition: CLHEP/GenericFunctions/RKIntegrator.hh:110
v
they are gone ZOOM Features Discontinued The following features of the ZOOM package were felt to be extreme overkill These have been after checking that no existing user code was utilizing as in SpaceVector v
Definition: keyMergeIssues.doc:324
Genfun::RKIntegrator::RKData
Definition: CLHEP/GenericFunctions/RKIntegrator.hh:102
Genfun::Argument
Definition: CLHEP/GenericFunctions/Argument.hh:17
Genfun::SimpleRKStepper::clone
virtual SimpleRKStepper * clone() const
Definition: SimpleRKStepper.cc:44
j
long j
Definition: JamesRandomSeeding.txt:28
Genfun::RKIntegrator::RKData::_diffEqn
std::vector< const AbsFunction * > _diffEqn
Definition: CLHEP/GenericFunctions/RKIntegrator.hh:129
Genfun::RKIntegrator::RKData::Data::firstDerivative
std::vector< double > firstDerivative
Definition: CLHEP/GenericFunctions/RKIntegrator.hh:111
s
Methods applicble to containers of as in std::list< LorentzVector > s
Definition: keyMergeIssues.doc:328
i
long i
Definition: JamesRandomSeeding.txt:27
Genfun::SimpleRKStepper::SimpleRKStepper
SimpleRKStepper(const ButcherTableau &tableau, double stepsize)
Definition: SimpleRKStepper.cc:5
for
for(n=1 ;n< 98 ;n++)
Definition: JamesRandomSeeding.txt:34
Genfun::ButcherTableau::nSteps
unsigned int nSteps() const
k
long k
Definition: JamesRandomSeeding.txt:29
SimpleRKStepper.hh
Genfun::ButcherTableau
Definition: CLHEP/GenericFunctions/ButcherTableau.hh:23
Genfun
Definition: CLHEP/GenericFunctions/Abs.hh:14