www.mooseframework.org
ADDensity.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #include "ADDensity.h"
11 
13 
15  ADDensity, ADMaterial, params.addClassDescription("Creates density AD material property");
16  params.addRequiredCoupledVar(
17  "displacements",
18  "The displacements appropriate for the simulation geometry and coordinate system");
19  params.addRequiredParam<Real>("density", "Initial density"););
20 
21 template <ComputeStage compute_stage>
22 ADDensity<compute_stage>::ADDensity(const InputParameters & parameters)
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"))
28 {
29  // get coupled gradients
30  const unsigned int ndisp = coupledComponents("displacements");
31  _grad_disp.resize(ndisp);
32  for (unsigned int i = 0; i < ndisp; ++i)
33  _grad_disp[i] = &adCoupledGradient("displacements", i);
34 
35  // fill remaining components with zero
36  _grad_disp.resize(3, &adZeroGradient());
37 }
38 
39 template <ComputeStage compute_stage>
40 void
42 {
43  _density[_qp] = _initial_density;
44 }
45 
46 template <ComputeStage compute_stage>
47 void
49 {
50  // rho * V = rho0 * V0
51  // rho = rho0 * V0 / V
52  // rho = rho0 / det(F)
53  // rho = rho0 / det(grad(u) + 1)
54 
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;
64 
65  switch (_coord_system)
66  {
67  case Moose::COORD_XYZ:
68  Azz = (*_grad_disp[2])[_qp](2) + 1.0;
69  break;
70 
71  case Moose::COORD_RZ:
72  if (_q_point[_qp](0) != 0.0)
73  Azz = _disp_r[_qp] / _q_point[_qp](0) + 1.0;
74  break;
75 
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;
79  break;
80  }
81 
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;
85 }
ADDensity::_grad_disp
std::vector< const ADVariableGradient * > _grad_disp
Definition: ADDensity.h:32
ADDensity::ADDensity
ADDensity(const InputParameters &parameters)
Definition: ADDensity.C:22
ADDensity
Definition: ADDensity.h:16
ADDensity.h
ADDensity::initQpStatefulProperties
virtual void initQpStatefulProperties()
Definition: ADDensity.C:41
registerADMooseObject
registerADMooseObject("MiscApp", ADDensity)
defineADValidParams
defineADValidParams(ADDensity, ADMaterial, params.addClassDescription("Creates density AD material property");params.addRequiredCoupledVar("displacements", "The displacements appropriate for the simulation geometry and coordinate system");params.addRequiredParam< Real >("density", "Initial density");)
ADDensity::computeQpProperties
virtual void computeQpProperties()
Definition: ADDensity.C:48