CMS 3D CMS Logo

ThirdOrderDelayODE.cc
Go to the documentation of this file.
1 #include <cmath>
2 #include <cassert>
4 
6 
8  const double currentIn,
9  double /* dIdt */,
10  double /* d2Id2t */,
11  const double* x,
12  const unsigned lenX,
13  const unsigned firstNode,
14  double* derivative) const {
15  // Check input sanity
16  if (lenX < firstNode + 3U)
17  throw cms::Exception("In ThirdOrderDelayODE::calculate: insufficient number of variables");
18  if (tau <= 0.0)
19  throw cms::Exception("In ThirdOrderDelayODE::calculate: delay time is not positive");
20  assert(x);
22 
23  derivative[firstNode] = x[firstNode + 1];
24  derivative[firstNode + 1] = x[firstNode + 2];
25  derivative[firstNode + 2] =
26  6.0 / a_ * (currentIn - x[firstNode] - c_ * tau * x[firstNode + 1] - b_ / 2.0 * tau * tau * x[firstNode + 2]) /
27  tau / tau / tau;
28 }
29 
30 void ThirdOrderDelayODE::setParameters(const double* pars, const unsigned nPars) {
31  assert(nPars == 3U);
32  assert(pars);
33  a_ = exp(pars[0]);
34  b_ = exp(pars[1]);
35  c_ = exp(pars[2]);
36 }
Derivative< X, A >::type derivative(const A &_)
Definition: Derivative.h:18
void calculate(double tau, double inputCurrent, double dIdt, double d2Id2t, const double *x, unsigned lenX, unsigned firstNode, double *derivative) const
assert(be >=bs)
float x
void setParameters(const double *pars, unsigned nPars)