11 #include "MooseMesh.h"
12 #include "MathUtils.h"
20 InputParameters params = validParams<Material>();
21 params.addParam<Real>(
22 "anisotropy_strength", 0.04,
"Strength of the anisotropy (typically < 0.05)");
23 params.addParam<
unsigned int>(
"mode_number", 6,
"Mode number for anisotropy");
24 params.addParam<Real>(
25 "reference_angle", 90,
"Reference angle for defining anisotropy in degrees");
26 params.addParam<Real>(
"eps_bar", 0.01,
"Average value of the interface parameter epsilon");
27 params.addRequiredCoupledVar(
"op",
"Order parameter defining the solid phase");
32 : Material(parameters),
33 _delta(getParam<Real>(
"anisotropy_strength")),
34 _j(getParam<unsigned int>(
"mode_number")),
35 _theta0(getParam<Real>(
"reference_angle")),
36 _eps_bar(getParam<Real>(
"eps_bar")),
37 _eps(declareProperty<Real>(
"eps")),
38 _deps(declareProperty<Real>(
"deps")),
39 _depsdgrad_op(declareProperty<
RealGradient>(
"depsdgrad_op")),
40 _ddepsdgrad_op(declareProperty<
RealGradient>(
"ddepsdgrad_op")),
41 _op(coupledValue(
"op")),
42 _grad_op(coupledGradient(
"op"))
45 if (_mesh.dimension() != 2)
46 mooseError(
"InterfaceOrientationMaterial requires a two-dimensional mesh.");
52 const Real
tol = 1e-9;
53 const Real cutoff = 1.0 -
tol;
57 const Real nsq =
_grad_op[_qp].norm_sq();
59 n =
_grad_op[_qp](0) / std::sqrt(nsq);
67 const Real angle = std::acos(n) * MathUtils::sign(
_grad_op[_qp](1));
70 const Real dangledn = -MathUtils::sign(
_grad_op[_qp](1)) / std::sqrt(1.0 - n * n);