From a739ab8ff7d706d1c1b263dd47d8c4ac2dafc490 Mon Sep 17 00:00:00 2001 From: "Curtis C. Ober" Date: Fri, 22 Mar 2019 10:05:36 -0600 Subject: [PATCH] Tempus: Fix Divide by Zero In the relative norm calculation, the denominator is not check if it is zero during the consistency check. Fix it. All Tempus tests pass. #4698 --- packages/tempus/src/Tempus_StepperImplicit_impl.hpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/tempus/src/Tempus_StepperImplicit_impl.hpp b/packages/tempus/src/Tempus_StepperImplicit_impl.hpp index e83bfd3b07b2..19f79f23fb61 100644 --- a/packages/tempus/src/Tempus_StepperImplicit_impl.hpp +++ b/packages/tempus/src/Tempus_StepperImplicit_impl.hpp @@ -212,7 +212,11 @@ void StepperImplicit::setInitialConditions( this->evaluateImplicitODE(f, x, xDot, time, p); - Scalar reldiff = Thyra::norm(*f)/Thyra::norm(*x); + Scalar normX = Thyra::norm(*x); + Scalar reldiff = Scalar(0.0); + if (normX == Scalar(0.0)) reldiff = Thyra::norm(*f); + else reldiff = Thyra::norm(*f)/normX; + Scalar eps = Scalar(100.0)*std::abs(Teuchos::ScalarTraits::eps()); if (reldiff > eps) { RCP out = this->getOStream();