https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
17
20{
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
38Real
39RndSmoothCircleIC::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, 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}
const Real p
Point center
registerMooseObject("PhaseFieldApp", RndSmoothCircleIC)
MooseVariableField< T > & _var
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
void paramError(const std::string &param, Args... args) const
Real minPeriodicDistance(const unsigned int sys_num, const unsigned int var_num, const Point &p, const Point &q) const
Real rand(std::size_t i)
RndSmoothcircleIC creates a smooth circle with a random distribution of values inside and outside of ...
virtual Real computeCircleValue(const Point &p, const Point &center, const Real &radius)
const Real _variation_invalue
static InputParameters validParams()
const Real _variation_outvalue
RndSmoothCircleIC(const InputParameters &parameters)
virtual Real value(const Point &p)
enum SmoothCircleBaseIC::ProfileType _profile
SmoothcircleIC creates a circle of a given radius centered at a given point in the domain.
static InputParameters validParams()
const Real pi
const Real radius