C C There are a total of 22 entries in the algebraic variable array. C There are a total of 10 entries in each of the rate and state variable arrays. C There are a total of 43 entries in the constant variable array. C C C VOI is time in component environment (second). C CONSTS(1) is R_mt in component heart_parameters (kPa_second_per_mL). C CONSTS(2) is R_av in component heart_parameters (kPa_second_per_mL). C CONSTS(3) is R_tc in component heart_parameters (kPa_second_per_mL). C CONSTS(4) is R_pv in component heart_parameters (kPa_second_per_mL). C CONSTS(5) is R_pul in component heart_parameters (kPa_second_per_mL). C CONSTS(6) is R_sys in component heart_parameters (kPa_second_per_mL). C CONSTS(7) is L_tc in component heart_parameters (kPa_second2_per_mL). C CONSTS(8) is L_pv in component heart_parameters (kPa_second2_per_mL). C CONSTS(9) is L_mt in component heart_parameters (kPa_second2_per_mL). C CONSTS(10) is L_av in component heart_parameters (kPa_second2_per_mL). C CONSTS(11) is V_tot in component heart_parameters (mL). C CONSTS(12) is P_th in component heart_parameters (kPa). C ALGBRC(2) is e_t in component driver_function (dimensionless). C CONSTS(13) is A in component driver_function (dimensionless). C CONSTS(14) is B in component driver_function (per_second2). C CONSTS(15) is C in component driver_function (second). C ALGBRC(1) is tau in component driver_function (second). C CONSTS(16) is period in component driver_function (second). C ALGBRC(3) is V_pcd in component pericardium (mL). C ALGBRC(4) is P_pcd in component pericardium (kPa). C ALGBRC(5) is P_peri in component pericardium (kPa). C STATES(1) is V_lv in component left_ventricle (mL). C STATES(2) is V_rv in component right_ventricle (mL). C CONSTS(17) is P_0_pcd in component pericardium (kPa). C CONSTS(18) is V_0_pcd in component pericardium (mL). C CONSTS(19) is lambda_pcd in component pericardium (per_mL). C ALGBRC(7) is V_lvf in component left_ventricle (mL). C ALGBRC(10) is P_lvf in component left_ventricle (kPa). C ALGBRC(11) is P_lv in component left_ventricle (kPa). C ALGBRC(6) is V_spt in component septum (mL). C ALGBRC(8) is P_es_lvf in component lvf_calculator (kPa). C ALGBRC(9) is P_ed_lvf in component lvf_calculator (kPa). C ALGBRC(19) is P_pu in component pulmonary_vein (kPa). C ALGBRC(18) is P_ao in component aorta (kPa). C CONSTS(20) is E_es_lvf in component lvf_calculator (kPa_per_mL). C CONSTS(21) is lambda_lvf in component lvf_calculator (per_mL). C CONSTS(22) is P_0_lvf in component lvf_calculator (kPa). C STATES(3) is Q_mt in component flow (mL_per_second). C STATES(4) is Q_av in component flow (mL_per_second). C CONSTS(23) is V_d_lvf in component lvf_calculator (mL). C CONSTS(24) is V_0_lvf in component lvf_calculator (mL). C ALGBRC(12) is V_rvf in component right_ventricle (mL). C ALGBRC(15) is P_rvf in component right_ventricle (kPa). C ALGBRC(16) is P_rv in component right_ventricle (kPa). C ALGBRC(13) is P_es_rvf in component rvf_calculator (kPa). C ALGBRC(14) is P_ed_rvf in component rvf_calculator (kPa). C ALGBRC(17) is P_pa in component pulmonary_artery (kPa). C ALGBRC(20) is P_vc in component vena_cava (kPa). C CONSTS(25) is E_es_rvf in component rvf_calculator (kPa_per_mL). C CONSTS(26) is lambda_rvf in component rvf_calculator (per_mL). C CONSTS(27) is P_0_rvf in component rvf_calculator (kPa). C STATES(5) is Q_tc in component flow (mL_per_second). C STATES(6) is Q_pv in component flow (mL_per_second). C CONSTS(28) is V_d_rvf in component rvf_calculator (mL). C CONSTS(29) is V_0_rvf in component rvf_calculator (mL). C CONSTS(30) is E_es_spt in component septum (kPa_per_mL). C CONSTS(31) is V_d_spt in component septum (mL). C CONSTS(32) is P_0_spt in component septum (kPa). C CONSTS(33) is lambda_spt in component septum (per_mL). C CONSTS(34) is V_0_spt in component septum (mL). C CONSTS(35) is one in component septum (dimensionless). C CONSTS(36) is E_es_pa in component pulmonary_artery (kPa_per_mL). C STATES(7) is V_pa in component pulmonary_artery (mL). C CONSTS(37) is V_d_pa in component pulmonary_artery (mL). C ALGBRC(21) is Q_pul in component flow (mL_per_second). C CONSTS(38) is E_es_pu in component pulmonary_vein (kPa_per_mL). C STATES(8) is V_pu in component pulmonary_vein (mL). C CONSTS(39) is V_d_pu in component pulmonary_vein (mL). C CONSTS(40) is E_es_ao in component aorta (kPa_per_mL). C STATES(9) is V_ao in component aorta (mL). C CONSTS(41) is V_d_ao in component aorta (mL). C ALGBRC(22) is Q_sys in component flow (mL_per_second). C CONSTS(42) is E_es_vc in component vena_cava (kPa_per_mL). C STATES(10) is V_vc in component vena_cava (mL). C CONSTS(43) is V_d_vc in component vena_cava (mL). C RATES(1) is d/dt V_lv in component left_ventricle (mL). C RATES(2) is d/dt V_rv in component right_ventricle (mL). C RATES(7) is d/dt V_pa in component pulmonary_artery (mL). C RATES(8) is d/dt V_pu in component pulmonary_vein (mL). C RATES(9) is d/dt V_ao in component aorta (mL). C RATES(10) is d/dt V_vc in component vena_cava (mL). C RATES(3) is d/dt Q_mt in component flow (mL_per_second). C RATES(4) is d/dt Q_av in component flow (mL_per_second). C RATES(5) is d/dt Q_tc in component flow (mL_per_second). C RATES(6) is d/dt Q_pv in component flow (mL_per_second). C SUBROUTINE initConsts(CONSTS, RATES, STATES) REAL CONSTS(*), RATES(*), STATES(*) CONSTS(1) = 0.0158 CONSTS(2) = 0.0180 CONSTS(3) = 0.0237 CONSTS(4) = 0.0055 CONSTS(5) = 0.1552 CONSTS(6) = 1.0889 CONSTS(7) = 8.0093e-5 CONSTS(8) = 1.4868e-4 CONSTS(9) = 7.6968e-5 CONSTS(10) = 1.2189e-4 CONSTS(11) = 5.5 CONSTS(12) = -4 CONSTS(13) = 1 CONSTS(14) = 80 CONSTS(15) = 0.375 CONSTS(16) = 0.75 STATES(1) = 94.6812 STATES(2) = 90.7302 CONSTS(17) = 0.5003 CONSTS(18) = 200 CONSTS(19) = 0.03 CONSTS(20) = 2.8798 CONSTS(21) = 0.033 CONSTS(22) = 0.1203 STATES(3) = 245.5813 STATES(4) = 0 CONSTS(23) = 0 CONSTS(24) = 0 CONSTS(25) = 0.585 CONSTS(26) = 0.023 CONSTS(27) = 0.2157 STATES(5) = 190.0661 STATES(6) = 0 CONSTS(28) = 0 CONSTS(29) = 0 CONSTS(30) = 48.754 CONSTS(31) = 2 CONSTS(32) = 1.1101 CONSTS(33) = 0.435 CONSTS(34) = 2 CONSTS(35) = 1 CONSTS(36) = 0.369 STATES(7) = 43.0123 CONSTS(37) = 0 CONSTS(38) = 0.0073 STATES(8) = 808.4579 CONSTS(39) = 0 CONSTS(40) = 0.6913 STATES(9) = 133.3381 CONSTS(41) = 0 CONSTS(42) = 0.0059 STATES(10) = 329.7803 CONSTS(43) = 0 RETURN END SUBROUTINE computeRates(VOI, CONSTS, RATES, STATES, ALGBRC) REAL VOI, CONSTS(*), RATES(*), STATES(*), ALGBRC(*) RATES(1) = TERNRY(STATES(3).LT.0.00000.AND.STATES(4).LT.0.00000, 0.00000, TERNRY(STATES(3).LT.0.00000, - STATES(4), TERNRY(STATES(4).LT.0.00000, STATES(3), STATES(3) - STATES(4)) RATES(2) = TERNRY(STATES(5).LT.0.00000.AND.STATES(6).LT.0.00000, 0.00000, TERNRY(STATES(5).LT.0.00000, - STATES(6), TERNRY(STATES(6).LT.0.00000, STATES(5), STATES(5) - STATES(6)) ALGBRC(3) = STATES(1)+STATES(2) ALGBRC(4) = CONSTS(17)*(EXP( CONSTS(19)*(ALGBRC(3) - CONSTS(18))) - 1.00000) ALGBRC(5) = ALGBRC(4)+CONSTS(12) ALGBRC(1) = TERNRY(VOI.LE.CONSTS(16), VOI, TERNRY(VOI.LE. CONSTS(16)*2.00000, VOI - CONSTS(16), TERNRY(VOI.LE. CONSTS(16)*3.00000, VOI - CONSTS(16)*2.00000, TERNRY(VOI.LE. CONSTS(16)*4.00000, VOI - CONSTS(16)*3.00000, TERNRY(VOI.LE. CONSTS(16)*5.00000, VOI - CONSTS(16)*4.00000, TERNRY(VOI.LE. CONSTS(16)*6.00000, VOI - CONSTS(16)*5.00000, TERNRY(VOI.LE. CONSTS(16)*7.00000, VOI - CONSTS(16)*6.00000, TERNRY(VOI.LE. CONSTS(16)*8.00000, VOI - CONSTS(16)*7.00000, TERNRY(VOI.LE. CONSTS(16)*9.00000, VOI - CONSTS(16)*8.00000, TERNRY(VOI.LE. CONSTS(16)*10.0000, VOI - CONSTS(16)*9.00000, TERNRY(VOI.LE. CONSTS(16)*11.0000, VOI - CONSTS(16)*10.0000, TERNRY(VOI.LE. CONSTS(16)*12.0000, VOI - CONSTS(16)*11.0000, TERNRY(VOI.LE. CONSTS(16)*13.0000, VOI - CONSTS(16)*12.0000, 0.0/0.0) ALGBRC(2) = CONSTS(13)*EXP( - CONSTS(14)*ALGBRC(1) - CONSTS(15) ** 2.00000) CALL minimize(minfunc_0, CONSTS, VARIABLES, ALGBRC(6)) ALGBRC(7) = STATES(1) - ALGBRC(6) ALGBRC(8) = CONSTS(20)*(ALGBRC(7) - CONSTS(23)) ALGBRC(9) = CONSTS(22)*(EXP( CONSTS(21)*(ALGBRC(7) - CONSTS(24))) - 1.00000) ALGBRC(10) = ALGBRC(2)*ALGBRC(8)+ (1.00000 - ALGBRC(2))*ALGBRC(9) ALGBRC(11) = ALGBRC(10)+ALGBRC(5) ALGBRC(18) = CONSTS(40)*(STATES(9) - CONSTS(41)) RATES(4) = TERNRY(ALGBRC(11) - ALGBRC(18).LT.0.00000.AND.STATES(4).LT.0.00000, 0.00000, ((ALGBRC(11) - ALGBRC(18)) - STATES(4)*CONSTS(2))/CONSTS(10)) ALGBRC(12) = STATES(2)+ALGBRC(6) ALGBRC(13) = CONSTS(25)*(ALGBRC(12) - CONSTS(28)) ALGBRC(14) = CONSTS(27)*(EXP( CONSTS(26)*(ALGBRC(12) - CONSTS(29))) - 1.00000) ALGBRC(15) = ALGBRC(2)*ALGBRC(13)+ (1.00000 - ALGBRC(2))*ALGBRC(14) ALGBRC(16) = ALGBRC(15)+ALGBRC(5) ALGBRC(17) = CONSTS(36)*(STATES(7) - CONSTS(37))+CONSTS(12) RATES(6) = TERNRY(ALGBRC(16) - ALGBRC(17).LT.0.00000.AND.STATES(6).LT.0.00000, 0.00000, ((ALGBRC(16) - ALGBRC(17)) - STATES(6)*CONSTS(4))/CONSTS(8)) ALGBRC(19) = CONSTS(38)*(STATES(8) - CONSTS(39))+CONSTS(12) RATES(3) = TERNRY(ALGBRC(19) - ALGBRC(11).LT.0.00000.AND.STATES(3).LT.0.00000, 0.00000, ((ALGBRC(19) - ALGBRC(11)) - STATES(3)*CONSTS(1))/CONSTS(9)) ALGBRC(20) = CONSTS(42)*(STATES(10) - CONSTS(43)) RATES(5) = TERNRY(ALGBRC(20) - ALGBRC(16).LT.0.00000.AND.STATES(5).LT.0.00000, 0.00000, ((ALGBRC(20) - ALGBRC(16)) - STATES(5)*CONSTS(3))/CONSTS(7)) ALGBRC(21) = (ALGBRC(17) - ALGBRC(19))/CONSTS(5) RATES(7) = TERNRY(STATES(6).LT.0.00000, - ALGBRC(21), STATES(6) - ALGBRC(21)) RATES(8) = TERNRY(STATES(3).LT.0.00000, ALGBRC(21), ALGBRC(21) - STATES(3)) ALGBRC(22) = (ALGBRC(18) - ALGBRC(20))/CONSTS(6) RATES(9) = TERNRY(STATES(4).LT.0.00000, - ALGBRC(22), STATES(4) - ALGBRC(22)) RATES(10) = TERNRY(STATES(5).LT.0.00000, ALGBRC(22), ALGBRC(22) - STATES(5)) RETURN END SUBROUTINE computeVariables(VOI, CONSTS, RATES, STATES, ALGBRC) REAL VOI, CONSTS(*), RATES(*), STATES(*), ALGBRC(*) ALGBRC(3) = STATES(1)+STATES(2) ALGBRC(4) = CONSTS(17)*(EXP( CONSTS(19)*(ALGBRC(3) - CONSTS(18))) - 1.00000) ALGBRC(5) = ALGBRC(4)+CONSTS(12) ALGBRC(1) = TERNRY(VOI.LE.CONSTS(16), VOI, TERNRY(VOI.LE. CONSTS(16)*2.00000, VOI - CONSTS(16), TERNRY(VOI.LE. CONSTS(16)*3.00000, VOI - CONSTS(16)*2.00000, TERNRY(VOI.LE. CONSTS(16)*4.00000, VOI - CONSTS(16)*3.00000, TERNRY(VOI.LE. CONSTS(16)*5.00000, VOI - CONSTS(16)*4.00000, TERNRY(VOI.LE. CONSTS(16)*6.00000, VOI - CONSTS(16)*5.00000, TERNRY(VOI.LE. CONSTS(16)*7.00000, VOI - CONSTS(16)*6.00000, TERNRY(VOI.LE. CONSTS(16)*8.00000, VOI - CONSTS(16)*7.00000, TERNRY(VOI.LE. CONSTS(16)*9.00000, VOI - CONSTS(16)*8.00000, TERNRY(VOI.LE. CONSTS(16)*10.0000, VOI - CONSTS(16)*9.00000, TERNRY(VOI.LE. CONSTS(16)*11.0000, VOI - CONSTS(16)*10.0000, TERNRY(VOI.LE. CONSTS(16)*12.0000, VOI - CONSTS(16)*11.0000, TERNRY(VOI.LE. CONSTS(16)*13.0000, VOI - CONSTS(16)*12.0000, 0.0/0.0) ALGBRC(2) = CONSTS(13)*EXP( - CONSTS(14)*ALGBRC(1) - CONSTS(15) ** 2.00000) ALGBRC(7) = STATES(1) - ALGBRC(6) ALGBRC(8) = CONSTS(20)*(ALGBRC(7) - CONSTS(23)) ALGBRC(9) = CONSTS(22)*(EXP( CONSTS(21)*(ALGBRC(7) - CONSTS(24))) - 1.00000) ALGBRC(10) = ALGBRC(2)*ALGBRC(8)+ (1.00000 - ALGBRC(2))*ALGBRC(9) ALGBRC(11) = ALGBRC(10)+ALGBRC(5) ALGBRC(18) = CONSTS(40)*(STATES(9) - CONSTS(41)) ALGBRC(12) = STATES(2)+ALGBRC(6) ALGBRC(13) = CONSTS(25)*(ALGBRC(12) - CONSTS(28)) ALGBRC(14) = CONSTS(27)*(EXP( CONSTS(26)*(ALGBRC(12) - CONSTS(29))) - 1.00000) ALGBRC(15) = ALGBRC(2)*ALGBRC(13)+ (1.00000 - ALGBRC(2))*ALGBRC(14) ALGBRC(16) = ALGBRC(15)+ALGBRC(5) ALGBRC(17) = CONSTS(36)*(STATES(7) - CONSTS(37))+CONSTS(12) ALGBRC(19) = CONSTS(38)*(STATES(8) - CONSTS(39))+CONSTS(12) ALGBRC(20) = CONSTS(42)*(STATES(10) - CONSTS(43)) ALGBRC(21) = (ALGBRC(17) - ALGBRC(19))/CONSTS(5) ALGBRC(22) = (ALGBRC(18) - ALGBRC(20))/CONSTS(6) RETURN END REAL FUNCTION minfunc_0(CONSTS, VARIABLES) REAL CONSTS(*), VARIABLES(*) minfunc_0 = abs(0.00000 - ((( ALGBRC(2)*CONSTS(30)*(ALGBRC(6) - CONSTS(31))+ (CONSTS(35) - ALGBRC(2))*CONSTS(32)*(EXP( CONSTS(33)*(ALGBRC(6) - CONSTS(34))) - CONSTS(35))) - ALGBRC(2)*CONSTS(20)*(STATES(1) - ALGBRC(6))) - (1.00000 - ALGBRC(2))*CONSTS(22)*(EXP( CONSTS(21)*(STATES(1) - ALGBRC(6))) - 1.00000))+ ALGBRC(2)*CONSTS(25)*(STATES(2)+ALGBRC(6))+ (1.00000 - ALGBRC(2))*CONSTS(27)*(EXP( CONSTS(26)*(STATES(2)+ALGBRC(6))) - 1.00000)) RETURN END REAL FUNCTION TERNRY(TEST, VALA, VALB) LOGICAL TEST REAL VALA, VALB IF (TEST) THEN TERNRY = VALA ELSE TERNRY = VALB ENDIF RETURN END