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

SmoothcircleIC creates a circle of a given radius centered at a given point in the domain. More...

#include <SmoothCircleIC.h>

Inheritance diagram for SmoothCircleIC:
[legend]

Public Member Functions

 SmoothCircleIC (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 Real computeCircleValue (const Point &p, const Point &center, const Real &radius)
 
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
 

Detailed Description

SmoothcircleIC creates a circle of a given radius centered at a given point in the domain.

If int_width > zero, the border of the circle with smoothly transition from the invalue to the outvalue.

Definition at line 25 of file SmoothCircleIC.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

◆ SmoothCircleIC()

SmoothCircleIC::SmoothCircleIC ( const InputParameters &  parameters)

Definition at line 27 of file SmoothCircleIC.C.

28  : SmoothCircleBaseIC(parameters),
29  _x1(parameters.get<Real>("x1")),
30  _y1(parameters.get<Real>("y1")),
31  _z1(parameters.get<Real>("z1")),
32  _radius(parameters.get<Real>("radius")),
33  _center(_x1, _y1, _z1)
34 {
35 }

Member Function Documentation

◆ computeCircleCenters()

void SmoothCircleIC::computeCircleCenters ( )
protectedvirtual

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 ( )
protectedvirtual

Implements SmoothCircleBaseIC.

Definition at line 38 of file SmoothCircleIC.C.

39 {
40  _radii = {_radius};
41 }

◆ computeCircleValue()

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

Reimplemented in RndSmoothCircleIC.

Definition at line 110 of file SmoothCircleBaseIC.C.

111 {
112  Point l_center = center;
113  Point l_p = p;
114  if (!_3D_spheres) // Create 3D cylinders instead of spheres
115  {
116  l_p(2) = 0.0;
117  l_center(2) = 0.0;
118  }
119  // Compute the distance between the current point and the center
120  Real dist = _mesh.minPeriodicDistance(_var.number(), l_p, l_center);
121 
122  switch (_profile)
123  {
124  case ProfileType::COS:
125  {
126  // Return value
127  Real value = _outvalue; // Outside circle
128 
129  if (dist <= radius - _int_width / 2.0) // Inside circle
130  value = _invalue;
131  else if (dist < radius + _int_width / 2.0) // Smooth interface
132  {
133  Real int_pos = (dist - radius + _int_width / 2.0) / _int_width;
134  value = _outvalue + (_invalue - _outvalue) * (1.0 + std::cos(int_pos * libMesh::pi)) / 2.0;
135  }
136  return value;
137  }
138 
139  case ProfileType::TANH:
140  return (_invalue - _outvalue) * 0.5 * (std::tanh(2.0 * (radius - dist) / _int_width) + 1.0) +
141  _outvalue;
142 
143  default:
144  mooseError("Internal error.");
145  }
146 }

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

◆ 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 RndSmoothCircleIC::computeCircleValue(), SmoothCircleBaseIC::computeCircleValue(), SmoothCircleBaseIC::gradient(), and PolycrystalVoronoiVoidIC::value().

Member Data Documentation

◆ _3D_spheres

bool SmoothCircleBaseIC::_3D_spheres
protectedinherited

◆ _center

Point SmoothCircleIC::_center
protected

Definition at line 38 of file SmoothCircleIC.h.

Referenced by 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
protected

Definition at line 37 of file SmoothCircleIC.h.

Referenced by computeCircleRadii().

◆ _random

MooseRandom SmoothCircleBaseIC::_random
protectedinherited

◆ _x1

Real SmoothCircleIC::_x1
protected

Definition at line 34 of file SmoothCircleIC.h.

◆ _y1

Real SmoothCircleIC::_y1
protected

Definition at line 35 of file SmoothCircleIC.h.

◆ _z1

Real SmoothCircleIC::_z1
protected

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:
SmoothCircleBaseIC::computeCircleCenters
virtual void computeCircleCenters()=0
SmoothCircleIC::_x1
Real _x1
Definition: SmoothCircleIC.h:34
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
SmoothCircleBaseIC::_radii
std::vector< Real > _radii
Definition: SmoothCircleBaseIC.h:55
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
SmoothCircleIC::_y1
Real _y1
Definition: SmoothCircleIC.h:35
SmoothCircleBaseIC::_3D_spheres
bool _3D_spheres
Definition: SmoothCircleBaseIC.h:49
SmoothCircleIC::_z1
Real _z1
Definition: SmoothCircleIC.h:36
SmoothCircleBaseIC::SmoothCircleBaseIC
SmoothCircleBaseIC(const InputParameters &parameters)
Definition: SmoothCircleBaseIC.C:38