www.mooseframework.org
Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
RndSmoothCircleIC Class Reference

RndSmoothcircleIC creates a smooth circle with a random distribution of values inside and outside of the circle. More...

#include <RndSmoothCircleIC.h>

Inheritance diagram for RndSmoothCircleIC:
[legend]

Public Member Functions

 RndSmoothCircleIC (const InputParameters &parameters)
 
virtual Real value (const Point &p)
 
virtual RealGradient gradient (const Point &p)
 
virtual void initialSetup ()
 

Protected Types

enum  ProfileType { ProfileType::COS, ProfileType::TANH }
 

Protected Member Functions

virtual void computeCircleRadii ()
 
virtual void computeCircleCenters ()
 
virtual RealGradient computeCircleGradient (const Point &p, const Point &center, const Real &radius)
 

Protected Attributes

Real _x1
 
Real _y1
 
Real _z1
 
Real _radius
 
Point _center
 
MooseMesh & _mesh
 
Real _invalue
 
Real _outvalue
 
Real _int_width
 
bool _3D_spheres
 
bool _zero_gradient
 
unsigned int _num_dim
 
std::vector< Point > _centers
 
std::vector< Real > _radii
 
enum SmoothCircleBaseIC::ProfileType _profile
 
MooseRandom _random
 

Private Member Functions

virtual Real computeCircleValue (const Point &p, const Point &center, const Real &radius)
 

Private Attributes

const Real _variation_invalue
 
const Real _variation_outvalue
 

Detailed Description

RndSmoothcircleIC creates a smooth circle with a random distribution of values inside and outside of the circle.

Definition at line 24 of file RndSmoothCircleIC.h.

Member Enumeration Documentation

◆ ProfileType

enum SmoothCircleBaseIC::ProfileType
strongprotectedinherited
Enumerator
COS 
TANH 

Definition at line 57 of file SmoothCircleBaseIC.h.

58  {
59  COS,
60  TANH
61  } _profile;

Constructor & Destructor Documentation

◆ RndSmoothCircleIC()

RndSmoothCircleIC::RndSmoothCircleIC ( const InputParameters &  parameters)

Definition at line 30 of file RndSmoothCircleIC.C.

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 }

Member Function Documentation

◆ computeCircleCenters()

void SmoothCircleIC::computeCircleCenters ( )
protectedvirtualinherited

Implements SmoothCircleBaseIC.

Definition at line 44 of file SmoothCircleIC.C.

45 {
46  _centers = {_center};
47 }

◆ computeCircleGradient()

RealGradient SmoothCircleBaseIC::computeCircleGradient ( const Point &  p,
const Point &  center,
const Real &  radius 
)
protectedvirtualinherited

Definition at line 149 of file SmoothCircleBaseIC.C.

152 {
153  Point l_center = center;
154  Point l_p = p;
155  if (!_3D_spheres) // Create 3D cylinders instead of spheres
156  {
157  l_p(2) = 0.0;
158  l_center(2) = 0.0;
159  }
160  // Compute the distance between the current point and the center
161  Real dist = _mesh.minPeriodicDistance(_var.number(), l_p, l_center);
162 
163  // early return if we are probing the center of the circle
164  if (dist == 0.0)
165  return 0.0;
166 
167  Real DvalueDr = 0.0;
168  switch (_profile)
169  {
170  case ProfileType::COS:
171  if (dist < radius + _int_width / 2.0 && dist > radius - _int_width / 2.0)
172  {
173  const Real int_pos = (dist - radius + _int_width / 2.0) / _int_width;
174  const Real Dint_posDr = 1.0 / _int_width;
175  DvalueDr = Dint_posDr * (_invalue - _outvalue) *
176  (-std::sin(int_pos * libMesh::pi) * libMesh::pi) / 2.0;
177  }
178  break;
179 
180  case ProfileType::TANH:
181  DvalueDr = -(_invalue - _outvalue) * 0.5 / _int_width * libMesh::pi *
182  (1.0 - Utility::pow<2>(std::tanh(4.0 * (radius - dist) / _int_width)));
183  break;
184 
185  default:
186  mooseError("Internal error.");
187  }
188 
189  return _mesh.minPeriodicVector(_var.number(), center, p) * (DvalueDr / dist);
190 }

