www.mooseframework.org
RndSmoothCircleIC.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 "RndSmoothCircleIC.h"
11 
12 // MOOSE includes
13 #include "MooseMesh.h"
14 #include "MooseVariable.h"
15 
16 registerMooseObject("PhaseFieldApp", RndSmoothCircleIC);
17 
18 template <>
19 InputParameters
21 {
22  InputParameters params = validParams<SmoothCircleIC>();
23  params.addClassDescription(
24  "Random noise with different min/max inside/outside of a smooth circle");
25  params.addRequiredParam<Real>("variation_invalue", "Plus or minus this amount on the invalue");
26  params.addRequiredParam<Real>("variation_outvalue", "Plus or minus this amount on the outvalue");
27  return params;
28 }
29 
30 RndSmoothCircleIC::RndSmoothCircleIC(const InputParameters & parameters)
31  : SmoothCircleIC(parameters),
32  _variation_invalue(parameters.get<Real>("variation_invalue")),
33  _variation_outvalue(parameters.get<Real>("variation_outvalue"))
34 {
36  paramError("profile", "Hyperbolic tangent profile is not supported for this IC");
37 }
38 
39 Real
40 RndSmoothCircleIC::computeCircleValue(const Point & p, const Point & center, const Real & radius)
41 {
42  Point l_center = center;
43  Point l_p = p;
44  if (!_3D_spheres) // Create 3D cylinders instead of spheres
45  {
46  l_p(2) = 0.0;
47  l_center(2) = 0.0;
48  }
49  // Compute the distance between the current point and the center
50  Real dist = _mesh.minPeriodicDistance(_var.number(), l_p, l_center);
51 
52  // Return value
53  Real value = 0.0;
54 
55  if (dist <= radius - _int_width / 2.0) // Random value inside circle
57  else if (dist < radius + _int_width / 2.0) // Smooth interface
58  {
59  Real int_pos = (dist - radius + _int_width / 2.0) / _int_width;
60  value = _outvalue + (_invalue - _outvalue) * (1.0 + std::cos(int_pos * libMesh::pi)) / 2.0;
61  }
62  else // Random value outside circle
64 
65  return value;
66 }
SmoothCircleBaseIC::_random
MooseRandom _random
Definition: SmoothCircleBaseIC.h:63
RndSmoothCircleIC::computeCircleValue
virtual Real computeCircleValue(const Point &p, const Point &center, const Real &radius)
Definition: RndSmoothCircleIC.C:40
RndSmoothCircleIC.h
SmoothCircleBaseIC::value
virtual Real value(const Point &p)
Definition: SmoothCircleBaseIC.C:71
validParams< SmoothCircleIC >
InputParameters validParams< SmoothCircleIC >()
Definition: SmoothCircleIC.C:16
SmoothCircleBaseIC::_profile
enum SmoothCircleBaseIC::ProfileType _profile
RndSmoothCircleIC::_variation_outvalue
const Real _variation_outvalue
Definition: RndSmoothCircleIC.h:33
RndSmoothCircleIC::_variation_invalue
const Real _variation_invalue
Definition: RndSmoothCircleIC.h:32
SmoothCircleBaseIC::ProfileType::TANH
SmoothCircleBaseIC::_invalue
Real _invalue
Definition: SmoothCircleBaseIC.h:46
SmoothCircleBaseIC::_mesh
MooseMesh & _mesh
Definition: SmoothCircleBaseIC.h:44
SmoothCircleBaseIC::_outvalue
Real _outvalue
Definition: SmoothCircleBaseIC.h:47
SmoothCircleIC
SmoothcircleIC creates a circle of a given radius centered at a given point in the domain.
Definition: SmoothCircleIC.h:25
SmoothCircleBaseIC::_int_width
Real _int_width
Definition: SmoothCircleBaseIC.h:48
validParams< RndSmoothCircleIC >
InputParameters validParams< RndSmoothCircleIC >()
Definition: RndSmoothCircleIC.C:20
SmoothCircleBaseIC::_3D_spheres
bool _3D_spheres
Definition: SmoothCircleBaseIC.h:49
RndSmoothCircleIC::RndSmoothCircleIC
RndSmoothCircleIC(const InputParameters &parameters)
Definition: RndSmoothCircleIC.C:30
RndSmoothCircleIC
RndSmoothcircleIC creates a smooth circle with a random distribution of values inside and outside of ...
Definition: RndSmoothCircleIC.h:24
registerMooseObject
registerMooseObject("PhaseFieldApp", RndSmoothCircleIC)