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)
134 Point diff_centerpoints = pb - pa;
137 Point normal_vector = diff_centerpoints.
cross(diff_rand_center);
138 Point slope = normal_vector.cross(diff_centerpoints);
141 Point midpoint = closest_point + (0.5 * diff_centerpoints);
147 Real slope_dot = slope * slope;
148 mooseAssert(slope_dot > 0,
"The dot product of slope with itself is zero");
150 lambda += (mid_rand_vector(i) * slope(i)) / slope_dot;
153 _centers[vp] = slope * lambda + midpoint;
160 for (
unsigned int i = 0; i < vp; ++i)
174 if (try_again ==
false)
176 Real min_rij_1, min_rij_2, rij, rij_diff_tol;
178 min_rij_1 =
_range.norm();
179 min_rij_2 =
_range.norm();
183 for (
unsigned int gr = 0; gr <
_grain_num; ++gr)
189 min_rij_2 = min_rij_1;
192 else if (rij < min_rij_2)
196 if (std::abs(min_rij_1 - min_rij_2) > rij_diff_tol)
200 }
while (try_again ==
true);
218 if (grain_value == 0)
unsigned int number() const
struct PolycrystalVoronoiVoidIC::DistancePointComparator _customLess
std::vector< Point > _centers
const PolycrystalVoronoi & _poly_ic_uo
RealVectorValue minPeriodicVector(unsigned int nonlinear_var_num, Point p, Point q) const
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
void mooseWarning(Args &&... args) const
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)
Real minPeriodicDistance(unsigned int nonlinear_var_num, Point p, Point q) const
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
const unsigned int _op_index
IntRange< T > make_range(T beg, T end)
void mooseError(Args &&... args) 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