diff --git a/Src/Base/AMReX_PODVector.H b/Src/Base/AMReX_PODVector.H index 435ac287752..358021cb5f7 100644 --- a/Src/Base/AMReX_PODVector.H +++ b/Src/Base/AMReX_PODVector.H @@ -222,6 +222,12 @@ namespace amrex { extern AMREX_EXPORT Real growth_factor; inline Real GetGrowthFactor () { return growth_factor; } + inline void SetGrowthFactor (Real a_factor); + + namespace detail + { + void ValidateUserInput (); + } void Initialize (); } diff --git a/Src/Base/AMReX_PODVector.cpp b/Src/Base/AMReX_PODVector.cpp index 07952caa5fc..4391ae2b705 100644 --- a/Src/Base/AMReX_PODVector.cpp +++ b/Src/Base/AMReX_PODVector.cpp @@ -6,28 +6,40 @@ namespace amrex::VectorGrowthStrategy { Real growth_factor = 1.5_rt; - void Initialize () { - ParmParse pp("amrex"); - pp.queryAdd("vector_growth_factor", growth_factor); - - // clamp user input to reasonable values - constexpr Real min_factor = 1.05_rt; - constexpr Real max_factor = 4._rt; + // clamp user input to reasonable values + constexpr Real min_factor = 1.001_rt; + constexpr Real max_factor = 4._rt; - if (growth_factor < min_factor) { - if (Verbose()) { - amrex::Print() << "Warning: user-provided vector growth factor is too small." - << " Clamping to " << min_factor << ". \n"; + namespace detail + { + void ValidateUserInput() { + if (growth_factor < min_factor) { + if (Verbose()) { + amrex::Print() << "Warning: user-provided vector growth factor is too small." + << " Clamping to " << min_factor << ". \n"; + } + growth_factor = min_factor; } - growth_factor = min_factor; - } - if (growth_factor > max_factor) { - if (Verbose()) { - amrex::Print() << "Warning: user-provided vector growth factor is too large." - << " Clamping to " << max_factor << ". \n"; + if (growth_factor > max_factor) { + if (Verbose()) { + amrex::Print() << "Warning: user-provided vector growth factor is too large." + << " Clamping to " << max_factor << ". \n"; + } + growth_factor = max_factor; } - growth_factor = max_factor; } } + + void Initialize () { + ParmParse pp("amrex"); + pp.queryAdd("vector_growth_factor", growth_factor); + + detail::ValidateUserInput(); + } + + void SetGrowthFactor (Real a_factor) { + growth_factor = a_factor; + detail::ValidateUserInput(); + } }