11 #include "MooseRandom.h"
12 #include "MooseMesh.h"
24 params.addClassDescription(
"User Object to read property data from an external file and assign "
26 params.addParam<FileName>(
"prop_file_name",
"",
"Name of the property file name");
27 params.addRequiredParam<
unsigned int>(
"nprop",
"Number of tabulated property values");
28 params.addParam<
unsigned int>(
"ngrain", 0,
"Number of grains");
29 params.addRequiredParam<MooseEnum>(
31 MooseEnum(
"element grain"),
32 "Type of property distribution: element:element by element property "
33 "variation; grain:voronoi grain structure");
34 params.addParam<
unsigned int>(
"rand_seed", 2000,
"random seed");
35 params.addParam<MooseEnum>(
37 MooseEnum(
"periodic none",
"none"),
38 "Periodic or non-periodic grain distribution: Default is non-periodic");
43 : GeneralUserObject(parameters),
44 _prop_file_name(getParam<FileName>(
"prop_file_name")),
45 _nprop(getParam<unsigned int>(
"nprop")),
46 _ngrain(getParam<unsigned int>(
"ngrain")),
47 _read_type(getParam<MooseEnum>(
"read_type")),
48 _rand_seed(getParam<unsigned int>(
"rand_seed")),
49 _rve_type(getParam<MooseEnum>(
"rve_type")),
50 _mesh(_fe_problem.mesh())
54 for (
unsigned int i = 0; i < LIBMESH_DIM; i++)
62 for (
unsigned int i = 1; i < LIBMESH_DIM; i++)
85 std::ifstream file_prop;
88 for (
unsigned int i = 0; i <
_nelem; i++)
89 for (
unsigned int j = 0; j <
_nprop; j++)
91 mooseError(
"Error ElementPropertyReadFile: Premature end of file");
99 mooseAssert(
_ngrain > 0,
"Error ElementPropertyReadFile: Provide non-zero number of grains");
103 std::ifstream file_prop;
106 for (
unsigned int i = 0; i <
_ngrain; i++)
107 for (
unsigned int j = 0; j <
_nprop; j++)
109 mooseError(
"Error ElementPropertyReadFile: Premature end of file");
120 for (
unsigned int i = 0; i <
_ngrain; i++)
121 for (
unsigned int j = 0; j < LIBMESH_DIM; j++)
136 mooseError(
"Error ElementPropertyReadFile: Provide valid read type");
142 unsigned int jelem = elem->id();
143 mooseAssert(jelem <
_nelem,
144 "Error ElementPropertyReadFile: Element "
145 << jelem <<
" greater than than total number of element in mesh " <<
_nelem);
146 mooseAssert(prop_num <
_nprop,
147 "Error ElementPropertyReadFile: Property number "
148 << prop_num <<
" greater than than total number of properties " <<
_nprop);
155 mooseAssert(prop_num <
_nprop,
156 "Error ElementPropertyReadFile: Property number "
157 << prop_num <<
" greater than than total number of properties " <<
_nprop
160 Point centroid = elem->centroid();
162 unsigned int igrain = 0;
164 for (
unsigned int i = 0; i <
_ngrain; ++i)
178 Point dist_vec =
_center[i] - centroid;
179 dist = dist_vec.norm();
196 Point dist_vec = c - p;
197 Real min_dist = dist_vec.norm();
199 Real fac[3] = {-1.0, 0.0, 1.0};
200 for (
unsigned int i = 0; i < 3; i++)
201 for (
unsigned int j = 0; j < 3; j++)
202 for (
unsigned int k = 0; k < 3; k++)
205 p1(0) = p(0) + fac[i] *
_range(0);
206 p1(1) = p(1) + fac[j] *
_range(1);
207 p1(2) = p(2) + fac[k] *
_range(2);
210 Real dist = dist_vec.norm();