From 17c0df07514d31473400cbaf9a9b102d767706de Mon Sep 17 00:00:00 2001 From: Matthew Goodson Date: Thu, 28 Oct 2021 16:57:38 -0400 Subject: [PATCH 1/2] Add ability to set write convergence for surface balance. Add the ability to set the write convergence flag for the Newton solver used in the GSI surface balance. The user was already able to set the maximum number of iterations. See #305. --- src/gsi/GasSurfaceInteraction.cpp | 7 +++++++ src/gsi/GasSurfaceInteraction.h | 6 ++++++ src/gsi/Surface.h | 13 +++++++++++++ src/gsi/SurfaceBalanceSolverMass.cpp | 7 +++++++ src/gsi/SurfaceBalanceSolverMassEnergy.cpp | 7 +++++++ 5 files changed, 40 insertions(+) diff --git a/src/gsi/GasSurfaceInteraction.cpp b/src/gsi/GasSurfaceInteraction.cpp index 73450ad7..7d0b2e59 100644 --- a/src/gsi/GasSurfaceInteraction.cpp +++ b/src/gsi/GasSurfaceInteraction.cpp @@ -210,6 +210,13 @@ void GasSurfaceInteraction::setIterationsSurfaceBalance(const int& iter) //============================================================================== +void GasSurfaceInteraction::setWriteConvergenceSurfaceBalance(const bool flag) +{ + mp_surf->setWriteConvergenceSurfaceBalance(flag); +} + +//============================================================================== + void GasSurfaceInteraction::getMassBlowingRate(double& mdot){ mdot = mp_surf->massBlowingRate(); } diff --git a/src/gsi/GasSurfaceInteraction.h b/src/gsi/GasSurfaceInteraction.h index 74e07ce5..72746d52 100644 --- a/src/gsi/GasSurfaceInteraction.h +++ b/src/gsi/GasSurfaceInteraction.h @@ -172,6 +172,12 @@ class GasSurfaceInteraction */ void setIterationsSurfaceBalance(const int& iter); + /** + * Function which allows to report convergence history for Newton solves. + * Default is false. + */ + void setWriteConvergenceSurfaceBalance(const bool flag); + /** * Function which return the total mass blowing flux. * diff --git a/src/gsi/Surface.h b/src/gsi/Surface.h index b2ca4e8a..28fff930 100644 --- a/src/gsi/Surface.h +++ b/src/gsi/Surface.h @@ -185,6 +185,19 @@ class Surface << "the surface energy balance!"; } +//============================================================================== + + /** + * Purely virtual function to be called to set the flag to output + * convergence history for the Newton solver. + */ + virtual void setWriteConvergenceSurfaceBalance(const bool flag) + { + throw LogicError() + << "setWriteConvergenceSurfaceBalance can be called only when solving " + << "the surface energy balance!"; + } + //============================================================================== /** diff --git a/src/gsi/SurfaceBalanceSolverMass.cpp b/src/gsi/SurfaceBalanceSolverMass.cpp index d240c930..5ebb0898 100644 --- a/src/gsi/SurfaceBalanceSolverMass.cpp +++ b/src/gsi/SurfaceBalanceSolverMass.cpp @@ -187,6 +187,13 @@ class SurfaceBalanceSolverMass : void setIterationsSurfaceBalance(const int& iter){ setMaxIterations(iter); } +//============================================================================== + + void setWriteConvergenceSurfaceBalance(const bool flag) + { + setWriteConvergenceHistory(flag); + } + //============================================================================== double massBlowingRate() { diff --git a/src/gsi/SurfaceBalanceSolverMassEnergy.cpp b/src/gsi/SurfaceBalanceSolverMassEnergy.cpp index 31a76e9b..07c0817b 100644 --- a/src/gsi/SurfaceBalanceSolverMassEnergy.cpp +++ b/src/gsi/SurfaceBalanceSolverMassEnergy.cpp @@ -230,6 +230,13 @@ class SurfaceBalanceSolverMassEnergy : void setIterationsSurfaceBalance(const int& iter){ setMaxIterations(iter); } +//============================================================================== + + void setWriteConvergenceSurfaceBalance(const bool flag) + { + setWriteConvergenceHistory(flag); + } + //============================================================================== double massBlowingRate() From 74961cddf4ec74535a56029695e67e815de45267 Mon Sep 17 00:00:00 2001 From: Matthew Goodson Date: Fri, 19 Nov 2021 15:30:04 -0500 Subject: [PATCH 2/2] Add set convergence tolerance for surface balance. Add ability to set the convergence tolerance for the surface balance solvers via the Mixture object. See #305. --- src/gsi/GasSurfaceInteraction.cpp | 7 +++++++ src/gsi/GasSurfaceInteraction.h | 6 ++++++ src/gsi/Surface.h | 13 +++++++++++++ src/gsi/SurfaceBalanceSolverMass.cpp | 7 +++++++ src/gsi/SurfaceBalanceSolverMassEnergy.cpp | 7 +++++++ 5 files changed, 40 insertions(+) diff --git a/src/gsi/GasSurfaceInteraction.cpp b/src/gsi/GasSurfaceInteraction.cpp index 7d0b2e59..26685aac 100644 --- a/src/gsi/GasSurfaceInteraction.cpp +++ b/src/gsi/GasSurfaceInteraction.cpp @@ -217,6 +217,13 @@ void GasSurfaceInteraction::setWriteConvergenceSurfaceBalance(const bool flag) //============================================================================== +void GasSurfaceInteraction::setConvergenceToleranceSurfaceBalance(const double& tol) +{ + mp_surf->setConvergenceToleranceSurfaceBalance(tol); +} + +//============================================================================== + void GasSurfaceInteraction::getMassBlowingRate(double& mdot){ mdot = mp_surf->massBlowingRate(); } diff --git a/src/gsi/GasSurfaceInteraction.h b/src/gsi/GasSurfaceInteraction.h index 72746d52..14df0bcb 100644 --- a/src/gsi/GasSurfaceInteraction.h +++ b/src/gsi/GasSurfaceInteraction.h @@ -178,6 +178,12 @@ class GasSurfaceInteraction */ void setWriteConvergenceSurfaceBalance(const bool flag); + /** + * Function which allows to set convergence tolerance for Newton solves. + * Default value is 1e-8. + */ + void setConvergenceToleranceSurfaceBalance(const double& tol); + /** * Function which return the total mass blowing flux. * diff --git a/src/gsi/Surface.h b/src/gsi/Surface.h index 28fff930..f9481cd1 100644 --- a/src/gsi/Surface.h +++ b/src/gsi/Surface.h @@ -198,6 +198,19 @@ class Surface << "the surface energy balance!"; } +//============================================================================== + + /** + * Purely virtual function to be called to set the tolerance + * parameter for the Newton solver. + */ + virtual void setConvergenceToleranceSurfaceBalance(const double& tol) + { + throw LogicError() + << "setConvergenceToleranceSurfaceBalance can be called only when solving " + << "the surface energy balance!"; + } + //============================================================================== /** diff --git a/src/gsi/SurfaceBalanceSolverMass.cpp b/src/gsi/SurfaceBalanceSolverMass.cpp index 5ebb0898..d08681f6 100644 --- a/src/gsi/SurfaceBalanceSolverMass.cpp +++ b/src/gsi/SurfaceBalanceSolverMass.cpp @@ -194,6 +194,13 @@ class SurfaceBalanceSolverMass : setWriteConvergenceHistory(flag); } +//============================================================================== + + void setConvergenceToleranceSurfaceBalance(const double& tol) + { + setEpsilon(tol); + } + //============================================================================== double massBlowingRate() { diff --git a/src/gsi/SurfaceBalanceSolverMassEnergy.cpp b/src/gsi/SurfaceBalanceSolverMassEnergy.cpp index 07c0817b..1a7bd827 100644 --- a/src/gsi/SurfaceBalanceSolverMassEnergy.cpp +++ b/src/gsi/SurfaceBalanceSolverMassEnergy.cpp @@ -237,6 +237,13 @@ class SurfaceBalanceSolverMassEnergy : setWriteConvergenceHistory(flag); } +//============================================================================== + + void setConvergenceToleranceSurfaceBalance(const double& tol) + { + setEpsilon(tol); + } + //============================================================================== double massBlowingRate()