Skip to content

Commit

Permalink
Merge branch 'develop' into feature_dw_plot_exprs
Browse files Browse the repository at this point in the history
  • Loading branch information
dweindl authored Oct 30, 2023
2 parents 68503b0 + 492e480 commit 3968bd4
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 16 deletions.
2 changes: 1 addition & 1 deletion LICENSE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
11 changes: 9 additions & 2 deletions include/amici/steadystateproblem.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
34 changes: 22 additions & 12 deletions src/steadystateproblem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 "
Expand Down Expand Up @@ -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(
Expand Down Expand Up @@ -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());
}

Expand Down
2 changes: 1 addition & 1 deletion tests/cpp/CMakeLists.txt.in
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 2.8.12)
cmake_minimum_required(VERSION 3.15)

project(googletest-download NONE)

Expand Down

0 comments on commit 3968bd4

Please sign in to comment.