Line |
Branch |
Exec |
Source |
1 |
|
|
// ______ ______ _ _ _____ ______ |
2 |
|
|
// | ____| ____| | (_)/ ____| | ____| |
3 |
|
|
// | |__ | |__ | | _| (___ ___| |__ |
4 |
|
|
// | __| | __| | | | |\___ \ / __| __| |
5 |
|
|
// | | | |____| |____| |____) | (__| |____ |
6 |
|
|
// |_| |______|______|_|_____/ \___|______| |
7 |
|
|
// Finite Elements for Life Sciences and Engineering |
8 |
|
|
// |
9 |
|
|
// License: LGL2.1 License |
10 |
|
|
// FELiScE default license: LICENSE in root folder |
11 |
|
|
// |
12 |
|
|
// Main authors: M. Boulakia |
13 |
|
|
// |
14 |
|
|
|
15 |
|
|
// System includes |
16 |
|
|
|
17 |
|
|
// External includes |
18 |
|
|
|
19 |
|
|
// Project includes |
20 |
|
|
#include "Solver/MVSolver.hpp" |
21 |
|
|
|
22 |
|
|
namespace felisce { |
23 |
|
✗ |
MVSolver::MVSolver(FelisceTransient::Pointer fstransient): |
24 |
|
✗ |
IonicSolver(fstransient) { |
25 |
|
✗ |
m_nComp = 3; |
26 |
|
✗ |
m_assimilation = false; |
27 |
|
✗ |
m_cellTypeCut = 4; // E.Tixier: Test MV model for atria. This is ugly bu necessary (for now) to be able to pass the Buildbot tests. |
28 |
|
|
|
29 |
|
✗ |
if (FelisceParam::instance().CellsType != "hetero") { |
30 |
|
✗ |
m_uo.resize(1); |
31 |
|
✗ |
m_uu.resize(1); |
32 |
|
✗ |
m_thetav.resize(1); |
33 |
|
✗ |
m_thetaw.resize(1); |
34 |
|
✗ |
m_thetavm.resize(1); |
35 |
|
✗ |
m_thetao.resize(1); |
36 |
|
✗ |
m_tauvm1.resize(1); |
37 |
|
✗ |
m_tauvm2.resize(1); |
38 |
|
✗ |
m_tauvp.resize(1); |
39 |
|
✗ |
m_tauwm1.resize(1); |
40 |
|
✗ |
m_tauwm2.resize(1); |
41 |
|
✗ |
m_kwm.resize(1); |
42 |
|
✗ |
m_uwm.resize(1); |
43 |
|
✗ |
m_tauwm.resize(1); |
44 |
|
✗ |
m_taufi.resize(1); |
45 |
|
✗ |
m_tauo1.resize(1); |
46 |
|
✗ |
m_tauo2.resize(1); |
47 |
|
✗ |
m_tauso1.resize(1); |
48 |
|
✗ |
m_tauso2.resize(1); |
49 |
|
✗ |
m_kso.resize(1); |
50 |
|
✗ |
m_uso.resize(1); |
51 |
|
✗ |
m_taus1.resize(1); |
52 |
|
✗ |
m_taus2.resize(1); |
53 |
|
✗ |
m_ks.resize(1); |
54 |
|
✗ |
m_us.resize(1); |
55 |
|
✗ |
m_tausi.resize(1); |
56 |
|
✗ |
m_tauwinf.resize(1); |
57 |
|
✗ |
m_winfstar.resize(1); |
58 |
|
✗ |
m_gfi.resize(1); |
59 |
|
✗ |
m_gso.resize(1); |
60 |
|
✗ |
m_gsi.resize(1); |
61 |
|
✗ |
m_gfi[0] = 1.;m_gso[0] = 1.;m_gsi[0] = 1.; |
62 |
|
✗ |
if (FelisceParam::instance().CellsType == "endo") { |
63 |
|
✗ |
m_uo[0] = 0.; // u_o |
64 |
|
✗ |
m_uu[0] = 1.56; // u_u |
65 |
|
✗ |
m_thetav[0] = 0.3; // theta_v |
66 |
|
✗ |
m_thetaw[0] = 0.13; // theta_w |
67 |
|
✗ |
m_thetavm[0] = 0.2; // theta_v^- |
68 |
|
✗ |
m_thetao[0] = 0.006; // theta_o |
69 |
|
✗ |
m_tauvm1[0] = 75.; // tau_v1^- |
70 |
|
✗ |
m_tauvm2[0] = 10.; // tau_v2^- |
71 |
|
✗ |
m_tauvp[0] = 1.4506; // tau_v^+ |
72 |
|
✗ |
m_tauwm1[0] = 6.; // tau_w1^- |
73 |
|
✗ |
m_tauwm2[0] = 140.; // tau_w2^+ |
74 |
|
✗ |
m_kwm[0] = 200.; // k_w^- |
75 |
|
✗ |
m_uwm[0] = 0.016; // u_w^- |
76 |
|
✗ |
m_tauwm[0] = 280.; // tau_w^+ |
77 |
|
✗ |
m_taufi[0] = 0.1; // tau_fi |
78 |
|
✗ |
m_tauo1[0] = 470.; // tau_o1 |
79 |
|
✗ |
m_tauo2[0] = 6.; // tau_o2 |
80 |
|
✗ |
m_tauso1[0] = 40.; // tau_so1 |
81 |
|
✗ |
m_tauso2[0] = 1.2; // tau_so2 |
82 |
|
✗ |
m_kso[0] = 2.; // k_so |
83 |
|
✗ |
m_uso[0] = 0.65; // u_so |
84 |
|
✗ |
m_taus1[0] = 2.7342; // tau_s1 |
85 |
|
✗ |
m_taus2[0] = 2.; // tau_s2 |
86 |
|
✗ |
m_ks[0] = 2.0994; // k_s |
87 |
|
✗ |
m_us[0] = 0.9087; // u_s |
88 |
|
✗ |
m_tausi[0] = 2.9013; // tau_si |
89 |
|
✗ |
m_tauwinf[0] = 0.0273;// tau_{w inf} |
90 |
|
✗ |
m_winfstar[0] = 0.78; // w^*_{inf} |
91 |
|
|
} |
92 |
|
✗ |
else if (FelisceParam::instance().CellsType == "M") { |
93 |
|
✗ |
m_uo[0] = 0.; // u_o |
94 |
|
✗ |
m_uu[0] = 1.61; // u_u |
95 |
|
✗ |
m_thetav[0] = 0.3; // theta_v |
96 |
|
✗ |
m_thetaw[0] = 0.13; // theta_w |
97 |
|
✗ |
m_thetavm[0] = 0.1; // theta_v^- |
98 |
|
✗ |
m_thetao[0] = 0.005; // theta_o |
99 |
|
✗ |
m_tauvm1[0] = 80.; // tau_v1^- |
100 |
|
✗ |
m_tauvm2[0] = 1.4506; // tau_v2^- |
101 |
|
✗ |
m_tauvp[0] = 1.4506; // tau_v^+ |
102 |
|
✗ |
m_tauwm1[0] = 70.; // tau_w1^- |
103 |
|
✗ |
m_tauwm2[0] = 8.; // tau_w2^+ |
104 |
|
✗ |
m_kwm[0] = 200.; // k_w^- |
105 |
|
✗ |
m_uwm[0] = 0.016; // u_w^- |
106 |
|
✗ |
m_tauwm[0] = 280.; // tau_w^+ |
107 |
|
✗ |
m_taufi[0] = 0.078; // tau_fi |
108 |
|
✗ |
m_tauo1[0] = 410.; // tau_o1 |
109 |
|
✗ |
m_tauo2[0] = 7.; // tau_o2 |
110 |
|
✗ |
m_tauso1[0] = 91.; // tau_so1 |
111 |
|
✗ |
m_tauso2[0] = 0.8; // tau_so2 |
112 |
|
✗ |
m_kso[0] = 2.1; // k_so |
113 |
|
✗ |
m_uso[0] = 0.6; // u_so |
114 |
|
✗ |
m_taus1[0] = 2.7342; // tau_s1 |
115 |
|
✗ |
m_taus2[0] = 4.; // tau_s2 |
116 |
|
✗ |
m_ks[0] = 2.0994; // k_s |
117 |
|
✗ |
m_us[0] = 0.9087; // u_s |
118 |
|
✗ |
m_tausi[0] = 3.3849; // tau_si |
119 |
|
✗ |
m_tauwinf[0] = 0.01; // tau_{w inf} |
120 |
|
✗ |
m_winfstar[0] = 0.5; // w^*_{inf} |
121 |
|
|
} |
122 |
|
✗ |
else if (FelisceParam::instance().CellsType == "epi") { |
123 |
|
✗ |
m_uo[0] = 0.; // u_o |
124 |
|
✗ |
m_uu[0] = 1.55; // u_u |
125 |
|
✗ |
m_thetav[0] = 0.3; // theta_v |
126 |
|
✗ |
m_thetaw[0] = 0.13; // theta_w |
127 |
|
✗ |
m_thetavm[0] = 0.006; // theta_v^- |
128 |
|
✗ |
m_thetao[0] = 0.006; // theta_o |
129 |
|
✗ |
m_tauvm1[0] = 60.; // tau_v1^- |
130 |
|
✗ |
m_tauvm2[0] = 1150.; // tau_v2^- |
131 |
|
✗ |
m_tauvp[0] = 1.4506; // tau_v^+ |
132 |
|
✗ |
m_tauwm1[0] = 60.; // tau_w1^- |
133 |
|
✗ |
m_tauwm2[0] = 15.; // tau_w2^+ |
134 |
|
✗ |
m_kwm[0] = 65.; // k_w^- |
135 |
|
✗ |
m_uwm[0] = 0.03; // u_w^- |
136 |
|
✗ |
m_tauwm[0] = 200.; // tau_w^+ |
137 |
|
✗ |
m_taufi[0] = 0.11; // tau_fi |
138 |
|
✗ |
m_tauo1[0] = 400.; // tau_o1 |
139 |
|
✗ |
m_tauo2[0] = 6.; // tau_o2 |
140 |
|
✗ |
m_tauso1[0] = 30.0181;// tau_so1 |
141 |
|
✗ |
m_tauso2[0] = 0.9957; // tau_so2 |
142 |
|
✗ |
m_kso[0] = 2.0458; // k_so |
143 |
|
✗ |
m_uso[0] = 0.65; // u_so |
144 |
|
✗ |
m_taus1[0] = 2.7342; // tau_s1 |
145 |
|
✗ |
m_taus2[0] = 16.; // tau_s2 |
146 |
|
✗ |
m_ks[0] = 2.0994; // k_s |
147 |
|
✗ |
m_us[0] = 0.9087; // u_s |
148 |
|
✗ |
m_tausi[0] = 1.8875; // tau_si |
149 |
|
✗ |
m_tauwinf[0] = 0.07; // tau_{w inf} |
150 |
|
✗ |
m_winfstar[0] = 0.94; // w^*_{inf} |
151 |
|
|
} |
152 |
|
✗ |
else if (FelisceParam::instance().CellsType == "PB") { |
153 |
|
✗ |
m_uo[0] = 0.; // u_o |
154 |
|
✗ |
m_uu[0] = 1.45; // u_u |
155 |
|
✗ |
m_thetav[0] = 0.35; // theta_v |
156 |
|
✗ |
m_thetaw[0] = 0.13; // theta_w |
157 |
|
✗ |
m_thetavm[0] = 0.175; // theta_v^- |
158 |
|
✗ |
m_thetao[0] = 0.006; // theta_o |
159 |
|
✗ |
m_tauvm1[0] = 10.; // tau_v1^- |
160 |
|
✗ |
m_tauvm2[0] = 1150.; // tau_v2^- |
161 |
|
✗ |
m_tauvp[0] = 1.4506; // tau_v^+ |
162 |
|
✗ |
m_tauwm1[0] = 140.; // tau_w1^- |
163 |
|
✗ |
m_tauwm2[0] = 6.25; // tau_w2^+ |
164 |
|
✗ |
m_kwm[0] = 65.; // k_w^- |
165 |
|
✗ |
m_uwm[0] = 0.015; // u_w^- |
166 |
|
✗ |
m_tauwm[0] = 326.; // tau_w^+ |
167 |
|
✗ |
m_taufi[0] = 0.105; // tau_fi |
168 |
|
✗ |
m_tauo1[0] = 400.; // tau_o1 |
169 |
|
✗ |
m_tauo2[0] = 6.; // tau_o2 |
170 |
|
✗ |
m_tauso1[0] = 30.0181;// tau_so1 |
171 |
|
✗ |
m_tauso2[0] = 0.9957; // tau_so2 |
172 |
|
✗ |
m_kso[0] = 2.0458; // k_so |
173 |
|
✗ |
m_uso[0] = 0.65; // u_so |
174 |
|
✗ |
m_taus1[0] = 2.7342; // tau_s1 |
175 |
|
✗ |
m_taus2[0] = 16.; // tau_s2 |
176 |
|
✗ |
m_ks[0] = 2.0994; // k_s |
177 |
|
✗ |
m_us[0] = 0.9087; // u_s |
178 |
|
✗ |
m_tausi[0] = 1.8875; // tau_si |
179 |
|
✗ |
m_tauwinf[0] = 0.175; // tau_{w inf} |
180 |
|
✗ |
m_winfstar[0] = 0.9; // w^*_{inf} |
181 |
|
|
} |
182 |
|
✗ |
else if (FelisceParam::instance().CellsType == "TNNP") { |
183 |
|
✗ |
m_uo[0] = 0.; // u_o |
184 |
|
✗ |
m_uu[0] = 1.58; // u_u |
185 |
|
✗ |
m_thetaw[0] = 0.015; // theta_w |
186 |
|
✗ |
m_thetavm[0] = 0.015; // theta_v^- |
187 |
|
✗ |
m_thetao[0] = 0.006; // theta_o |
188 |
|
✗ |
m_tauvm1[0] = 60.; // tau_v1^- |
189 |
|
✗ |
m_tauvm2[0] = 1150.; // tau_v2^- |
190 |
|
✗ |
m_tauvp[0] = 1.4506; // tau_v^+ |
191 |
|
✗ |
m_tauwm1[0] = 70.; // tau_w1^- |
192 |
|
✗ |
m_tauwm2[0] = 20.; // tau_w2^+ |
193 |
|
✗ |
m_kwm[0] = 65.; // k_w^- |
194 |
|
✗ |
m_uwm[0] = 0.03; // u_w^- |
195 |
|
✗ |
m_tauwm[0] = 280.; // tau_w^+ |
196 |
|
✗ |
m_taufi[0] = 0.11; // tau_fi |
197 |
|
✗ |
m_tauo1[0] = 6.; // tau_o1 |
198 |
|
✗ |
m_tauo2[0] = 6.; // tau_o2 |
199 |
|
✗ |
m_tauso1[0] = 43.; // tau_so1 |
200 |
|
✗ |
m_tauso2[0] = 0.2; // tau_so2 |
201 |
|
✗ |
m_kso[0] = 2.; // k_so |
202 |
|
✗ |
m_uso[0] = 0.65; // u_so |
203 |
|
✗ |
m_taus1[0] = 2.7342; // tau_s1 |
204 |
|
✗ |
m_taus2[0] = 3.; // tau_s2 |
205 |
|
✗ |
m_ks[0] = 2.0994; // k_s |
206 |
|
✗ |
m_us[0] = 0.9087; // u_s |
207 |
|
✗ |
m_tausi[0] = 2.8723; // tau_si |
208 |
|
✗ |
m_tauwinf[0] = 0.07; // tau_{w inf} |
209 |
|
✗ |
m_winfstar[0] = 0.94; // w^*_{inf} |
210 |
|
|
} |
211 |
|
|
|
212 |
|
|
} |
213 |
|
✗ |
else if (FelisceParam::instance().CellsType == "hetero") { |
214 |
|
✗ |
m_uo.resize(m_cellTypeCut); |
215 |
|
✗ |
m_uu.resize(m_cellTypeCut); |
216 |
|
✗ |
m_thetav.resize(m_cellTypeCut); |
217 |
|
✗ |
m_thetaw.resize(m_cellTypeCut); |
218 |
|
✗ |
m_thetavm.resize(m_cellTypeCut); |
219 |
|
✗ |
m_thetao.resize(m_cellTypeCut); |
220 |
|
✗ |
m_tauvm1.resize(m_cellTypeCut); |
221 |
|
✗ |
m_tauvm2.resize(m_cellTypeCut); |
222 |
|
✗ |
m_tauvp.resize(m_cellTypeCut); |
223 |
|
✗ |
m_tauwm1.resize(m_cellTypeCut); |
224 |
|
✗ |
m_tauwm2.resize(m_cellTypeCut); |
225 |
|
✗ |
m_kwm.resize(m_cellTypeCut); |
226 |
|
✗ |
m_uwm.resize(m_cellTypeCut); |
227 |
|
✗ |
m_tauwm.resize(m_cellTypeCut); |
228 |
|
✗ |
m_taufi.resize(m_cellTypeCut); |
229 |
|
✗ |
m_tauo1.resize(m_cellTypeCut); |
230 |
|
✗ |
m_tauo2.resize(m_cellTypeCut); |
231 |
|
✗ |
m_tauso1.resize(m_cellTypeCut); |
232 |
|
✗ |
m_tauso2.resize(m_cellTypeCut); |
233 |
|
✗ |
m_kso.resize(m_cellTypeCut); |
234 |
|
✗ |
m_uso.resize(m_cellTypeCut); |
235 |
|
✗ |
m_taus1.resize(m_cellTypeCut); |
236 |
|
✗ |
m_taus2.resize(m_cellTypeCut); |
237 |
|
✗ |
m_ks.resize(m_cellTypeCut); |
238 |
|
✗ |
m_us.resize(m_cellTypeCut); |
239 |
|
✗ |
m_tausi.resize(m_cellTypeCut); |
240 |
|
✗ |
m_tauwinf.resize(m_cellTypeCut); |
241 |
|
✗ |
m_winfstar.resize(m_cellTypeCut); |
242 |
|
✗ |
m_gfi.resize(m_cellTypeCut); |
243 |
|
✗ |
m_gso.resize(m_cellTypeCut); |
244 |
|
✗ |
m_gsi.resize(m_cellTypeCut); |
245 |
|
|
// Right Ventricle (RV) |
246 |
|
|
|
247 |
|
✗ |
m_uo[0] = 0.; // u_o |
248 |
|
✗ |
m_uu[0] = 1.55; // u_u |
249 |
|
✗ |
m_thetav[0] = 0.3; // theta_v |
250 |
|
✗ |
m_thetaw[0] = 0.13; // theta_w |
251 |
|
✗ |
m_thetavm[0] = 0.006; // theta_v^- |
252 |
|
✗ |
m_thetao[0] = 0.006; // theta_o |
253 |
|
✗ |
m_tauvm1[0] = 60.; // tau_v1^- |
254 |
|
✗ |
m_tauvm2[0] = 1150.; // tau_v2^- |
255 |
|
✗ |
m_tauvp[0] = 1.4506; // tau_v^+ |
256 |
|
✗ |
m_tauwm1[0] = 60.; // tau_w1^- |
257 |
|
✗ |
m_tauwm2[0] = 15.; // tau_w2^+ |
258 |
|
✗ |
m_kwm[0] = 65.; // k_w^- |
259 |
|
✗ |
m_uwm[0] = 0.03; // u_w^- |
260 |
|
✗ |
m_tauwm[0] = 200.; // tau_w^+ |
261 |
|
✗ |
m_taufi[0] = 0.11; // tau_fi |
262 |
|
✗ |
m_tauo1[0] = 400.; // tau_o1 |
263 |
|
✗ |
m_tauo2[0] = 6.; // tau_o2 |
264 |
|
✗ |
if (FelisceParam::instance().tau_so_1_rv < 0.) { |
265 |
|
✗ |
m_tauso1[0] = 20.; //26.; // tau_so1 (30.0181) |
266 |
|
|
} |
267 |
|
|
else { |
268 |
|
✗ |
m_tauso1[0] = FelisceParam::instance().tau_so_1_rv; |
269 |
|
|
} |
270 |
|
✗ |
m_tauso2[0] = 0.9957; // tau_so2 |
271 |
|
✗ |
m_kso[0] = 2.0458; // k_so |
272 |
|
✗ |
m_uso[0] = 0.65; // u_so |
273 |
|
✗ |
m_taus1[0] = 2.7342; // tau_s1 |
274 |
|
✗ |
m_taus2[0] = 16.; // tau_s2 |
275 |
|
✗ |
m_ks[0] = 2.0994; // k_s |
276 |
|
✗ |
m_us[0] = 0.9087; // u_s |
277 |
|
✗ |
m_tausi[0] = 1.8875; // tau_si |
278 |
|
✗ |
m_tauwinf[0] = 0.07; // tau_{w inf} |
279 |
|
✗ |
m_winfstar[0] = 0.94; // w^*_{inf} |
280 |
|
✗ |
m_gfi[0] = FelisceParam::instance().gfi_rv; |
281 |
|
✗ |
m_gso[0] = FelisceParam::instance().gso_rv; |
282 |
|
✗ |
m_gsi[0] = FelisceParam::instance().gsi_rv; |
283 |
|
|
// Endo |
284 |
|
|
|
285 |
|
✗ |
m_uo[1] = 0.; // u_o |
286 |
|
✗ |
m_uu[1] = 1.56; // u_u |
287 |
|
✗ |
m_thetav[1] = 0.3; // theta_v |
288 |
|
✗ |
m_thetaw[1] = 0.13; // theta_w |
289 |
|
✗ |
m_thetavm[1] = 0.2; // theta_v^- |
290 |
|
✗ |
m_thetao[1] = 0.006; // theta_o |
291 |
|
✗ |
m_tauvm1[1] = 75.; // tau_v1^- |
292 |
|
✗ |
m_tauvm2[1] = 10.; // tau_v2^- |
293 |
|
✗ |
m_tauvp[1] = 1.4506; // tau_v^+ |
294 |
|
✗ |
m_tauwm1[1] = 6.; // tau_w1^- |
295 |
|
✗ |
m_tauwm2[1] = 140.; // tau_w2^+ |
296 |
|
✗ |
m_kwm[1] = 200.; // k_w^- |
297 |
|
✗ |
m_uwm[1] = 0.016; // u_w^- |
298 |
|
✗ |
m_tauwm[1] = 280.; // tau_w^+ |
299 |
|
✗ |
m_taufi[1] = 0.1; // tau_fi |
300 |
|
✗ |
m_tauo1[1] = 470.; // tau_o1 |
301 |
|
✗ |
m_tauo2[1] = 6.; // tau_o2 |
302 |
|
✗ |
if (FelisceParam::instance().tau_so_1_endo < 0.) { |
303 |
|
✗ |
m_tauso1[1] = 30.; //40.; // tau_so1 (40.) |
304 |
|
|
} |
305 |
|
|
else { |
306 |
|
✗ |
m_tauso1[1] = FelisceParam::instance().tau_so_1_endo; |
307 |
|
|
} |
308 |
|
✗ |
m_tauso2[1] = 1.2; // tau_so2 |
309 |
|
✗ |
m_kso[1] = 2.; // k_so |
310 |
|
✗ |
m_uso[1] = 0.65; // u_so |
311 |
|
✗ |
m_taus1[1] = 2.7342; // tau_s1 |
312 |
|
✗ |
m_taus2[1] = 2.; // tau_s2 |
313 |
|
✗ |
m_ks[1] = 2.0994; // k_s |
314 |
|
✗ |
m_us[1] = 0.9087; // u_s |
315 |
|
✗ |
m_tausi[1] = 2.9013; // tau_si |
316 |
|
✗ |
m_tauwinf[1] = 0.0273;// tau_{w inf} |
317 |
|
✗ |
m_winfstar[1] = 0.78; // w^*_{inf} |
318 |
|
✗ |
m_gfi[1] = FelisceParam::instance().gfi_endo; |
319 |
|
✗ |
m_gso[1] = FelisceParam::instance().gso_endo; |
320 |
|
✗ |
m_gsi[1] = FelisceParam::instance().gsi_endo; |
321 |
|
|
|
322 |
|
|
// M-Cells |
323 |
|
|
|
324 |
|
✗ |
m_uo[2] = 0.; // u_o |
325 |
|
✗ |
m_uu[2] = 1.61; // u_u |
326 |
|
✗ |
m_thetav[2] = 0.3; // theta_v |
327 |
|
✗ |
m_thetaw[2] = 0.13; // theta_w |
328 |
|
✗ |
m_thetavm[2] = 0.1; // theta_v^- |
329 |
|
✗ |
m_thetao[2] = 0.005; // theta_o |
330 |
|
✗ |
m_tauvm1[2] = 80.; // tau_v1^- |
331 |
|
✗ |
m_tauvm2[2] = 1.4506; // tau_v2^- |
332 |
|
✗ |
m_tauvp[2] = 1.4506; // tau_v^+ |
333 |
|
✗ |
m_tauwm1[2] = 70.; // tau_w1^- |
334 |
|
✗ |
m_tauwm2[2] = 8.; // tau_w2^+ |
335 |
|
✗ |
m_kwm[2] = 200.; // k_w^- |
336 |
|
✗ |
m_uwm[2] = 0.016; // u_w^- |
337 |
|
✗ |
m_tauwm[2] = 280.; // tau_w^+ |
338 |
|
✗ |
m_taufi[2] = 0.078; // tau_fi |
339 |
|
✗ |
m_tauo1[2] = 410.; // tau_o1 |
340 |
|
✗ |
m_tauo2[2] = 7.; // tau_o2 |
341 |
|
✗ |
if (FelisceParam::instance().tau_so_1_mcel < 0.) { |
342 |
|
✗ |
m_tauso1[2] = 45.; //61.; // tau_so1 (91.) |
343 |
|
|
} |
344 |
|
|
else { |
345 |
|
✗ |
m_tauso1[2] = FelisceParam::instance().tau_so_1_mcel; |
346 |
|
|
} |
347 |
|
✗ |
m_tauso2[2] = 0.8; // tau_so2 |
348 |
|
✗ |
m_kso[2] = 2.1; // km_so |
349 |
|
✗ |
m_uso[2] = 0.6; // u_so |
350 |
|
✗ |
m_taus1[2] = 2.7342; // tau_s1 |
351 |
|
✗ |
m_taus2[2] = 4.; // tau_s2 |
352 |
|
✗ |
m_ks[2] = 2.0994; // k_s |
353 |
|
✗ |
m_us[2] = 0.9087; // u_s |
354 |
|
✗ |
m_tausi[2] = 3.3849; // tau_si |
355 |
|
✗ |
m_tauwinf[2] = 0.01; // tau_{w inf} |
356 |
|
✗ |
m_winfstar[2] = 0.5; // w^*_{inf} |
357 |
|
✗ |
m_gfi[2] = FelisceParam::instance().gfi_mid; |
358 |
|
✗ |
m_gso[2] = FelisceParam::instance().gso_mid; |
359 |
|
✗ |
m_gsi[2] = FelisceParam::instance().gsi_mid; |
360 |
|
|
// Epi |
361 |
|
|
|
362 |
|
✗ |
m_uo[3] = 0.; // u_o |
363 |
|
✗ |
m_uu[3] = 1.55; // u_u |
364 |
|
✗ |
m_thetav[3] = 0.3; // theta_v |
365 |
|
✗ |
m_thetaw[3] = 0.13; // theta_w |
366 |
|
✗ |
m_thetavm[3] = 0.006; // theta_v^- |
367 |
|
✗ |
m_thetao[3] = 0.006; // theta_o |
368 |
|
✗ |
m_tauvm1[3] = 60.; // tau_v1^- |
369 |
|
✗ |
m_tauvm2[3] = 1150.; // tau_v2^- |
370 |
|
✗ |
m_tauvp[3] = 1.4506; // tau_v^+ |
371 |
|
✗ |
m_tauwm1[3] = 60.; // tau_w1^- |
372 |
|
✗ |
m_tauwm2[3] = 15.; // tau_w2^+ |
373 |
|
✗ |
m_kwm[3] = 65.; // k_w^- |
374 |
|
✗ |
m_uwm[3] = 0.03; // u_w^- |
375 |
|
✗ |
m_tauwm[3] = 200.; // tau_w^+ |
376 |
|
✗ |
m_taufi[3] = 0.11; // tau_fi |
377 |
|
✗ |
m_tauo1[3] = 400.; // tau_o1 |
378 |
|
✗ |
m_tauo2[3] = 6.; // tau_o2 |
379 |
|
✗ |
if (FelisceParam::instance().tau_so_1_epi < 0.) { |
380 |
|
✗ |
m_tauso1[3] = 19.; //25.; // tau_so1 (30.0181) |
381 |
|
|
} |
382 |
|
|
else { |
383 |
|
✗ |
m_tauso1[3] = FelisceParam::instance().tau_so_1_epi; |
384 |
|
|
} |
385 |
|
✗ |
m_tauso2[3] = 0.9957; // tau_so2 |
386 |
|
✗ |
m_kso[3] = 2.0458; // k_so |
387 |
|
✗ |
m_uso[3] = 0.65; // u_so |
388 |
|
✗ |
m_taus1[3] = 2.7342; // tau_s1 |
389 |
|
✗ |
m_taus2[3] = 16.; // tau_s2 |
390 |
|
✗ |
m_ks[3] = 2.0994; // k_s |
391 |
|
✗ |
m_us[3] = 0.9087; // u_s |
392 |
|
✗ |
m_tausi[3] = 1.8875; // tau_si |
393 |
|
✗ |
m_tauwinf[3] = 0.07; // tau_{w inf} |
394 |
|
✗ |
m_winfstar[3] = 0.94; // w^*_{inf} |
395 |
|
✗ |
m_gfi[3] = FelisceParam::instance().gfi_epi; |
396 |
|
✗ |
m_gso[3] = FelisceParam::instance().gso_epi; |
397 |
|
✗ |
m_gsi[3] = FelisceParam::instance().gsi_epi; |
398 |
|
|
|
399 |
|
|
// Atria (Atria-ventricular MV model) |
400 |
|
✗ |
if (m_cellTypeCut > 4){ |
401 |
|
✗ |
m_uo[4] = 0.; // u_o |
402 |
|
✗ |
m_uu[4] = 1.55; // u_u |
403 |
|
✗ |
m_thetav[4] = 0.3; // theta_v |
404 |
|
✗ |
m_thetaw[4] = 0.13; // theta_w |
405 |
|
✗ |
m_thetavm[4] = 0.006; // theta_v^- |
406 |
|
✗ |
m_thetao[4] = 0.006; // theta_o |
407 |
|
✗ |
m_tauvm1[4] = 60.; // tau_v1^- |
408 |
|
✗ |
m_tauvm2[4] = 1150.; // tau_v2^- |
409 |
|
✗ |
m_tauvp[4] = 1.4506; // tau_v^+ |
410 |
|
✗ |
m_tauwm1[4] = 60.; // tau_w1^- |
411 |
|
✗ |
m_tauwm2[4] = 15.; // tau_w2^+ |
412 |
|
✗ |
m_kwm[4] = 65.; // k_w^- |
413 |
|
✗ |
m_uwm[4] = 0.03; // u_w^- |
414 |
|
✗ |
m_tauwm[4] = 200.; // tau_w^+ |
415 |
|
✗ |
m_taufi[4] = 0.11; // tau_fi |
416 |
|
✗ |
m_tauo1[4] = 400.; // tau_o1 |
417 |
|
✗ |
m_tauo2[4] = 6.; // tau_o2 |
418 |
|
✗ |
m_tauso1[4] = 30.; // tau_so1 |
419 |
|
✗ |
m_tauso2[4] = 0.9957; // tau_so2 |
420 |
|
✗ |
m_kso[4] = 2.0458; // k_so |
421 |
|
✗ |
m_uso[4] = 0.65; // u_so |
422 |
|
✗ |
m_taus1[4] = 2.7342; // tau_s1 |
423 |
|
✗ |
m_taus2[4] = 16.; // tau_s2 |
424 |
|
✗ |
m_ks[4] = 2.0994; // k_s |
425 |
|
✗ |
m_us[4] = 0.9087; // u_s |
426 |
|
✗ |
m_tausi[4] = 1.8875; // tau_si |
427 |
|
✗ |
m_tauwinf[4] = 0.07; // tau_{w inf} |
428 |
|
✗ |
m_winfstar[4] = 0.94; // w^*_{inf} |
429 |
|
✗ |
m_gfi[4] = 1.; |
430 |
|
✗ |
m_gso[4] = 1.; |
431 |
|
✗ |
m_gsi[4] = 1.; |
432 |
|
|
} |
433 |
|
|
} |
434 |
|
|
else { |
435 |
|
✗ |
FEL_ERROR("Cells type not defined."); |
436 |
|
|
} |
437 |
|
|
|
438 |
|
|
} |
439 |
|
|
|
440 |
|
✗ |
MVSolver::~MVSolver() |
441 |
|
|
= default; |
442 |
|
|
|
443 |
|
✗ |
void MVSolver::computeRHS() { |
444 |
|
|
|
445 |
|
✗ |
double& dt = m_fstransient->timeStep; |
446 |
|
|
|
447 |
|
✗ |
m_bdf.computeRHSTime(dt, m_vecRHS); |
448 |
|
|
|
449 |
|
|
double value_uExtrap; |
450 |
|
|
double value_RHSv; |
451 |
|
|
double value_RHSw; |
452 |
|
|
double value_RHSs; |
453 |
|
|
double hv; |
454 |
|
|
double hw; |
455 |
|
|
double hm; |
456 |
|
|
double ho; |
457 |
|
|
double vinf; |
458 |
|
|
double tauvm; |
459 |
|
|
double winf; |
460 |
|
|
double tauwm; |
461 |
|
|
double taus; |
462 |
|
|
|
463 |
|
✗ |
double Vmin = FelisceParam::instance().vMin; |
464 |
|
✗ |
double Vmax = FelisceParam::instance().vMax; |
465 |
|
|
|
466 |
|
✗ |
int iType = 0; |
467 |
|
|
|
468 |
|
|
felInt pos; |
469 |
|
✗ |
for (felInt i = 0; i < m_size; i++) { |
470 |
|
✗ |
ISLocalToGlobalMappingApply(m_localDofToGlobalDof,1,&i,&pos); |
471 |
|
|
|
472 |
|
✗ |
m_uExtrap.getValues(1,&pos,&value_uExtrap);//value_uExtrap = m_uExtrap(i) |
473 |
|
|
|
474 |
|
|
//________________________________________________________________________________________________________________________________________________________________ |
475 |
|
|
|
476 |
|
✗ |
if(m_assimilation ){ |
477 |
|
|
|
478 |
|
|
//For assimilation |
479 |
|
✗ |
if(m_fstransient->iteration == 1) { |
480 |
|
✗ |
m_vEDO.resize(m_size); |
481 |
|
✗ |
m_wEDO.resize(m_size); |
482 |
|
✗ |
m_sEDO.resize(m_size); |
483 |
|
|
|
484 |
|
✗ |
p_vEDO.resize(m_size); |
485 |
|
✗ |
p_wEDO.resize(m_size); |
486 |
|
✗ |
p_sEDO.resize(m_size); |
487 |
|
|
} |
488 |
|
|
|
489 |
|
✗ |
if(m_fstransient->iteration == 1) { |
490 |
|
✗ |
m_Vm.resize(m_size); |
491 |
|
✗ |
p_Vm.resize(m_size); |
492 |
|
✗ |
m_Vm[pos] = (m_Vm[pos] - Vmin)/(Vmax-Vmin); |
493 |
|
✗ |
p_Vm[pos] = (p_Vm[pos] - Vmin)/(Vmax-Vmin); |
494 |
|
|
} |
495 |
|
|
|
496 |
|
✗ |
if(m_fstransient->iteration > 1) { |
497 |
|
✗ |
if(m_assimilation) { |
498 |
|
✗ |
value_uExtrap = m_Vm[pos]; |
499 |
|
|
} |
500 |
|
|
} |
501 |
|
|
|
502 |
|
|
} |
503 |
|
|
//________________________________________________________________________________________________________________________________________________________________ |
504 |
|
|
|
505 |
|
✗ |
value_uExtrap = (value_uExtrap - Vmin)/(Vmax-Vmin); // \in [0,1] |
506 |
|
|
|
507 |
|
✗ |
if (FelisceParam::instance().CellsType == "hetero") |
508 |
|
✗ |
iType = m_cellType[pos]; |
509 |
|
|
|
510 |
|
✗ |
if (iType < m_cellTypeCut) { |
511 |
|
|
|
512 |
|
|
// hm = H(u-theta_v^-) |
513 |
|
✗ |
if (value_uExtrap > m_thetavm[iType]) |
514 |
|
✗ |
hm=1.; |
515 |
|
|
else |
516 |
|
✗ |
hm=0.; |
517 |
|
|
|
518 |
|
|
// v_inf = 1 - H(u-theta_v^-) |
519 |
|
✗ |
vinf = 1-hm; |
520 |
|
|
|
521 |
|
|
// hv = H(u-theta_v) |
522 |
|
✗ |
if (value_uExtrap > m_thetav[iType]) |
523 |
|
✗ |
hv=1.; |
524 |
|
|
else |
525 |
|
✗ |
hv=0.; |
526 |
|
|
|
527 |
|
|
// hw = H(u-theta_w) |
528 |
|
✗ |
if (value_uExtrap > m_thetaw[iType]) |
529 |
|
✗ |
hw=1.; |
530 |
|
|
else |
531 |
|
✗ |
hw=0.; |
532 |
|
|
|
533 |
|
|
// ho = H(u-theta_o) |
534 |
|
✗ |
if(value_uExtrap > m_thetao[iType]) |
535 |
|
✗ |
ho = 1.; |
536 |
|
|
else |
537 |
|
✗ |
ho = 0.; |
538 |
|
|
|
539 |
|
|
// w_inf = (1 - H(u-theta_o)) * (1 / u/tau_w_inf) + H(u-theat_o)*w_inf^* |
540 |
|
✗ |
winf = (1-ho)*(1-value_uExtrap/m_tauwinf[iType]) + ho*m_winfstar[iType]; |
541 |
|
|
|
542 |
|
|
// tau_v^- = (1 - H(u-theta_v^+))*tau_v1^- + H(u-theta_v^-)*tau_v2^- |
543 |
|
✗ |
tauvm = (1-hm)*m_tauvm1[iType] + hm*m_tauvm2[iType]; |
544 |
|
|
// dv/dt = (1 - H(u-theta_v))*(v_inf - v)/tau_v^- - H(u-theta_v)*v/tau_v^+ |
545 |
|
✗ |
value_RHSv = (1-hv)*vinf/tauvm; |
546 |
|
✗ |
m_vecRHS[0].setValue(pos,value_RHSv, ADD_VALUES); |
547 |
|
|
|
548 |
|
|
// tau_w^- = tau_w1^- + (tau_w2^- - tau_W1^-) * (1 + tanh(k_w^- * (u-u-u_w^-)) )/2 |
549 |
|
✗ |
tauwm = m_tauwm1[iType] + (m_tauwm2[iType]-m_tauwm1[iType]) * (1 + tanh(m_kwm[iType]*(value_uExtrap-m_uwm[iType])) )/2; |
550 |
|
|
// dw/dt = (1 - H(u-theta_w))*(w_inf - w)/tau_w^- - H(u-theta_w)*w/tau_w^+ |
551 |
|
✗ |
value_RHSw = (1-hw)*winf/tauwm; |
552 |
|
✗ |
m_vecRHS[1].setValue(pos,value_RHSw, ADD_VALUES); |
553 |
|
|
|
554 |
|
|
// tau_s = (1 - H(u-theta_w))*tau_s1 + H(u-theta_w)*tau_s2 |
555 |
|
✗ |
taus = (1-hw)*m_taus1[iType] + hw*m_taus2[iType]; |
556 |
|
|
// ds/dt = ((1 + tanh(k_s * (u-u_s)) )/2 - s)/tau_s |
557 |
|
✗ |
value_RHSs = (1 + tanh(m_ks[iType]*(value_uExtrap-m_us[iType])))/(2*taus); |
558 |
|
✗ |
m_vecRHS[2].setValue(pos,value_RHSs, ADD_VALUES); |
559 |
|
|
} |
560 |
|
✗ |
else if (FelisceParam::instance().typeOfIonicModel == "courtAtriaMvVent" ){ |
561 |
|
✗ |
felInt meshId = pos; |
562 |
|
✗ |
AOPetscToApplication(m_ao,1,&meshId); |
563 |
|
✗ |
felInt sizeVent = 45580; |
564 |
|
✗ |
if (FelisceParam::instance().typeOfAppliedCurrent == "ellipseheart") |
565 |
|
✗ |
sizeVent = 32320; |
566 |
|
✗ |
if (meshId > (sizeVent-1) ) { |
567 |
|
✗ |
m_vecRHS[0].setValue(pos,0., ADD_VALUES); |
568 |
|
✗ |
m_vecRHS[1].setValue(pos,0., ADD_VALUES); |
569 |
|
✗ |
m_vecRHS[2].setValue(pos,0., ADD_VALUES); |
570 |
|
|
} |
571 |
|
|
else { |
572 |
|
✗ |
std::ostringstream msg; |
573 |
|
✗ |
msg << "Problem in MVsolver atria/ventricles nodes : node " << pos << " not defined, " << iType << "." << std::endl; |
574 |
|
✗ |
FEL_ERROR(msg.str()); |
575 |
|
|
} |
576 |
|
|
} |
577 |
|
|
else { |
578 |
|
✗ |
m_vecRHS[0].setValue(pos,0., ADD_VALUES); |
579 |
|
✗ |
m_vecRHS[1].setValue(pos,0., ADD_VALUES); |
580 |
|
✗ |
m_vecRHS[2].setValue(pos,0., ADD_VALUES); |
581 |
|
|
} |
582 |
|
|
} |
583 |
|
|
|
584 |
|
✗ |
m_vecRHS[0].assembly(); |
585 |
|
✗ |
m_vecRHS[1].assembly(); |
586 |
|
✗ |
m_vecRHS[2].assembly(); |
587 |
|
|
} |
588 |
|
|
|
589 |
|
✗ |
void MVSolver::solveEDO() { |
590 |
|
✗ |
double& coeffDeriv = m_bdf.coeffDeriv0(); |
591 |
|
✗ |
double& dt = m_fstransient->timeStep; |
592 |
|
✗ |
int& numIt = m_fstransient->iteration; |
593 |
|
|
double value_uExtrap; |
594 |
|
|
|
595 |
|
|
double value_RHSv; |
596 |
|
|
double value_RHSw; |
597 |
|
|
double value_RHSs; |
598 |
|
|
double valuem_solEDOv; |
599 |
|
|
double valuem_solEDOw; |
600 |
|
|
double valuem_solEDOs; |
601 |
|
|
|
602 |
|
|
double beta1; |
603 |
|
|
double beta2; |
604 |
|
|
double beta3; |
605 |
|
|
|
606 |
|
|
double tauvm; |
607 |
|
|
double tauwm; |
608 |
|
|
double taus; |
609 |
|
|
double hm; |
610 |
|
|
double hv; |
611 |
|
|
double hw; |
612 |
|
|
|
613 |
|
✗ |
double Vmin = FelisceParam::instance().vMin; |
614 |
|
✗ |
double Vmax = FelisceParam::instance().vMax; |
615 |
|
|
|
616 |
|
✗ |
int iType = 0; |
617 |
|
|
|
618 |
|
|
felInt pos; |
619 |
|
✗ |
for (felInt i = 0; i < m_size; i++) { |
620 |
|
✗ |
ISLocalToGlobalMappingApply(m_localDofToGlobalDof,1,&i,&pos); |
621 |
|
|
|
622 |
|
✗ |
m_uExtrap.getValues(1,&pos,&value_uExtrap);//value_uExtrap = m_uExtrap(i) |
623 |
|
✗ |
m_vecRHS[0].getValues(1,&pos,&value_RHSv);//value_RHS = m_RHS(i) |
624 |
|
✗ |
m_vecRHS[1].getValues(1,&pos,&value_RHSw);//value_RHS = m_RHS(i) |
625 |
|
✗ |
m_vecRHS[2].getValues(1,&pos,&value_RHSs);//value_RHS = m_RHS(i) |
626 |
|
|
|
627 |
|
|
//________________________________________________________________________________________________________________________________________________________________ |
628 |
|
|
|
629 |
|
✗ |
if(m_assimilation) { |
630 |
|
✗ |
if(numIt > 1) { |
631 |
|
✗ |
value_uExtrap = m_Vm[pos]; |
632 |
|
|
} |
633 |
|
|
} |
634 |
|
|
|
635 |
|
|
//________________________________________________________________________________________________________________________________________________________________ |
636 |
|
|
|
637 |
|
✗ |
value_uExtrap = (value_uExtrap - Vmin)/(Vmax-Vmin); // \in [0,1] |
638 |
|
|
|
639 |
|
✗ |
if (FelisceParam::instance().CellsType == "hetero") |
640 |
|
✗ |
iType = m_cellType[pos]; |
641 |
|
|
|
642 |
|
✗ |
if (iType < m_cellTypeCut) { |
643 |
|
|
|
644 |
|
|
// hm = H(u-theta_v^-) |
645 |
|
✗ |
if (value_uExtrap > m_thetavm[iType]) |
646 |
|
✗ |
hm=1.; |
647 |
|
|
else |
648 |
|
✗ |
hm=0.; |
649 |
|
|
|
650 |
|
|
// hv = H(u-theta_v) |
651 |
|
✗ |
if (value_uExtrap > m_thetav[iType]) |
652 |
|
✗ |
hv=1.; |
653 |
|
|
else |
654 |
|
✗ |
hv=0.; |
655 |
|
|
|
656 |
|
|
// hw = H(u-theta_w) |
657 |
|
✗ |
if (value_uExtrap > m_thetaw[iType]) |
658 |
|
✗ |
hw=1.; |
659 |
|
|
else |
660 |
|
✗ |
hw=0.; |
661 |
|
|
|
662 |
|
|
// tau_v^- = (1 - H(u-theta_v^-))*tau_v1^- + H(u-theta_v^-)*tau_v2^- |
663 |
|
✗ |
tauvm = (1-hm)*m_tauvm1[iType] + hm*m_tauvm2[iType]; |
664 |
|
✗ |
beta1 = coeffDeriv/dt + (1-hv)/tauvm + hv/m_tauvp[iType]; |
665 |
|
|
|
666 |
|
|
// tau_w^- = tau_w1^- + (tau_w2^- - tau_W1^-) * (1 + tanh(k_w^- * (u-u-u_w^-)) )/2 |
667 |
|
✗ |
tauwm = m_tauwm1[iType] + (m_tauwm2[iType]-m_tauwm1[iType]) * (1 + tanh(m_kwm[iType]*(value_uExtrap-m_uwm[iType])) )/2; |
668 |
|
✗ |
beta2=coeffDeriv/dt + (1-hw)/tauwm + hw/m_tauwm[iType]; |
669 |
|
|
|
670 |
|
|
// tau_s = (1 - H(u-theta_w))*tau_s1 + H(u-theta_w)*tau_s2 |
671 |
|
✗ |
taus = (1-hw)*m_taus1[iType] + hw*m_taus2[iType]; |
672 |
|
✗ |
beta3 = coeffDeriv/dt + 1./taus; |
673 |
|
|
|
674 |
|
|
// v^n+1 = RHSv /beta1 |
675 |
|
✗ |
valuem_solEDOv = value_RHSv * 1./beta1; |
676 |
|
|
// w^n+1 = RHSw / beta1 |
677 |
|
✗ |
valuem_solEDOw = value_RHSw * 1./beta2; |
678 |
|
|
// s^n+1 = RHSs / beta3 |
679 |
|
✗ |
valuem_solEDOs = value_RHSs * 1./beta3; |
680 |
|
|
|
681 |
|
✗ |
if(m_assimilation) |
682 |
|
|
{ |
683 |
|
|
|
684 |
|
✗ |
if(numIt == 1) { |
685 |
|
✗ |
valuem_solEDOv = 1.; |
686 |
|
✗ |
valuem_solEDOw = 1.; |
687 |
|
✗ |
valuem_solEDOs = 0.; |
688 |
|
|
|
689 |
|
✗ |
m_vEDO[pos] = valuem_solEDOv; |
690 |
|
✗ |
m_wEDO[pos] = valuem_solEDOw; |
691 |
|
✗ |
m_sEDO[pos] = valuem_solEDOs; |
692 |
|
|
|
693 |
|
|
} |
694 |
|
|
|
695 |
|
|
//________________________________________________________________________________________________________________________________________________________________ |
696 |
|
|
|
697 |
|
|
|
698 |
|
✗ |
p_vEDO[pos] = valuem_solEDOv; |
699 |
|
✗ |
p_wEDO[pos] = valuem_solEDOw; |
700 |
|
✗ |
p_sEDO[pos] = valuem_solEDOs; |
701 |
|
|
|
702 |
|
✗ |
valuem_solEDOv = m_vEDO[pos]; |
703 |
|
✗ |
valuem_solEDOw = m_wEDO[pos]; |
704 |
|
✗ |
valuem_solEDOs = m_sEDO[pos]; |
705 |
|
|
} |
706 |
|
|
|
707 |
|
|
//________________________________________________________________________________________________________________________________________________________________ |
708 |
|
|
|
709 |
|
✗ |
m_vecSolEDO[0].setValue(pos,valuem_solEDOv, INSERT_VALUES); |
710 |
|
✗ |
m_vecSolEDO[1].setValue(pos,valuem_solEDOw, INSERT_VALUES); |
711 |
|
✗ |
m_vecSolEDO[2].setValue(pos,valuem_solEDOs, INSERT_VALUES); |
712 |
|
|
} |
713 |
|
✗ |
else if (FelisceParam::instance().typeOfIonicModel == "courtAtriaMvVent" ){ |
714 |
|
✗ |
felInt meshId = pos; |
715 |
|
✗ |
AOPetscToApplication(m_ao,1,&meshId); |
716 |
|
✗ |
felInt sizeVent = 45580; |
717 |
|
✗ |
if (FelisceParam::instance().typeOfAppliedCurrent == "ellipseheart") |
718 |
|
✗ |
sizeVent = 32320; |
719 |
|
✗ |
if (meshId > (sizeVent-1) ) { |
720 |
|
✗ |
m_vecSolEDO[0].setValue(pos,0., INSERT_VALUES); |
721 |
|
✗ |
m_vecSolEDO[1].setValue(pos,0., INSERT_VALUES); |
722 |
|
✗ |
m_vecSolEDO[2].setValue(pos,0., INSERT_VALUES); |
723 |
|
|
} |
724 |
|
|
else { |
725 |
|
✗ |
std::ostringstream msg; |
726 |
|
✗ |
msg << "Problem in MVsolver atria/ventricles nodes : node " << pos << " not defined, " << iType << "." << std::endl; |
727 |
|
✗ |
FEL_ERROR(msg.str()); |
728 |
|
|
} |
729 |
|
|
} |
730 |
|
|
else { |
731 |
|
✗ |
m_vecSolEDO[0].setValue(pos,0., INSERT_VALUES); |
732 |
|
✗ |
m_vecSolEDO[1].setValue(pos,0., INSERT_VALUES); |
733 |
|
✗ |
m_vecSolEDO[2].setValue(pos,0., INSERT_VALUES); |
734 |
|
|
} |
735 |
|
|
|
736 |
|
|
} |
737 |
|
|
|
738 |
|
✗ |
m_vecSolEDO[0].assembly(); |
739 |
|
✗ |
m_vecSolEDO[1].assembly(); |
740 |
|
✗ |
m_vecSolEDO[2].assembly(); |
741 |
|
|
} |
742 |
|
|
|
743 |
|
✗ |
void MVSolver::computeIon() { |
744 |
|
|
double value_uExtrap; |
745 |
|
|
double valuem_solEDOv; |
746 |
|
|
double valuem_solEDOw; |
747 |
|
|
double valuem_solEDOs; |
748 |
|
|
double value_ion; |
749 |
|
|
|
750 |
|
|
double Jfi; |
751 |
|
|
double Jso; |
752 |
|
|
double Jsi; |
753 |
|
|
double hv; |
754 |
|
|
double hw; |
755 |
|
|
double ho; |
756 |
|
|
double tauo; |
757 |
|
|
double tauso; |
758 |
|
|
|
759 |
|
✗ |
double Vmin = FelisceParam::instance().vMin; |
760 |
|
✗ |
double Vmax = FelisceParam::instance().vMax; |
761 |
|
|
double correctionCoef; |
762 |
|
✗ |
int iType = 0; |
763 |
|
|
|
764 |
|
|
felInt pos; |
765 |
|
✗ |
for (felInt i = 0; i < m_size; i++) { |
766 |
|
✗ |
ISLocalToGlobalMappingApply(m_localDofToGlobalDof,1,&i,&pos); |
767 |
|
|
|
768 |
|
✗ |
m_uExtrap.getValues(1,&pos,&value_uExtrap);//value_uExtrap = m_uExtrap(i) |
769 |
|
✗ |
m_vecSolEDO[0].getValues(1,&pos,&valuem_solEDOv);//valuem_solEDOv = m_vecSolEDO[0](i) |
770 |
|
✗ |
m_vecSolEDO[1].getValues(1,&pos,&valuem_solEDOw);//valuem_solEDOw = m_vecSolEDO[1](i) |
771 |
|
✗ |
m_vecSolEDO[2].getValues(1,&pos,&valuem_solEDOs);//valuem_solEDOs = m_vecSolEDO[2](i) |
772 |
|
|
|
773 |
|
|
|
774 |
|
|
//________________________________________________________________________________________________________________________________________________________________ |
775 |
|
|
|
776 |
|
✗ |
if(m_assimilation) { |
777 |
|
✗ |
if(m_fstransient->iteration > 1) { |
778 |
|
✗ |
value_uExtrap = m_Vm[pos]; |
779 |
|
|
} |
780 |
|
|
} |
781 |
|
|
|
782 |
|
|
//________________________________________________________________________________________________________________________________________________________________ |
783 |
|
|
|
784 |
|
|
|
785 |
|
✗ |
value_uExtrap = (value_uExtrap - Vmin)/(Vmax-Vmin); // \in [0,1] |
786 |
|
|
|
787 |
|
✗ |
if (FelisceParam::instance().CellsType == "hetero") |
788 |
|
✗ |
iType = m_cellType[pos]; |
789 |
|
|
|
790 |
|
✗ |
if (iType < m_cellTypeCut) { |
791 |
|
|
|
792 |
|
✗ |
if (value_uExtrap > m_thetav[iType]) |
793 |
|
✗ |
hv=1.; |
794 |
|
|
else |
795 |
|
✗ |
hv=0.; |
796 |
|
|
|
797 |
|
✗ |
if (value_uExtrap > m_thetaw[iType]) |
798 |
|
✗ |
hw=1.; |
799 |
|
|
else |
800 |
|
✗ |
hw=0.; |
801 |
|
|
|
802 |
|
✗ |
if (value_uExtrap > m_thetao[iType]) |
803 |
|
✗ |
ho=1.; |
804 |
|
|
else |
805 |
|
✗ |
ho=0.; |
806 |
|
|
|
807 |
|
|
// tau_o = (1 - H(u-thea_o)) |
808 |
|
✗ |
tauo = (1-ho)*m_tauo1[iType] + ho*m_tauo2[iType]; |
809 |
|
|
// tau_so = tau_so1 + (tau_so2 - tau_so1)*(1 + tanh(k_so * (u-u_so)) )/2 |
810 |
|
✗ |
tauso = m_tauso1[iType] + (m_tauso2[iType] - m_tauso1[iType])*(1 + tanh(m_kso[iType]*(value_uExtrap-m_uso[iType])) )/2; |
811 |
|
|
|
812 |
|
|
// J_fi = -v*H(u-theta_v)*(u-theta_v)*(u_u-u)/tau_fi |
813 |
|
✗ |
Jfi = - valuem_solEDOv * hv * (value_uExtrap-m_thetav[iType]) * (m_uu[iType]-value_uExtrap) / m_taufi[iType]; |
814 |
|
✗ |
Jfi *= m_gfi[iType]; |
815 |
|
|
// J_so = (u-u_o)*(1 - H(u-theta_w))/tau_o + H(u-theta_w)/tau_so |
816 |
|
✗ |
Jso = (value_uExtrap - m_uo[iType]) * (1 - hw)/tauo + hw/tauso; |
817 |
|
✗ |
Jso *= m_gso[iType]; |
818 |
|
|
// J_si = -H(u-theta_w)*w*s/tau_si |
819 |
|
✗ |
Jsi = - hw * valuem_solEDOw * valuem_solEDOs / m_tausi[iType]; |
820 |
|
✗ |
Jsi *= m_gsi[iType]; |
821 |
|
✗ |
correctionCoef = FelisceParam::instance().Cm * (FelisceParam::instance().vMax - FelisceParam::instance().vMin); |
822 |
|
|
// Infarct |
823 |
|
✗ |
if (FelisceParam::instance().hasInfarct) { |
824 |
|
✗ |
Jfi *= m_tauOut[pos]; |
825 |
|
|
} |
826 |
|
✗ |
value_ion = - ( Jfi + Jso + Jsi )*correctionCoef; |
827 |
|
✗ |
m_ion.setValue(pos,value_ion, INSERT_VALUES); |
828 |
|
|
} |
829 |
|
✗ |
else if (FelisceParam::instance().typeOfIonicModel == "courtAtriaMvVent" ){ |
830 |
|
✗ |
felInt meshId = pos; |
831 |
|
✗ |
AOPetscToApplication(m_ao,1,&meshId); |
832 |
|
✗ |
felInt sizeVent = 45580; |
833 |
|
✗ |
if (FelisceParam::instance().typeOfAppliedCurrent == "ellipseheart") |
834 |
|
✗ |
sizeVent = 32320; |
835 |
|
✗ |
if (meshId > (sizeVent-1) ) { |
836 |
|
✗ |
m_ion.setValue(pos,0., INSERT_VALUES); |
837 |
|
|
} |
838 |
|
|
else { |
839 |
|
✗ |
std::ostringstream msg; |
840 |
|
✗ |
msg << "Problem in MVsolver atria/ventricles nodes : node " << pos << " not defined, " << iType << "." << std::endl; |
841 |
|
✗ |
FEL_ERROR(msg.str()); |
842 |
|
|
} |
843 |
|
|
} |
844 |
|
|
else { |
845 |
|
✗ |
m_ion.setValue(pos,0., INSERT_VALUES); |
846 |
|
|
} |
847 |
|
|
} |
848 |
|
✗ |
m_ion.assembly(); |
849 |
|
|
} |
850 |
|
|
|
851 |
|
|
|
852 |
|
|
///////////////////////// |
853 |
|
|
// Setters and Getters // |
854 |
|
|
///////////////////////// |
855 |
|
|
|
856 |
|
|
|
857 |
|
✗ |
void MVSolver::setParameters(std::vector<double> parameters) { |
858 |
|
|
|
859 |
|
|
|
860 |
|
✗ |
if(parameters.size() == 28) { |
861 |
|
|
|
862 |
|
✗ |
m_uo.resize(1); |
863 |
|
✗ |
m_uu.resize(1); |
864 |
|
✗ |
m_thetav.resize(1); |
865 |
|
✗ |
m_thetaw.resize(1); |
866 |
|
✗ |
m_thetavm.resize(1); |
867 |
|
✗ |
m_thetao.resize(1); |
868 |
|
✗ |
m_tauvm1.resize(1); |
869 |
|
✗ |
m_tauvm2.resize(1); |
870 |
|
✗ |
m_tauvp.resize(1); |
871 |
|
✗ |
m_tauwm1.resize(1); |
872 |
|
✗ |
m_tauwm2.resize(1); |
873 |
|
✗ |
m_kwm.resize(1); |
874 |
|
✗ |
m_uwm.resize(1); |
875 |
|
✗ |
m_tauwm.resize(1); |
876 |
|
✗ |
m_taufi.resize(1); |
877 |
|
✗ |
m_tauo1.resize(1); |
878 |
|
✗ |
m_tauo2.resize(1); |
879 |
|
✗ |
m_tauso1.resize(1); |
880 |
|
✗ |
m_tauso2.resize(1); |
881 |
|
✗ |
m_kso.resize(1); |
882 |
|
✗ |
m_uso.resize(1); |
883 |
|
✗ |
m_taus1.resize(1); |
884 |
|
✗ |
m_taus2.resize(1); |
885 |
|
✗ |
m_ks.resize(1); |
886 |
|
✗ |
m_us.resize(1); |
887 |
|
✗ |
m_tausi.resize(1); |
888 |
|
✗ |
m_tauwinf.resize(1); |
889 |
|
✗ |
m_winfstar.resize(1); |
890 |
|
|
|
891 |
|
|
|
892 |
|
|
|
893 |
|
✗ |
m_uo[0] = parameters[0]; |
894 |
|
✗ |
m_uu[0] = parameters[1]; |
895 |
|
✗ |
m_thetav[0] = parameters[2]; |
896 |
|
✗ |
m_thetaw[0] = parameters[3]; |
897 |
|
✗ |
m_thetavm[0] = parameters[4]; |
898 |
|
✗ |
m_thetao[0] = parameters[5]; |
899 |
|
✗ |
m_tauvm1[0] = parameters[6]; |
900 |
|
✗ |
m_tauvm2[0] = parameters[7]; |
901 |
|
✗ |
m_tauvp[0] = parameters[8]; |
902 |
|
✗ |
m_tauwm1[0] = parameters[9]; |
903 |
|
✗ |
m_tauwm2[0] = parameters[10]; |
904 |
|
✗ |
m_kwm[0] = parameters[11]; |
905 |
|
✗ |
m_uwm[0] = parameters[12]; |
906 |
|
✗ |
m_tauwm[0] = parameters[13]; |
907 |
|
✗ |
m_taufi[0] = parameters[14]; |
908 |
|
✗ |
m_tauo1[0] = parameters[15]; |
909 |
|
✗ |
m_tauo2[0] = parameters[16]; |
910 |
|
✗ |
m_tauso1[0] = parameters[17]; |
911 |
|
✗ |
m_tauso2[0] = parameters[18]; |
912 |
|
✗ |
m_kso[0] = parameters[19]; |
913 |
|
✗ |
m_uso[0] = parameters[20]; |
914 |
|
✗ |
m_taus1[0] = parameters[21]; |
915 |
|
✗ |
m_taus2[0] = parameters[22]; |
916 |
|
✗ |
m_ks[0] = parameters[23]; |
917 |
|
✗ |
m_us[0] = parameters[24]; |
918 |
|
✗ |
m_tausi[0] = parameters[25]; |
919 |
|
✗ |
m_tauwinf[0] = parameters[26]; |
920 |
|
✗ |
m_winfstar[0] = parameters[27]; |
921 |
|
|
|
922 |
|
|
} else { |
923 |
|
|
|
924 |
|
✗ |
for(unsigned int i=0 ; i<m_posparam.size() ; i++) { |
925 |
|
|
|
926 |
|
✗ |
const int posp = m_posparam[i]; |
927 |
|
|
|
928 |
|
✗ |
switch(posp) { |
929 |
|
|
|
930 |
|
✗ |
case 0: |
931 |
|
✗ |
m_uo.resize(1); |
932 |
|
✗ |
m_uo[0] = parameters[i]; |
933 |
|
✗ |
break; |
934 |
|
|
|
935 |
|
✗ |
case 1: |
936 |
|
✗ |
m_uu.resize(1); |
937 |
|
✗ |
m_uu[0] = parameters[i]; |
938 |
|
✗ |
break; |
939 |
|
|
|
940 |
|
✗ |
case 2: |
941 |
|
✗ |
m_thetav.resize(1); |
942 |
|
✗ |
m_thetav[0] = parameters[i]; |
943 |
|
✗ |
break; |
944 |
|
|
|
945 |
|
✗ |
case 3: |
946 |
|
✗ |
m_thetaw.resize(1); |
947 |
|
✗ |
m_thetaw[0] = parameters[i]; |
948 |
|
✗ |
break; |
949 |
|
|
|
950 |
|
✗ |
case 4: |
951 |
|
✗ |
m_thetavm.resize(1); |
952 |
|
✗ |
m_thetavm[0] = parameters[i]; |
953 |
|
✗ |
break; |
954 |
|
|
|
955 |
|
✗ |
case 5: |
956 |
|
✗ |
m_thetao.resize(1); |
957 |
|
✗ |
m_thetao[0] = parameters[i]; |
958 |
|
✗ |
break; |
959 |
|
|
|
960 |
|
✗ |
case 6: |
961 |
|
✗ |
m_tauvm1.resize(1); |
962 |
|
✗ |
m_tauvm1[0] = parameters[i]; |
963 |
|
✗ |
break; |
964 |
|
|
|
965 |
|
✗ |
case 7: |
966 |
|
✗ |
m_tauvm2.resize(1); |
967 |
|
✗ |
m_tauvm2[0] = parameters[i]; |
968 |
|
✗ |
break; |
969 |
|
|
|
970 |
|
✗ |
case 8: |
971 |
|
✗ |
m_tauvp.resize(1); |
972 |
|
✗ |
m_tauvp[0] = parameters[i]; |
973 |
|
✗ |
break; |
974 |
|
|
|
975 |
|
✗ |
case 9: |
976 |
|
✗ |
m_tauwm1.resize(1); |
977 |
|
✗ |
m_tauwm1[0] = parameters[i]; |
978 |
|
✗ |
break; |
979 |
|
|
|
980 |
|
✗ |
case 10: |
981 |
|
✗ |
m_tauwm2.resize(1); |
982 |
|
✗ |
m_tauwm2[0] = parameters[i]; |
983 |
|
✗ |
break; |
984 |
|
|
|
985 |
|
✗ |
case 11: |
986 |
|
✗ |
m_kwm.resize(1); |
987 |
|
✗ |
m_kwm[0] = parameters[i]; |
988 |
|
✗ |
break; |
989 |
|
|
|
990 |
|
✗ |
case 12: |
991 |
|
✗ |
m_uwm.resize(1); |
992 |
|
✗ |
m_uwm[0] = parameters[i]; |
993 |
|
✗ |
break; |
994 |
|
|
|
995 |
|
✗ |
case 13: |
996 |
|
✗ |
m_tauwm.resize(1); |
997 |
|
✗ |
m_tauwm[0] = parameters[i]; |
998 |
|
✗ |
break; |
999 |
|
|
|
1000 |
|
✗ |
case 14: |
1001 |
|
✗ |
m_taufi.resize(1); |
1002 |
|
✗ |
m_taufi[0] = parameters[i]; |
1003 |
|
✗ |
break; |
1004 |
|
|
|
1005 |
|
✗ |
case 15: |
1006 |
|
✗ |
m_tauo1.resize(1); |
1007 |
|
✗ |
m_tauo1[0] = parameters[i]; |
1008 |
|
✗ |
break; |
1009 |
|
|
|
1010 |
|
✗ |
case 16: |
1011 |
|
✗ |
m_tauo2.resize(1); |
1012 |
|
✗ |
m_tauo2[0] = parameters[i]; |
1013 |
|
✗ |
break; |
1014 |
|
|
|
1015 |
|
✗ |
case 17: |
1016 |
|
✗ |
m_tauso1.resize(1); |
1017 |
|
✗ |
m_tauso1[0] = parameters[i]; |
1018 |
|
✗ |
break; |
1019 |
|
|
|
1020 |
|
✗ |
case 18: |
1021 |
|
✗ |
m_tauso2.resize(1); |
1022 |
|
✗ |
m_tauso2[0] = parameters[i]; |
1023 |
|
✗ |
break; |
1024 |
|
|
|
1025 |
|
✗ |
case 19: |
1026 |
|
✗ |
m_kso.resize(1); |
1027 |
|
✗ |
m_kso[0] = parameters[i]; |
1028 |
|
✗ |
break; |
1029 |
|
|
|
1030 |
|
✗ |
case 20: |
1031 |
|
✗ |
m_uso.resize(1); |
1032 |
|
✗ |
m_uso[0] = parameters[i]; |
1033 |
|
✗ |
break; |
1034 |
|
|
|
1035 |
|
✗ |
case 21: |
1036 |
|
✗ |
m_taus1.resize(1); |
1037 |
|
✗ |
m_taus1[0] = parameters[i]; |
1038 |
|
✗ |
break; |
1039 |
|
|
|
1040 |
|
✗ |
case 22: |
1041 |
|
✗ |
m_taus2.resize(1); |
1042 |
|
✗ |
m_taus2[0] = parameters[i]; |
1043 |
|
✗ |
break; |
1044 |
|
|
|
1045 |
|
✗ |
case 23: |
1046 |
|
✗ |
m_ks.resize(1); |
1047 |
|
✗ |
m_ks[0] = parameters[i]; |
1048 |
|
✗ |
break; |
1049 |
|
|
|
1050 |
|
✗ |
case 24: |
1051 |
|
✗ |
m_us.resize(1); |
1052 |
|
✗ |
m_us[0] = parameters[i]; |
1053 |
|
✗ |
break; |
1054 |
|
|
|
1055 |
|
✗ |
case 25: |
1056 |
|
✗ |
m_tausi.resize(1); |
1057 |
|
✗ |
m_tausi[0] = parameters[i]; |
1058 |
|
✗ |
break; |
1059 |
|
|
|
1060 |
|
✗ |
case 26: |
1061 |
|
✗ |
m_tauwinf.resize(1); |
1062 |
|
✗ |
m_tauwinf[0] = parameters[i]; |
1063 |
|
✗ |
break; |
1064 |
|
|
|
1065 |
|
✗ |
case 27: |
1066 |
|
✗ |
m_winfstar.resize(1); |
1067 |
|
✗ |
m_winfstar[0] = parameters[i]; |
1068 |
|
✗ |
break; |
1069 |
|
|
|
1070 |
|
✗ |
default: |
1071 |
|
✗ |
std::cout << "Numerotation error in setParameters of MVSolver" << std::endl; |
1072 |
|
✗ |
break; |
1073 |
|
|
} |
1074 |
|
|
|
1075 |
|
|
}//End for |
1076 |
|
|
|
1077 |
|
|
}//End else |
1078 |
|
|
|
1079 |
|
|
} |
1080 |
|
|
|
1081 |
|
|
|
1082 |
|
|
|
1083 |
|
✗ |
void MVSolver::getParameters(std::vector<double>& p) { |
1084 |
|
|
|
1085 |
|
✗ |
std::vector<double> param; |
1086 |
|
|
|
1087 |
|
✗ |
if(m_posparam.size() == 28) { |
1088 |
|
|
|
1089 |
|
✗ |
param.push_back(m_uo[0]); |
1090 |
|
✗ |
param.push_back(m_uu[0]); |
1091 |
|
✗ |
param.push_back(m_thetav[0]); |
1092 |
|
✗ |
param.push_back(m_thetaw[0]); |
1093 |
|
✗ |
param.push_back(m_thetavm[0]); |
1094 |
|
✗ |
param.push_back(m_thetao[0]); |
1095 |
|
✗ |
param.push_back(m_tauvm1[0]); |
1096 |
|
✗ |
param.push_back(m_tauvm2[0]); |
1097 |
|
✗ |
param.push_back(m_tauvp[0]); |
1098 |
|
✗ |
param.push_back(m_tauwm1[0]); |
1099 |
|
✗ |
param.push_back(m_tauwm2[0]); |
1100 |
|
✗ |
param.push_back(m_kwm[0]); |
1101 |
|
✗ |
param.push_back(m_uwm[0]); |
1102 |
|
✗ |
param.push_back(m_tauwm[0]); |
1103 |
|
✗ |
param.push_back(m_taufi[0]); |
1104 |
|
✗ |
param.push_back(m_tauo1[0]); |
1105 |
|
✗ |
param.push_back(m_tauo2[0]); |
1106 |
|
✗ |
param.push_back(m_tauso1[0]); |
1107 |
|
✗ |
param.push_back(m_tauso2[0]); |
1108 |
|
✗ |
param.push_back(m_kso[0]); |
1109 |
|
✗ |
param.push_back(m_uso[0]); |
1110 |
|
✗ |
param.push_back(m_taus1[0]); |
1111 |
|
✗ |
param.push_back(m_taus2[0]); |
1112 |
|
✗ |
param.push_back(m_ks[0]); |
1113 |
|
✗ |
param.push_back(m_us[0]); |
1114 |
|
✗ |
param.push_back(m_tausi[0]); |
1115 |
|
✗ |
param.push_back(m_tauwinf[0]); |
1116 |
|
✗ |
param.push_back(m_winfstar[0]); |
1117 |
|
|
|
1118 |
|
|
} else { |
1119 |
|
|
|
1120 |
|
✗ |
for(unsigned int i=0 ; i<m_posparam.size() ; i++) { |
1121 |
|
|
|
1122 |
|
✗ |
const int posp = m_posparam[i]; |
1123 |
|
|
|
1124 |
|
✗ |
switch(posp) { |
1125 |
|
|
|
1126 |
|
✗ |
case 0: |
1127 |
|
✗ |
param.push_back(m_uo[0]); |
1128 |
|
✗ |
break; |
1129 |
|
|
|
1130 |
|
✗ |
case 1: |
1131 |
|
✗ |
param.push_back(m_uu[0]); |
1132 |
|
✗ |
break; |
1133 |
|
|
|
1134 |
|
✗ |
case 2: |
1135 |
|
✗ |
param.push_back(m_thetav[0]); |
1136 |
|
✗ |
break; |
1137 |
|
|
|
1138 |
|
✗ |
case 3: |
1139 |
|
✗ |
param.push_back(m_thetaw[0]); |
1140 |
|
✗ |
break; |
1141 |
|
|
|
1142 |
|
✗ |
case 4: |
1143 |
|
✗ |
param.push_back(m_thetavm[0]); |
1144 |
|
✗ |
break; |
1145 |
|
|
|
1146 |
|
✗ |
case 5: |
1147 |
|
✗ |
param.push_back(m_thetao[0]); |
1148 |
|
✗ |
break; |
1149 |
|
|
|
1150 |
|
✗ |
case 6: |
1151 |
|
✗ |
param.push_back(m_tauvm1[0]); |
1152 |
|
✗ |
break; |
1153 |
|
|
|
1154 |
|
✗ |
case 7: |
1155 |
|
✗ |
param.push_back(m_tauvm2[0]); |
1156 |
|
✗ |
break; |
1157 |
|
|
|
1158 |
|
✗ |
case 8: |
1159 |
|
✗ |
param.push_back(m_tauvp[0]); |
1160 |
|
✗ |
break; |
1161 |
|
|
|
1162 |
|
✗ |
case 9: |
1163 |
|
✗ |
param.push_back(m_tauwm1[0]); |
1164 |
|
✗ |
break; |
1165 |
|
|
|
1166 |
|
✗ |
case 10: |
1167 |
|
✗ |
param.push_back(m_tauwm2[0]); |
1168 |
|
✗ |
break; |
1169 |
|
|
|
1170 |
|
✗ |
case 11: |
1171 |
|
✗ |
param.push_back(m_kwm[0]); |
1172 |
|
✗ |
break; |
1173 |
|
|
|
1174 |
|
✗ |
case 12: |
1175 |
|
✗ |
param.push_back(m_uwm[0]); |
1176 |
|
✗ |
break; |
1177 |
|
|
|
1178 |
|
✗ |
case 13: |
1179 |
|
✗ |
param.push_back(m_tauwm[0]); |
1180 |
|
✗ |
break; |
1181 |
|
|
|
1182 |
|
✗ |
case 14: |
1183 |
|
✗ |
param.push_back(m_taufi[0]); |
1184 |
|
✗ |
break; |
1185 |
|
|
|
1186 |
|
✗ |
case 15: |
1187 |
|
✗ |
param.push_back(m_tauo1[0]); |
1188 |
|
✗ |
break; |
1189 |
|
|
|
1190 |
|
✗ |
case 16: |
1191 |
|
✗ |
param.push_back(m_tauo2[0]); |
1192 |
|
✗ |
break; |
1193 |
|
|
|
1194 |
|
✗ |
case 17: |
1195 |
|
✗ |
param.push_back(m_tauso1[0]); |
1196 |
|
✗ |
break; |
1197 |
|
|
|
1198 |
|
✗ |
case 18: |
1199 |
|
✗ |
param.push_back(m_tauso2[0]); |
1200 |
|
✗ |
break; |
1201 |
|
|
|
1202 |
|
✗ |
case 19: |
1203 |
|
✗ |
param.push_back(m_kso[0]); |
1204 |
|
✗ |
break; |
1205 |
|
|
|
1206 |
|
✗ |
case 20: |
1207 |
|
✗ |
param.push_back(m_uso[0]); |
1208 |
|
✗ |
break; |
1209 |
|
|
|
1210 |
|
✗ |
case 21: |
1211 |
|
✗ |
param.push_back(m_taus1[0]); |
1212 |
|
✗ |
break; |
1213 |
|
|
|
1214 |
|
✗ |
case 22: |
1215 |
|
✗ |
param.push_back(m_taus2[0]); |
1216 |
|
✗ |
break; |
1217 |
|
|
|
1218 |
|
✗ |
case 23: |
1219 |
|
✗ |
param.push_back(m_ks[0]); |
1220 |
|
✗ |
break; |
1221 |
|
|
|
1222 |
|
✗ |
case 24: |
1223 |
|
✗ |
param.push_back(m_us[0]); |
1224 |
|
✗ |
break; |
1225 |
|
|
|
1226 |
|
✗ |
case 25: |
1227 |
|
✗ |
param.push_back(m_tausi[0]); |
1228 |
|
✗ |
break; |
1229 |
|
|
|
1230 |
|
✗ |
case 26: |
1231 |
|
✗ |
param.push_back(m_tauwinf[0]); |
1232 |
|
✗ |
break; |
1233 |
|
|
|
1234 |
|
✗ |
case 27: |
1235 |
|
✗ |
param.push_back(m_winfstar[0]); |
1236 |
|
✗ |
break; |
1237 |
|
|
|
1238 |
|
✗ |
default: |
1239 |
|
✗ |
std::cout << "Numerotation error in setParameters of MVSolver" << std::endl; |
1240 |
|
✗ |
break; |
1241 |
|
|
|
1242 |
|
|
} |
1243 |
|
|
|
1244 |
|
|
}//End for |
1245 |
|
|
|
1246 |
|
|
}//End else |
1247 |
|
|
|
1248 |
|
✗ |
p = param; |
1249 |
|
|
|
1250 |
|
|
} |
1251 |
|
|
|
1252 |
|
|
|
1253 |
|
|
|
1254 |
|
✗ |
void MVSolver::getEDOvalues(std::vector<double>& v,std::vector<double>& w,std::vector<double>& s) { |
1255 |
|
|
|
1256 |
|
✗ |
v.resize(m_vEDO.size()); |
1257 |
|
✗ |
w.resize(m_wEDO.size()); |
1258 |
|
✗ |
s.resize(m_sEDO.size()); |
1259 |
|
|
|
1260 |
|
✗ |
v = m_vEDO; |
1261 |
|
✗ |
w = m_wEDO; |
1262 |
|
✗ |
s = m_sEDO; |
1263 |
|
|
|
1264 |
|
|
} |
1265 |
|
|
|
1266 |
|
✗ |
void MVSolver::getEDOpvalues(std::vector<double>& v,std::vector<double>& w,std::vector<double>& s) { |
1267 |
|
|
|
1268 |
|
✗ |
v.resize(p_vEDO.size()); |
1269 |
|
✗ |
w.resize(p_wEDO.size()); |
1270 |
|
✗ |
s.resize(p_sEDO.size()); |
1271 |
|
|
|
1272 |
|
✗ |
v = p_vEDO; |
1273 |
|
✗ |
w = p_wEDO; |
1274 |
|
✗ |
s = p_sEDO; |
1275 |
|
|
|
1276 |
|
|
} |
1277 |
|
|
|
1278 |
|
|
|
1279 |
|
✗ |
void MVSolver::setEDOvalues(std::vector<double> v,std::vector<double> w,std::vector<double> s) { |
1280 |
|
|
|
1281 |
|
✗ |
m_vEDO = v; |
1282 |
|
✗ |
m_wEDO = w; |
1283 |
|
✗ |
m_sEDO = s; |
1284 |
|
|
|
1285 |
|
|
} |
1286 |
|
|
|
1287 |
|
✗ |
void MVSolver::getVmpvalues(std::vector<double>& Vm) { |
1288 |
|
|
|
1289 |
|
✗ |
Vm.resize(p_vEDO.size()); |
1290 |
|
|
|
1291 |
|
✗ |
Vm = p_Vm; |
1292 |
|
|
|
1293 |
|
|
} |
1294 |
|
|
|
1295 |
|
✗ |
void MVSolver::getVmvalues(std::vector<double>& Vm) { |
1296 |
|
|
|
1297 |
|
✗ |
Vm.resize(m_vEDO.size()); |
1298 |
|
|
|
1299 |
|
✗ |
Vm = m_Vm; |
1300 |
|
|
|
1301 |
|
|
} |
1302 |
|
|
|
1303 |
|
|
|
1304 |
|
✗ |
void MVSolver::setVmvalues(std::vector<double> Vm) { |
1305 |
|
|
|
1306 |
|
✗ |
m_Vm = Vm; |
1307 |
|
|
|
1308 |
|
|
} |
1309 |
|
|
|
1310 |
|
✗ |
void MVSolver::setAssimilation(bool assim) { |
1311 |
|
|
|
1312 |
|
✗ |
m_assimilation = assim; |
1313 |
|
|
|
1314 |
|
|
} |
1315 |
|
|
|
1316 |
|
|
|
1317 |
|
✗ |
void MVSolver::setPosParam(std::vector<int> pp) { |
1318 |
|
|
|
1319 |
|
✗ |
m_posparam.clear(); |
1320 |
|
|
|
1321 |
|
✗ |
for(unsigned ipp=0 ; ipp<pp.size() ; ipp++) { |
1322 |
|
✗ |
m_posparam.push_back(pp[ipp]); |
1323 |
|
|
} |
1324 |
|
|
|
1325 |
|
|
} |
1326 |
|
|
|
1327 |
|
|
|
1328 |
|
|
|
1329 |
|
|
|
1330 |
|
|
} |
1331 |
|
|
|
1332 |
|
|
|
1333 |
|
|
|
1334 |
|
|
|