From 6846962db7e8c63606d365c3a4b62ffd5d930375 Mon Sep 17 00:00:00 2001 From: Lucian Smith Date: Thu, 30 Jun 2022 12:17:04 -0700 Subject: [PATCH] Scale control coefficients to zero instead of dividing by zero. We plan to investigate this further, but this brings us in line with other simulators. --- source/rrRoadRunner.cpp | 11 +- test/model_analysis/model_analysis.cpp | 18 + .../zero_rate_at_steady_state.xml | 5381 +++++++++++++++++ 3 files changed, 5407 insertions(+), 3 deletions(-) create mode 100644 test/models/ModelAnalysis/zero_rate_at_steady_state.xml diff --git a/source/rrRoadRunner.cpp b/source/rrRoadRunner.cpp index b66c0ffe7a..33b5003654 100644 --- a/source/rrRoadRunner.cpp +++ b/source/rrRoadRunner.cpp @@ -4341,15 +4341,20 @@ namespace rr { if (ufcc.RSize() > 0) { for (int i = 0; i < ufcc.RSize(); i++) { + double irate = 0; + impl->model->getReactionRates(1, &i, &irate); + if (irate == 0) { + rrLog(rr::Logger::LOG_WARNING) << "Unable to properly scale values for reaction '"; + rrLog(rr::Logger::LOG_WARNING) << impl->model->getReactionId(i); + rrLog(rr::Logger::LOG_WARNING) << "': its value is zero, so we cannot divide by it. Setting the scaled coefficients to zero instead."; + } for (int j = 0; j < ufcc.CSize(); j++) { - double irate = 0; - impl->model->getReactionRates(1, &i, &irate); if (irate != 0) { double jrate = 0; impl->model->getReactionRates(1, &j, &jrate); ufcc[i][j] = ufcc[i][j] * jrate / irate; } else { - throw (Exception("Dividing with zero")); + ufcc[i][j] = 0; } } } diff --git a/test/model_analysis/model_analysis.cpp b/test/model_analysis/model_analysis.cpp index ac57add81e..eaee290fb6 100644 --- a/test/model_analysis/model_analysis.cpp +++ b/test/model_analysis/model_analysis.cpp @@ -22,6 +22,24 @@ class ModelAnalysisTests : public RoadRunnerTest { }; +TEST_F(ModelAnalysisTests, issue1031) { + //Config::setValue(Config::LLVM_BACKEND, Config::LLVM_BACKEND_VALUES::LLJIT); + rr::RoadRunner rr((modelAnalysisModelsDir / "zero_rate_at_steady_state.xml").string()); + + rr.steadyState(); + ls::DoubleMatrix sfcc = rr.getScaledFluxControlCoefficientMatrix(); + + int AKnum = 14; + ASSERT_STREQ("AK", rr.getReactionIds()[AKnum].c_str()); + + for (unsigned int rxn = 0; rxn < sfcc.CSize(); rxn++) + { + EXPECT_EQ(sfcc.Element(AKnum, rxn), 0.0); + } + +} + + TEST_F(ModelAnalysisTests, issue1020_full) { //Config::setValue(Config::LLVM_BACKEND, Config::LLVM_BACKEND_VALUES::LLJIT); rr::RoadRunner rr((modelAnalysisModelsDir / "Jarrah2014.xml").string()); diff --git a/test/models/ModelAnalysis/zero_rate_at_steady_state.xml b/test/models/ModelAnalysis/zero_rate_at_steady_state.xml new file mode 100644 index 0000000000..5f1572f378 --- /dev/null +++ b/test/models/ModelAnalysis/zero_rate_at_steady_state.xml @@ -0,0 +1,5381 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HXT_Vmax_1 + + + + + GLCo + + + GLCi + + + + + HXT_Kglc_1 + + + + + + 1 + + + + + + + GLCo + + + GLCi + + + + HXT_Kglc_1 + + + + + + + + HXT_Ki_1 + + + GLCo + + + GLCi + + + + + + HXT_Kglc_1 + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + HK_Vmax_2 + + + + + + + + + GLCi + + + ATP + + + + + + HK_Kglc_2 + + + HK_Katp_2 + + + + + + + + + G6P + + + ADP + + + + + + HK_Kglc_2 + + + HK_Katp_2 + + + HK_Keq_2 + + + + + + + + + + + 1 + + + + + GLCi + + + HK_Kglc_2 + + + + + + G6P + + + HK_Kg6p_2 + + + + + + + 1 + + + + + ATP + + + HK_Katp_2 + + + + + + ADP + + + HK_Kadp_2 + + + + + + + + + + + + + + + + + + + + + + + PGI_Vmax_3 + + + + + + + G6P + + + PGI_Kg6p_3 + + + + + + F6P + + + + + PGI_Kg6p_3 + + + PGI_Keq_3 + + + + + + + + + 1 + + + + + G6P + + + PGI_Kg6p_3 + + + + + + F6P + + + PGI_Kf6p_3 + + + + + + + + + + + + + + + + + + + + + + + + + + PFK_Vmax_4 + + + + + + + PFK_gR_4 + + + + + F6P + + + PFK_Kf6p_4 + + + + + + ATP + + + PFK_Katp_4 + + + + + + 1 + + + + + F6P + + + PFK_Kf6p_4 + + + + + + ATP + + + PFK_Katp_4 + + + + + + + + + + + + PFK_gR_4 + + + F6P + + + + PFK_Kf6p_4 + + + + ATP + + + + PFK_Katp_4 + + + + + + + + + + + + 1 + + + + + F6P + + + PFK_Kf6p_4 + + + + + + ATP + + + PFK_Katp_4 + + + + + + + + + + + + PFK_gR_4 + + + F6P + + + + PFK_Kf6p_4 + + + + ATP + + + + PFK_Katp_4 + + + + + 2 + + + + + + PFK_L0_4 + + + + + + + + + 1 + + + + + + + PFK_Ciatp_4 + + + ATP + + + + PFK_Kiatp_4 + + + + + + + 1 + + + + + ATP + + + PFK_Kiatp_4 + + + + + + 2 + + + + + + + + + + 1 + + + + + + + PFK_Camp_4 + + + AMP + + + + PFK_Kamp_4 + + + + + + + 1 + + + + + AMP + + + PFK_Kamp_4 + + + + + + 2 + + + + + + + + + + 1 + + + + + + + PFK_Cf26_4 + + + F26bP + + + + PFK_Kf26_4 + + + + + + + + PFK_Cf16_4 + + + F16bP + + + + PFK_Kf16_4 + + + + + + + 1 + + + + + F26bP + + + PFK_Kf26_4 + + + + + + F16bP + + + PFK_Kf16_4 + + + + + + 2 + + + + + + + + 1 + + + + + + + PFK_Catp_4 + + + ATP + + + + PFK_Katp_4 + + + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + ALD_Vmax_5 + + + + + + + F16bP + + + ALD_Kf16bp_5 + + + + + + + + DHAP + + + GAP + + + + + + ALD_Kf16bp_5 + + + ALD_Keq_5 + + + + + + + + + 1 + + + + + F16bP + + + ALD_Kf16bp_5 + + + + + + DHAP + + + ALD_Kdhap_5 + + + + + + GAP + + + ALD_Kgap_5 + + + + + + + + F16bP + + + GAP + + + + + + ALD_Kf16bp_5 + + + ALD_Kigap_5 + + + + + + + + + DHAP + + + GAP + + + + + + ALD_Kdhap_5 + + + ALD_Kgap_5 + + + + + + + + + + + + + + + + + + + + + + + TPI_k1_6 + + + DHAP + + + + + + TPI_k2_6 + + + GAP + + + + + + + + + + + + + + + + + + + + + + + GAPDH_C_7 + + + + + + + + + GAPDH_Vmaxf_7 + + + GAP + + + NAD + + + + + + GAPDH_Kgap_7 + + + GAPDH_Knad_7 + + + + + + + + + GAPDH_Vmaxr_7 + + + BPG + + + NADH + + + + + + GAPDH_Kbpg_7 + + + GAPDH_Knadh_7 + + + + + + + + + + + 1 + + + + + GAP + + + GAPDH_Kgap_7 + + + + + + BPG + + + GAPDH_Kbpg_7 + + + + + + + 1 + + + + + NAD + + + GAPDH_Knad_7 + + + + + + NADH + + + GAPDH_Knadh_7 + + + + + + + + + + + + + + + + + + + + + + + + + PGK_Vmax_8 + + + + + + + + + PGK_Keq_8 + + + BPG + + + ADP + + + + + + P3G + + + ATP + + + + + + + PGK_Kp3g_8 + + + PGK_Katp_8 + + + + + + + + + + 1 + + + + + BPG + + + PGK_Kbpg_8 + + + + + + P3G + + + PGK_Kp3g_8 + + + + + + + 1 + + + + + ADP + + + PGK_Kadp_8 + + + + + + ATP + + + PGK_Katp_8 + + + + + + + + + + + + + + + + + + + + + + + PGM_Vmax_9 + + + + + + + P3G + + + PGM_Kp3g_9 + + + + + + P2G + + + + + PGM_Kp3g_9 + + + PGM_Keq_9 + + + + + + + + + 1 + + + + + P3G + + + PGM_Kp3g_9 + + + + + + P2G + + + PGM_Kp2g_9 + + + + + + + + + + + + + + + + + + + + + + ENO_Vmax_10 + + + + + + + P2G + + + ENO_Kp2g_10 + + + + + + PEP + + + + + ENO_Kp2g_10 + + + ENO_Keq_10 + + + + + + + + + 1 + + + + + P2G + + + ENO_Kp2g_10 + + + + + + PEP + + + ENO_Kpep_10 + + + + + + + + + + + + + + + + + + + + + + + + PYK_Vmax_11 + + + + + + + + + PEP + + + ADP + + + + + + PYK_Kpep_11 + + + PYK_Kadp_11 + + + + + + + + + PYR + + + ATP + + + + + + PYK_Kpep_11 + + + PYK_Kadp_11 + + + PYK_Keq_11 + + + + + + + + + + + 1 + + + + + PEP + + + PYK_Kpep_11 + + + + + + PYR + + + PYK_Kpyr_11 + + + + + + + 1 + + + + + ADP + + + PYK_Kadp_11 + + + + + + ATP + + + PYK_Katp_11 + + + + + + + + + + + + + + + + + + + + + + + + PDC_Vmax_12 + + + + + + + PYR + + + PDC_Kpyr_12 + + + + PDC_nH_12 + + + + + + + 1 + + + + + + + PYR + + + PDC_Kpyr_12 + + + + PDC_nH_12 + + + + + + + + + + + + + + + + + + + + + + + + ADH_Vmax_13 + + + + + + + + + EtOH + + + NAD + + + + + + ADH_Ketoh_13 + + + ADH_Kinad_13 + + + + + + + + + AcAld + + + NADH + + + + + + ADH_Ketoh_13 + + + ADH_Kinad_13 + + + ADH_Keq_13 + + + + + + + + + 1 + + + + + NAD + + + ADH_Kinad_13 + + + + + + + + EtOH + + + ADH_Knad_13 + + + + + + ADH_Kinad_13 + + + ADH_Ketoh_13 + + + + + + + + + AcAld + + + ADH_Knadh_13 + + + + + + ADH_Kinadh_13 + + + ADH_Kacald_13 + + + + + + + NADH + + + ADH_Kinadh_13 + + + + + + + + EtOH + + + NAD + + + + + + ADH_Kinad_13 + + + ADH_Ketoh_13 + + + + + + + + + NAD + + + AcAld + + + ADH_Knadh_13 + + + + + + ADH_Kinad_13 + + + ADH_Kinadh_13 + + + ADH_Kacald_13 + + + + + + + + + EtOH + + + NADH + + + ADH_Knad_13 + + + + + + ADH_Kinad_13 + + + ADH_Kinadh_13 + + + ADH_Ketoh_13 + + + + + + + + + AcAld + + + NADH + + + + + + ADH_Kacald_13 + + + ADH_Kinadh_13 + + + + + + + + + EtOH + + + NAD + + + AcAld + + + + + + ADH_Kinad_13 + + + ADH_Kiacald_13 + + + ADH_Ketoh_13 + + + + + + + + + EtOH + + + AcAld + + + NADH + + + + + + ADH_Kietoh_13 + + + ADH_Kinadh_13 + + + ADH_Kacald_13 + + + + + + + + + + + + + + + + + + + + + ATPase_Katpase_14 + + + ATP + + + + + + + + + + + + + + + + + + + + + AK_k1_15 + + + ADP + + + ADP + + + + + + AK_k2_15 + + + ATP + + + AMP + + + + + + + + + + + + + + + + + + + + + + + G3PDH_Vmax_16 + + + + + + + + + DHAP + + + G3PDH_Kdhap_16 + + + + + + NADH + + + G3PDH_Knadh_16 + + + + + + + + + Glycerol + + + G3PDH_Kdhap_16 + + + + + + NAD + + + G3PDH_Knadh_16 + + + + + + 1 + + + G3PDH_Keq_16 + + + + + + + + + + + 1 + + + + + DHAP + + + G3PDH_Kdhap_16 + + + + + + Glycerol + + + G3PDH_Kglycerol_16 + + + + + + + 1 + + + + + NADH + + + G3PDH_Knadh_16 + + + + + + NAD + + + G3PDH_Knad_16 + + + + + + + + + + + + + + + + + + + + + Glycogen_Branch_KGLYCOGEN_17 + + + + + + + + + + + + + + + + + Trehalose_Branch_Ktrehalose_18 + + + + + + + + + + + + + + + + + + + Succinate_Branch_k_19 + + + AcAld + + + + + + + + \ No newline at end of file