24 params.
addRequiredParam<
unsigned int>(
"op_num",
"Number of order parameters");
27 "columnar_3D",
false,
"3D microstructure will be columnar in the z-direction?");
38 MooseEnum structure_options(
"grains voids");
41 "Which structure type is being initialized, grains or voids");
42 params.
addParam<
unsigned int>(
"op_index",
44 "The index for the current order parameter, " 45 "not needed if structure_type = voids");
47 "polycrystal_ic_uo",
"UserObject for obtaining the polycrystal grain structure.");
48 params.
addParam<FileName>(
"file_name",
50 "File containing grain centroids, if file_name is provided, " 51 "the centroids from the file will be used.");
57 _structure_type(getParam<
MooseEnum>(
"structure_type")),
58 _op_num(getParam<unsigned
int>(
"op_num")),
59 _op_index(getParam<unsigned
int>(
"op_index")),
60 _columnar_3D(getParam<bool>(
"columnar_3D")),
62 _file_name(getParam<FileName>(
"file_name"))
65 mooseWarning(
"Detected invalue < outvalue in PolycrystalVoronoiVoidIC. Please make sure that's " 66 "the intended usage for representing voids.");
68 mooseError(
"PolycrystalVoronoiVoidIC requires numbub > 0. If you want no voids to " 69 "be represented, use invalue = outvalue. In general, you should use " 70 "PolycrystalVoronoi to represent Voronoi grain structures without " 78 mooseError(
"op_index is too large in CircleGrainVoidIC");
95 for (
unsigned int vp = 0; vp <
_numbub; ++vp)
98 unsigned int num_tries = 0;
106 mooseError(
"Too many tries of assigning void centers in " 107 "PolycrystalVoronoiVoidIC");
116 std::vector<PolycrystalVoronoiVoidIC::DistancePoint> diff(
_grain_num);
118 for (
unsigned int gr = 0; gr <
_grain_num; ++gr)
133 Point diff_centerpoints = pb - pa;
136 Point normal_vector = diff_centerpoints.
cross(diff_rand_center);
137 Point slope = normal_vector.cross(diff_centerpoints);
140 Point midpoint = closest_point + (0.5 * diff_centerpoints);
146 Real slope_dot = slope * slope;
147 mooseAssert(slope_dot > 0,
"The dot product of slope with itself is zero");
149 lambda += (mid_rand_vector(i) * slope(i)) / slope_dot;
152 _centers[vp] = slope * lambda + midpoint;
159 for (
unsigned int i = 0; i < vp; ++i)
173 if (try_again ==
false)
175 Real min_rij_1, min_rij_2, rij, rij_diff_tol;
177 min_rij_1 =
_range.norm();
178 min_rij_2 =
_range.norm();
182 for (
unsigned int gr = 0; gr <
_grain_num; ++gr)
188 min_rij_2 = min_rij_1;
191 else if (rij < min_rij_2)
195 if (std::abs(min_rij_1 - min_rij_2) > rij_diff_tol)
199 }
while (try_again ==
true);
217 if (grain_value == 0)
RealVectorValue minPeriodicVector(const unsigned int sys_num, const unsigned int var_num, Point p, Point q) const
struct PolycrystalVoronoiVoidIC::DistancePointComparator _customLess
std::vector< Point > _centers
const PolycrystalVoronoi & _poly_ic_uo
const unsigned int _max_num_tries
virtual std::vector< Point > getGrainCenters() const
virtual Real value(const Point &p)
virtual Real getVariableValue(unsigned int op_index, const Point &p) const override
Returns the variable value for a given op_index and mesh point.
static constexpr std::size_t dim
std::vector< Point > _centerpoints
PolycrystalVoronoiVoidIC initializes either grain or void values for a voronoi tesselation with voids...
const unsigned int _op_num
MooseVariableField< T > & _var
virtual Real value(const Point &p) override
static InputParameters validParams()
const unsigned int _numbub
TypeVector< typename CompareTypes< Real, T2 >::supertype > cross(const TypeVector< T2 > &v) const
PolycrystalVoronoiVoidIC(const InputParameters ¶meters)
virtual RealGradient gradient(const Point &p)
registerMooseObject("PhaseFieldApp", PolycrystalVoronoiVoidIC)
static InputParameters validParams()
const MooseEnum _structure_type
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void mooseWarning(Args &&... args) const
const unsigned int _op_index
IntRange< T > make_range(T beg, T end)
void mooseError(Args &&... args) const
Real minPeriodicDistance(const unsigned int sys_num, const unsigned int var_num, const Point &p, const Point &q) const
virtual void initialSetup() override
virtual unsigned int getNumGrains() const override
Must be overridden by the deriving class to provide the number of grains in the polycrystal structure...
virtual RealGradient gradient(const Point &p) override
static InputParameters actionParameters()
void ErrorVector unsigned int
virtual void computeCircleCenters() override
MultismoothCircleIC creates multiple SmoothCircles (number = numbub) that are randomly positioned aro...
virtual void initialSetup() override