12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445 |
- // #ifdef __cplusplus
- // extern "C" {
- // #endif
- //========================================================================================================================================================================================================200
- // DEFINE/INCLUDE
- //========================================================================================================================================================================================================200
- //======================================================================================================================================================150
- // DEFINE (need to define because cannot include ../common.h file for some reason
- //======================================================================================================================================================150
- #define fp float
- //======================================================================================================================================================150
- // END
- //======================================================================================================================================================150
- //========================================================================================================================================================================================================200
- // KERNEL_ECC
- //========================================================================================================================================================================================================200
- void
- kernel_ecc( fp timeinst,
- __global fp *d_initvalu,
- __global fp *d_finavalu,
- int valu_offset,
- __global fp *d_params){
- //=====================================================================
- // VARIABLES
- //=====================================================================
- // input parameters
- fp cycleLength;
- // variable references // GET VARIABLES FROM MEMORY AND SAVE LOCALLY !!!!!!!!!!!!!!!!!!
- int offset_1;
- int offset_2;
- int offset_3;
- int offset_4;
- int offset_5;
- int offset_6;
- int offset_7;
- int offset_8;
- int offset_9;
- int offset_10;
- int offset_11;
- int offset_12;
- int offset_13;
- int offset_14;
- int offset_15;
- int offset_16;
- int offset_17;
- int offset_18;
- int offset_19;
- int offset_20;
- int offset_21;
- int offset_22;
- int offset_23;
- int offset_24;
- int offset_25;
- int offset_26;
- int offset_27;
- int offset_28;
- int offset_29;
- int offset_30;
- int offset_31;
- int offset_32;
- int offset_33;
- int offset_34;
- int offset_35;
- int offset_36;
- int offset_37;
- int offset_38;
- int offset_39;
- int offset_40;
- int offset_41;
- int offset_42;
- int offset_43;
- int offset_44;
- int offset_45;
- int offset_46;
- // stored input array
- fp d_initvalu_1;
- fp d_initvalu_2;
- fp d_initvalu_3;
- fp d_initvalu_4;
- fp d_initvalu_5;
- fp d_initvalu_6;
- fp d_initvalu_7;
- fp d_initvalu_8;
- fp d_initvalu_9;
- fp d_initvalu_10;
- fp d_initvalu_11;
- fp d_initvalu_12;
- fp d_initvalu_13;
- fp d_initvalu_14;
- fp d_initvalu_15;
- fp d_initvalu_16;
- fp d_initvalu_17;
- fp d_initvalu_18;
- fp d_initvalu_19;
- fp d_initvalu_20;
- fp d_initvalu_21;
- // fp d_initvalu_22;
- fp d_initvalu_23;
- fp d_initvalu_24;
- fp d_initvalu_25;
- fp d_initvalu_26;
- fp d_initvalu_27;
- fp d_initvalu_28;
- fp d_initvalu_29;
- fp d_initvalu_30;
- fp d_initvalu_31;
- fp d_initvalu_32;
- fp d_initvalu_33;
- fp d_initvalu_34;
- fp d_initvalu_35;
- fp d_initvalu_36;
- fp d_initvalu_37;
- fp d_initvalu_38;
- fp d_initvalu_39;
- fp d_initvalu_40;
- // fp d_initvalu_41;
- // fp d_initvalu_42;
- // fp d_initvalu_43;
- // fp d_initvalu_44;
- // fp d_initvalu_45;
- // fp d_initvalu_46;
- // matlab constants undefined in c
- fp pi;
- // Constants
- fp R; // [J/kmol*K]
- fp Frdy; // [C/mol]
- fp Temp; // [K] 310
- fp FoRT; //
- fp Cmem; // [F] membrane capacitance
- fp Qpow;
- // Cell geometry
- fp cellLength; // cell length [um]
- fp cellRadius; // cell radius [um]
- // fp junctionLength; // junc length [um]
- // fp junctionRadius; // junc radius [um]
- // fp distSLcyto; // dist. SL to cytosol [um]
- // fp distJuncSL; // dist. junc to SL [um]
- // fp DcaJuncSL; // Dca junc to SL [cm^2/sec]
- // fp DcaSLcyto; // Dca SL to cyto [cm^2/sec]
- // fp DnaJuncSL; // Dna junc to SL [cm^2/sec]
- // fp DnaSLcyto; // Dna SL to cyto [cm^2/sec]
- fp Vcell; // [L]
- fp Vmyo;
- fp Vsr;
- fp Vsl;
- fp Vjunc;
- // fp SAjunc; // [um^2]
- // fp SAsl; // [um^2]
- fp J_ca_juncsl; // [L/msec]
- fp J_ca_slmyo; // [L/msec]
- fp J_na_juncsl; // [L/msec]
- fp J_na_slmyo; // [L/msec]
- // Fractional currents in compartments
- fp Fjunc;
- fp Fsl;
- fp Fjunc_CaL;
- fp Fsl_CaL;
- // Fixed ion concentrations
- fp Cli; // Intracellular Cl [mM]
- fp Clo; // Extracellular Cl [mM]
- fp Ko; // Extracellular K [mM]
- fp Nao; // Extracellular Na [mM]
- fp Cao; // Extracellular Ca [mM]
- fp Mgi; // Intracellular Mg [mM]
- // Nernst Potentials
- fp ena_junc; // [mV]
- fp ena_sl; // [mV]
- fp ek; // [mV]
- fp eca_junc; // [mV]
- fp eca_sl; // [mV]
- fp ecl; // [mV]
- // Na transport parameters
- fp GNa; // [mS/uF]
- fp GNaB; // [mS/uF]
- fp IbarNaK; // [uA/uF]
- fp KmNaip; // [mM]
- fp KmKo; // [mM]
- // fp Q10NaK;
- // fp Q10KmNai;
- // K current parameters
- fp pNaK;
- fp GtoSlow; // [mS/uF]
- fp GtoFast; // [mS/uF]
- fp gkp;
- // Cl current parameters
- fp GClCa; // [mS/uF]
- fp GClB; // [mS/uF]
- fp KdClCa; // [mM] // [mM]
- // I_Ca parameters
- fp pNa; // [cm/sec]
- fp pCa; // [cm/sec]
- fp pK; // [cm/sec]
- // fp KmCa; // [mM]
- fp Q10CaL;
- // Ca transport parameters
- fp IbarNCX; // [uA/uF]
- fp KmCai; // [mM]
- fp KmCao; // [mM]
- fp KmNai; // [mM]
- fp KmNao; // [mM]
- fp ksat; // [none]
- fp nu; // [none]
- fp Kdact; // [mM]
- fp Q10NCX; // [none]
- fp IbarSLCaP; // [uA/uF]
- fp KmPCa; // [mM]
- fp GCaB; // [uA/uF]
- fp Q10SLCaP; // [none] // [none]
- // SR flux parameters
- fp Q10SRCaP; // [none]
- fp Vmax_SRCaP; // [mM/msec] (mmol/L cytosol/msec)
- fp Kmf; // [mM]
- fp Kmr; // [mM]L cytosol
- fp hillSRCaP; // [mM]
- fp ks; // [1/ms]
- fp koCa; // [mM^-2 1/ms]
- fp kom; // [1/ms]
- fp kiCa; // [1/mM/ms]
- fp kim; // [1/ms]
- fp ec50SR; // [mM]
- // Buffering parameters
- fp Bmax_Naj; // [mM]
- fp Bmax_Nasl; // [mM]
- fp koff_na; // [1/ms]
- fp kon_na; // [1/mM/ms]
- fp Bmax_TnClow; // [mM], TnC low affinity
- fp koff_tncl; // [1/ms]
- fp kon_tncl; // [1/mM/ms]
- fp Bmax_TnChigh; // [mM], TnC high affinity
- fp koff_tnchca; // [1/ms]
- fp kon_tnchca; // [1/mM/ms]
- fp koff_tnchmg; // [1/ms]
- fp kon_tnchmg; // [1/mM/ms]
- // fp Bmax_CaM; // [mM], CaM buffering
- // fp koff_cam; // [1/ms]
- // fp kon_cam; // [1/mM/ms]
- fp Bmax_myosin; // [mM], Myosin buffering
- fp koff_myoca; // [1/ms]
- fp kon_myoca; // [1/mM/ms]
- fp koff_myomg; // [1/ms]
- fp kon_myomg; // [1/mM/ms]
- fp Bmax_SR; // [mM]
- fp koff_sr; // [1/ms]
- fp kon_sr; // [1/mM/ms]
- fp Bmax_SLlowsl; // [mM], SL buffering
- fp Bmax_SLlowj; // [mM]
- fp koff_sll; // [1/ms]
- fp kon_sll; // [1/mM/ms]
- fp Bmax_SLhighsl; // [mM]
- fp Bmax_SLhighj; // [mM]
- fp koff_slh; // [1/ms]
- fp kon_slh; // [1/mM/ms]
- fp Bmax_Csqn; // 140e-3*Vmyo/Vsr; [mM]
- fp koff_csqn; // [1/ms]
- fp kon_csqn; // [1/mM/ms]
- // I_Na: Fast Na Current
- fp am;
- fp bm;
- fp ah;
- fp bh;
- fp aj;
- fp bj;
- fp I_Na_junc;
- fp I_Na_sl;
- // fp I_Na;
- // I_nabk: Na Background Current
- fp I_nabk_junc;
- fp I_nabk_sl;
- // fp I_nabk;
- // I_nak: Na/K Pump Current
- fp sigma;
- fp fnak;
- fp I_nak_junc;
- fp I_nak_sl;
- fp I_nak;
- // I_kr: Rapidly Activating K Current
- fp gkr;
- fp xrss;
- fp tauxr;
- fp rkr;
- fp I_kr;
- // I_ks: Slowly Activating K Current
- fp pcaks_junc;
- fp pcaks_sl;
- fp gks_junc;
- fp gks_sl;
- fp eks;
- fp xsss;
- fp tauxs;
- fp I_ks_junc;
- fp I_ks_sl;
- fp I_ks;
- // I_kp: Plateau K current
- fp kp_kp;
- fp I_kp_junc;
- fp I_kp_sl;
- fp I_kp;
- // I_to: Transient Outward K Current (slow and fast components)
- fp xtoss;
- fp ytoss;
- fp rtoss;
- fp tauxtos;
- fp tauytos;
- fp taurtos;
- fp I_tos;
- //
- fp tauxtof;
- fp tauytof;
- fp I_tof;
- fp I_to;
- // I_ki: Time-Independent K Current
- fp aki;
- fp bki;
- fp kiss;
- fp I_ki;
- // I_ClCa: Ca-activated Cl Current, I_Clbk: background Cl Current
- fp I_ClCa_junc;
- fp I_ClCa_sl;
- fp I_ClCa;
- fp I_Clbk;
- // I_Ca: L-type Calcium Current
- fp dss;
- fp taud;
- fp fss;
- fp tauf;
- //
- fp ibarca_j;
- fp ibarca_sl;
- fp ibark;
- fp ibarna_j;
- fp ibarna_sl;
- fp I_Ca_junc;
- fp I_Ca_sl;
- fp I_Ca;
- fp I_CaK;
- fp I_CaNa_junc;
- fp I_CaNa_sl;
- // fp I_CaNa;
- // fp I_Catot;
- // I_ncx: Na/Ca Exchanger flux
- fp Ka_junc;
- fp Ka_sl;
- fp s1_junc;
- fp s1_sl;
- fp s2_junc;
- fp s3_junc;
- fp s2_sl;
- fp s3_sl;
- fp I_ncx_junc;
- fp I_ncx_sl;
- fp I_ncx;
- // I_pca: Sarcolemmal Ca Pump Current
- fp I_pca_junc;
- fp I_pca_sl;
- fp I_pca;
- // I_cabk: Ca Background Current
- fp I_cabk_junc;
- fp I_cabk_sl;
- fp I_cabk;
-
- // SR fluxes: Calcium Release, SR Ca pump, SR Ca leak
- fp MaxSR;
- fp MinSR;
- fp kCaSR;
- fp koSRCa;
- fp kiSRCa;
- fp RI;
- fp J_SRCarel; // [mM/ms]
- fp J_serca;
- fp J_SRleak; // [mM/ms]
- // Cytosolic Ca Buffers
- fp J_CaB_cytosol;
- // Junctional and SL Ca Buffers
- fp J_CaB_junction;
- fp J_CaB_sl;
- // SR Ca Concentrations
- fp oneovervsr;
- // Sodium Concentrations
- fp I_Na_tot_junc; // [uA/uF]
- fp I_Na_tot_sl; // [uA/uF]
- fp oneovervsl;
- // Potassium Concentration
- fp I_K_tot;
- // Calcium Concentrations
- fp I_Ca_tot_junc; // [uA/uF]
- fp I_Ca_tot_sl; // [uA/uF]
- // fp junc_sl;
- // fp sl_junc;
- // fp sl_myo;
- // fp myo_sl;
- // Simulation type
- int state; // 0-none; 1-pace; 2-vclamp
- fp I_app;
- fp V_hold;
- fp V_test;
- fp V_clamp;
- fp R_clamp;
-
- // Membrane Potential
- fp I_Na_tot; // [uA/uF]
- fp I_Cl_tot; // [uA/uF]
- fp I_Ca_tot;
- fp I_tot;
- //=====================================================================
- // EXECUTION
- //=====================================================================
- // input parameters
- cycleLength = d_params[15];
- // variable references
- offset_1 = valu_offset;
- offset_2 = valu_offset+1;
- offset_3 = valu_offset+2;
- offset_4 = valu_offset+3;
- offset_5 = valu_offset+4;
- offset_6 = valu_offset+5;
- offset_7 = valu_offset+6;
- offset_8 = valu_offset+7;
- offset_9 = valu_offset+8;
- offset_10 = valu_offset+9;
- offset_11 = valu_offset+10;
- offset_12 = valu_offset+11;
- offset_13 = valu_offset+12;
- offset_14 = valu_offset+13;
- offset_15 = valu_offset+14;
- offset_16 = valu_offset+15;
- offset_17 = valu_offset+16;
- offset_18 = valu_offset+17;
- offset_19 = valu_offset+18;
- offset_20 = valu_offset+19;
- offset_21 = valu_offset+20;
- offset_22 = valu_offset+21;
- offset_23 = valu_offset+22;
- offset_24 = valu_offset+23;
- offset_25 = valu_offset+24;
- offset_26 = valu_offset+25;
- offset_27 = valu_offset+26;
- offset_28 = valu_offset+27;
- offset_29 = valu_offset+28;
- offset_30 = valu_offset+29;
- offset_31 = valu_offset+30;
- offset_32 = valu_offset+31;
- offset_33 = valu_offset+32;
- offset_34 = valu_offset+33;
- offset_35 = valu_offset+34;
- offset_36 = valu_offset+35;
- offset_37 = valu_offset+36;
- offset_38 = valu_offset+37;
- offset_39 = valu_offset+38;
- offset_40 = valu_offset+39;
- offset_41 = valu_offset+40;
- offset_42 = valu_offset+41;
- offset_43 = valu_offset+42;
- offset_44 = valu_offset+43;
- offset_45 = valu_offset+44;
- offset_46 = valu_offset+45;
- // stored input array
- d_initvalu_1 = d_initvalu[offset_1];
- d_initvalu_2 = d_initvalu[offset_2];
- d_initvalu_3 = d_initvalu[offset_3];
- d_initvalu_4 = d_initvalu[offset_4];
- d_initvalu_5 = d_initvalu[offset_5];
- d_initvalu_6 = d_initvalu[offset_6];
- d_initvalu_7 = d_initvalu[offset_7];
- d_initvalu_8 = d_initvalu[offset_8];
- d_initvalu_9 = d_initvalu[offset_9];
- d_initvalu_10 = d_initvalu[offset_10];
- d_initvalu_11 = d_initvalu[offset_11];
- d_initvalu_12 = d_initvalu[offset_12];
- d_initvalu_13 = d_initvalu[offset_13];
- d_initvalu_14 = d_initvalu[offset_14];
- d_initvalu_15 = d_initvalu[offset_15];
- d_initvalu_16 = d_initvalu[offset_16];
- d_initvalu_17 = d_initvalu[offset_17];
- d_initvalu_18 = d_initvalu[offset_18];
- d_initvalu_19 = d_initvalu[offset_19];
- d_initvalu_20 = d_initvalu[offset_20];
- d_initvalu_21 = d_initvalu[offset_21];
- // d_initvalu_22 = d_initvalu[offset_22];
- d_initvalu_23 = d_initvalu[offset_23];
- d_initvalu_24 = d_initvalu[offset_24];
- d_initvalu_25 = d_initvalu[offset_25];
- d_initvalu_26 = d_initvalu[offset_26];
- d_initvalu_27 = d_initvalu[offset_27];
- d_initvalu_28 = d_initvalu[offset_28];
- d_initvalu_29 = d_initvalu[offset_29];
- d_initvalu_30 = d_initvalu[offset_30];
- d_initvalu_31 = d_initvalu[offset_31];
- d_initvalu_32 = d_initvalu[offset_32];
- d_initvalu_33 = d_initvalu[offset_33];
- d_initvalu_34 = d_initvalu[offset_34];
- d_initvalu_35 = d_initvalu[offset_35];
- d_initvalu_36 = d_initvalu[offset_36];
- d_initvalu_37 = d_initvalu[offset_37];
- d_initvalu_38 = d_initvalu[offset_38];
- d_initvalu_39 = d_initvalu[offset_39];
- d_initvalu_40 = d_initvalu[offset_40];
- // d_initvalu_41 = d_initvalu[offset_41];
- // d_initvalu_42 = d_initvalu[offset_42];
- // d_initvalu_43 = d_initvalu[offset_43];
- // d_initvalu_44 = d_initvalu[offset_44];
- // d_initvalu_45 = d_initvalu[offset_45];
- // d_initvalu_46 = d_initvalu[offset_46];
- // matlab constants undefined in c
- pi = 3.1416;
- // Constants
- R = 8314; // [J/kmol*K]
- Frdy = 96485; // [C/mol]
- Temp = 310; // [K] 310
- FoRT = Frdy/R/Temp; //
- Cmem = 1.3810e-10; // [F] membrane capacitance
- Qpow = (Temp-310)/10;
- // Cell geometry
- cellLength = 100; // cell length [um]
- cellRadius = 10.25; // cell radius [um]
- // junctionLength = 160e-3; // junc length [um]
- // junctionRadius = 15e-3; // junc radius [um]
- // distSLcyto = 0.45; // dist. SL to cytosol [um]
- // distJuncSL = 0.5; // dist. junc to SL [um]
- // DcaJuncSL = 1.64e-6; // Dca junc to SL [cm^2/sec]
- // DcaSLcyto = 1.22e-6; // Dca SL to cyto [cm^2/sec]
- // DnaJuncSL = 1.09e-5; // Dna junc to SL [cm^2/sec]
- // DnaSLcyto = 1.79e-5; // Dna SL to cyto [cm^2/sec]
- Vcell = pi*pow(cellRadius,2)*cellLength*1e-15; // [L]
- Vmyo = 0.65*Vcell;
- Vsr = 0.035*Vcell;
- Vsl = 0.02*Vcell;
- Vjunc = 0.0539*0.01*Vcell;
- // SAjunc = 20150*pi*2*junctionLength*junctionRadius; // [um^2]
- // SAsl = pi*2*cellRadius*cellLength; // [um^2]
- J_ca_juncsl = 1/1.2134e12; // [L/msec]
- J_ca_slmyo = 1/2.68510e11; // [L/msec]
- J_na_juncsl = 1/(1.6382e12/3*100); // [L/msec]
- J_na_slmyo = 1/(1.8308e10/3*100); // [L/msec]
- // Fractional currents in compartments
- Fjunc = 0.11;
- Fsl = 1-Fjunc;
- Fjunc_CaL = 0.9;
- Fsl_CaL = 1-Fjunc_CaL;
- // Fixed ion concentrations
- Cli = 15; // Intracellular Cl [mM]
- Clo = 150; // Extracellular Cl [mM]
- Ko = 5.4; // Extracellular K [mM]
- Nao = 140; // Extracellular Na [mM]
- Cao = 1.8; // Extracellular Ca [mM]
- Mgi = 1; // Intracellular Mg [mM]
- // Nernst Potentials
- ena_junc = (1/FoRT)*log(Nao/d_initvalu_32); // [mV]
- ena_sl = (1/FoRT)*log(Nao/d_initvalu_33); // [mV]
- ek = (1/FoRT)*log(Ko/d_initvalu_35); // [mV]
- eca_junc = (1/FoRT/2)*log(Cao/d_initvalu_36); // [mV]
- eca_sl = (1/FoRT/2)*log(Cao/d_initvalu_37); // [mV]
- ecl = (1/FoRT)*log(Cli/Clo); // [mV]
- // Na transport parameters
- GNa = 16.0; // [mS/uF]
- GNaB = 0.297e-3; // [mS/uF]
- IbarNaK = 1.90719; // [uA/uF]
- KmNaip = 11; // [mM]
- KmKo = 1.5; // [mM]
- // Q10NaK = 1.63;
- // Q10KmNai = 1.39;
- // K current parameters
- pNaK = 0.01833;
- GtoSlow = 0.06; // [mS/uF]
- GtoFast = 0.02; // [mS/uF]
- gkp = 0.001;
- // Cl current parameters
- GClCa = 0.109625; // [mS/uF]
- GClB = 9e-3; // [mS/uF]
- KdClCa = 100e-3; // [mM]
- // I_Ca parameters
- pNa = 1.5e-8; // [cm/sec]
- pCa = 5.4e-4; // [cm/sec]
- pK = 2.7e-7; // [cm/sec]
- // KmCa = 0.6e-3; // [mM]
- Q10CaL = 1.8;
- // Ca transport parameters
- IbarNCX = 9.0; // [uA/uF]
- KmCai = 3.59e-3; // [mM]
- KmCao = 1.3; // [mM]
- KmNai = 12.29; // [mM]
- KmNao = 87.5; // [mM]
- ksat = 0.27; // [none]
- nu = 0.35; // [none]
- Kdact = 0.256e-3; // [mM]
- Q10NCX = 1.57; // [none]
- IbarSLCaP = 0.0673; // [uA/uF]
- KmPCa = 0.5e-3; // [mM]
- GCaB = 2.513e-4; // [uA/uF]
- Q10SLCaP = 2.35; // [none]
- // SR flux parameters
- Q10SRCaP = 2.6; // [none]
- Vmax_SRCaP = 2.86e-4; // [mM/msec] (mmol/L cytosol/msec)
- Kmf = 0.246e-3; // [mM]
- Kmr = 1.7; // [mM]L cytosol
- hillSRCaP = 1.787; // [mM]
- ks = 25; // [1/ms]
- koCa = 10; // [mM^-2 1/ms]
- kom = 0.06; // [1/ms]
- kiCa = 0.5; // [1/mM/ms]
- kim = 0.005; // [1/ms]
- ec50SR = 0.45; // [mM]
- // Buffering parameters
- Bmax_Naj = 7.561; // [mM]
- Bmax_Nasl = 1.65; // [mM]
- koff_na = 1e-3; // [1/ms]
- kon_na = 0.1e-3; // [1/mM/ms]
- Bmax_TnClow = 70e-3; // [mM], TnC low affinity
- koff_tncl = 19.6e-3; // [1/ms]
- kon_tncl = 32.7; // [1/mM/ms]
- Bmax_TnChigh = 140e-3; // [mM], TnC high affinity
- koff_tnchca = 0.032e-3; // [1/ms]
- kon_tnchca = 2.37; // [1/mM/ms]
- koff_tnchmg = 3.33e-3; // [1/ms]
- kon_tnchmg = 3e-3; // [1/mM/ms]
- // Bmax_CaM = 24e-3; // [mM], CaM buffering
- // koff_cam = 238e-3; // [1/ms]
- // kon_cam = 34; // [1/mM/ms]
- Bmax_myosin = 140e-3; // [mM], Myosin buffering
- koff_myoca = 0.46e-3; // [1/ms]
- kon_myoca = 13.8; // [1/mM/ms]
- koff_myomg = 0.057e-3; // [1/ms]
- kon_myomg = 0.0157; // [1/mM/ms]
- Bmax_SR = 19*0.9e-3; // [mM]
- koff_sr = 60e-3; // [1/ms]
- kon_sr = 100; // [1/mM/ms]
- Bmax_SLlowsl = 37.38e-3*Vmyo/Vsl; // [mM], SL buffering
- Bmax_SLlowj = 4.62e-3*Vmyo/Vjunc*0.1; // [mM]
- koff_sll = 1300e-3; // [1/ms]
- kon_sll = 100; // [1/mM/ms]
- Bmax_SLhighsl = 13.35e-3*Vmyo/Vsl; // [mM]
- Bmax_SLhighj = 1.65e-3*Vmyo/Vjunc*0.1; // [mM]
- koff_slh = 30e-3; // [1/ms]
- kon_slh = 100; // [1/mM/ms]
- Bmax_Csqn = 2.7; // 140e-3*Vmyo/Vsr; [mM]
- koff_csqn = 65; // [1/ms]
- kon_csqn = 100; // [1/mM/ms]
- // I_Na: Fast Na Current
- am = 0.32*(d_initvalu_39+47.13)/(1-exp(-0.1*(d_initvalu_39+47.13)));
- bm = 0.08*exp(-d_initvalu_39/11);
- if(d_initvalu_39 >= -40){
- ah = 0; aj = 0;
- bh = 1/(0.13*(1+exp(-(d_initvalu_39+10.66)/11.1)));
- bj = 0.3*exp(-2.535e-7*d_initvalu_39)/(1+exp(-0.1*(d_initvalu_39+32)));
- }
- else{
- ah = 0.135*exp((80+d_initvalu_39)/-6.8);
- bh = 3.56*exp(0.079*d_initvalu_39)+3.1e5*exp(0.35*d_initvalu_39);
- aj = (-127140*exp(0.2444*d_initvalu_39)-3.474e-5*exp(-0.04391*d_initvalu_39))*(d_initvalu_39+37.78)/(1+exp(0.311*(d_initvalu_39+79.23)));
- bj = 0.1212*exp(-0.01052*d_initvalu_39)/(1+exp(-0.1378*(d_initvalu_39+40.14)));
- }
- d_finavalu[offset_1] = am*(1-d_initvalu_1)-bm*d_initvalu_1;
- d_finavalu[offset_2] = ah*(1-d_initvalu_2)-bh*d_initvalu_2;
- d_finavalu[offset_3] = aj*(1-d_initvalu_3)-bj*d_initvalu_3;
- I_Na_junc = Fjunc*GNa*pow(d_initvalu_1,3)*d_initvalu_2*d_initvalu_3*(d_initvalu_39-ena_junc);
- I_Na_sl = Fsl*GNa*pow(d_initvalu_1,3)*d_initvalu_2*d_initvalu_3*(d_initvalu_39-ena_sl);
- // I_Na = I_Na_junc+I_Na_sl;
- // I_nabk: Na Background Current
- I_nabk_junc = Fjunc*GNaB*(d_initvalu_39-ena_junc);
- I_nabk_sl = Fsl*GNaB*(d_initvalu_39-ena_sl);
- // I_nabk = I_nabk_junc+I_nabk_sl;
- // I_nak: Na/K Pump Current
- sigma = (exp(Nao/67.3)-1)/7;
- fnak = 1/(1+0.1245*exp(-0.1*d_initvalu_39*FoRT)+0.0365*sigma*exp(-d_initvalu_39*FoRT));
- I_nak_junc = Fjunc*IbarNaK*fnak*Ko /(1+pow((KmNaip/d_initvalu_32),4)) /(Ko+KmKo);
- I_nak_sl = Fsl*IbarNaK*fnak*Ko /(1+pow((KmNaip/d_initvalu_33),4)) /(Ko+KmKo);
- I_nak = I_nak_junc+I_nak_sl;
- // I_kr: Rapidly Activating K Current
- gkr = 0.03*sqrt(Ko/5.4);
- xrss = 1/(1+exp(-(d_initvalu_39+50)/7.5));
- tauxr = 1/(0.00138*(d_initvalu_39+7)/(1-exp(-0.123*(d_initvalu_39+7)))+6.1e-4*(d_initvalu_39+10)/(exp(0.145*(d_initvalu_39+10))-1));
- d_finavalu[offset_12] = (xrss-d_initvalu_12)/tauxr;
- rkr = 1/(1+exp((d_initvalu_39+33)/22.4));
- I_kr = gkr*d_initvalu_12*rkr*(d_initvalu_39-ek);
- // I_ks: Slowly Activating K Current
- pcaks_junc = -log10(d_initvalu_36)+3.0;
- pcaks_sl = -log10(d_initvalu_37)+3.0;
- gks_junc = 0.07*(0.057 +0.19/(1+ exp((-7.2+pcaks_junc)/0.6)));
- gks_sl = 0.07*(0.057 +0.19/(1+ exp((-7.2+pcaks_sl)/0.6)));
- eks = (1/FoRT)*log((Ko+pNaK*Nao)/(d_initvalu_35+pNaK*d_initvalu_34));
- xsss = 1/(1+exp(-(d_initvalu_39-1.5)/16.7));
- tauxs = 1/(7.19e-5*(d_initvalu_39+30)/(1-exp(-0.148*(d_initvalu_39+30)))+1.31e-4*(d_initvalu_39+30)/(exp(0.0687*(d_initvalu_39+30))-1));
- d_finavalu[offset_13] = (xsss-d_initvalu_13)/tauxs;
- I_ks_junc = Fjunc*gks_junc*pow(d_initvalu_12,2)*(d_initvalu_39-eks);
- I_ks_sl = Fsl*gks_sl*pow(d_initvalu_13,2)*(d_initvalu_39-eks);
- I_ks = I_ks_junc+I_ks_sl;
- // I_kp: Plateau K current
- kp_kp = 1/(1+exp(7.488-d_initvalu_39/5.98));
- I_kp_junc = Fjunc*gkp*kp_kp*(d_initvalu_39-ek);
- I_kp_sl = Fsl*gkp*kp_kp*(d_initvalu_39-ek);
- I_kp = I_kp_junc+I_kp_sl;
- // I_to: Transient Outward K Current (slow and fast components)
- xtoss = 1/(1+exp(-(d_initvalu_39+3.0)/15));
- ytoss = 1/(1+exp((d_initvalu_39+33.5)/10));
- rtoss = 1/(1+exp((d_initvalu_39+33.5)/10));
- tauxtos = 9/(1+exp((d_initvalu_39+3.0)/15))+0.5;
- tauytos = 3e3/(1+exp((d_initvalu_39+60.0)/10))+30;
- taurtos = 2800/(1+exp((d_initvalu_39+60.0)/10))+220;
- d_finavalu[offset_8] = (xtoss-d_initvalu_8)/tauxtos;
- d_finavalu[offset_9] = (ytoss-d_initvalu_9)/tauytos;
- d_finavalu[offset_40]= (rtoss-d_initvalu_40)/taurtos;
- I_tos = GtoSlow*d_initvalu_8*(d_initvalu_9+0.5*d_initvalu_40)*(d_initvalu_39-ek); // [uA/uF]
- //
- tauxtof = 3.5*exp(-d_initvalu_39*d_initvalu_39/30/30)+1.5;
- tauytof = 20.0/(1+exp((d_initvalu_39+33.5)/10))+20.0;
- d_finavalu[offset_10] = (xtoss-d_initvalu_10)/tauxtof;
- d_finavalu[offset_11] = (ytoss-d_initvalu_11)/tauytof;
- I_tof = GtoFast*d_initvalu_10*d_initvalu_11*(d_initvalu_39-ek);
- I_to = I_tos + I_tof;
- // I_ki: Time-Independent K Current
- aki = 1.02/(1+exp(0.2385*(d_initvalu_39-ek-59.215)));
- bki =(0.49124*exp(0.08032*(d_initvalu_39+5.476-ek)) + exp(0.06175*(d_initvalu_39-ek-594.31))) /(1 + exp(-0.5143*(d_initvalu_39-ek+4.753)));
- kiss = aki/(aki+bki);
- I_ki = 0.9*sqrt(Ko/5.4)*kiss*(d_initvalu_39-ek);
- // I_ClCa: Ca-activated Cl Current, I_Clbk: background Cl Current
- I_ClCa_junc = Fjunc*GClCa/(1+KdClCa/d_initvalu_36)*(d_initvalu_39-ecl);
- I_ClCa_sl = Fsl*GClCa/(1+KdClCa/d_initvalu_37)*(d_initvalu_39-ecl);
- I_ClCa = I_ClCa_junc+I_ClCa_sl;
- I_Clbk = GClB*(d_initvalu_39-ecl);
- // I_Ca: L-type Calcium Current
- dss = 1/(1+exp(-(d_initvalu_39+14.5)/6.0));
- taud = dss*(1-exp(-(d_initvalu_39+14.5)/6.0))/(0.035*(d_initvalu_39+14.5));
- fss = 1/(1+exp((d_initvalu_39+35.06)/3.6))+0.6/(1+exp((50-d_initvalu_39)/20));
- tauf = 1/(0.0197*exp(-pow(0.0337*(d_initvalu_39+14.5),2))+0.02);
- d_finavalu[offset_4] = (dss-d_initvalu_4)/taud;
- d_finavalu[offset_5] = (fss-d_initvalu_5)/tauf;
- d_finavalu[offset_6] = 1.7*d_initvalu_36*(1-d_initvalu_6)-11.9e-3*d_initvalu_6; // fCa_junc
- d_finavalu[offset_7] = 1.7*d_initvalu_37*(1-d_initvalu_7)-11.9e-3*d_initvalu_7; // fCa_sl
- //
- ibarca_j = pCa*4*(d_initvalu_39*Frdy*FoRT) * (0.341*d_initvalu_36*exp(2*d_initvalu_39*FoRT)-0.341*Cao) /(exp(2*d_initvalu_39*FoRT)-1);
- ibarca_sl = pCa*4*(d_initvalu_39*Frdy*FoRT) * (0.341*d_initvalu_37*exp(2*d_initvalu_39*FoRT)-0.341*Cao) /(exp(2*d_initvalu_39*FoRT)-1);
- ibark = pK*(d_initvalu_39*Frdy*FoRT)*(0.75*d_initvalu_35*exp(d_initvalu_39*FoRT)-0.75*Ko) /(exp(d_initvalu_39*FoRT)-1);
- ibarna_j = pNa*(d_initvalu_39*Frdy*FoRT) *(0.75*d_initvalu_32*exp(d_initvalu_39*FoRT)-0.75*Nao) /(exp(d_initvalu_39*FoRT)-1);
- ibarna_sl = pNa*(d_initvalu_39*Frdy*FoRT) *(0.75*d_initvalu_33*exp(d_initvalu_39*FoRT)-0.75*Nao) /(exp(d_initvalu_39*FoRT)-1);
- I_Ca_junc = (Fjunc_CaL*ibarca_j*d_initvalu_4*d_initvalu_5*(1-d_initvalu_6)*pow(Q10CaL,Qpow))*0.45;
- I_Ca_sl = (Fsl_CaL*ibarca_sl*d_initvalu_4*d_initvalu_5*(1-d_initvalu_7)*pow(Q10CaL,Qpow))*0.45;
- I_Ca = I_Ca_junc+I_Ca_sl;
- d_finavalu[offset_43]=-I_Ca*Cmem/(Vmyo*2*Frdy)*1e3;
- I_CaK = (ibark*d_initvalu_4*d_initvalu_5*(Fjunc_CaL*(1-d_initvalu_6)+Fsl_CaL*(1-d_initvalu_7))*pow(Q10CaL,Qpow))*0.45;
- I_CaNa_junc = (Fjunc_CaL*ibarna_j*d_initvalu_4*d_initvalu_5*(1-d_initvalu_6)*pow(Q10CaL,Qpow))*0.45;
- I_CaNa_sl = (Fsl_CaL*ibarna_sl*d_initvalu_4*d_initvalu_5*(1-d_initvalu_7)*pow(Q10CaL,Qpow))*0.45;
- // I_CaNa = I_CaNa_junc+I_CaNa_sl;
- // I_Catot = I_Ca+I_CaK+I_CaNa;
- // I_ncx: Na/Ca Exchanger flux
- Ka_junc = 1/(1+pow((Kdact/d_initvalu_36),3));
- Ka_sl = 1/(1+pow((Kdact/d_initvalu_37),3));
- s1_junc = exp(nu*d_initvalu_39*FoRT)*pow(d_initvalu_32,3)*Cao;
- s1_sl = exp(nu*d_initvalu_39*FoRT)*pow(d_initvalu_33,3)*Cao;
- s2_junc = exp((nu-1)*d_initvalu_39*FoRT)*pow(Nao,3)*d_initvalu_36;
- s3_junc = (KmCai*pow(Nao,3)*(1+pow((d_initvalu_32/KmNai),3))+pow(KmNao,3)*d_initvalu_36+ pow(KmNai,3)*Cao*(1+d_initvalu_36/KmCai)+KmCao*pow(d_initvalu_32,3)+pow(d_initvalu_32,3)*Cao+pow(Nao,3)*d_initvalu_36)*(1+ksat*exp((nu-1)*d_initvalu_39*FoRT));
- s2_sl = exp((nu-1)*d_initvalu_39*FoRT)*pow(Nao,3)*d_initvalu_37;
- s3_sl = (KmCai*pow(Nao,3)*(1+pow((d_initvalu_33/KmNai),3)) + pow(KmNao,3)*d_initvalu_37+pow(KmNai,3)*Cao*(1+d_initvalu_37/KmCai)+KmCao*pow(d_initvalu_33,3)+pow(d_initvalu_33,3)*Cao+pow(Nao,3)*d_initvalu_37)*(1+ksat*exp((nu-1)*d_initvalu_39*FoRT));
- I_ncx_junc = Fjunc*IbarNCX*pow(Q10NCX,Qpow)*Ka_junc*(s1_junc-s2_junc)/s3_junc;
- I_ncx_sl = Fsl*IbarNCX*pow(Q10NCX,Qpow)*Ka_sl*(s1_sl-s2_sl)/s3_sl;
- I_ncx = I_ncx_junc+I_ncx_sl;
- d_finavalu[offset_45]=2*I_ncx*Cmem/(Vmyo*2*Frdy)*1e3;
- // I_pca: Sarcolemmal Ca Pump Current
- I_pca_junc = Fjunc*pow(Q10SLCaP,Qpow)*IbarSLCaP*pow(d_initvalu_36,(fp)(1.6))/(pow(KmPCa,(fp)(1.6))+pow(d_initvalu_36,(fp)(1.6)));
- I_pca_sl = Fsl*pow(Q10SLCaP,Qpow)*IbarSLCaP*pow(d_initvalu_37,(fp)(1.6))/(pow(KmPCa,(fp)(1.6))+pow(d_initvalu_37,(fp)(1.6)));
- I_pca = I_pca_junc+I_pca_sl;
- d_finavalu[offset_44]=-I_pca*Cmem/(Vmyo*2*Frdy)*1e3;
- // I_cabk: Ca Background Current
- I_cabk_junc = Fjunc*GCaB*(d_initvalu_39-eca_junc);
- I_cabk_sl = Fsl*GCaB*(d_initvalu_39-eca_sl);
- I_cabk = I_cabk_junc+I_cabk_sl;
- d_finavalu[offset_46]=-I_cabk*Cmem/(Vmyo*2*Frdy)*1e3;
- // SR fluxes: Calcium Release, SR Ca pump, SR Ca leak
- MaxSR = 15;
- MinSR = 1;
- kCaSR = MaxSR - (MaxSR-MinSR)/(1+pow(ec50SR/d_initvalu_31,(fp)(2.5)));
- koSRCa = koCa/kCaSR;
- kiSRCa = kiCa*kCaSR;
- RI = 1-d_initvalu_14-d_initvalu_15-d_initvalu_16;
- d_finavalu[offset_14] = (kim*RI-kiSRCa*d_initvalu_36*d_initvalu_14)-(koSRCa*pow(d_initvalu_36,2)*d_initvalu_14-kom*d_initvalu_15); // R
- d_finavalu[offset_15] = (koSRCa*pow(d_initvalu_36,2)*d_initvalu_14-kom*d_initvalu_15)-(kiSRCa*d_initvalu_36*d_initvalu_15-kim*d_initvalu_16); // O
- d_finavalu[offset_16] = (kiSRCa*d_initvalu_36*d_initvalu_15-kim*d_initvalu_16)-(kom*d_initvalu_16-koSRCa*pow(d_initvalu_36,2)*RI); // I
- J_SRCarel = ks*d_initvalu_15*(d_initvalu_31-d_initvalu_36); // [mM/ms]
- J_serca = pow(Q10SRCaP,Qpow)*Vmax_SRCaP*(pow((d_initvalu_38/Kmf),hillSRCaP)-pow((d_initvalu_31/Kmr),hillSRCaP))
- /(1+pow((d_initvalu_38/Kmf),hillSRCaP)+pow((d_initvalu_31/Kmr),hillSRCaP));
- J_SRleak = 5.348e-6*(d_initvalu_31-d_initvalu_36); // [mM/ms]
- // Sodium and Calcium Buffering
- d_finavalu[offset_17] = kon_na*d_initvalu_32*(Bmax_Naj-d_initvalu_17)-koff_na*d_initvalu_17; // NaBj [mM/ms]
- d_finavalu[offset_18] = kon_na*d_initvalu_33*(Bmax_Nasl-d_initvalu_18)-koff_na*d_initvalu_18; // NaBsl [mM/ms]
- // Cytosolic Ca Buffers
- d_finavalu[offset_19] = kon_tncl*d_initvalu_38*(Bmax_TnClow-d_initvalu_19)-koff_tncl*d_initvalu_19; // TnCL [mM/ms]
- d_finavalu[offset_20] = kon_tnchca*d_initvalu_38*(Bmax_TnChigh-d_initvalu_20-d_initvalu_21)-koff_tnchca*d_initvalu_20; // TnCHc [mM/ms]
- d_finavalu[offset_21] = kon_tnchmg*Mgi*(Bmax_TnChigh-d_initvalu_20-d_initvalu_21)-koff_tnchmg*d_initvalu_21; // TnCHm [mM/ms]
- d_finavalu[offset_22] = 0; // CaM [mM/ms]
- d_finavalu[offset_23] = kon_myoca*d_initvalu_38*(Bmax_myosin-d_initvalu_23-d_initvalu_24)-koff_myoca*d_initvalu_23; // Myosin_ca [mM/ms]
- d_finavalu[offset_24] = kon_myomg*Mgi*(Bmax_myosin-d_initvalu_23-d_initvalu_24)-koff_myomg*d_initvalu_24; // Myosin_mg [mM/ms]
- d_finavalu[offset_25] = kon_sr*d_initvalu_38*(Bmax_SR-d_initvalu_25)-koff_sr*d_initvalu_25; // SRB [mM/ms]
- J_CaB_cytosol = d_finavalu[offset_19] + d_finavalu[offset_20] + d_finavalu[offset_21] + d_finavalu[offset_22] + d_finavalu[offset_23] + d_finavalu[offset_24] + d_finavalu[offset_25];
- // Junctional and SL Ca Buffers
- d_finavalu[offset_26] = kon_sll*d_initvalu_36*(Bmax_SLlowj-d_initvalu_26)-koff_sll*d_initvalu_26; // SLLj [mM/ms]
- d_finavalu[offset_27] = kon_sll*d_initvalu_37*(Bmax_SLlowsl-d_initvalu_27)-koff_sll*d_initvalu_27; // SLLsl [mM/ms]
- d_finavalu[offset_28] = kon_slh*d_initvalu_36*(Bmax_SLhighj-d_initvalu_28)-koff_slh*d_initvalu_28; // SLHj [mM/ms]
- d_finavalu[offset_29] = kon_slh*d_initvalu_37*(Bmax_SLhighsl-d_initvalu_29)-koff_slh*d_initvalu_29; // SLHsl [mM/ms]
- J_CaB_junction = d_finavalu[offset_26]+d_finavalu[offset_28];
- J_CaB_sl = d_finavalu[offset_27]+d_finavalu[offset_29];
- // SR Ca Concentrations
- d_finavalu[offset_30] = kon_csqn*d_initvalu_31*(Bmax_Csqn-d_initvalu_30)-koff_csqn*d_initvalu_30; // Csqn [mM/ms]
- oneovervsr = 1/Vsr;
- d_finavalu[offset_31] = J_serca*Vmyo*oneovervsr-(J_SRleak*Vmyo*oneovervsr+J_SRCarel)-d_finavalu[offset_30]; // Ca_sr [mM/ms] %Ratio 3 leak current
- // Sodium Concentrations
- I_Na_tot_junc = I_Na_junc+I_nabk_junc+3*I_ncx_junc+3*I_nak_junc+I_CaNa_junc; // [uA/uF]
- I_Na_tot_sl = I_Na_sl+I_nabk_sl+3*I_ncx_sl+3*I_nak_sl+I_CaNa_sl; // [uA/uF]
- d_finavalu[offset_32] = -I_Na_tot_junc*Cmem/(Vjunc*Frdy)+J_na_juncsl/Vjunc*(d_initvalu_33-d_initvalu_32)-d_finavalu[offset_17];
- oneovervsl = 1/Vsl;
- d_finavalu[offset_33] = -I_Na_tot_sl*Cmem*oneovervsl/Frdy+J_na_juncsl*oneovervsl*(d_initvalu_32-d_initvalu_33)+J_na_slmyo*oneovervsl*(d_initvalu_34-d_initvalu_33)-d_finavalu[offset_18];
- d_finavalu[offset_34] = J_na_slmyo/Vmyo*(d_initvalu_33-d_initvalu_34); // [mM/msec]
- // Potassium Concentration
- I_K_tot = I_to+I_kr+I_ks+I_ki-2*I_nak+I_CaK+I_kp; // [uA/uF]
- d_finavalu[offset_35] = 0; // [mM/msec]
- // Calcium Concentrations
- I_Ca_tot_junc = I_Ca_junc+I_cabk_junc+I_pca_junc-2*I_ncx_junc; // [uA/uF]
- I_Ca_tot_sl = I_Ca_sl+I_cabk_sl+I_pca_sl-2*I_ncx_sl; // [uA/uF]
- d_finavalu[offset_36] = -I_Ca_tot_junc*Cmem/(Vjunc*2*Frdy)+J_ca_juncsl/Vjunc*(d_initvalu_37-d_initvalu_36)
- - J_CaB_junction+(J_SRCarel)*Vsr/Vjunc+J_SRleak*Vmyo/Vjunc; // Ca_j
- d_finavalu[offset_37] = -I_Ca_tot_sl*Cmem/(Vsl*2*Frdy)+J_ca_juncsl/Vsl*(d_initvalu_36-d_initvalu_37)
- + J_ca_slmyo/Vsl*(d_initvalu_38-d_initvalu_37)-J_CaB_sl; // Ca_sl
- d_finavalu[offset_38] = -J_serca-J_CaB_cytosol +J_ca_slmyo/Vmyo*(d_initvalu_37-d_initvalu_38);
- // junc_sl=J_ca_juncsl/Vsl*(d_initvalu_36-d_initvalu_37);
- // sl_junc=J_ca_juncsl/Vjunc*(d_initvalu_37-d_initvalu_36);
- // sl_myo=J_ca_slmyo/Vsl*(d_initvalu_38-d_initvalu_37);
- // myo_sl=J_ca_slmyo/Vmyo*(d_initvalu_37-d_initvalu_38);
- // Simulation type
- state = 1;
- switch(state){
- case 0:
- I_app = 0;
- break;
- case 1: // pace w/ current injection at cycleLength 'cycleLength'
- if(fmod(timeinst,cycleLength) <= 5){
- I_app = 9.5;
- }
- else{
- I_app = 0.0;
- }
- break;
- case 2:
- V_hold = -55;
- V_test = 0;
- if(timeinst>0.5 & timeinst<200.5){
- V_clamp = V_test;
- }
- else{
- V_clamp = V_hold;
- }
- R_clamp = 0.04;
- I_app = (V_clamp-d_initvalu_39)/R_clamp;
- break;
- }
- // Membrane Potential
- I_Na_tot = I_Na_tot_junc + I_Na_tot_sl; // [uA/uF]
- I_Cl_tot = I_ClCa+I_Clbk; // [uA/uF]
- I_Ca_tot = I_Ca_tot_junc+I_Ca_tot_sl;
- I_tot = I_Na_tot+I_Cl_tot+I_Ca_tot+I_K_tot;
- d_finavalu[offset_39] = -(I_tot-I_app);
- // Set unused output values to 0 (MATLAB does it by default)
- d_finavalu[offset_41] = 0;
- d_finavalu[offset_42] = 0;
- }
- //========================================================================================================================================================================================================200
- // KERNEL_CAM
- //========================================================================================================================================================================================================200
- void
- kernel_cam( fp timeinst,
- __global fp *d_initvalu,
- __global fp *d_finavalu,
- int valu_offset,
- __global fp *d_params,
- int params_offset,
- __global fp *d_com,
- int com_offset,
- fp Ca){
- //=====================================================================
- // VARIABLES
- //=====================================================================
- // inputs
- // fp CaMtot;
- fp Btot;
- fp CaMKIItot;
- fp CaNtot;
- fp PP1tot;
- fp K;
- fp Mg;
- // variable references
- int offset_1;
- int offset_2;
- int offset_3;
- int offset_4;
- int offset_5;
- int offset_6;
- int offset_7;
- int offset_8;
- int offset_9;
- int offset_10;
- int offset_11;
- int offset_12;
- int offset_13;
- int offset_14;
- int offset_15;
- // decoding input array
- fp CaM;
- fp Ca2CaM;
- fp Ca4CaM;
- fp CaMB;
- fp Ca2CaMB;
- fp Ca4CaMB;
- fp Pb2;
- fp Pb;
- fp Pt;
- fp Pt2;
- fp Pa;
- fp Ca4CaN;
- fp CaMCa4CaN;
- fp Ca2CaMCa4CaN;
- fp Ca4CaMCa4CaN;
- // Ca/CaM parameters
- fp Kd02; // [uM^2]
- fp Kd24; // [uM^2]
- fp k20; // [s^-1]
- fp k02; // [uM^-2 s^-1]
- fp k42; // [s^-1]
- fp k24; // [uM^-2 s^-1]
- // CaM buffering (B) parameters
- fp k0Boff; // [s^-1]
- fp k0Bon; // [uM^-1 s^-1] kon = koff/Kd
- fp k2Boff; // [s^-1]
- fp k2Bon; // [uM^-1 s^-1]
- fp k4Boff; // [s^-1]
- fp k4Bon; // [uM^-1 s^-1]
- // using thermodynamic constraints
- fp k20B; // [s^-1] thermo constraint on loop 1
- fp k02B; // [uM^-2 s^-1]
- fp k42B; // [s^-1] thermo constraint on loop 2
- fp k24B; // [uM^-2 s^-1]
- // Wi Wa Wt Wp
- fp kbi; // [s^-1] (Ca4CaM dissocation from Wb)
- fp kib; // [uM^-1 s^-1]
- fp kpp1; // [s^-1] (PP1-dep dephosphorylation rates)
- fp Kmpp1; // [uM]
- fp kib2;
- fp kb2i;
- fp kb24;
- fp kb42;
- fp kta; // [s^-1] (Ca4CaM dissociation from Wt)
- fp kat; // [uM^-1 s^-1] (Ca4CaM reassociation with Wa)
- fp kt42;
- fp kt24;
- fp kat2;
- fp kt2a;
- // CaN parameters
- fp kcanCaoff; // [s^-1]
- fp kcanCaon; // [uM^-1 s^-1]
- fp kcanCaM4on; // [uM^-1 s^-1]
- fp kcanCaM4off; // [s^-1]
- fp kcanCaM2on;
- fp kcanCaM2off;
- fp kcanCaM0on;
- fp kcanCaM0off;
- fp k02can;
- fp k20can;
- fp k24can;
- fp k42can;
- // CaM Reaction fluxes
- fp rcn02;
- fp rcn24;
- // CaM buffer fluxes
- fp B;
- fp rcn02B;
- fp rcn24B;
- fp rcn0B;
- fp rcn2B;
- fp rcn4B;
- // CaN reaction fluxes
- fp Ca2CaN;
- fp rcnCa4CaN;
- fp rcn02CaN;
- fp rcn24CaN;
- fp rcn0CaN;
- fp rcn2CaN;
- fp rcn4CaN;
- // CaMKII reaction fluxes
- fp Pix;
- fp rcnCKib2;
- fp rcnCKb2b;
- fp rcnCKib;
- fp T;
- fp kbt;
- fp rcnCKbt;
- fp rcnCKtt2;
- fp rcnCKta;
- fp rcnCKt2a;
- fp rcnCKt2b2;
- fp rcnCKai;
- // CaM equations
- fp dCaM;
- fp dCa2CaM;
- fp dCa4CaM;
- fp dCaMB;
- fp dCa2CaMB;
- fp dCa4CaMB;
- // CaMKII equations
- fp dPb2; // Pb2
- fp dPb; // Pb
- fp dPt; // Pt
- fp dPt2; // Pt2
- fp dPa; // Pa
- // CaN equations
- fp dCa4CaN; // Ca4CaN
- fp dCaMCa4CaN; // CaMCa4CaN
- fp dCa2CaMCa4CaN; // Ca2CaMCa4CaN
- fp dCa4CaMCa4CaN; // Ca4CaMCa4CaN
- //=====================================================================
- // EXECUTION
- //=====================================================================
- // inputs
- // CaMtot = d_params[params_offset];
- Btot = d_params[params_offset+1];
- CaMKIItot = d_params[params_offset+2];
- CaNtot = d_params[params_offset+3];
- PP1tot = d_params[params_offset+4];
- K = d_params[16];
- Mg = d_params[17];
- // variable references
- offset_1 = valu_offset;
- offset_2 = valu_offset+1;
- offset_3 = valu_offset+2;
- offset_4 = valu_offset+3;
- offset_5 = valu_offset+4;
- offset_6 = valu_offset+5;
- offset_7 = valu_offset+6;
- offset_8 = valu_offset+7;
- offset_9 = valu_offset+8;
- offset_10 = valu_offset+9;
- offset_11 = valu_offset+10;
- offset_12 = valu_offset+11;
- offset_13 = valu_offset+12;
- offset_14 = valu_offset+13;
- offset_15 = valu_offset+14;
- // decoding input array
- CaM = d_initvalu[offset_1];
- Ca2CaM = d_initvalu[offset_2];
- Ca4CaM = d_initvalu[offset_3];
- CaMB = d_initvalu[offset_4];
- Ca2CaMB = d_initvalu[offset_5];
- Ca4CaMB = d_initvalu[offset_6];
- Pb2 = d_initvalu[offset_7];
- Pb = d_initvalu[offset_8];
- Pt = d_initvalu[offset_9];
- Pt2 = d_initvalu[offset_10];
- Pa = d_initvalu[offset_11];
- Ca4CaN = d_initvalu[offset_12];
- CaMCa4CaN = d_initvalu[offset_13];
- Ca2CaMCa4CaN = d_initvalu[offset_14];
- Ca4CaMCa4CaN = d_initvalu[offset_15];
- // Ca/CaM parameters
- if (Mg <= 1){
- Kd02 = 0.0025*(1+K/0.94-Mg/0.012)*(1+K/8.1+Mg/0.022); // [uM^2]
- Kd24 = 0.128*(1+K/0.64+Mg/0.0014)*(1+K/13.0-Mg/0.153); // [uM^2]
- }
- else{
- Kd02 = 0.0025*(1+K/0.94-1/0.012+(Mg-1)/0.060)*(1+K/8.1+1/0.022+(Mg-1)/0.068); // [uM^2]
- Kd24 = 0.128*(1+K/0.64+1/0.0014+(Mg-1)/0.005)*(1+K/13.0-1/0.153+(Mg-1)/0.150); // [uM^2]
- }
- k20 = 10; // [s^-1]
- k02 = k20/Kd02; // [uM^-2 s^-1]
- k42 = 500; // [s^-1]
- k24 = k42/Kd24; // [uM^-2 s^-1]
- // CaM buffering (B) parameters
- k0Boff = 0.0014; // [s^-1]
- k0Bon = k0Boff/0.2; // [uM^-1 s^-1] kon = koff/Kd
- k2Boff = k0Boff/100; // [s^-1]
- k2Bon = k0Bon; // [uM^-1 s^-1]
- k4Boff = k2Boff; // [s^-1]
- k4Bon = k0Bon; // [uM^-1 s^-1]
- // using thermodynamic constraints
- k20B = k20/100; // [s^-1] thermo constraint on loop 1
- k02B = k02; // [uM^-2 s^-1]
- k42B = k42; // [s^-1] thermo constraint on loop 2
- k24B = k24; // [uM^-2 s^-1]
- // Wi Wa Wt Wp
- kbi = 2.2; // [s^-1] (Ca4CaM dissocation from Wb)
- kib = kbi/33.5e-3; // [uM^-1 s^-1]
- kpp1 = 1.72; // [s^-1] (PP1-dep dephosphorylation rates)
- Kmpp1 = 11.5; // [uM]
- kib2 = kib;
- kb2i = kib2*5;
- kb24 = k24;
- kb42 = k42*33.5e-3/5;
- kta = kbi/1000; // [s^-1] (Ca4CaM dissociation from Wt)
- kat = kib; // [uM^-1 s^-1] (Ca4CaM reassociation with Wa)
- kt42 = k42*33.5e-6/5;
- kt24 = k24;
- kat2 = kib;
- kt2a = kib*5;
- // CaN parameters
- kcanCaoff = 1; // [s^-1]
- kcanCaon = kcanCaoff/0.5; // [uM^-1 s^-1]
- kcanCaM4on = 46; // [uM^-1 s^-1]
- kcanCaM4off = 0.0013; // [s^-1]
- kcanCaM2on = kcanCaM4on;
- kcanCaM2off = 2508*kcanCaM4off;
- kcanCaM0on = kcanCaM4on;
- kcanCaM0off = 165*kcanCaM2off;
- k02can = k02;
- k20can = k20/165;
- k24can = k24;
- k42can = k20/2508;
- // CaM Reaction fluxes
- rcn02 = k02*pow(Ca,2)*CaM - k20*Ca2CaM;
- rcn24 = k24*pow(Ca,2)*Ca2CaM - k42*Ca4CaM;
-
- // CaM buffer fluxes
- B = Btot - CaMB - Ca2CaMB - Ca4CaMB;
- rcn02B = k02B*pow(Ca,2)*CaMB - k20B*Ca2CaMB;
- rcn24B = k24B*pow(Ca,2)*Ca2CaMB - k42B*Ca4CaMB;
- rcn0B = k0Bon*CaM*B - k0Boff*CaMB;
- rcn2B = k2Bon*Ca2CaM*B - k2Boff*Ca2CaMB;
- rcn4B = k4Bon*Ca4CaM*B - k4Boff*Ca4CaMB;
-
- // CaN reaction fluxes
- Ca2CaN = CaNtot - Ca4CaN - CaMCa4CaN - Ca2CaMCa4CaN - Ca4CaMCa4CaN;
- rcnCa4CaN = kcanCaon*pow(Ca,2)*Ca2CaN - kcanCaoff*Ca4CaN;
- rcn02CaN = k02can*pow(Ca,2)*CaMCa4CaN - k20can*Ca2CaMCa4CaN;
- rcn24CaN = k24can*pow(Ca,2)*Ca2CaMCa4CaN - k42can*Ca4CaMCa4CaN;
- rcn0CaN = kcanCaM0on*CaM*Ca4CaN - kcanCaM0off*CaMCa4CaN;
- rcn2CaN = kcanCaM2on*Ca2CaM*Ca4CaN - kcanCaM2off*Ca2CaMCa4CaN;
- rcn4CaN = kcanCaM4on*Ca4CaM*Ca4CaN - kcanCaM4off*Ca4CaMCa4CaN;
- // CaMKII reaction fluxes
- Pix = 1 - Pb2 - Pb - Pt - Pt2 - Pa;
- rcnCKib2 = kib2*Ca2CaM*Pix - kb2i*Pb2;
- rcnCKb2b = kb24*pow(Ca,2)*Pb2 - kb42*Pb;
- rcnCKib = kib*Ca4CaM*Pix - kbi*Pb;
- T = Pb + Pt + Pt2 + Pa;
- kbt = 0.055*T + 0.0074*pow(T,2) + 0.015*pow(T,3);
- rcnCKbt = kbt*Pb - kpp1*PP1tot*Pt/(Kmpp1+CaMKIItot*Pt);
- rcnCKtt2 = kt42*Pt - kt24*pow(Ca,2)*Pt2;
- rcnCKta = kta*Pt - kat*Ca4CaM*Pa;
- rcnCKt2a = kt2a*Pt2 - kat2*Ca2CaM*Pa;
- rcnCKt2b2 = kpp1*PP1tot*Pt2/(Kmpp1+CaMKIItot*Pt2);
- rcnCKai = kpp1*PP1tot*Pa/(Kmpp1+CaMKIItot*Pa);
- // CaM equations
- dCaM = 1e-3*(-rcn02 - rcn0B - rcn0CaN);
- dCa2CaM = 1e-3*(rcn02 - rcn24 - rcn2B - rcn2CaN + CaMKIItot*(-rcnCKib2 + rcnCKt2a) );
- dCa4CaM = 1e-3*(rcn24 - rcn4B - rcn4CaN + CaMKIItot*(-rcnCKib+rcnCKta) );
- dCaMB = 1e-3*(rcn0B-rcn02B);
- dCa2CaMB = 1e-3*(rcn02B + rcn2B - rcn24B);
- dCa4CaMB = 1e-3*(rcn24B + rcn4B);
- // CaMKII equations
- dPb2 = 1e-3*(rcnCKib2 - rcnCKb2b + rcnCKt2b2); // Pb2
- dPb = 1e-3*(rcnCKib + rcnCKb2b - rcnCKbt); // Pb
- dPt = 1e-3*(rcnCKbt-rcnCKta-rcnCKtt2); // Pt
- dPt2 = 1e-3*(rcnCKtt2-rcnCKt2a-rcnCKt2b2); // Pt2
- dPa = 1e-3*(rcnCKta+rcnCKt2a-rcnCKai); // Pa
- // CaN equations
- dCa4CaN = 1e-3*(rcnCa4CaN - rcn0CaN - rcn2CaN - rcn4CaN); // Ca4CaN
- dCaMCa4CaN = 1e-3*(rcn0CaN - rcn02CaN); // CaMCa4CaN
- dCa2CaMCa4CaN = 1e-3*(rcn2CaN+rcn02CaN-rcn24CaN); // Ca2CaMCa4CaN
- dCa4CaMCa4CaN = 1e-3*(rcn4CaN+rcn24CaN); // Ca4CaMCa4CaN
- // encode output array
- d_finavalu[offset_1] = dCaM;
- d_finavalu[offset_2] = dCa2CaM;
- d_finavalu[offset_3] = dCa4CaM;
- d_finavalu[offset_4] = dCaMB;
- d_finavalu[offset_5] = dCa2CaMB;
- d_finavalu[offset_6] = dCa4CaMB;
- d_finavalu[offset_7] = dPb2;
- d_finavalu[offset_8] = dPb;
- d_finavalu[offset_9] = dPt;
- d_finavalu[offset_10] = dPt2;
- d_finavalu[offset_11] = dPa;
- d_finavalu[offset_12] = dCa4CaN;
- d_finavalu[offset_13] = dCaMCa4CaN;
- d_finavalu[offset_14] = dCa2CaMCa4CaN;
- d_finavalu[offset_15] = dCa4CaMCa4CaN;
- // write to global variables for adjusting Ca buffering in EC coupling model
- d_finavalu[com_offset] = 1e-3*(2*CaMKIItot*(rcnCKtt2-rcnCKb2b) - 2*(rcn02+rcn24+rcn02B+rcn24B+rcnCa4CaN+rcn02CaN+rcn24CaN)); // [uM/msec]
- //d_finavalu[JCa] = 1; // [uM/msec]
- }
- //========================================================================================================================================================================================================200
- // KERNEL
- //========================================================================================================================================================================================================200
- __kernel void
- kernel_gpu_opencl( int timeinst,
- __global fp *d_initvalu,
- __global fp *d_finavalu,
- __global fp *d_params,
- __global fp *d_com)
- {
- //======================================================================================================================================================150
- // VARIABLES
- //======================================================================================================================================================150
- // CUDA indexes
- int bx; // get current horizontal block index (0-n)
- int tx; // get current horizontal thread index (0-n)
- // pointers
- int valu_offset; // inivalu and finavalu offset
- int params_offset; // parameters offset
- int com_offset; // kernel1-kernel2 communication offset
- // module parameters
- fp CaDyad; // from ECC model, *** Converting from [mM] to [uM] ***
- fp CaSL; // from ECC model, *** Converting from [mM] to [uM] ***
- fp CaCyt; // from ECC model, *** Converting from [mM] to [uM] ***
- //======================================================================================================================================================150
- // COMPUTATION
- //======================================================================================================================================================150
- // indexes
- // bx = blockIdx.x; // get current horizontal block index (0-n)
- // tx = threadIdx.x; // get current horizontal thread index (0-n)
- bx = get_group_id(0); // get current horizontal block index (0-n)
- tx = get_local_id(0); // get current horizontal thread index (0-n)
- //====================================================================================================100
- // ECC
- //====================================================================================================100
- // limit to useful threads
- if(bx == 0){ // first processor runs ECC
- if(tx == 0){ // only 1 thread runs it, since its a sequential code
- // thread offset
- valu_offset = 0; //
- // ecc function
- kernel_ecc( timeinst,
- d_initvalu,
- d_finavalu,
- valu_offset,
- d_params);
- }
- }
- //====================================================================================================100
- // CAM x 3
- //====================================================================================================100
- // limit to useful threads
- else if(bx == 1){ // second processor runs CAMs (in parallel with ECC)
- if(tx == 0){ // only 1 thread runs it, since its a sequential code
- // specific
- valu_offset = 46;
- params_offset = 0;
- com_offset = 0;
- CaDyad = d_initvalu[35]*1e3; // from ECC model, *** Converting from [mM] to [uM] ***
- // cam function for Dyad
- kernel_cam( timeinst,
- d_initvalu,
- d_finavalu,
- valu_offset,
- d_params,
- params_offset,
- d_com,
- com_offset,
- CaDyad);
- // specific
- valu_offset = 61;
- params_offset = 5;
- com_offset = 1;
- CaSL = d_initvalu[36]*1e3; // from ECC model, *** Converting from [mM] to [uM] ***
- // cam function for Dyad
- kernel_cam( timeinst,
- d_initvalu,
- d_finavalu,
- valu_offset,
- d_params,
- params_offset,
- d_com,
- com_offset,
- CaSL);
- // specific
- valu_offset = 76;
- params_offset = 10;
- com_offset = 2;
- CaCyt = d_initvalu[37]*1e3; // from ECC model, *** Converting from [mM] to [uM] ***
- // cam function for Dyad
- kernel_cam( timeinst,
- d_initvalu,
- d_finavalu,
- valu_offset,
- d_params,
- params_offset,
- d_com,
- com_offset,
- CaCyt);
- }
- }
- //====================================================================================================100
- // END
- //====================================================================================================100
- //======================================================================================================================================================150
- // END
- //======================================================================================================================================================150
- }
- //========================================================================================================================================================================================================200
- // END
- //========================================================================================================================================================================================================200
- // #ifdef __cplusplus
- // }
- // #endif
|