Referenced by SmoothCircleBaseIC::gradient().

◆ computeCircleRadii()

void SmoothCircleIC::computeCircleRadii ( )
protectedvirtualinherited

Implements SmoothCircleBaseIC.

Definition at line 38 of file SmoothCircleIC.C.

39 {
40  _radii = {_radius};
41 }

◆ computeCircleValue()

Real RndSmoothCircleIC::computeCircleValue ( const Point &  p,
const Point &  center,
const Real &  radius 
)
privatevirtual

Reimplemented from SmoothCircleBaseIC.

Definition at line 40 of file RndSmoothCircleIC.C.

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 }

◆ gradient()

RealGradient SmoothCircleBaseIC::gradient ( const Point &  p)
virtualinherited

Reimplemented in PolycrystalVoronoiVoidIC.

Definition at line 87 of file SmoothCircleBaseIC.C.

88 {
89  if (_zero_gradient)
90  return 0.0;
91 
92  RealGradient gradient = 0.0;
93  Real value = _outvalue;
94  Real val2 = 0.0;
95 
96  for (unsigned int circ = 0; circ < _centers.size(); ++circ)
97  {
98  val2 = computeCircleValue(p, _centers[circ], _radii[circ]);
99  if ((val2 > value && _invalue > _outvalue) || (val2 < value && _outvalue > _invalue))
100  {
101  value = val2;
102  gradient = computeCircleGradient(p, _centers[circ], _radii[circ]);
103  }
104  }
105 
106  return gradient;
107 }

Referenced by PolycrystalVoronoiVoidIC::gradient().

◆ initialSetup()

void SmoothCircleBaseIC::initialSetup ( )
virtualinherited

Reimplemented in PolycrystalVoronoiVoidIC, MultiSmoothCircleIC, and LatticeSmoothCircleIC.

Definition at line 57 of file SmoothCircleBaseIC.C.

58 {
59  // Compute radii and centers and initialize vector sizes
62 
63  if (_centers.size() != _radii.size())
64  mooseError("_center and _radii vectors are not the same size in the Circle IC");
65 
66  if (_centers.size() < 1)
67  mooseError("_center and _radii were not initialized in the Circle IC");
68 }

Referenced by LatticeSmoothCircleIC::initialSetup(), and MultiSmoothCircleIC::initialSetup().

◆ value()

Real SmoothCircleBaseIC::value ( const Point &  p)
virtualinherited

Reimplemented in PolycrystalVoronoiVoidIC.

Definition at line 71 of file SmoothCircleBaseIC.C.

72 {
73  Real value = _outvalue;
74  Real val2 = 0.0;
75 
76  for (unsigned int circ = 0; circ < _centers.size() && value != _invalue; ++circ)
77  {
78  val2 = computeCircleValue(p, _centers[circ], _radii[circ]);
79  if ((val2 > value && _invalue > _outvalue) || (val2 < value && _outvalue > _invalue))
80  value = val2;
81  }
82 
83  return value;
84 }

Referenced by computeCircleValue(), SmoothCircleBaseIC::computeCircleValue(), SmoothCircleBaseIC::gradient(), and PolycrystalVoronoiVoidIC::value().

Member Data Documentation

◆ _3D_spheres

bool SmoothCircleBaseIC::_3D_spheres
protectedinherited

◆ _center

Point SmoothCircleIC::_center
protectedinherited

Definition at line 38 of file SmoothCircleIC.h.

Referenced by SmoothCircleIC::computeCircleCenters().

◆ _centers

std::vector<Point> SmoothCircleBaseIC::_centers
protectedinherited

◆ _int_width

Real SmoothCircleBaseIC::_int_width
protectedinherited

◆ _invalue

Real SmoothCircleBaseIC::_invalue
protectedinherited

◆ _mesh

MooseMesh& SmoothCircleBaseIC::_mesh
protectedinherited

◆ _num_dim

unsigned int SmoothCircleBaseIC::_num_dim
protectedinherited

Definition at line 52 of file SmoothCircleBaseIC.h.

◆ _outvalue

Real SmoothCircleBaseIC::_outvalue
protectedinherited

◆ _profile

enum SmoothCircleBaseIC::ProfileType SmoothCircleBaseIC::_profile
protectedinherited

◆ _radii

