15 ADDensity, ADMaterial, params.addClassDescription(
"Creates density AD material property");
16 params.addRequiredCoupledVar(
18 "The displacements appropriate for the simulation geometry and coordinate system");
19 params.addRequiredParam<Real>(
"density",
"Initial density"););
21 template <ComputeStage compute_stage>
23 : ADMaterial<compute_stage>(parameters),
24 _coord_system(getBlockCoordSystem()),
25 _disp_r(adCoupledValue(
"displacements", 0)),
26 _initial_density(getParam<Real>(
"density")),
27 _density(declareADProperty<Real>(
"density"))
30 const unsigned int ndisp = coupledComponents(
"displacements");
32 for (
unsigned int i = 0; i < ndisp; ++i)
33 _grad_disp[i] = &adCoupledGradient(
"displacements", i);
39 template <ComputeStage compute_stage>
43 _density[_qp] = _initial_density;
46 template <ComputeStage compute_stage>
55 const auto Axx = (*_grad_disp[0])[_qp](0) + 1.0;
56 const auto & Axy = (*_grad_disp[0])[_qp](1);
57 const auto & Axz = (*_grad_disp[0])[_qp](2);
58 const auto & Ayx = (*_grad_disp[1])[_qp](0);
59 auto Ayy = (*_grad_disp[1])[_qp](1) + 1.0;
60 const auto & Ayz = (*_grad_disp[1])[_qp](2);
61 const auto & Azx = (*_grad_disp[2])[_qp](0);
62 const auto & Azy = (*_grad_disp[2])[_qp](1);
63 auto Azz = (*_grad_disp[2])[_qp](2) + 1.0;
65 switch (_coord_system)
67 case Moose::COORD_XYZ:
68 Azz = (*_grad_disp[2])[_qp](2) + 1.0;
72 if (_q_point[_qp](0) != 0.0)
73 Azz = _disp_r[_qp] / _q_point[_qp](0) + 1.0;
76 case Moose::COORD_RSPHERICAL:
77 if (_q_point[_qp](0) != 0.0)
78 Ayy = Azz = _disp_r[_qp] / _q_point[_qp](0) + 1.0;
82 const auto detF = Axx * Ayy * Azz + Axy * Ayz * Azx + Axz * Ayx * Azy - Azx * Ayy * Axz -
83 Azy * Ayz * Axx - Azz * Ayx * Axy;
84 _density[_qp] = _initial_density / detF;