Line data Source code
1 : //* This file is part of the MOOSE framework 2 : //* https://mooseframework.inl.gov 3 : //* 4 : //* All rights reserved, see COPYRIGHT for full restrictions 5 : //* https://github.com/idaholab/moose/blob/master/COPYRIGHT 6 : //* 7 : //* Licensed under LGPL 2.1, please see LICENSE for details 8 : //* https://www.gnu.org/licenses/lgpl-2.1.html 9 : 10 : #include "VectorPostprocessorReductionValue.h" 11 : #include "VectorPostprocessorInterface.h" 12 : #include <limits> 13 : 14 : registerMooseObject("MooseApp", VectorPostprocessorReductionValue); 15 : 16 : InputParameters 17 14361 : VectorPostprocessorReductionValue::validParams() 18 : { 19 14361 : InputParameters params = GeneralPostprocessor::validParams(); 20 : 21 14361 : params.addRequiredParam<VectorPostprocessorName>( 22 : "vectorpostprocessor", "The vectorpostprocessor from which a value is extracted"); 23 14361 : params.addRequiredParam<std::string>("vector_name", 24 : "Name of the vector for which to report a value"); 25 43083 : params.addParam<MooseEnum>( 26 : "value_type", 27 28722 : MooseEnum("max=0 min=1 sum=2 average=3", "sum"), 28 : "Type of reduction operation. Options are max, min, sum, and average."); 29 14361 : params.addClassDescription("Takes a VectorPostprocessor and performs a reduction operation on it " 30 : "(max, min, sum, average) and stores as postprocessor."); 31 : 32 14361 : return params; 33 0 : } 34 : 35 48 : VectorPostprocessorReductionValue::VectorPostprocessorReductionValue( 36 48 : const InputParameters & parameters) 37 : : GeneralPostprocessor(parameters), 38 48 : _vpp_name(getParam<VectorPostprocessorName>("vectorpostprocessor")), 39 48 : _vector_name(getParam<std::string>("vector_name")), 40 48 : _vpp_values(getVectorPostprocessorValue("vectorpostprocessor", _vector_name)), 41 96 : _value_type(getParam<MooseEnum>("value_type")) 42 : 43 : { 44 48 : } 45 : 46 : Real 47 88 : VectorPostprocessorReductionValue::getValue() const 48 : { 49 88 : Real r = 0; 50 88 : switch (_value_type) 51 : { 52 22 : case 0: 53 22 : r = std::numeric_limits<Real>::lowest(); 54 110 : for (auto & e : _vpp_values) 55 88 : if (e > r) 56 88 : r = e; 57 22 : break; 58 : 59 22 : case 1: 60 22 : r = std::numeric_limits<Real>::max(); 61 110 : for (auto & e : _vpp_values) 62 88 : if (e < r) 63 22 : r = e; 64 22 : break; 65 : 66 22 : case 2: 67 22 : r = 0; 68 110 : for (auto & e : _vpp_values) 69 88 : r += e; 70 22 : break; 71 : 72 22 : case 3: 73 22 : r = 0; 74 110 : for (auto & e : _vpp_values) 75 88 : r += e / _vpp_values.size(); 76 22 : return r; 77 : } 78 66 : return r; 79 : }