https://mooseframework.inl.gov
RndSmoothCircleIC.C
Go to the documentation of this file.
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 "RndSmoothCircleIC.h"
11 
12 // MOOSE includes
13 #include "MooseMesh.h"
14 #include "MooseVariable.h"
15 
16 registerMooseObject("PhaseFieldApp", RndSmoothCircleIC);
17 
20 {
22  params.addClassDescription(
23  "Random noise with different min/max inside/outside of a smooth circle");
24  params.addRequiredParam<Real>("variation_invalue", "Plus or minus this amount on the invalue");
25  params.addRequiredParam<Real>("variation_outvalue", "Plus or minus this amount on the outvalue");
26  return params;
27 }
28 
30  : SmoothCircleIC(parameters),
31  _variation_invalue(parameters.get<Real>("variation_invalue")),
32  _variation_outvalue(parameters.get<Real>("variation_outvalue"))
33 {
35  paramError("profile", "Hyperbolic tangent profile is not supported for this IC");
36 }
37 
38 Real
39 RndSmoothCircleIC::computeCircleValue(const Point & p, const Point & center, const Real & radius)
40 {
41  Point l_center = center;
42  Point l_p = p;
43  if (!_3D_spheres) // Create 3D cylinders instead of spheres
44  {
45  l_p(2) = 0.0;
46  l_center(2) = 0.0;
47  }
48  // Compute the distance between the current point and the center
49  Real dist = _mesh.minPeriodicDistance(_var.number(), l_p, l_center);
50 
51  // Return value
52  Real value = 0.0;
53 
54  if (dist <= radius - _int_width / 2.0) // Random value inside circle
56  else if (dist < radius + _int_width / 2.0) // Smooth interface
57  {
58  Real int_pos = (dist - radius + _int_width / 2.0) / _int_width;
59  value = _outvalue + (_invalue - _outvalue) * (1.0 + std::cos(int_pos * libMesh::pi)) / 2.0;
60  }
61  else // Random value outside circle
63 
64  return value;
65 }
SmoothcircleIC creates a circle of a given radius centered at a given point in the domain...
const Real radius
virtual Real computeCircleValue(const Point &p, const Point &center, const Real &radius)
unsigned int number() const
virtual Real value(const Point &p)
enum SmoothCircleBaseIC::ProfileType _profile
MooseVariableField< T > & _var
void addRequiredParam(const std::string &name, const std::string &doc_string)
const Real _variation_outvalue
static InputParameters validParams()
const Real _variation_invalue
void paramError(const std::string &param, Args... args) const
Real minPeriodicDistance(unsigned int nonlinear_var_num, Point p, Point q) const
RndSmoothcircleIC creates a smooth circle with a random distribution of values inside and outside of ...
static InputParameters validParams()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void addClassDescription(const std::string &doc_string)
registerMooseObject("PhaseFieldApp", RndSmoothCircleIC)
Real rand(std::size_t i)
RndSmoothCircleIC(const InputParameters &parameters)
const Elem & get(const ElemType type_in)
static const std::string center
Definition: NS.h:28
const Real pi