www.mooseframework.org
RndBoundingBoxIC.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
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 
17 {
19  params.addClassDescription(
20  "Random noise with different min/max inside/outside of a bounding box");
21 
22  params.addRequiredParam<Real>("x1", "The x coordinate of the lower left-hand corner of the box");
23  params.addRequiredParam<Real>("y1", "The y coordinate of the lower left-hand corner of the box");
24  params.addParam<Real>("z1", 0.0, "The z coordinate of the lower left-hand corner of the box");
25 
26  params.addRequiredParam<Real>("x2", "The x coordinate of the upper right-hand corner of the box");
27  params.addRequiredParam<Real>("y2", "The y coordinate of the upper right-hand corner of the box");
28  params.addParam<Real>("z2", 0.0, "The z coordinate of the upper right-hand corner of the box");
29 
30  params.addRequiredParam<Real>("mx_invalue", "The max value of the variable invalue the box");
31  params.addRequiredParam<Real>("mx_outvalue", "The max value of the variable outvalue the box");
32 
33  params.addParam<Real>("mn_invalue", 0.0, "The min value of the variable invalue the box");
34  params.addParam<Real>("mn_outvalue", 0.0, "The min value of the variable outvalue the box");
35  return params;
36 }
37 
39  : InitialCondition(parameters),
40  _x1(parameters.get<Real>("x1")),
41  _y1(parameters.get<Real>("y1")),
42  _z1(parameters.get<Real>("z1")),
43  _x2(parameters.get<Real>("x2")),
44  _y2(parameters.get<Real>("y2")),
45  _z2(parameters.get<Real>("z2")),
46  _mx_invalue(parameters.get<Real>("mx_invalue")),
47  _mx_outvalue(parameters.get<Real>("mx_outvalue")),
48  _mn_invalue(parameters.get<Real>("mn_invalue")),
49  _mn_outvalue(parameters.get<Real>("mn_outvalue")),
50  _range_invalue(_mx_invalue - _mn_invalue),
51  _range_outvalue(_mx_outvalue - _mn_outvalue),
52  _bottom_left(_x1, _y1, _z1),
53  _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 }
58 
59 Real
60 RndBoundingBoxIC::value(const Point & p)
61 {
62  // Random number between 0 and 1
63  Real rand_num = MooseRandom::rand();
64 
65  for (const auto i : make_range(Moose::dim))
66  if (p(i) < _bottom_left(i) || p(i) > _top_right(i))
67  return rand_num * _range_outvalue + _mn_outvalue;
68 
69  return rand_num * _range_invalue + _mn_invalue;
70 }
registerMooseObject("PhaseFieldApp", RndBoundingBoxIC)
RndBoundingBoxIC(const InputParameters &parameters)
const Point _top_right
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
RndBoundingBoxIC allows setting the initial condition of a value inside and outside of a specified bo...
const Real _range_outvalue
static constexpr std::size_t dim
static InputParameters validParams()
const Real _range_invalue
void addRequiredParam(const std::string &name, const std::string &doc_string)
const Point _bottom_left
static InputParameters validParams()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const Real _mn_invalue
IntRange< T > make_range(T beg, T end)
virtual Real value(const Point &p)
static Real rand()
void addClassDescription(const std::string &doc_string)
const Real _mn_outvalue
const Elem & get(const ElemType type_in)