diff --git a/LICENSE.md b/LICENSE.md index d504f8447a..4dadbc28a9 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -27,7 +27,7 @@ The AMICI logo is released under the Creative Commons CC0 1.0 Universal * Parts of the *SUNDIALS* solver suite are redistributed under the BSD 3-Clause License (BSD-3-Clause) with terms given in - `ThirdParty/SuiteSparse/LICENSE.txt` + `ThirdParty/sundials/LICENSE` * Parts of *SuiteSparse* are redistributed under the various licenses with the terms given in `ThirdParty/SuiteSparse/LICENSE.txt` * *gsl-lite* is redistributed under the MIT License (MIT) with the terms given diff --git a/include/amici/steadystateproblem.h b/include/amici/steadystateproblem.h index b3af55c20a..dc19c014c4 100644 --- a/include/amici/steadystateproblem.h +++ b/include/amici/steadystateproblem.h @@ -208,8 +208,15 @@ class SteadystateProblem { /** * @brief Stores state and throws an exception if equilibration failed - */ - [[noreturn]] void handleSteadyStateFailure(); + * @param tried_newton_1 Whether any Newton step was attempted before + * simulation + * @param tried_simulation Whether simulation was attempted + * @param tried_newton_2 Whether any Newton step was attempted after + * simulation + */ + [[noreturn]] void handleSteadyStateFailure( + bool tried_newton_1, bool tried_simulation, bool tried_newton_2 + ); /** * @brief Assembles the error message to be thrown. diff --git a/src/steadystateproblem.cpp b/src/steadystateproblem.cpp index 816d0a4c53..c655b9b386 100644 --- a/src/steadystateproblem.cpp +++ b/src/steadystateproblem.cpp @@ -60,9 +60,9 @@ SteadystateProblem::SteadystateProblem(Solver const& solver, Model const& model) "sensitivities during simulation"); if (solver.getSensitivityMethod() == SensitivityMethod::forward && model.getSteadyStateComputationMode() - == SteadyStateComputationMode::newtonOnly + == SteadyStateComputationMode::newtonOnly && model.getSteadyStateSensitivityMode() - == SteadyStateSensitivityMode::integrationOnly) + == SteadyStateSensitivityMode::integrationOnly) throw AmiException("For forward sensitivity analysis steady-state " "computation mode 'newtonOnly' and steady-state " "sensitivity mode 'integrationOnly' are not " @@ -152,7 +152,10 @@ void SteadystateProblem::findSteadyState( /* Nothing worked, throw an as informative error as possible */ if (!checkSteadyStateSuccess()) - handleSteadyStateFailure(); + handleSteadyStateFailure( + !turnOffNewton, !turnOffSimulation, + !turnOffNewton && !turnOffSimulation + ); } void SteadystateProblem::findSteadyStateByNewtonsMethod( @@ -394,16 +397,23 @@ void SteadystateProblem::getQuadratureBySimulation( } } -[[noreturn]] void SteadystateProblem::handleSteadyStateFailure() { +[[noreturn]] void SteadystateProblem::handleSteadyStateFailure( + bool tried_newton_1, bool tried_simulation, bool tried_newton_2 +) { /* Throw error message according to error codes */ - std::string errorString = "Steady state computation failed. " - "First run of Newton solver failed"; - writeErrorString(&errorString, steady_state_status_[0]); - errorString.append(" Simulation to steady state failed"); - writeErrorString(&errorString, steady_state_status_[1]); - errorString.append(" Second run of Newton solver failed"); - writeErrorString(&errorString, steady_state_status_[2]); - + std::string errorString = "Steady state computation failed."; + if (tried_newton_1) { + errorString.append(" First run of Newton solver failed"); + writeErrorString(&errorString, steady_state_status_[0]); + } + if (tried_simulation) { + errorString.append(" Simulation to steady state failed"); + writeErrorString(&errorString, steady_state_status_[1]); + } + if (tried_newton_2) { + errorString.append(" Second run of Newton solver failed"); + writeErrorString(&errorString, steady_state_status_[2]); + } throw AmiException(errorString.c_str()); } diff --git a/tests/cpp/CMakeLists.txt.in b/tests/cpp/CMakeLists.txt.in index 0704ae5d1e..a93f5955c2 100644 --- a/tests/cpp/CMakeLists.txt.in +++ b/tests/cpp/CMakeLists.txt.in @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8.12) +cmake_minimum_required(VERSION 3.15) project(googletest-download NONE)