11 #include "MooseMesh.h"
19 InputParameters params = validParams<Material>();
20 params.addCoupledVar(
"T", 300.0,
"Temperature in Kelvin");
21 params.addParam<Real>(
"length_scale", 1.0e-9,
"Length scale in m, where default is nm");
22 params.addParam<Real>(
"time_scale", 1.0e-9,
"Time scale in s, where default is ns");
23 params.addParam<Real>(
"molar_volume_value",
25 "molar volume of material in m^3/mol, by default it's the value of copper");
26 params.addParam<Real>(
27 "delta_sigma", 0.1,
"factor determining inclination dependence of GB energy");
28 params.addParam<Real>(
29 "delta_mob", 0.1,
"factor determining inclination dependence of GB mobility");
30 params.addRequiredParam<FileName>(
"Anisotropic_GB_file_name",
31 "Name of the file containing: 1)GB mobility prefactor; 2) GB "
32 "migration activation energy; 3)GB energy");
33 params.addRequiredParam<
bool>(
"inclination_anisotropy",
34 "The GB anisotropy inclination would be considered if true");
35 params.addRequiredCoupledVarWithAutoBuild(
36 "v",
"var_name_base",
"op_num",
"Array of coupled variables");
41 : Material(parameters),
42 _mesh_dimension(_mesh.dimension()),
43 _length_scale(getParam<Real>(
"length_scale")),
44 _time_scale(getParam<Real>(
"time_scale")),
45 _M_V(getParam<Real>(
"molar_volume_value")),
46 _delta_sigma(getParam<Real>(
"delta_sigma")),
47 _delta_mob(getParam<Real>(
"delta_mob")),
48 _Anisotropic_GB_file_name(getParam<FileName>(
"Anisotropic_GB_file_name")),
49 _inclination_anisotropy(getParam<bool>(
"inclination_anisotropy")),
50 _T(coupledValue(
"T")),
51 _kappa(declareProperty<Real>(
"kappa_op")),
52 _gamma(declareProperty<Real>(
"gamma_asymm")),
53 _L(declareProperty<Real>(
"L")),
54 _mu(declareProperty<Real>(
"mu")),
55 _molar_volume(declareProperty<Real>(
"molar_volume")),
56 _entropy_diff(declareProperty<Real>(
"entropy_diff")),
57 _act_wGB(declareProperty<Real>(
"act_wGB")),
59 _JtoeV(6.24150974e18),
61 _op_num(coupledComponents(
"v")),
72 for (
unsigned int op = 0; op <
_op_num; ++op)
75 _vals[op] = &coupledValue(
"v", op);
89 paramError(
"Anisotropic_GB_file_name",
"Can't open GB anisotropy input file");
91 for (
unsigned int i = 0; i < 2; ++i)
92 inFile.ignore(255,
'\n');
95 for (
unsigned int i = 0; i < 3 *
_op_num; ++i)
97 std::vector<Real> row;
98 for (
unsigned int j = 0; j <
_op_num; ++j)
120 Real sum_kappa = 0.0;
121 Real sum_gamma = 0.0;
127 Real gamma_value = 0.0;
129 for (
unsigned int m = 0; m <
_op_num - 1; ++m)
131 for (
unsigned int n = m + 1; n <
_op_num; ++n)
138 mooseError(
"This material doesn't support inclination dependence for 3D for now!");
140 Real phi_ave = libMesh::pi * n / (2.0 *
_op_num);
141 Real sin_phi = std::sin(2.0 * phi_ave);
142 Real cos_phi = std::cos(2.0 * phi_ave);
146 Real ab = a * a + b * b + 1.0e-7;
149 Real cos_2phi = cos_phi * (a * a - b * b) / ab + sin_phi * 2.0 * a * b / ab;
150 Real cos_4phi = 2.0 * cos_2phi * cos_2phi - 1.0;
155 Real g2 =
_a_g2[n][m] * f_sigma;
156 Real y = -5.288 * g2 * g2 * g2 * g2 - 0.09364 * g2 * g2 * g2 + 9.965 * g2 * g2 -
158 gamma_value = 1.0 / y;
161 Val = (100000.0 * ((*
_vals[m])[_qp]) * ((*
_vals[m])[_qp]) + 0.01) *
162 (100000.0 * ((*
_vals[n])[_qp]) * ((*
_vals[n])[_qp]) + 0.01);
166 sum_gamma += gamma_value * Val;
168 sum_L += Val *
_mob[m][n] * std::exp(-
_Q[m][n] / (
_kb *
_T[_qp])) * f_mob *
_mu_qp *
173 _kappa[_qp] = sum_kappa / sum_val;
174 _gamma[_qp] = sum_gamma / sum_val;
175 _L[_qp] = sum_L / sum_val;