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 "RndBoundingBoxIC.h" 11 : #include "MooseRandom.h" 12 : 13 : registerMooseObject("PhaseFieldApp", RndBoundingBoxIC); 14 : 15 : InputParameters 16 4 : RndBoundingBoxIC::validParams() 17 : { 18 4 : InputParameters params = InitialCondition::validParams(); 19 4 : params.addClassDescription( 20 : "Random noise with different min/max inside/outside of a bounding box"); 21 : 22 8 : params.addRequiredParam<Real>("x1", "The x coordinate of the lower left-hand corner of the box"); 23 8 : params.addRequiredParam<Real>("y1", "The y coordinate of the lower left-hand corner of the box"); 24 8 : params.addParam<Real>("z1", 0.0, "The z coordinate of the lower left-hand corner of the box"); 25 : 26 8 : params.addRequiredParam<Real>("x2", "The x coordinate of the upper right-hand corner of the box"); 27 8 : params.addRequiredParam<Real>("y2", "The y coordinate of the upper right-hand corner of the box"); 28 8 : params.addParam<Real>("z2", 0.0, "The z coordinate of the upper right-hand corner of the box"); 29 : 30 8 : params.addRequiredParam<Real>("mx_invalue", "The max value of the variable invalue the box"); 31 8 : params.addRequiredParam<Real>("mx_outvalue", "The max value of the variable outvalue the box"); 32 : 33 8 : params.addParam<Real>("mn_invalue", 0.0, "The min value of the variable invalue the box"); 34 8 : params.addParam<Real>("mn_outvalue", 0.0, "The min value of the variable outvalue the box"); 35 4 : return params; 36 0 : } 37 : 38 2 : RndBoundingBoxIC::RndBoundingBoxIC(const InputParameters & parameters) 39 : : InitialCondition(parameters), 40 2 : _x1(parameters.get<Real>("x1")), 41 2 : _y1(parameters.get<Real>("y1")), 42 2 : _z1(parameters.get<Real>("z1")), 43 2 : _x2(parameters.get<Real>("x2")), 44 2 : _y2(parameters.get<Real>("y2")), 45 2 : _z2(parameters.get<Real>("z2")), 46 2 : _mx_invalue(parameters.get<Real>("mx_invalue")), 47 2 : _mx_outvalue(parameters.get<Real>("mx_outvalue")), 48 2 : _mn_invalue(parameters.get<Real>("mn_invalue")), 49 2 : _mn_outvalue(parameters.get<Real>("mn_outvalue")), 50 2 : _range_invalue(_mx_invalue - _mn_invalue), 51 2 : _range_outvalue(_mx_outvalue - _mn_outvalue), 52 2 : _bottom_left(_x1, _y1, _z1), 53 2 : _top_right(_x2, _y2, _z2) 54 : { 55 : mooseAssert(_range_invalue >= 0.0, "Inside Min > Inside Max for RandomIC!"); 56 : mooseAssert(_range_outvalue >= 0.0, "Outside Min > Outside Max for RandomIC!"); 57 2 : } 58 : 59 : Real 60 2560 : RndBoundingBoxIC::value(const Point & p) 61 : { 62 : // Random number between 0 and 1 63 : Real rand_num = MooseRandom::rand(); 64 : 65 5824 : for (const auto i : make_range(Moose::dim)) 66 4736 : if (p(i) < _bottom_left(i) || p(i) > _top_right(i)) 67 1472 : return rand_num * _range_outvalue + _mn_outvalue; 68 : 69 1088 : return rand_num * _range_invalue + _mn_invalue; 70 : }