openCARP
Doxygen code documentation for the open cardiac electrophysiology simulator openCARP
ODEint.cc
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) NumeriCor GmbH
2 // SPDX-License-Identifier: LicenseRef-APL-1.1
3 
4 #include "ODEint.h"
5 
6 namespace limpet {
7 
25 void ODEint_RK(GlobalData_t *y, GlobalData_t *ydot, void f(GlobalData_t*,GlobalData_t*,void*), void *f_data, int len, GlobalData_t dt)
26 {
27  int i;
29  GlobalData_t *ynpk1 = k1;
30  GlobalData_t *k2 = k1;
31 
32  for (i=0;i<len;i++) {
33  k1[i] = dt*ydot[i];
34  ynpk1[i] = y[i]+0.5*k1[i];
35  }
36 
37  f(ynpk1,ydot,f_data);
38 
39  for (i=0;i<len;i++) {
40  k2[i] = dt*ydot[i];
41  y[i] += k2[i];
42  }
43 }
44 
60 void ODEint_FE(GlobalData_t *y, GlobalData_t *ydot, void *f, void *f_data, int len, GlobalData_t dt)
61 {
62  for (int i=0;i<len;i++)
63  y[i] += ydot[i]*dt;
64 }
65 
66 
84 void d_ODEint_RK(d_OdeVec *y, d_OdeVec *ydot, void f(GlobalData_t*,d_OdeVec*,void*),
85  void *f_data, GlobalData_t dt)
86 {
87  int i;
89  GlobalData_t *ynpk1 = k1;
90  GlobalData_t *k2 = k1;
91 
92  for (i=0;i<y->len;i++) {
93  k1[i] = dt*ydot->vec[i];
94  ynpk1[i] = y->vec[i]+0.5*k1[i];
95  }
96 
97  f(ynpk1,ydot,f_data);
98 
99  for (i=0;i<y->len;i++) {
100  k2[i] = dt*ydot->vec[i];
101  y->vec[i] += k2[i];
102  }
103 }
104 
119 void d_ODEint_FE(d_OdeVec*y, d_OdeVec *ydot, void *f, void *f_data, GlobalData_t dt)
120 {
121  for (int i=0;i<y->len;i++)
122  y->vec[i] += ydot->vec[i]*dt;
123 }
124 
125 } // namespace limpet
#define ODEint_MaxVecLen
Definition: ODEint.h:16
void d_ODEint_RK(d_OdeVec *y, d_OdeVec *ydot, void f(GlobalData_t *, d_OdeVec *, void *), void *f_data, GlobalData_t dt)
Definition: ODEint.cc:84
void d_ODEint_FE(d_OdeVec *y, d_OdeVec *ydot, void *f, void *f_data, GlobalData_t dt)
Definition: ODEint.cc:119
void ODEint_FE(GlobalData_t *y, GlobalData_t *ydot, void *f, void *f_data, int len, GlobalData_t dt)
Definition: ODEint.cc:60
SF_real GlobalData_t
Definition: limpet_types.h:12
void ODEint_RK(GlobalData_t *y, GlobalData_t *ydot, void f(GlobalData_t *, GlobalData_t *, void *), void *f_data, int len, GlobalData_t dt)
Definition: ODEint.cc:25
GlobalData_t * vec
Definition: ODEint.h:20