openCARP
Doxygen code documentation for the open cardiac electrophysiology simulator openCARP
ODEint.cc
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // openCARP is an open cardiac electrophysiology simulator.
3 //
4 // Copyright (C) 2020 openCARP project
5 //
6 // This program is licensed under the openCARP Academic Public License (APL)
7 // v1.0: You can use and redistribute it and/or modify it in non-commercial
8 // academic environments under the terms of APL as published by the openCARP
9 // project v1.0, or (at your option) any later version. Commercial use requires
10 // a commercial license (info@opencarp.org).
11 //
12 // This program is distributed without any warranty; see the openCARP APL for
13 // more details.
14 //
15 // You should have received a copy of the openCARP APL along with this program
16 // and can find it online: http://www.opencarp.org/license
17 // ----------------------------------------------------------------------------
18 
19 #include "ODEint.h"
20 
21 namespace limpet {
22 
40 void ODEint_RK(GlobalData_t *y, GlobalData_t *ydot, void f(GlobalData_t*,GlobalData_t*,void*), void *f_data, int len, GlobalData_t dt)
41 {
42  int i;
44  GlobalData_t *ynpk1 = k1;
45  GlobalData_t *k2 = k1;
46 
47  for (i=0;i<len;i++) {
48  k1[i] = dt*ydot[i];
49  ynpk1[i] = y[i]+0.5*k1[i];
50  }
51 
52  f(ynpk1,ydot,f_data);
53 
54  for (i=0;i<len;i++) {
55  k2[i] = dt*ydot[i];
56  y[i] += k2[i];
57  }
58 }
59 
75 void ODEint_FE(GlobalData_t *y, GlobalData_t *ydot, void *f, void *f_data, int len, GlobalData_t dt)
76 {
77  for (int i=0;i<len;i++)
78  y[i] += ydot[i]*dt;
79 }
80 
81 
99 void d_ODEint_RK(d_OdeVec *y, d_OdeVec *ydot, void f(GlobalData_t*,d_OdeVec*,void*),
100  void *f_data, GlobalData_t dt)
101 {
102  int i;
104  GlobalData_t *ynpk1 = k1;
105  GlobalData_t *k2 = k1;
106 
107  for (i=0;i<y->len;i++) {
108  k1[i] = dt*ydot->vec[i];
109  ynpk1[i] = y->vec[i]+0.5*k1[i];
110  }
111 
112  f(ynpk1,ydot,f_data);
113 
114  for (i=0;i<y->len;i++) {
115  k2[i] = dt*ydot->vec[i];
116  y->vec[i] += k2[i];
117  }
118 }
119 
134 void d_ODEint_FE(d_OdeVec*y, d_OdeVec *ydot, void *f, void *f_data, GlobalData_t dt)
135 {
136  for (int i=0;i<y->len;i++)
137  y->vec[i] += ydot->vec[i]*dt;
138 }
139 
140 } // namespace limpet
void ODEint_FE(GlobalData_t *y, GlobalData_t *ydot, void *f, void *f_data, int len, GlobalData_t dt)
Definition: ODEint.cc:75
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:40
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:99
#define ODEint_MaxVecLen
Definition: ODEint.h:31
void d_ODEint_FE(d_OdeVec *y, d_OdeVec *ydot, void *f, void *f_data, GlobalData_t dt)
Definition: ODEint.cc:134
GlobalData_t * vec
Definition: ODEint.h:35
SF_real GlobalData_t
Definition: limpet_types.h:27