22 params.
addClassDescription(
"Bimodal size distribution of large particles (specified in input "
23 "file) and small particles (placed randomly outside the larger "
25 params.
addRequiredParam<
unsigned int>(
"npart",
"The number of random (small) particles to place");
28 "minimum spacing between small particles, measured from closest edge to closest edge");
30 "minimum spacing between large and small particles, "
31 "measured from closest edge to closest edge");
33 "small_a",
"Mean semiaxis a value for the randomly placed (small) superellipsoids");
35 "small_b",
"Mean semiaxis b value for the randomly placed (small) superellipsoids");
37 "small_c",
"Mean semiaxis c value for the randomly placed (small) superellipsoids");
39 "Exponent n for the randomly placed (small) superellipsoids");
40 params.
addParam<Real>(
"size_variation",
42 "Plus or minus fraction of random variation in the "
43 "semiaxes for uniform, standard deviation for "
45 MooseEnum rand_options(
"uniform normal none",
"none");
47 "size_variation_type", rand_options,
"Type of distribution that random semiaxes will follow");
49 "numtries", 1000,
"The number of tries to place the random particles");
55 _npart(getParam<unsigned
int>(
"npart")),
56 _small_spac(getParam<Real>(
"small_spac")),
57 _large_spac(getParam<Real>(
"large_spac")),
58 _small_a(getParam<Real>(
"small_a")),
59 _small_b(getParam<Real>(
"small_b")),
60 _small_c(getParam<Real>(
"small_c")),
61 _small_n(getParam<Real>(
"small_n")),
62 _size_variation(getParam<Real>(
"size_variation")),
63 _size_variation_type(getParam<
MooseEnum>(
"size_variation_type")),
64 _max_num_tries(getParam<unsigned
int>(
"numtries"))
80 mooseError(
"If size_variation > 0.0, you must pass in a size_variation_type in "
81 "BimodalSuperellipsoidsIC");
94 for (
unsigned int i = 0; i <
_input_as.size(); ++i)
141 for (
unsigned int i = 0; i <
_input_ns.size(); ++i)
166 unsigned int num_tries = 0;
180 for (
unsigned int j = 0; j < i; ++j)
188 const Real dist = dist_vec.norm();
191 Real rmn1 = (std::pow(std::abs(dist_vec(0) / dist /
_as[j]),
_ns[j]) +
192 std::pow(std::abs(dist_vec(1) / dist /
_bs[j]),
_ns[j]) +
193 std::pow(std::abs(dist_vec(2) / dist /
_cs[j]),
_ns[j]));
195 const Real r1 = std::pow(rmn1, (-1.0 /
_ns[j]));
199 Real rmn2 = (std::pow(std::abs(dist_vec(0) / dist /
_as[i]),
_ns[i]) +
200 std::pow(std::abs(dist_vec(1) / dist /
_bs[i]),
_ns[i]) +
201 std::pow(std::abs(dist_vec(2) / dist /
_cs[i]),
_ns[i]));
202 const Real r2 = std::pow(rmn2, (-1.0 /
_ns[i]));
219 mooseError(
"Too many tries in MultiSmoothCircleIC");
registerMooseObject("PhaseFieldApp", BimodalSuperellipsoidsIC)
void ErrorVector unsigned int
BimodalSuperellipsoidsIC takes a specified number of superellipsoids, each with given parameters Thes...
virtual void computeSuperellipsoidExponents()
virtual void initialSetup()
unsigned int _npart
Variables to describe the randomly placed (smaller) superellipsoids.
virtual void computeSuperellipsoidCenters()
static InputParameters validParams()
virtual void computeSuperellipsoidSemiaxes()
const unsigned int _max_num_tries
BimodalSuperellipsoidsIC(const InputParameters ¶meters)
const Real _size_variation
const MooseEnum _size_variation_type
MooseVariableField< T > & _var
void mooseError(Args &&... args) const
RealVectorValue minPeriodicVector(const unsigned int sys_num, const unsigned int var_num, Point p, Point q) const
virtual Real getMaxInDimension(unsigned int component) const
virtual Real getMinInDimension(unsigned int component) const
Real randNormal(std::size_t i, Real mean, Real sigma)
virtual void initialSetup()
std::vector< Point > _centers
SpecifiedSmoothSuperellipsoidIC creates multiple SmoothSuperellipsoids (number = size of x_positions)...
std::vector< Real > _y_positions
static InputParameters validParams()
std::vector< Real > _input_bs
std::vector< Real > _input_ns
std::vector< Real > _x_positions
std::vector< Real > _z_positions
std::vector< Real > _input_cs
std::vector< Real > _input_as
static constexpr std::size_t dim