Line data Source code
1 : #include "ValueRangeHeuristicUserObject.h" 2 : 3 : registerMooseObject("CardinalApp", ValueRangeHeuristicUserObject); 4 : 5 : InputParameters 6 12 : ValueRangeHeuristicUserObject::validParams() 7 : { 8 : 9 12 : InputParameters params = ClusteringUserObjectBase::validParams(); 10 24 : params.addRequiredRangeCheckedParam<Real>("tolerance_percentage", 11 : "tolerance_percentage>0 & tolerance_percentage<1", 12 : "Fractional tolerance used to define" 13 : " the acceptable range around the reference value."); 14 24 : params.addRequiredParam<Real>( 15 : "value", "The reference value to decide if an element is close enough to be clustered"); 16 12 : params.addClassDescription( 17 : "Clusters elements if their value is within the tolerance of the value provided."); 18 : 19 12 : return params; 20 0 : } 21 : 22 6 : ValueRangeHeuristicUserObject::ValueRangeHeuristicUserObject(const InputParameters & params) 23 : : ClusteringUserObjectBase(params), 24 6 : _tolerance_percentage(getParam<Real>("tolerance_percentage")), 25 12 : _value(getParam<Real>("value")), 26 6 : _upper_limit((1 + _tolerance_percentage) * _value), 27 6 : _lower_limit((1 - _tolerance_percentage) * _value) 28 : { 29 6 : } 30 : 31 : bool 32 3906 : ValueRangeHeuristicUserObject::isInsideTheRange(libMesh::Elem * element) const 33 : { 34 3906 : Real metric_value = getMetricData(element); 35 3906 : return _lower_limit < metric_value && metric_value < _upper_limit; 36 : } 37 : 38 : bool 39 3696 : ValueRangeHeuristicUserObject::evaluate(libMesh::Elem * base_element, 40 : libMesh::Elem * neighbor_element) const 41 : { 42 3696 : return isInsideTheRange(base_element) && isInsideTheRange(neighbor_element); 43 : }