std::vector<Real> SmoothCircleBaseIC::_radii
protectedinherited

◆ _radius

Real SmoothCircleIC::_radius
protectedinherited

Definition at line 37 of file SmoothCircleIC.h.

Referenced by SmoothCircleIC::computeCircleRadii().

◆ _random

MooseRandom SmoothCircleBaseIC::_random
protectedinherited

◆ _variation_invalue

const Real RndSmoothCircleIC::_variation_invalue
private

Definition at line 32 of file RndSmoothCircleIC.h.

Referenced by computeCircleValue().

◆ _variation_outvalue

const Real RndSmoothCircleIC::_variation_outvalue
private

Definition at line 33 of file RndSmoothCircleIC.h.

Referenced by computeCircleValue().

◆ _x1

Real SmoothCircleIC::_x1
protectedinherited

Definition at line 34 of file SmoothCircleIC.h.

◆ _y1

Real SmoothCircleIC::_y1
protectedinherited

Definition at line 35 of file SmoothCircleIC.h.

◆ _z1

Real SmoothCircleIC::_z1
protectedinherited

Definition at line 36 of file SmoothCircleIC.h.

◆ _zero_gradient

bool SmoothCircleBaseIC::_zero_gradient
protectedinherited

Definition at line 50 of file SmoothCircleBaseIC.h.

Referenced by SmoothCircleBaseIC::gradient().


The documentation for this class was generated from the following files:
SmoothCircleIC::SmoothCircleIC
SmoothCircleIC(const InputParameters &parameters)
Definition: SmoothCircleIC.C:27
SmoothCircleBaseIC::computeCircleCenters
virtual void computeCircleCenters()=0
SmoothCircleBaseIC::_random
MooseRandom _random
Definition: SmoothCircleBaseIC.h:63
SmoothCircleBaseIC::_centers
std::vector< Point > _centers
Definition: SmoothCircleBaseIC.h:54
SmoothCircleIC::_radius
Real _radius
Definition: SmoothCircleIC.h:37
SmoothCircleBaseIC::ProfileType::COS
SmoothCircleBaseIC::value
virtual Real value(const Point &p)
Definition: SmoothCircleBaseIC.C:71
SmoothCircleBaseIC::computeCircleValue
virtual Real computeCircleValue(const Point &p, const Point &center, const Real &radius)
Definition: SmoothCircleBaseIC.C:110
libMesh::RealGradient
VectorValue< Real > RealGradient
Definition: GrainForceAndTorqueInterface.h:17
SmoothCircleBaseIC::computeCircleRadii
virtual void computeCircleRadii()=0
SmoothCircleIC::_center
Point _center
Definition: SmoothCircleIC.h:38
SmoothCircleBaseIC::_profile
enum SmoothCircleBaseIC::ProfileType _profile
RndSmoothCircleIC::_variation_outvalue
const Real _variation_outvalue
Definition: RndSmoothCircleIC.h:33
SmoothCircleBaseIC::_radii
std::vector< Real > _radii
Definition: SmoothCircleBaseIC.h:55
RndSmoothCircleIC::_variation_invalue
const Real _variation_invalue
Definition: RndSmoothCircleIC.h:32
SmoothCircleBaseIC::ProfileType::TANH
SmoothCircleBaseIC::_invalue
Real _invalue
Definition: SmoothCircleBaseIC.h:46
SmoothCircleBaseIC::computeCircleGradient
virtual RealGradient computeCircleGradient(const Point &p, const Point &center, const Real &radius)
Definition: SmoothCircleBaseIC.C:149
SmoothCircleBaseIC::_mesh
MooseMesh & _mesh
Definition: SmoothCircleBaseIC.h:44
SmoothCircleBaseIC::_outvalue
Real _outvalue
Definition: SmoothCircleBaseIC.h:47
SmoothCircleBaseIC::_zero_gradient
bool _zero_gradient
Definition: SmoothCircleBaseIC.h:50
SmoothCircleBaseIC::_int_width
Real _int_width
Definition: SmoothCircleBaseIC.h:48
SmoothCircleBaseIC::gradient
virtual RealGradient gradient(const Point &p)
Definition: SmoothCircleBaseIC.C:87
SmoothCircleBaseIC::_3D_spheres
bool _3D_spheres
Definition: SmoothCircleBaseIC.h:49