26 params.
addClassDescription(
"Random distribution of smooth ellipse with given minimum spacing");
28 "Vector of the number of bubbles to place");
31 "Vector of the minimum spacing of bubbles of one type, measured from center to center");
32 params.
addParam<
unsigned int>(
"max_num_tries", 1000,
"The number of tries");
34 "semiaxis_a",
"Vector of mean semiaxis values in the x direction for the ellipse");
36 "semiaxis_b",
"Vector of mean semiaxis values in the y direction for the ellipse");
38 "Vector of mean semiaxis values in the z direction " 39 "for the ellipse, must be greater than 0 even if 2D.");
43 "Vector of exponents for each superellipsoid, n=2 is a normal ellipse");
44 params.
addParam<std::vector<Real>>(
"semiaxis_a_variation",
46 "Vector of plus or minus fractions of random variation in the " 47 "bubble semiaxis in the x direction for uniform, standard " 48 "deviation for normal");
49 params.
addParam<std::vector<Real>>(
"semiaxis_b_variation",
51 "Vector of plus or minus fractions of random variation in the " 52 "bubble semiaxis in the y direction for uniform, standard " 53 "deviation for normal");
54 params.
addParam<std::vector<Real>>(
"semiaxis_c_variation",
56 "Vector of plus or minus fractions of random variation in the " 57 "bubble semiaxis in the z direction for uniform, standard " 58 "deviation for normal. Must be set to 0 if 2D.");
59 params.
addParam<
bool>(
"check_extremes",
61 "Check all Superellipsoid extremes (center +- " 62 "each semiaxis) for overlap, must have " 63 "prevent_overlap set to True.");
64 params.
addParam<
bool>(
"prevent_overlap",
66 "Check all Superellipsoid centers for overlap with other superellipsoids.");
67 params.
addParam<
bool>(
"vary_axes_independently",
69 "If true the length of each semiaxis is randomly chosen " 70 "within the provided parameters, if false then one random " 71 "number is generated and applied to all semiaxes.");
72 MooseEnum rand_options(
"uniform normal none",
"none");
74 "semiaxis_variation_type",
76 "Type of distribution that random superellipsoid semiaxes will follow");
82 _max_num_tries(getParam<unsigned
int>(
"max_num_tries")),
83 _semiaxis_variation_type(getParam<
MooseEnum>(
"semiaxis_variation_type")),
84 _prevent_overlap(getParam<bool>(
"prevent_overlap")),
85 _check_extremes(getParam<bool>(
"check_extremes")),
86 _vary_axes_independently(getParam<bool>(
"vary_axes_independently")),
87 _numbub(parameters.
get<
std::vector<unsigned
int>>(
"numbub")),
88 _bubspac(parameters.
get<
std::vector<
Real>>(
"bubspac")),
89 _exponent(parameters.
get<
std::vector<
Real>>(
"exponent")),
90 _semiaxis_a(parameters.
get<
std::vector<
Real>>(
"semiaxis_a")),
91 _semiaxis_b(parameters.
get<
std::vector<
Real>>(
"semiaxis_b")),
92 _semiaxis_c(parameters.
get<
std::vector<
Real>>(
"semiaxis_c")),
93 _semiaxis_a_variation(parameters.
get<
std::vector<
Real>>(
"semiaxis_a_variation")),
94 _semiaxis_b_variation(parameters.
get<
std::vector<
Real>>(
"semiaxis_b_variation")),
95 _semiaxis_c_variation(parameters.
get<
std::vector<
Real>>(
"semiaxis_c_variation"))
102 unsigned int nv =
_numbub.size();
106 mooseError(
"Vectors for numbub, bubspac, exponent, semiaxis_a, semiaxis_b, and semiaxis_c must " 107 "be the same size.");
112 mooseError(
"Vectors for numbub, semiaxis_a_variation, semiaxis_b_variation, and " 113 "semiaxis_c_variation must be the same size.");
119 "Values were provided for semiaxis_a/b/c_variation but semiaxis_variation_type is set " 120 "to 'none' in 'MultiSmoothSuperellipsoidIC'.");
140 unsigned int start =
_as.size();
145 for (
unsigned int i = start; i <
_as.size(); i++)
186 unsigned int start =
_centers.size();
189 for (
unsigned int i = start; i <
_centers.size(); i++)
192 unsigned int num_tries = 0;
204 for (
unsigned int j = 0;
j < i; ++
j)
218 mooseError(
"max_num_tries reached in 'MultiSmoothSuperellipsoidIC'.");
228 unsigned int start =
_ns.size();
231 for (
unsigned int i = start; i <
_ns.size(); ++i)
240 const Real dist = dist_vec.norm();
281 for (
unsigned int pc = 0; pc < 6; pc++)
299 const Real dist = dist_vec.norm();
virtual Real getMaxInDimension(unsigned int component) const
virtual void initialSetup()
virtual Real getMinInDimension(unsigned int component) const
const unsigned int _max_num_tries
bool absoluteFuzzyEqual(const T &var1, const T2 &var2, const T3 &tol=libMesh::TOLERANCE *libMesh::TOLERANCE)
std::vector< Real > _semiaxis_a
virtual bool checkExtremes(unsigned int i, unsigned int j)
std::vector< Point > _centers
unsigned int number() const
static InputParameters validParams()
RealVectorValue minPeriodicVector(unsigned int nonlinear_var_num, Point p, Point q) const
std::vector< unsigned int > _numbub
virtual void computeSuperellipsoidExponents()
const bool _check_extremes
std::vector< Real > _semiaxis_c
static constexpr std::size_t dim
SmoothSuperellipsoidBaseIC is the base class for all initial conditions that create superellipsoids...
std::vector< Real > _semiaxis_c_variation
static InputParameters validParams()
MooseVariableField< T > & _var
void mooseWarning(Args &&... args) const
Real randNormal(std::size_t i, Real mean, Real sigma)
std::vector< Real > _semiaxis_a_variation
virtual bool ellipsoidsOverlap(unsigned int i, unsigned int j)
TensorValue< Real > RealTensorValue
const MooseEnum _semiaxis_variation_type
std::vector< Real > _exponent
MultiSmoothSuperellipsoidIC(const InputParameters ¶meters)
Real minPeriodicDistance(unsigned int nonlinear_var_num, Point p, Point q) const
std::vector< Real > _bubspac
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual void computeSuperellipsoidSemiaxes()
virtual void computeSuperellipsoidCenters()
registerMooseObject("PhaseFieldApp", MultiSmoothSuperellipsoidIC)
std::vector< Real > _semiaxis_b_variation
IntRange< T > make_range(T beg, T end)
void mooseError(Args &&... args) const
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
std::vector< Real > _semiaxis_b
MultismoothSuperellipsoidIC creates multiple SmoothSuperellipsoid (number = numbub) that are randomly...
virtual void initialSetup()
MooseUnits pow(const MooseUnits &, int)
const bool _vary_axes_independently
void ErrorVector unsigned int
const Elem & get(const ElemType type_in)