21 "This Material accounts for the the orientation dependence " 22 "of interfacial energy for multi-phase multi-order parameter phase-field model.");
24 "Name of the kappa for the given phase");
26 "dkappadgrad_etaa_name",
"Name of the derivative of kappa w.r.t. the gradient of eta");
28 "d2kappadgrad_etaa_name",
29 "Name of the second derivative of kappa w.r.t. the gradient of eta");
31 "anisotropy_strength", 0.04,
"Strength of the anisotropy (typically < 0.05)");
32 params.
addParam<
unsigned int>(
"mode_number", 4,
"Mode number for anisotropy");
34 "reference_angle", 90,
"Reference angle for defining anisotropy in degrees");
35 params.
addParam<
Real>(
"kappa_bar", 0.1125,
"Average value of the interface parameter kappa");
44 _kappa_name(getParam<MaterialPropertyName>(
"kappa_name")),
45 _dkappadgrad_etaa_name(getParam<MaterialPropertyName>(
"dkappadgrad_etaa_name")),
46 _d2kappadgrad_etaa_name(getParam<MaterialPropertyName>(
"d2kappadgrad_etaa_name")),
47 _delta(getParam<
Real>(
"anisotropy_strength")),
48 _j(getParam<unsigned
int>(
"mode_number")),
49 _theta0(getParam<
Real>(
"reference_angle")),
50 _kappa_bar(getParam<
Real>(
"kappa_bar")),
51 _kappa(declareProperty<
Real>(_kappa_name)),
52 _dkappadgrad_etaa(declareProperty<
RealGradient>(_dkappadgrad_etaa_name)),
53 _d2kappadgrad_etaa(declareProperty<
RealTensorValue>(_d2kappadgrad_etaa_name)),
54 _etaa(coupledValue(
"etaa")),
55 _grad_etaa(coupledGradient(
"etaa")),
56 _etab(coupledValue(
"etab")),
57 _grad_etab(coupledGradient(
"etab"))
61 mooseError(
"InterfaceOrientationMultiphaseMaterial requires a two-dimensional mesh.");
73 const Real nx = nd(0);
74 const Real ny = nd(1);
75 const Real n2x = nd(0) * nd(0);
76 const Real n2y = nd(1) * nd(1);
78 const Real n2sq = nsq * nsq;
80 n = nx / std::sqrt(nsq);
99 dndgrad_etaa(0) = ny * ny;
100 dndgrad_etaa(1) = -nx * ny;
101 dndgrad_etaa /= nsq * std::sqrt(nsq);
108 dndgrad_etaa_sq(0, 0) = n2y * n2y;
109 dndgrad_etaa_sq(0, 1) = -nx * ny * n2y;
110 dndgrad_etaa_sq(1, 0) = -nx * ny * n2y;
111 dndgrad_etaa_sq(1, 1) = n2x * n2y;
112 dndgrad_etaa_sq /= n2sq * nsq;
119 d2ndgrad_etaa2(0, 0) = -3.0 * nx * n2y;
120 d2ndgrad_etaa2(0, 1) = -ny * n2y + 2.0 * ny * n2x;
121 d2ndgrad_etaa2(1, 0) = -ny * n2y + 2.0 * ny * n2x;
122 d2ndgrad_etaa2(1, 1) = -nx * n2x + 2.0 * nx * n2y;
123 d2ndgrad_etaa2 /= n2sq * std::sqrt(nsq);
140 dkappadangle * d2angledn2 * dndgrad_etaa_sq +
141 dkappadangle * dangledn * d2ndgrad_etaa2;
const VariableGradient & _grad_etaa
MaterialProperty< Real > & _kappa
static InputParameters validParams()
MaterialProperty< RealGradient > & _dkappadgrad_etaa
Material to compute the angular orientation of order parameter interfaces.
TensorValue< Real > RealTensorValue
auto norm_sq() const -> decltype(std::norm(Real()))
static InputParameters validParams()
const VariableGradient & _grad_etab
virtual unsigned int dimension() const
registerMooseObject("PhaseFieldApp", InterfaceOrientationMultiphaseMaterial)
virtual void computeQpProperties()
MaterialProperty< RealTensorValue > & _d2kappadgrad_etaa
InterfaceOrientationMultiphaseMaterial(const InputParameters ¶meters)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void mooseError(Args &&... args) const
void ErrorVector unsigned int