From 80e8b0e989c2b7b8a9c5361548c4f66112c87fb4 Mon Sep 17 00:00:00 2001 From: Guillaume Giudicelli Date: Wed, 22 Jan 2025 12:04:18 -0700 Subject: [PATCH] Add support for maximum absolute value in ExtremeValue PPs closes #29745 --- framework/include/postprocessors/ExtremeValueBase.h | 3 ++- framework/src/postprocessors/ExtremeValueBase.C | 11 +++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/framework/include/postprocessors/ExtremeValueBase.h b/framework/include/postprocessors/ExtremeValueBase.h index 0d06ab3bcceb..62cab6f24ef5 100644 --- a/framework/include/postprocessors/ExtremeValueBase.h +++ b/framework/include/postprocessors/ExtremeValueBase.h @@ -34,7 +34,8 @@ class ExtremeValueBase : public T enum class ExtremeType { MAX, - MIN + MIN, + MAX_ABS } _type; /// Extreme value and proxy value at the same point diff --git a/framework/src/postprocessors/ExtremeValueBase.C b/framework/src/postprocessors/ExtremeValueBase.C index 39d230f4a852..8c6dd97fe59b 100644 --- a/framework/src/postprocessors/ExtremeValueBase.C +++ b/framework/src/postprocessors/ExtremeValueBase.C @@ -22,7 +22,7 @@ ExtremeValueBase::validParams() { InputParameters params = T::validParams(); params.addParam("value_type", - MooseEnum("max=0 min=1", "max"), + MooseEnum("max=0 min=1 max_abs=2", "max"), "Type of extreme value to return. 'max' " "returns the maximum value. 'min' returns " "the minimum value."); @@ -41,7 +41,7 @@ template void ExtremeValueBase::initialize() { - if (_type == ExtremeType::MAX) + if (_type == ExtremeType::MAX || _type == ExtremeType::MAX_ABS) _proxy_value = std::make_pair(-std::numeric_limits::max(), -std::numeric_limits::max()); else if (_type == ExtremeType::MIN) @@ -58,6 +58,8 @@ ExtremeValueBase::computeExtremeValue() if ((_type == ExtremeType::MAX && pv > _proxy_value) || (_type == ExtremeType::MIN && pv < _proxy_value)) _proxy_value = pv; + else if (_type == ExtremeType::MAX_ABS && std::abs(pv.first) > _proxy_value.first) + _proxy_value = std::make_pair(std::abs(pv.first), pv.second); } template @@ -71,7 +73,7 @@ template void ExtremeValueBase::finalize() { - if (_type == ExtremeType::MAX) + if (_type == ExtremeType::MAX || _type == ExtremeType::MAX_ABS) { if (_use_proxy) this->gatherProxyValueMax(_proxy_value.first, _proxy_value.second); @@ -93,7 +95,8 @@ ExtremeValueBase::threadJoin(const UserObject & y) { const auto & pps = static_cast &>(y); - if ((_type == ExtremeType::MAX && pps._proxy_value > _proxy_value) || + if (((_type == ExtremeType::MAX || _type == ExtremeType::MAX_ABS) && + pps._proxy_value > _proxy_value) || (_type == ExtremeType::MIN && pps._proxy_value < _proxy_value)) _proxy_value = pps._proxy_value; }