00001 #ifndef _FaberRudy2000Version3Optimised
00002 #define _FaberRudy2000Version3Optimised
00003
00004
00005
00006
00007
00008
00009 #include <cmath>
00010 #include <cassert>
00011 #include "AbstractCardiacCell.hpp"
00012 #include "Exception.hpp"
00013 #include "AbstractStimulusFunction.hpp"
00014 #include "OdeSystemInformation.hpp"
00015
00016 class FaberRudy2000Version3OptimisedLookupTables
00017 {
00018 public:
00019 static FaberRudy2000Version3OptimisedLookupTables* Instance()
00020 {
00021 if (mpInstance == NULL)
00022 {
00023 mpInstance = new FaberRudy2000Version3OptimisedLookupTables;
00024 }
00025 return mpInstance;
00026 }
00027
00028
00029
00030 inline double _lookup_0(unsigned i, double factor)
00031 {
00032 double y1 = _lookup_table_0[i][0];
00033 double y2 = _lookup_table_0[i+1][0];
00034 return y1 + (y2-y1)*factor;
00035 }
00036
00037 inline double _lookup_1(unsigned i, double factor)
00038 {
00039 double y1 = _lookup_table_0[i][1];
00040 double y2 = _lookup_table_0[i+1][1];
00041 return y1 + (y2-y1)*factor;
00042 }
00043
00044 inline double _lookup_2(unsigned i, double factor)
00045 {
00046 double y1 = _lookup_table_0[i][2];
00047 double y2 = _lookup_table_0[i+1][2];
00048 return y1 + (y2-y1)*factor;
00049 }
00050
00051 inline double _lookup_3(unsigned i, double factor)
00052 {
00053 double y1 = _lookup_table_0[i][3];
00054 double y2 = _lookup_table_0[i+1][3];
00055 return y1 + (y2-y1)*factor;
00056 }
00057
00058 inline double _lookup_4(unsigned i, double factor)
00059 {
00060 double y1 = _lookup_table_0[i][4];
00061 double y2 = _lookup_table_0[i+1][4];
00062 return y1 + (y2-y1)*factor;
00063 }
00064
00065 inline double _lookup_5(unsigned i, double factor)
00066 {
00067 double y1 = _lookup_table_0[i][5];
00068 double y2 = _lookup_table_0[i+1][5];
00069 return y1 + (y2-y1)*factor;
00070 }
00071
00072 inline double _lookup_6(unsigned i, double factor)
00073 {
00074 double y1 = _lookup_table_0[i][6];
00075 double y2 = _lookup_table_0[i+1][6];
00076 return y1 + (y2-y1)*factor;
00077 }
00078
00079 inline double _lookup_7(unsigned i, double factor)
00080 {
00081 double y1 = _lookup_table_0[i][7];
00082 double y2 = _lookup_table_0[i+1][7];
00083 return y1 + (y2-y1)*factor;
00084 }
00085
00086 inline double _lookup_8(unsigned i, double factor)
00087 {
00088 double y1 = _lookup_table_0[i][8];
00089 double y2 = _lookup_table_0[i+1][8];
00090 return y1 + (y2-y1)*factor;
00091 }
00092
00093 inline double _lookup_9(unsigned i, double factor)
00094 {
00095 double y1 = _lookup_table_0[i][9];
00096 double y2 = _lookup_table_0[i+1][9];
00097 return y1 + (y2-y1)*factor;
00098 }
00099
00100 inline double _lookup_10(unsigned i, double factor)
00101 {
00102 double y1 = _lookup_table_0[i][10];
00103 double y2 = _lookup_table_0[i+1][10];
00104 return y1 + (y2-y1)*factor;
00105 }
00106
00107 inline double _lookup_11(unsigned i, double factor)
00108 {
00109 double y1 = _lookup_table_0[i][11];
00110 double y2 = _lookup_table_0[i+1][11];
00111 return y1 + (y2-y1)*factor;
00112 }
00113
00114 inline double _lookup_12(unsigned i, double factor)
00115 {
00116 double y1 = _lookup_table_0[i][12];
00117 double y2 = _lookup_table_0[i+1][12];
00118 return y1 + (y2-y1)*factor;
00119 }
00120
00121 inline double _lookup_13(unsigned i, double factor)
00122 {
00123 double y1 = _lookup_table_0[i][13];
00124 double y2 = _lookup_table_0[i+1][13];
00125 return y1 + (y2-y1)*factor;
00126 }
00127
00128 inline double _lookup_14(unsigned i, double factor)
00129 {
00130 double y1 = _lookup_table_0[i][14];
00131 double y2 = _lookup_table_0[i+1][14];
00132 return y1 + (y2-y1)*factor;
00133 }
00134
00135 inline double _lookup_15(unsigned i, double factor)
00136 {
00137 double y1 = _lookup_table_0[i][15];
00138 double y2 = _lookup_table_0[i+1][15];
00139 return y1 + (y2-y1)*factor;
00140 }
00141
00142 inline double _lookup_16(unsigned i, double factor)
00143 {
00144 double y1 = _lookup_table_0[i][16];
00145 double y2 = _lookup_table_0[i+1][16];
00146 return y1 + (y2-y1)*factor;
00147 }
00148
00149 inline double _lookup_17(unsigned i, double factor)
00150 {
00151 double y1 = _lookup_table_0[i][17];
00152 double y2 = _lookup_table_0[i+1][17];
00153 return y1 + (y2-y1)*factor;
00154 }
00155
00156 inline double _lookup_18(unsigned i, double factor)
00157 {
00158 double y1 = _lookup_table_0[i][18];
00159 double y2 = _lookup_table_0[i+1][18];
00160 return y1 + (y2-y1)*factor;
00161 }
00162
00163 inline double _lookup_19(unsigned i, double factor)
00164 {
00165 double y1 = _lookup_table_0[i][19];
00166 double y2 = _lookup_table_0[i+1][19];
00167 return y1 + (y2-y1)*factor;
00168 }
00169
00170 inline double _lookup_20(unsigned i, double factor)
00171 {
00172 double y1 = _lookup_table_0[i][20];
00173 double y2 = _lookup_table_0[i+1][20];
00174 return y1 + (y2-y1)*factor;
00175 }
00176
00177 inline double _lookup_21(unsigned i, double factor)
00178 {
00179 double y1 = _lookup_table_0[i][21];
00180 double y2 = _lookup_table_0[i+1][21];
00181 return y1 + (y2-y1)*factor;
00182 }
00183
00184 inline double _lookup_22(unsigned i, double factor)
00185 {
00186 double y1 = _lookup_table_0[i][22];
00187 double y2 = _lookup_table_0[i+1][22];
00188 return y1 + (y2-y1)*factor;
00189 }
00190
00191 inline double _lookup_23(unsigned i, double factor)
00192 {
00193 double y1 = _lookup_table_0[i][23];
00194 double y2 = _lookup_table_0[i+1][23];
00195 return y1 + (y2-y1)*factor;
00196 }
00197
00198 inline double _lookup_24(unsigned i, double factor)
00199 {
00200 double y1 = _lookup_table_0[i][24];
00201 double y2 = _lookup_table_0[i+1][24];
00202 return y1 + (y2-y1)*factor;
00203 }
00204
00205 inline double _lookup_25(unsigned i, double factor)
00206 {
00207 double y1 = _lookup_table_0[i][25];
00208 double y2 = _lookup_table_0[i+1][25];
00209 return y1 + (y2-y1)*factor;
00210 }
00211
00212 inline double _lookup_26(unsigned i, double factor)
00213 {
00214 double y1 = _lookup_table_0[i][26];
00215 double y2 = _lookup_table_0[i+1][26];
00216 return y1 + (y2-y1)*factor;
00217 }
00218
00219 inline double _lookup_27(unsigned i, double factor)
00220 {
00221 double y1 = _lookup_table_0[i][27];
00222 double y2 = _lookup_table_0[i+1][27];
00223 return y1 + (y2-y1)*factor;
00224 }
00225
00226 inline double _lookup_28(unsigned i, double factor)
00227 {
00228 double y1 = _lookup_table_0[i][28];
00229 double y2 = _lookup_table_0[i+1][28];
00230 return y1 + (y2-y1)*factor;
00231 }
00232
00233 inline double _lookup_29(unsigned i, double factor)
00234 {
00235 double y1 = _lookup_table_0[i][29];
00236 double y2 = _lookup_table_0[i+1][29];
00237 return y1 + (y2-y1)*factor;
00238 }
00239
00240 inline double _lookup_30(unsigned i, double factor)
00241 {
00242 double y1 = _lookup_table_0[i][30];
00243 double y2 = _lookup_table_0[i+1][30];
00244 return y1 + (y2-y1)*factor;
00245 }
00246
00247 inline double _lookup_31(unsigned i, double factor)
00248 {
00249 double y1 = _lookup_table_0[i][31];
00250 double y2 = _lookup_table_0[i+1][31];
00251 return y1 + (y2-y1)*factor;
00252 }
00253
00254 inline double _lookup_32(unsigned i, double factor)
00255 {
00256 double y1 = _lookup_table_0[i][32];
00257 double y2 = _lookup_table_0[i+1][32];
00258 return y1 + (y2-y1)*factor;
00259 }
00260
00261 inline double _lookup_33(unsigned i, double factor)
00262 {
00263 double y1 = _lookup_table_0[i][33];
00264 double y2 = _lookup_table_0[i+1][33];
00265 return y1 + (y2-y1)*factor;
00266 }
00267
00268 inline double _lookup_34(unsigned i, double factor)
00269 {
00270 double y1 = _lookup_table_0[i][34];
00271 double y2 = _lookup_table_0[i+1][34];
00272 return y1 + (y2-y1)*factor;
00273 }
00274
00275 inline double _lookup_35(unsigned i, double factor)
00276 {
00277 double y1 = _lookup_table_0[i][35];
00278 double y2 = _lookup_table_0[i+1][35];
00279 return y1 + (y2-y1)*factor;
00280 }
00281
00282 inline double _lookup_36(unsigned i, double factor)
00283 {
00284 double y1 = _lookup_table_0[i][36];
00285 double y2 = _lookup_table_0[i+1][36];
00286 return y1 + (y2-y1)*factor;
00287 }
00288
00289 inline double _lookup_37(unsigned i, double factor)
00290 {
00291 double y1 = _lookup_table_0[i][37];
00292 double y2 = _lookup_table_0[i+1][37];
00293 return y1 + (y2-y1)*factor;
00294 }
00295
00296 inline double _lookup_38(unsigned i, double factor)
00297 {
00298 double y1 = _lookup_table_0[i][38];
00299 double y2 = _lookup_table_0[i+1][38];
00300 return y1 + (y2-y1)*factor;
00301 }
00302
00303
00304 protected:
00305 FaberRudy2000Version3OptimisedLookupTables(const FaberRudy2000Version3OptimisedLookupTables&);
00306 FaberRudy2000Version3OptimisedLookupTables& operator= (const FaberRudy2000Version3OptimisedLookupTables&);
00307 FaberRudy2000Version3OptimisedLookupTables()
00308 {
00309 assert(mpInstance == NULL);
00310 for (int i=0; i<20001; i++)
00311 {
00312 double var_membrane__V = -100.0001 + i*0.01;
00313 _lookup_table_0[i][0] = 80.0 * exp((-var_membrane__V) * 0.0909090909091);
00314 }
00315
00316 for (int i=0; i<20001; i++)
00317 {
00318 double var_membrane__V = -100.0001 + i*0.01;
00319 _lookup_table_0[i][1] = (var_membrane__V < -40.0) ? (135.0 * exp((80.0 + var_membrane__V) * -0.147058823529)) : 0.0;
00320 }
00321
00322 for (int i=0; i<20001; i++)
00323 {
00324 double var_membrane__V = -100.0001 + i*0.01;
00325 _lookup_table_0[i][2] = (var_membrane__V < -40.0) ? ((3560.0 * exp(0.079 * var_membrane__V)) + (310000000.0 * exp(0.35 * var_membrane__V))) : (1000.0 / (0.13 * (1.0 + exp((var_membrane__V + 10.66) * -0.0900900900901))));
00326 }
00327
00328 for (int i=0; i<20001; i++)
00329 {
00330 double var_membrane__V = -100.0001 + i*0.01;
00331 _lookup_table_0[i][3] = (var_membrane__V < -40.0) ? ((1000.0 * (-((127140.0 * exp(0.2444 * var_membrane__V)) + (3.474e-05 * exp( -0.04391 * var_membrane__V)))) * (var_membrane__V + 37.78)) / (1.0 + exp(0.311 * (var_membrane__V + 79.23)))) : 0.0;
00332 }
00333
00334 for (int i=0; i<20001; i++)
00335 {
00336 double var_membrane__V = -100.0001 + i*0.01;
00337 _lookup_table_0[i][4] = (var_membrane__V < -40.0) ? ((121.2 * exp( -0.01052 * var_membrane__V)) / (1.0 + exp( -0.1378 * (var_membrane__V + 40.14)))) : ((300.0 * exp( -2.535e-07 * var_membrane__V)) / (1.0 + exp( -0.1 * (var_membrane__V + 32.0))));
00338 }
00339
00340 for (int i=0; i<20001; i++)
00341 {
00342 double var_membrane__V = -100.0001 + i*0.01;
00343 _lookup_table_0[i][5] = exp((2.0 * var_membrane__V * 96485.0) * 3.87996927064e-07);
00344 }
00345
00346 for (int i=0; i<20001; i++)
00347 {
00348 double var_membrane__V = -100.0001 + i*0.01;
00349 _lookup_table_0[i][6] = exp((2.0 * var_membrane__V * 96485.0) * 3.87996927064e-07) - 1.0;
00350 }
00351
00352 for (int i=0; i<20001; i++)
00353 {
00354 double var_membrane__V = -100.0001 + i*0.01;
00355 _lookup_table_0[i][7] = exp((1.0 * var_membrane__V * 96485.0) * 3.87996927064e-07);
00356 }
00357
00358 for (int i=0; i<20001; i++)
00359 {
00360 double var_membrane__V = -100.0001 + i*0.01;
00361 _lookup_table_0[i][8] = exp((1.0 * var_membrane__V * 96485.0) * 3.87996927064e-07) - 1.0;
00362 }
00363
00364 for (int i=0; i<20001; i++)
00365 {
00366 double var_membrane__V = -100.0001 + i*0.01;
00367 _lookup_table_0[i][9] = exp((1.0 * var_membrane__V * 96485.0) * 3.87996927064e-07);
00368 }
00369
00370 for (int i=0; i<20001; i++)
00371 {
00372 double var_membrane__V = -100.0001 + i*0.01;
00373 _lookup_table_0[i][10] = exp((1.0 * var_membrane__V * 96485.0) * 3.87996927064e-07) - 1.0;
00374 }
00375
00376 for (int i=0; i<20001; i++)
00377 {
00378 double var_membrane__V = -100.0001 + i*0.01;
00379 _lookup_table_0[i][11] = (1.0 / (1.0 + exp((var_membrane__V + 32.0) * 0.125))) + (0.6 / (1.0 + exp((50.0 - var_membrane__V) * 0.05)));
00380 }
00381
00382 for (int i=0; i<20001; i++)
00383 {
00384 double var_membrane__V = -100.0001 + i*0.01;
00385 _lookup_table_0[i][12] = 0.001 / ((0.0197 * exp(-pow(0.0337 * (var_membrane__V + 10.0), 2.0))) + 0.02);
00386 }
00387
00388 for (int i=0; i<20001; i++)
00389 {
00390 double var_membrane__V = -100.0001 + i*0.01;
00391 _lookup_table_0[i][13] = 1.0 / (1.0 + exp((-(var_membrane__V + 14.0)) * 0.0925925925926));
00392 }
00393
00394 for (int i=0; i<20001; i++)
00395 {
00396 double var_membrane__V = -100.0001 + i*0.01;
00397 _lookup_table_0[i][14] = 0.0037 + (0.0061 / (1.0 + exp((var_membrane__V + 25.0) * 0.222222222222)));
00398 }
00399
00400 for (int i=0; i<20001; i++)
00401 {
00402 double var_membrane__V = -100.0001 + i*0.01;
00403 _lookup_table_0[i][15] = 1.0 / (1.0 + exp((var_membrane__V + 60.0) * 0.178571428571));
00404 }
00405
00406 for (int i=0; i<20001; i++)
00407 {
00408 double var_membrane__V = -100.0001 + i*0.01;
00409 _lookup_table_0[i][16] = 1.0 / (1.0 + exp((var_membrane__V + 9.0) * 0.0446428571429));
00410 }
00411
00412 for (int i=0; i<20001; i++)
00413 {
00414 double var_membrane__V = -100.0001 + i*0.01;
00415 _lookup_table_0[i][17] = 1.0 / (1.0 + exp((-(var_membrane__V + 21.5)) * 0.133333333333));
00416 }
00417
00418 for (int i=0; i<20001; i++)
00419 {
00420 double var_membrane__V = -100.0001 + i*0.01;
00421 _lookup_table_0[i][18] = 0.001 / (((0.00138 * (var_membrane__V + 14.2)) / (1.0 - exp( -0.123 * (var_membrane__V + 14.2)))) + ((0.00061 * (var_membrane__V + 38.9)) / (exp(0.145 * (var_membrane__V + 38.9)) - 1.0)));
00422 }
00423
00424 for (int i=0; i<20001; i++)
00425 {
00426 double var_membrane__V = -100.0001 + i*0.01;
00427 _lookup_table_0[i][19] = 1.0 / (1.0 + exp((-(var_membrane__V - 1.5)) * 0.059880239521));
00428 }
00429
00430 for (int i=0; i<20001; i++)
00431 {
00432 double var_membrane__V = -100.0001 + i*0.01;
00433 _lookup_table_0[i][20] = 0.001 / (((7.19e-05 * (var_membrane__V + 30.0)) / (1.0 - exp( -0.148 * (var_membrane__V + 30.0)))) + ((0.000131 * (var_membrane__V + 30.0)) / (exp(0.0687 * (var_membrane__V + 30.0)) - 1.0)));
00434 }
00435
00436 for (int i=0; i<20001; i++)
00437 {
00438 double var_membrane__V = -100.0001 + i*0.01;
00439 _lookup_table_0[i][21] = 1.0 / (1.0 + exp((-(var_membrane__V - 1.5)) * 0.059880239521));
00440 }
00441
00442 for (int i=0; i<20001; i++)
00443 {
00444 double var_membrane__V = -100.0001 + i*0.01;
00445 _lookup_table_0[i][22] = 0.004 / (((7.19e-05 * (var_membrane__V + 30.0)) / (1.0 - exp( -0.148 * (var_membrane__V + 30.0)))) + ((0.000131 * (var_membrane__V + 30.0)) / (exp(0.0687 * (var_membrane__V + 30.0)) - 1.0)));
00446 }
00447
00448 for (int i=0; i<20001; i++)
00449 {
00450 double var_membrane__V = -100.0001 + i*0.01;
00451 _lookup_table_0[i][23] = 1.0 / (1.0 + exp((7.488 - var_membrane__V) * 0.167224080268));
00452 }
00453
00454 for (int i=0; i<20001; i++)
00455 {
00456 double var_membrane__V = -100.0001 + i*0.01;
00457 _lookup_table_0[i][24] = 0.8 - (0.65 / (1.0 + exp((var_membrane__V + 125.0) * 0.0666666666667)));
00458 }
00459
00460 for (int i=0; i<20001; i++)
00461 {
00462 double var_membrane__V = -100.0001 + i*0.01;
00463 _lookup_table_0[i][25] = exp(var_membrane__V * 0.01);
00464 }
00465
00466 for (int i=0; i<20001; i++)
00467 {
00468 double var_membrane__V = -100.0001 + i*0.01;
00469 _lookup_table_0[i][26] = (10000.0 * exp((var_membrane__V - 40.0) * 0.04)) / (1.0 + exp((var_membrane__V - 40.0) * 0.04));
00470 }
00471
00472 for (int i=0; i<20001; i++)
00473 {
00474 double var_membrane__V = -100.0001 + i*0.01;
00475 _lookup_table_0[i][27] = (10000.0 * exp((-(var_membrane__V + 90.0)) * 0.04)) / (1.0 + exp((-(var_membrane__V + 90.0)) * 0.04));
00476 }
00477
00478 for (int i=0; i<20001; i++)
00479 {
00480 double var_membrane__V = -100.0001 + i*0.01;
00481 _lookup_table_0[i][28] = 15.0 / (1.0 + exp((var_membrane__V + 60.0) * 0.2));
00482 }
00483
00484 for (int i=0; i<20001; i++)
00485 {
00486 double var_membrane__V = -100.0001 + i*0.01;
00487 _lookup_table_0[i][29] = (100.0 * exp((var_membrane__V + 25.0) * 0.2)) / (1.0 + exp((var_membrane__V + 25.0) * 0.2));
00488 }
00489
00490 for (int i=0; i<20001; i++)
00491 {
00492 double var_membrane__V = -100.0001 + i*0.01;
00493 _lookup_table_0[i][30] = 2.25 * (1.0 / (1.0 + (0.1245 * exp(( -0.1 * var_membrane__V * 96485.0) * 3.87996927064e-07)) + (0.0365 * 0.872719796652 * exp(((-var_membrane__V) * 96485.0) * 3.87996927064e-07)))) * 1.0;
00494 }
00495
00496 for (int i=0; i<20001; i++)
00497 {
00498 double var_membrane__V = -100.0001 + i*0.01;
00499 _lookup_table_0[i][31] = exp((1.0 * var_membrane__V * 96485.0) * 3.87996927064e-07);
00500 }
00501
00502 for (int i=0; i<20001; i++)
00503 {
00504 double var_membrane__V = -100.0001 + i*0.01;
00505 _lookup_table_0[i][32] = exp((1.0 * var_membrane__V * 96485.0) * 3.87996927064e-07) - 1.0;
00506 }
00507
00508 for (int i=0; i<20001; i++)
00509 {
00510 double var_membrane__V = -100.0001 + i*0.01;
00511 _lookup_table_0[i][33] = exp((1.0 * var_membrane__V * 96485.0) * 3.87996927064e-07);
00512 }
00513
00514 for (int i=0; i<20001; i++)
00515 {
00516 double var_membrane__V = -100.0001 + i*0.01;
00517 _lookup_table_0[i][34] = exp((1.0 * var_membrane__V * 96485.0) * 3.87996927064e-07) - 1.0;
00518 }
00519
00520 for (int i=0; i<20001; i++)
00521 {
00522 double var_membrane__V = -100.0001 + i*0.01;
00523 _lookup_table_0[i][35] = exp(( -0.85 * var_membrane__V * 96485.0) * 3.87996927064e-07);
00524 }
00525
00526 for (int i=0; i<20001; i++)
00527 {
00528 double var_membrane__V = -100.0001 + i*0.01;
00529 _lookup_table_0[i][36] = exp((var_membrane__V * 96485.0) * 3.87996927064e-07);
00530 }
00531
00532 for (int i=0; i<20001; i++)
00533 {
00534 double var_membrane__V = -100.0001 + i*0.01;
00535 _lookup_table_0[i][37] = exp(( -0.85 * var_membrane__V * 96485.0) * 3.87996927064e-07);
00536 }
00537
00538 for (int i=0; i<20001; i++)
00539 {
00540 double var_membrane__V = -100.0001 + i*0.01;
00541 _lookup_table_0[i][38] = exp((var_membrane__V * 96485.0) * 3.87996927064e-07);
00542 }
00543
00544 }
00545 private:
00547 static FaberRudy2000Version3OptimisedLookupTables *mpInstance;
00548
00549 double _lookup_table_0[20001][39];
00550
00551 };
00552
00553 FaberRudy2000Version3OptimisedLookupTables* FaberRudy2000Version3OptimisedLookupTables::mpInstance = NULL;
00554
00555 class FaberRudy2000Version3Optimised : public AbstractCardiacCell
00556 {
00557 public:
00558 FaberRudy2000Version3Optimised(AbstractIvpOdeSolver *pSolver,
00559 AbstractStimulusFunction *pIntracellularStimulus)
00560 : AbstractCardiacCell(pSolver, 25, 0, pIntracellularStimulus)
00561 {
00562
00563 mpSystemInfo = OdeSystemInformation<FaberRudy2000Version3Optimised>::Instance();
00564
00565 Init();
00566
00567 }
00568
00569 ~FaberRudy2000Version3Optimised(void)
00570 {
00571 }
00572
00573
00574 unsigned _table_index_0;
00575 double _factor_0;
00576
00577 double GetIIonic()
00578 {
00579 std::vector<double>& rY = rGetStateVariables();
00580 double var_membrane__V = rY[0];
00581
00582 double var_fast_sodium_current_m_gate__m = rY[1];
00583
00584 double var_fast_sodium_current_h_gate__h = rY[2];
00585
00586 double var_fast_sodium_current_j_gate__j = rY[3];
00587
00588 double var_L_type_Ca_channel_d_gate__d = rY[4];
00589
00590 double var_L_type_Ca_channel_f_gate__f = rY[5];
00591
00592 double var_T_type_Ca_channel_b_gate__b = rY[6];
00593
00594 double var_T_type_Ca_channel_g_gate__g = rY[7];
00595
00596 double var_rapid_delayed_rectifier_potassium_current_xr_gate__xr = rY[8];
00597
00598 double var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = rY[9];
00599
00600 double var_slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = rY[10];
00601
00602 double var_transient_outward_current_zdv_gate__zdv = rY[11];
00603
00604 double var_transient_outward_current_ydv_gate__ydv = rY[12];
00605
00606 double var_calcium_dynamics__Cai = rY[13];
00607
00608 double var_ionic_concentrations__Nai = rY[23];
00609
00610 double var_ionic_concentrations__Ki = rY[24];
00611
00612
00613
00614 #define COVERAGE_IGNORE
00615 if (var_membrane__V>99.9999 || var_membrane__V<-100.0001)
00616 EXCEPTION(DumpState("V outside lookup table range"));
00617 #undef COVERAGE_IGNORE
00618 double _offset_0 = var_membrane__V - -100.0001;
00619 double _offset_0_over_table_step = _offset_0 * 100.0;
00620 unsigned _table_index_0 = (unsigned) floor(_offset_0_over_table_step);
00621 double _factor_0 = _offset_0_over_table_step - _table_index_0;
00622
00623 double var_fast_sodium_current__E_Na = 26.7123387055 * log(132.0 / var_ionic_concentrations__Nai);
00624 double var_fast_sodium_current__i_Na = 16.0 * pow(var_fast_sodium_current_m_gate__m, 3.0) * var_fast_sodium_current_h_gate__h * var_fast_sodium_current_j_gate__j * (var_membrane__V - var_fast_sodium_current__E_Na);
00625 double var_membrane__i_Na = var_fast_sodium_current__i_Na;
00626 double var_L_type_Ca_channel_f_Ca_gate__f_Ca = 1.0 / (1.0 + (var_calcium_dynamics__Cai * 1666.66666667));
00627 double var_L_type_Ca_channel__i_CaCa = var_L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_gate__f * var_L_type_Ca_channel_f_Ca_gate__f_Ca * ((((0.00054 * 4.0 * var_membrane__V * 9309355225.0) * 3.87996927064e-07) * ((1.0 * var_calcium_dynamics__Cai * FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_5(_table_index_0, _factor_0)) - 0.6138)) / FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_6(_table_index_0, _factor_0));
00628 double var_L_type_Ca_channel__i_CaNa = var_L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_gate__f * var_L_type_Ca_channel_f_Ca_gate__f_Ca * ((((6.75e-07 * 1.0 * var_membrane__V * 9309355225.0) * 3.87996927064e-07) * ((0.75 * var_ionic_concentrations__Nai * FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_7(_table_index_0, _factor_0)) - 99.0)) / FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_8(_table_index_0, _factor_0));
00629 double var_L_type_Ca_channel__i_CaK = var_L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_gate__f * var_L_type_Ca_channel_f_Ca_gate__f_Ca * ((((1.93e-07 * 1.0 * var_membrane__V * 9309355225.0) * 3.87996927064e-07) * ((0.75 * var_ionic_concentrations__Ki * FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_9(_table_index_0, _factor_0)) - 3.375)) / FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_10(_table_index_0, _factor_0));
00630 double var_L_type_Ca_channel__i_Ca_L = var_L_type_Ca_channel__i_CaCa + var_L_type_Ca_channel__i_CaK + var_L_type_Ca_channel__i_CaNa;
00631 double var_membrane__i_Ca_L = var_L_type_Ca_channel__i_Ca_L;
00632 double var_calcium_background_current__E_Ca = 13.3561693527 * log(1.8 / var_calcium_dynamics__Cai);
00633 double var_T_type_Ca_channel__i_Ca_T = 0.05 * var_T_type_Ca_channel_b_gate__b * var_T_type_Ca_channel_b_gate__b * var_T_type_Ca_channel_g_gate__g * (var_membrane__V - var_calcium_background_current__E_Ca);
00634 double var_membrane__i_Ca_T = var_T_type_Ca_channel__i_Ca_T;
00635 double var_time_independent_potassium_current__E_K = 26.7123387055 * log(4.5 / var_ionic_concentrations__Ki);
00636 double var_rapid_delayed_rectifier_potassium_current__i_Kr = 0.0238624460886 * var_rapid_delayed_rectifier_potassium_current_xr_gate__xr * FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_16(_table_index_0, _factor_0) * (var_membrane__V - var_time_independent_potassium_current__E_K);
00637 double var_membrane__i_Kr = var_rapid_delayed_rectifier_potassium_current__i_Kr;
00638 double var_slow_delayed_rectifier_potassium_current__i_Ks = (0.433 * (1.0 + (0.6 / (1.0 + pow(3.8e-05 / var_calcium_dynamics__Cai, 1.4))))) * var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1 * var_slow_delayed_rectifier_potassium_current_xs2_gate__xs2 * (var_membrane__V - (26.7123387055 * log(6.91956 / (var_ionic_concentrations__Ki + (0.01833 * var_ionic_concentrations__Nai)))));
00639 double var_membrane__i_Ks = var_slow_delayed_rectifier_potassium_current__i_Ks;
00640 double var_sodium_activated_potassium_current__i_K_Na = 0.0 * (0.85 / (1.0 + pow(66.0 / var_ionic_concentrations__Nai, 2.8))) * FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_24(_table_index_0, _factor_0) * (var_membrane__V - var_time_independent_potassium_current__E_K);
00641 double var_membrane__i_K_Na = var_sodium_activated_potassium_current__i_K_Na;
00642 double var_ATP_sensitive_potassium_current__i_K_ATP = 2.75741043608e-08 * (var_membrane__V - var_time_independent_potassium_current__E_K);
00643 double var_membrane__i_K_ATP = var_ATP_sensitive_potassium_current__i_K_ATP;
00644 double var_transient_outward_current__i_to = 0.0 * pow(var_transient_outward_current_zdv_gate__zdv, 3.0) * var_transient_outward_current_ydv_gate__ydv * FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_25(_table_index_0, _factor_0) * (var_membrane__V - var_time_independent_potassium_current__E_K);
00645 double var_membrane__i_to = var_transient_outward_current__i_to;
00646 double var_Na_Ca_exchanger__i_NaCa = (0.00025 * FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_35(_table_index_0, _factor_0) * ((FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_36(_table_index_0, _factor_0) * pow(var_ionic_concentrations__Nai, 3.0) * 1.8) - (2299968.0 * var_calcium_dynamics__Cai))) / (1.0 + (0.0001 * FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_37(_table_index_0, _factor_0) * ((FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_38(_table_index_0, _factor_0) * pow(var_ionic_concentrations__Nai, 3.0) * 1.8) + (2299968.0 * var_calcium_dynamics__Cai))));
00647 double var_membrane__i_NaCa = var_Na_Ca_exchanger__i_NaCa;
00648 double var_time_independent_potassium_current_K1_gate__alpha_K1 = 1020.0 / (1.0 + exp(0.2385 * ((var_membrane__V - var_time_independent_potassium_current__E_K) - 59.215)));
00649 double var_time_independent_potassium_current__i_K1 = 0.684653196881 * (var_time_independent_potassium_current_K1_gate__alpha_K1 / (var_time_independent_potassium_current_K1_gate__alpha_K1 + ((1000.0 * ((0.49124 * exp(0.08032 * ((var_membrane__V - var_time_independent_potassium_current__E_K) + 5.476))) + exp(0.06175 * ((var_membrane__V - var_time_independent_potassium_current__E_K) - 594.31)))) / (1.0 + exp( -0.5143 * ((var_membrane__V - var_time_independent_potassium_current__E_K) + 4.753)))))) * (var_membrane__V - var_time_independent_potassium_current__E_K);
00650 double var_membrane__i_K1 = var_time_independent_potassium_current__i_K1;
00651 double var_plateau_potassium_current__i_Kp = 0.00552 * FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_23(_table_index_0, _factor_0) * (var_membrane__V - var_time_independent_potassium_current__E_K);
00652 double var_membrane__i_Kp = var_plateau_potassium_current__i_Kp;
00653 double var_sarcolemmal_calcium_pump__i_p_Ca = (1.15 * var_calcium_dynamics__Cai) / (0.0005 + var_calcium_dynamics__Cai);
00654 double var_membrane__i_p_Ca = var_sarcolemmal_calcium_pump__i_p_Ca;
00655 double var_sodium_background_current__i_Na_b = 0.004 * (var_membrane__V - var_fast_sodium_current__E_Na);
00656 double var_membrane__i_Na_b = var_sodium_background_current__i_Na_b;
00657 double var_calcium_background_current__i_Ca_b = 0.003016 * (var_membrane__V - var_calcium_background_current__E_Ca);
00658 double var_membrane__i_Ca_b = var_calcium_background_current__i_Ca_b;
00659 double var_sodium_potassium_pump__i_NaK = ((FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_30(_table_index_0, _factor_0) / (1.0 + pow(10.0 / var_ionic_concentrations__Nai, 2.0))) * 4.5) * 0.166666666667;
00660 double var_membrane__i_NaK = var_sodium_potassium_pump__i_NaK;
00661 double var_non_specific_calcium_activated_current__i_ns_Na = (((((0.0 * 1.0 * var_membrane__V * 9309355225.0) * 3.87996927064e-07) * ((0.75 * var_ionic_concentrations__Nai * FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_31(_table_index_0, _factor_0)) - 99.0)) / FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_32(_table_index_0, _factor_0)) * 1.0) / (1.0 + pow(0.0012 / var_calcium_dynamics__Cai, 3.0));
00662 double var_non_specific_calcium_activated_current__i_ns_K = (((((0.0 * 1.0 * var_membrane__V * 9309355225.0) * 3.87996927064e-07) * ((0.75 * var_ionic_concentrations__Ki * FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_33(_table_index_0, _factor_0)) - 3.375)) / FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_34(_table_index_0, _factor_0)) * 1.0) / (1.0 + pow(0.0012 / var_calcium_dynamics__Cai, 3.0));
00663 double var_non_specific_calcium_activated_current__i_ns_Ca = var_non_specific_calcium_activated_current__i_ns_Na + var_non_specific_calcium_activated_current__i_ns_K;
00664 double var_membrane__i_ns_Ca = var_non_specific_calcium_activated_current__i_ns_Ca;
00665
00666 return var_membrane__i_Na+var_membrane__i_Ca_L+var_membrane__i_Ca_T+var_membrane__i_Kr+var_membrane__i_Ks+var_membrane__i_K_Na+var_membrane__i_K_ATP+var_membrane__i_to+var_membrane__i_NaCa+var_membrane__i_K1+var_membrane__i_Kp+var_membrane__i_p_Ca+var_membrane__i_Na_b+var_membrane__i_Ca_b+var_membrane__i_NaK+var_membrane__i_ns_Ca;
00667 }
00668
00669 void EvaluateYDerivatives (
00670 double var_environment__time,
00671 const std::vector<double> &rY,
00672 std::vector<double> &rDY)
00673 {
00674
00675
00676 var_environment__time *= 1e-3;
00677 double var_membrane__V = rY[0];
00678
00679 double var_fast_sodium_current_m_gate__m = rY[1];
00680
00681 double var_fast_sodium_current_h_gate__h = rY[2];
00682
00683 double var_fast_sodium_current_j_gate__j = rY[3];
00684
00685 double var_L_type_Ca_channel_d_gate__d = rY[4];
00686
00687 double var_L_type_Ca_channel_f_gate__f = rY[5];
00688
00689 double var_T_type_Ca_channel_b_gate__b = rY[6];
00690
00691 double var_T_type_Ca_channel_g_gate__g = rY[7];
00692
00693 double var_rapid_delayed_rectifier_potassium_current_xr_gate__xr = rY[8];
00694
00695 double var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = rY[9];
00696
00697 double var_slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = rY[10];
00698
00699 double var_transient_outward_current_zdv_gate__zdv = rY[11];
00700
00701 double var_transient_outward_current_ydv_gate__ydv = rY[12];
00702
00703 double var_calcium_dynamics__Cai = rY[13];
00704
00705 double var_calcium_dynamics__Ca_JSR = rY[14];
00706
00707 double var_calcium_dynamics__Ca_NSR = rY[15];
00708
00709 double var_calcium_dynamics__APtrack = rY[16];
00710
00711 double var_calcium_dynamics__APtrack2 = rY[17];
00712
00713 double var_calcium_dynamics__APtrack3 = rY[18];
00714
00715 double var_calcium_dynamics__Cainfluxtrack = rY[19];
00716
00717 double var_calcium_dynamics__OVRLDtrack = rY[20];
00718
00719 double var_calcium_dynamics__OVRLDtrack2 = rY[21];
00720
00721 double var_calcium_dynamics__OVRLDtrack3 = rY[22];
00722
00723 double var_ionic_concentrations__Nai = rY[23];
00724
00725 double var_ionic_concentrations__Ki = rY[24];
00726
00727
00728
00729
00730 #define COVERAGE_IGNORE
00731 if (var_membrane__V>99.9999 || var_membrane__V<-100.0001)
00732 EXCEPTION(DumpState("V outside lookup table range"));
00733 #undef COVERAGE_IGNORE
00734 double _offset_0 = var_membrane__V - -100.0001;
00735 double _offset_0_over_table_step = _offset_0 * 100.0;
00736 unsigned _table_index_0 = (unsigned) floor(_offset_0_over_table_step);
00737 double _factor_0 = _offset_0_over_table_step - _table_index_0;
00738
00739
00740 double var_membrane__I_st = GetStimulus(var_environment__time*1000);
00741 double var_fast_sodium_current__E_Na = 26.7123387055 * log(132.0 / var_ionic_concentrations__Nai);
00742 double var_fast_sodium_current__i_Na = 16.0 * pow(var_fast_sodium_current_m_gate__m, 3.0) * var_fast_sodium_current_h_gate__h * var_fast_sodium_current_j_gate__j * (var_membrane__V - var_fast_sodium_current__E_Na);
00743 double var_membrane__i_Na = var_fast_sodium_current__i_Na;
00744 double var_L_type_Ca_channel_f_Ca_gate__f_Ca = 1.0 / (1.0 + (var_calcium_dynamics__Cai * 1666.66666667));
00745 double var_L_type_Ca_channel__i_CaCa = var_L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_gate__f * var_L_type_Ca_channel_f_Ca_gate__f_Ca * ((((0.00054 * 4.0 * var_membrane__V * 9309355225.0) * 3.87996927064e-07) * ((1.0 * var_calcium_dynamics__Cai * FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_5(_table_index_0, _factor_0)) - 0.6138)) / FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_6(_table_index_0, _factor_0));
00746 double var_L_type_Ca_channel__i_CaNa = var_L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_gate__f * var_L_type_Ca_channel_f_Ca_gate__f_Ca * ((((6.75e-07 * 1.0 * var_membrane__V * 9309355225.0) * 3.87996927064e-07) * ((0.75 * var_ionic_concentrations__Nai * FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_7(_table_index_0, _factor_0)) - 99.0)) / FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_8(_table_index_0, _factor_0));
00747 double var_L_type_Ca_channel__i_CaK = var_L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_gate__f * var_L_type_Ca_channel_f_Ca_gate__f_Ca * ((((1.93e-07 * 1.0 * var_membrane__V * 9309355225.0) * 3.87996927064e-07) * ((0.75 * var_ionic_concentrations__Ki * FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_9(_table_index_0, _factor_0)) - 3.375)) / FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_10(_table_index_0, _factor_0));
00748 double var_L_type_Ca_channel__i_Ca_L = var_L_type_Ca_channel__i_CaCa + var_L_type_Ca_channel__i_CaK + var_L_type_Ca_channel__i_CaNa;
00749 double var_membrane__i_Ca_L = var_L_type_Ca_channel__i_Ca_L;
00750 double var_calcium_background_current__E_Ca = 13.3561693527 * log(1.8 / var_calcium_dynamics__Cai);
00751 double var_T_type_Ca_channel__i_Ca_T = 0.05 * var_T_type_Ca_channel_b_gate__b * var_T_type_Ca_channel_b_gate__b * var_T_type_Ca_channel_g_gate__g * (var_membrane__V - var_calcium_background_current__E_Ca);
00752 double var_membrane__i_Ca_T = var_T_type_Ca_channel__i_Ca_T;
00753 double var_time_independent_potassium_current__E_K = 26.7123387055 * log(4.5 / var_ionic_concentrations__Ki);
00754 double var_rapid_delayed_rectifier_potassium_current__i_Kr = 0.0238624460886 * var_rapid_delayed_rectifier_potassium_current_xr_gate__xr * FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_16(_table_index_0, _factor_0) * (var_membrane__V - var_time_independent_potassium_current__E_K);
00755 double var_membrane__i_Kr = var_rapid_delayed_rectifier_potassium_current__i_Kr;
00756 double var_slow_delayed_rectifier_potassium_current__i_Ks = (0.433 * (1.0 + (0.6 / (1.0 + pow(3.8e-05 / var_calcium_dynamics__Cai, 1.4))))) * var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1 * var_slow_delayed_rectifier_potassium_current_xs2_gate__xs2 * (var_membrane__V - (26.7123387055 * log(6.91956 / (var_ionic_concentrations__Ki + (0.01833 * var_ionic_concentrations__Nai)))));
00757 double var_membrane__i_Ks = var_slow_delayed_rectifier_potassium_current__i_Ks;
00758 double var_sodium_activated_potassium_current__i_K_Na = 0.0 * (0.85 / (1.0 + pow(66.0 / var_ionic_concentrations__Nai, 2.8))) * FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_24(_table_index_0, _factor_0) * (var_membrane__V - var_time_independent_potassium_current__E_K);
00759 double var_membrane__i_K_Na = var_sodium_activated_potassium_current__i_K_Na;
00760 double var_ATP_sensitive_potassium_current__i_K_ATP = 2.75741043608e-08 * (var_membrane__V - var_time_independent_potassium_current__E_K);
00761 double var_membrane__i_K_ATP = var_ATP_sensitive_potassium_current__i_K_ATP;
00762 double var_transient_outward_current__i_to = 0.0 * pow(var_transient_outward_current_zdv_gate__zdv, 3.0) * var_transient_outward_current_ydv_gate__ydv * FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_25(_table_index_0, _factor_0) * (var_membrane__V - var_time_independent_potassium_current__E_K);
00763 double var_membrane__i_to = var_transient_outward_current__i_to;
00764 double var_Na_Ca_exchanger__i_NaCa = (0.00025 * FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_35(_table_index_0, _factor_0) * ((FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_36(_table_index_0, _factor_0) * pow(var_ionic_concentrations__Nai, 3.0) * 1.8) - (2299968.0 * var_calcium_dynamics__Cai))) / (1.0 + (0.0001 * FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_37(_table_index_0, _factor_0) * ((FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_38(_table_index_0, _factor_0) * pow(var_ionic_concentrations__Nai, 3.0) * 1.8) + (2299968.0 * var_calcium_dynamics__Cai))));
00765 double var_membrane__i_NaCa = var_Na_Ca_exchanger__i_NaCa;
00766 double var_time_independent_potassium_current_K1_gate__alpha_K1 = 1020.0 / (1.0 + exp(0.2385 * ((var_membrane__V - var_time_independent_potassium_current__E_K) - 59.215)));
00767 double var_time_independent_potassium_current__i_K1 = 0.684653196881 * (var_time_independent_potassium_current_K1_gate__alpha_K1 / (var_time_independent_potassium_current_K1_gate__alpha_K1 + ((1000.0 * ((0.49124 * exp(0.08032 * ((var_membrane__V - var_time_independent_potassium_current__E_K) + 5.476))) + exp(0.06175 * ((var_membrane__V - var_time_independent_potassium_current__E_K) - 594.31)))) / (1.0 + exp( -0.5143 * ((var_membrane__V - var_time_independent_potassium_current__E_K) + 4.753)))))) * (var_membrane__V - var_time_independent_potassium_current__E_K);
00768 double var_membrane__i_K1 = var_time_independent_potassium_current__i_K1;
00769 double var_plateau_potassium_current__i_Kp = 0.00552 * FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_23(_table_index_0, _factor_0) * (var_membrane__V - var_time_independent_potassium_current__E_K);
00770 double var_membrane__i_Kp = var_plateau_potassium_current__i_Kp;
00771 double var_sarcolemmal_calcium_pump__i_p_Ca = (1.15 * var_calcium_dynamics__Cai) / (0.0005 + var_calcium_dynamics__Cai);
00772 double var_membrane__i_p_Ca = var_sarcolemmal_calcium_pump__i_p_Ca;
00773 double var_sodium_background_current__i_Na_b = 0.004 * (var_membrane__V - var_fast_sodium_current__E_Na);
00774 double var_membrane__i_Na_b = var_sodium_background_current__i_Na_b;
00775 double var_calcium_background_current__i_Ca_b = 0.003016 * (var_membrane__V - var_calcium_background_current__E_Ca);
00776 double var_membrane__i_Ca_b = var_calcium_background_current__i_Ca_b;
00777 double var_sodium_potassium_pump__i_NaK = ((FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_30(_table_index_0, _factor_0) / (1.0 + pow(10.0 / var_ionic_concentrations__Nai, 2.0))) * 4.5) * 0.166666666667;
00778 double var_membrane__i_NaK = var_sodium_potassium_pump__i_NaK;
00779 double var_non_specific_calcium_activated_current__i_ns_Na = (((((0.0 * 1.0 * var_membrane__V * 9309355225.0) * 3.87996927064e-07) * ((0.75 * var_ionic_concentrations__Nai * FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_31(_table_index_0, _factor_0)) - 99.0)) / FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_32(_table_index_0, _factor_0)) * 1.0) / (1.0 + pow(0.0012 / var_calcium_dynamics__Cai, 3.0));
00780 double var_non_specific_calcium_activated_current__i_ns_K = (((((0.0 * 1.0 * var_membrane__V * 9309355225.0) * 3.87996927064e-07) * ((0.75 * var_ionic_concentrations__Ki * FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_33(_table_index_0, _factor_0)) - 3.375)) / FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_34(_table_index_0, _factor_0)) * 1.0) / (1.0 + pow(0.0012 / var_calcium_dynamics__Cai, 3.0));
00781 double var_non_specific_calcium_activated_current__i_ns_Ca = var_non_specific_calcium_activated_current__i_ns_Na + var_non_specific_calcium_activated_current__i_ns_K;
00782 double var_membrane__i_ns_Ca = var_non_specific_calcium_activated_current__i_ns_Ca;
00783 double var_fast_sodium_current_m_gate__E0_m = var_membrane__V + 47.13;
00784 double var_L_type_Ca_channel_d_gate__E0_d = var_membrane__V + 10.0;
00785 double var_L_type_Ca_channel_d_gate__d_infinity = 1.0 / (1.0 + exp((-var_L_type_Ca_channel_d_gate__E0_d) * 0.160256410256));
00786 double var_L_type_Ca_channel_d_gate__tau_d = (fabs(var_L_type_Ca_channel_d_gate__E0_d) < 1e-05) ? 0.00457875457875 : ((0.001 * var_L_type_Ca_channel_d_gate__d_infinity * (1.0 - exp((-var_L_type_Ca_channel_d_gate__E0_d) * 0.160256410256))) / (0.035 * var_L_type_Ca_channel_d_gate__E0_d));
00787 double var_L_type_Ca_channel_f_gate__f_infinity = FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_11(_table_index_0, _factor_0);
00788 double var_L_type_Ca_channel_f_gate__tau_f = FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_12(_table_index_0, _factor_0);
00789 double var_transient_outward_current_zdv_gate__alpha_zdv = FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_26(_table_index_0, _factor_0);
00790 double var_transient_outward_current_zdv_gate__beta_zdv = FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_27(_table_index_0, _factor_0);
00791 double var_transient_outward_current_ydv_gate__alpha_ydv = FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_28(_table_index_0, _factor_0);
00792 double var_transient_outward_current_ydv_gate__beta_ydv = FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_29(_table_index_0, _factor_0);
00793 double var_calcium_dynamics__i_rel = ((var_calcium_dynamics__Cainfluxtrack > 0.00018) ? (((60000.0 * (var_calcium_dynamics__Cainfluxtrack - 0.00018)) / ((0.0008 + var_calcium_dynamics__Cainfluxtrack) - 0.00018)) * (1.0 - var_calcium_dynamics__APtrack2) * var_calcium_dynamics__APtrack2) : ((var_calcium_dynamics__Cainfluxtrack <= 0.00018) && (var_calcium_dynamics__OVRLDtrack2 > 0.0)) ? (4000.0 * (1.0 - var_calcium_dynamics__OVRLDtrack2) * var_calcium_dynamics__OVRLDtrack2) : 0.0) * (var_calcium_dynamics__Ca_JSR - var_calcium_dynamics__Cai);
00794 double var_calcium_dynamics__i_up = (8.75 * var_calcium_dynamics__Cai) / (var_calcium_dynamics__Cai + 0.00092);
00795 double var_calcium_dynamics__i_leak = 0.583333333333 * var_calcium_dynamics__Ca_NSR;
00796 double var_calcium_dynamics__i_tr = (var_calcium_dynamics__Ca_NSR - var_calcium_dynamics__Ca_JSR) * 5.55555555556;
00797 double d_dt_membrane__V;
00798 if (mSetVoltageDerivativeToZero)
00799 {
00800 d_dt_membrane__V = 0.0;
00801 }
00802 else
00803 {
00804 d_dt_membrane__V = -1000.0 * (var_membrane__i_Na + var_membrane__i_Ca_L + var_membrane__i_Ca_T + var_membrane__i_Kr + var_membrane__i_Ks + var_membrane__i_K_Na + var_membrane__i_K_ATP + var_membrane__i_to + var_membrane__i_K1 + var_membrane__i_Kp + var_membrane__i_NaCa + var_membrane__i_p_Ca + var_membrane__i_Na_b + var_membrane__i_Ca_b + var_membrane__i_NaK + var_membrane__i_ns_Ca + var_membrane__I_st);
00805 }
00806 double d_dt_fast_sodium_current_m_gate__m = (((fabs(var_fast_sodium_current_m_gate__E0_m) >= 1e-05) ? ((320.0 * var_fast_sodium_current_m_gate__E0_m) / (1.0 - exp( -0.1 * var_fast_sodium_current_m_gate__E0_m))) : 3200.0) * (1.0 - var_fast_sodium_current_m_gate__m)) - (FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_0(_table_index_0, _factor_0) * var_fast_sodium_current_m_gate__m);
00807 double d_dt_fast_sodium_current_h_gate__h = (FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_1(_table_index_0, _factor_0) * (1.0 - var_fast_sodium_current_h_gate__h)) - (FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_2(_table_index_0, _factor_0) * var_fast_sodium_current_h_gate__h);
00808 double d_dt_fast_sodium_current_j_gate__j = (FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_3(_table_index_0, _factor_0) * (1.0 - var_fast_sodium_current_j_gate__j)) - (FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_4(_table_index_0, _factor_0) * var_fast_sodium_current_j_gate__j);
00809 double d_dt_L_type_Ca_channel_d_gate__d = ((var_L_type_Ca_channel_d_gate__d_infinity / var_L_type_Ca_channel_d_gate__tau_d) * (1.0 - var_L_type_Ca_channel_d_gate__d)) - (((1.0 - var_L_type_Ca_channel_d_gate__d_infinity) / var_L_type_Ca_channel_d_gate__tau_d) * var_L_type_Ca_channel_d_gate__d);
00810 double d_dt_L_type_Ca_channel_f_gate__f = ((var_L_type_Ca_channel_f_gate__f_infinity / var_L_type_Ca_channel_f_gate__tau_f) * (1.0 - var_L_type_Ca_channel_f_gate__f)) - (((1.0 - var_L_type_Ca_channel_f_gate__f_infinity) / var_L_type_Ca_channel_f_gate__tau_f) * var_L_type_Ca_channel_f_gate__f);
00811 double d_dt_T_type_Ca_channel_b_gate__b = (FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_13(_table_index_0, _factor_0) - var_T_type_Ca_channel_b_gate__b) / FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_14(_table_index_0, _factor_0);
00812 double d_dt_T_type_Ca_channel_g_gate__g = (FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_15(_table_index_0, _factor_0) - var_T_type_Ca_channel_g_gate__g) / ((var_membrane__V <= 0.0) ? (( -0.000875 * var_membrane__V) + 0.012) : 0.012);
00813 double d_dt_rapid_delayed_rectifier_potassium_current_xr_gate__xr = (FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_17(_table_index_0, _factor_0) - var_rapid_delayed_rectifier_potassium_current_xr_gate__xr) / FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_18(_table_index_0, _factor_0);
00814 double d_dt_slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = (FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_19(_table_index_0, _factor_0) - var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1) / FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_20(_table_index_0, _factor_0);
00815 double d_dt_slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = (FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_21(_table_index_0, _factor_0) - var_slow_delayed_rectifier_potassium_current_xs2_gate__xs2) / FaberRudy2000Version3OptimisedLookupTables::Instance()->_lookup_22(_table_index_0, _factor_0);
00816 double d_dt_transient_outward_current_zdv_gate__zdv = ((var_transient_outward_current_zdv_gate__alpha_zdv / (var_transient_outward_current_zdv_gate__alpha_zdv + var_transient_outward_current_zdv_gate__beta_zdv)) - var_transient_outward_current_zdv_gate__zdv) / (1.0 / (var_transient_outward_current_zdv_gate__alpha_zdv + var_transient_outward_current_zdv_gate__beta_zdv));
00817 double d_dt_transient_outward_current_ydv_gate__ydv = ((var_transient_outward_current_ydv_gate__alpha_ydv / (var_transient_outward_current_ydv_gate__alpha_ydv + var_transient_outward_current_ydv_gate__beta_ydv)) - var_transient_outward_current_ydv_gate__ydv) / (1.0 / (var_transient_outward_current_ydv_gate__alpha_ydv + var_transient_outward_current_ydv_gate__beta_ydv));
00818 double d_dt_calcium_dynamics__APtrack = (( -1000.0 * (var_membrane__i_Na + var_membrane__i_Ca_L + var_membrane__i_Ca_T + var_membrane__i_Kr + var_membrane__i_Ks + var_membrane__i_K_Na + var_membrane__i_K_ATP + var_membrane__i_to + var_membrane__i_K1 + var_membrane__i_Kp + var_membrane__i_NaCa + var_membrane__i_p_Ca + var_membrane__i_Na_b + var_membrane__i_Ca_b + var_membrane__i_NaK + var_membrane__i_ns_Ca + var_membrane__I_st)) > 150000.0) ? ((100000.0 * (1.0 - var_calcium_dynamics__APtrack)) - (500.0 * var_calcium_dynamics__APtrack)) : ( -500.0 * var_calcium_dynamics__APtrack);
00819 double d_dt_calcium_dynamics__APtrack2 = ((var_calcium_dynamics__APtrack < 0.2) && (var_calcium_dynamics__APtrack > 0.18)) ? ((100000.0 * (1.0 - var_calcium_dynamics__APtrack2)) - (500.0 * var_calcium_dynamics__APtrack2)) : ( -500.0 * var_calcium_dynamics__APtrack2);
00820 double d_dt_calcium_dynamics__APtrack3 = ((var_calcium_dynamics__APtrack < 0.2) && (var_calcium_dynamics__APtrack > 0.18)) ? ((100000.0 * (1.0 - var_calcium_dynamics__APtrack3)) - (500.0 * var_calcium_dynamics__APtrack3)) : ( -10.0 * var_calcium_dynamics__APtrack3);
00821 double d_dt_calcium_dynamics__Cainfluxtrack = (var_calcium_dynamics__APtrack > 0.2) ? (( -1.434e-07 * (((var_L_type_Ca_channel__i_CaCa + var_T_type_Ca_channel__i_Ca_T) - var_Na_Ca_exchanger__i_NaCa) + var_sarcolemmal_calcium_pump__i_p_Ca + var_calcium_background_current__i_Ca_b)) * 200477.689034) : ((var_calcium_dynamics__APtrack2 > 0.01) && (var_calcium_dynamics__APtrack <= 0.2)) ? 0.0 : ( -500.0 * var_calcium_dynamics__Cainfluxtrack);
00822 double d_dt_calcium_dynamics__OVRLDtrack = (((1.0 / (1.0 + (0.8 / var_calcium_dynamics__Ca_JSR))) > 0.7) && (var_calcium_dynamics__OVRLDtrack3 < 0.37) && (var_calcium_dynamics__APtrack3 < 0.37)) ? (50000.0 * (1.0 - var_calcium_dynamics__OVRLDtrack)) : ( -500.0 * var_calcium_dynamics__OVRLDtrack);
00823 double d_dt_calcium_dynamics__OVRLDtrack2 = ((var_calcium_dynamics__OVRLDtrack > 0.98) && (var_calcium_dynamics__OVRLDtrack2 < 0.98)) ? (50000.0 * (1.0 - var_calcium_dynamics__OVRLDtrack2)) : ( -500.0 * var_calcium_dynamics__OVRLDtrack2);
00824 double d_dt_calcium_dynamics__OVRLDtrack3 = ((var_calcium_dynamics__OVRLDtrack > 0.98) && (var_calcium_dynamics__OVRLDtrack3 < 0.98)) ? (50000.0 * (1.0 - var_calcium_dynamics__OVRLDtrack3)) : ( -10.0 * var_calcium_dynamics__OVRLDtrack3);
00825 double d_dt_calcium_dynamics__Ca_JSR = (1.0 / (1.0 + (8.0 / pow(0.8 + var_calcium_dynamics__Ca_JSR, 2.0)))) * (var_calcium_dynamics__i_tr - var_calcium_dynamics__i_rel);
00826 double d_dt_calcium_dynamics__Ca_NSR = ((((-var_calcium_dynamics__i_tr) * 1.8246370132e-13) * 476568879782.0) - var_calcium_dynamics__i_leak) + var_calcium_dynamics__i_up;
00827 double d_dt_calcium_dynamics__Cai = (1.0 / (1.0 + (0.000119 / pow(0.00238 + var_calcium_dynamics__Cai, 2.0)) + (3.5e-05 / pow(0.0005 + var_calcium_dynamics__Cai, 2.0)))) * ((( -1.434e-07 * (((var_L_type_Ca_channel__i_CaCa + var_T_type_Ca_channel__i_Ca_T) - (2.0 * var_Na_Ca_exchanger__i_NaCa)) + var_sarcolemmal_calcium_pump__i_p_Ca + var_calcium_background_current__i_Ca_b)) * 200477.689034) + ((var_calcium_dynamics__i_rel * 1.8246370132e-13) * 38686179652.9) + (((var_calcium_dynamics__i_leak - var_calcium_dynamics__i_up) * 2.09833256519e-12) * 38686179652.9));
00828 double d_dt_ionic_concentrations__Nai = ((-(var_fast_sodium_current__i_Na + var_L_type_Ca_channel__i_CaNa + var_sodium_background_current__i_Na_b + var_non_specific_calcium_activated_current__i_ns_Na + (var_Na_Ca_exchanger__i_NaCa * 3.0) + (var_sodium_potassium_pump__i_NaK * 3.0))) * 1.434e-07) * 400955.378068;
00829 double d_dt_ionic_concentrations__Ki = ((-(var_L_type_Ca_channel__i_CaK + var_rapid_delayed_rectifier_potassium_current__i_Kr + var_slow_delayed_rectifier_potassium_current__i_Ks + var_time_independent_potassium_current__i_K1 + var_plateau_potassium_current__i_Kp + var_sodium_activated_potassium_current__i_K_Na + var_ATP_sensitive_potassium_current__i_K_ATP + var_transient_outward_current__i_to + var_non_specific_calcium_activated_current__i_ns_K + ((-var_sodium_potassium_pump__i_NaK) * 2.0))) * 1.434e-07) * 400955.378068;
00830
00831 rDY[0] = d_dt_membrane__V*1e-3;
00832 rDY[1] = d_dt_fast_sodium_current_m_gate__m*1e-3;
00833 rDY[2] = d_dt_fast_sodium_current_h_gate__h*1e-3;
00834 rDY[3] = d_dt_fast_sodium_current_j_gate__j*1e-3;
00835 rDY[4] = d_dt_L_type_Ca_channel_d_gate__d*1e-3;
00836 rDY[5] = d_dt_L_type_Ca_channel_f_gate__f*1e-3;
00837 rDY[6] = d_dt_T_type_Ca_channel_b_gate__b*1e-3;
00838 rDY[7] = d_dt_T_type_Ca_channel_g_gate__g*1e-3;
00839 rDY[8] = d_dt_rapid_delayed_rectifier_potassium_current_xr_gate__xr*1e-3;
00840 rDY[9] = d_dt_slow_delayed_rectifier_potassium_current_xs1_gate__xs1*1e-3;
00841 rDY[10] = d_dt_slow_delayed_rectifier_potassium_current_xs2_gate__xs2*1e-3;
00842 rDY[11] = d_dt_transient_outward_current_zdv_gate__zdv*1e-3;
00843 rDY[12] = d_dt_transient_outward_current_ydv_gate__ydv*1e-3;
00844 rDY[13] = d_dt_calcium_dynamics__Cai*1e-3;
00845 rDY[14] = d_dt_calcium_dynamics__Ca_JSR*1e-3;
00846 rDY[15] = d_dt_calcium_dynamics__Ca_NSR*1e-3;
00847 rDY[16] = d_dt_calcium_dynamics__APtrack*1e-3;
00848 rDY[17] = d_dt_calcium_dynamics__APtrack2*1e-3;
00849 rDY[18] = d_dt_calcium_dynamics__APtrack3*1e-3;
00850 rDY[19] = d_dt_calcium_dynamics__Cainfluxtrack*1e-3;
00851 rDY[20] = d_dt_calcium_dynamics__OVRLDtrack*1e-3;
00852 rDY[21] = d_dt_calcium_dynamics__OVRLDtrack2*1e-3;
00853 rDY[22] = d_dt_calcium_dynamics__OVRLDtrack3*1e-3;
00854 rDY[23] = d_dt_ionic_concentrations__Nai*1e-3;
00855 rDY[24] = d_dt_ionic_concentrations__Ki*1e-3;
00856 }
00857
00858 };
00859
00860
00861 template<>
00862 void OdeSystemInformation<FaberRudy2000Version3Optimised>::Initialise(void)
00863 {
00864 this->mVariableNames.push_back("V");
00865 this->mVariableUnits.push_back("millivolt");
00866 this->mInitialConditions.push_back(-90);
00867
00868 this->mVariableNames.push_back("m");
00869 this->mVariableUnits.push_back("dimensionless");
00870 this->mInitialConditions.push_back(0.0008);
00871
00872 this->mVariableNames.push_back("h");
00873 this->mVariableUnits.push_back("dimensionless");
00874 this->mInitialConditions.push_back(0.993771);
00875
00876 this->mVariableNames.push_back("j");
00877 this->mVariableUnits.push_back("dimensionless");
00878 this->mInitialConditions.push_back(0.995727);
00879
00880 this->mVariableNames.push_back("d");
00881 this->mVariableUnits.push_back("dimensionless");
00882 this->mInitialConditions.push_back(3.210618e-6);
00883
00884 this->mVariableNames.push_back("f");
00885 this->mVariableUnits.push_back("dimensionless");
00886 this->mInitialConditions.push_back(0.999837);
00887
00888 this->mVariableNames.push_back("b");
00889 this->mVariableUnits.push_back("dimensionless");
00890 this->mInitialConditions.push_back(0.000970231);
00891
00892 this->mVariableNames.push_back("g");
00893 this->mVariableUnits.push_back("dimensionless");
00894 this->mInitialConditions.push_back(0.994305);
00895
00896 this->mVariableNames.push_back("xr");
00897 this->mVariableUnits.push_back("dimensionless");
00898 this->mInitialConditions.push_back(0.000124042);
00899
00900 this->mVariableNames.push_back("xs1");
00901 this->mVariableUnits.push_back("dimensionless");
00902 this->mInitialConditions.push_back(0.00445683);
00903
00904 this->mVariableNames.push_back("xs2");
00905 this->mVariableUnits.push_back("dimensionless");
00906 this->mInitialConditions.push_back(0.00445683);
00907
00908 this->mVariableNames.push_back("zdv");
00909 this->mVariableUnits.push_back("dimensionless");
00910 this->mInitialConditions.push_back(0.5);
00911
00912 this->mVariableNames.push_back("ydv");
00913 this->mVariableUnits.push_back("dimensionless");
00914 this->mInitialConditions.push_back(0.5);
00915
00916 this->mVariableNames.push_back("CaI");
00917 this->mVariableUnits.push_back("millimolar");
00918 this->mInitialConditions.push_back(6e-5);
00919
00920 this->mVariableNames.push_back("Ca_JSR");
00921 this->mVariableUnits.push_back("millimolar");
00922 this->mInitialConditions.push_back(1.8);
00923
00924 this->mVariableNames.push_back("Ca_NSR");
00925 this->mVariableUnits.push_back("millimolar");
00926 this->mInitialConditions.push_back(1.8);
00927
00928 this->mVariableNames.push_back("APtrack");
00929 this->mVariableUnits.push_back("dimensionless");
00930 this->mInitialConditions.push_back(0);
00931
00932 this->mVariableNames.push_back("APtrack2");
00933 this->mVariableUnits.push_back("dimensionless");
00934 this->mInitialConditions.push_back(0);
00935
00936 this->mVariableNames.push_back("APtrack3");
00937 this->mVariableUnits.push_back("dimensionless");
00938 this->mInitialConditions.push_back(0);
00939
00940 this->mVariableNames.push_back("Cainfluxtrack");
00941 this->mVariableUnits.push_back("dimensionless");
00942 this->mInitialConditions.push_back(0);
00943
00944 this->mVariableNames.push_back("OVRLDtrack");
00945 this->mVariableUnits.push_back("dimensionless");
00946 this->mInitialConditions.push_back(0);
00947
00948 this->mVariableNames.push_back("OVRLDtrack2");
00949 this->mVariableUnits.push_back("dimensionless");
00950 this->mInitialConditions.push_back(0);
00951
00952 this->mVariableNames.push_back("OVRLDtrack3");
00953 this->mVariableUnits.push_back("dimensionless");
00954 this->mInitialConditions.push_back(0);
00955
00956 this->mVariableNames.push_back("Nai");
00957 this->mVariableUnits.push_back("millimolar");
00958 this->mInitialConditions.push_back(9);
00959
00960 this->mVariableNames.push_back("Ki");
00961 this->mVariableUnits.push_back("millimolar");
00962 this->mInitialConditions.push_back(141.2);
00963
00964 this->mInitialised = true;
00965 }
00966
00967 #endif