https://mooseframework.inl.gov
Loading...
Searching...
No Matches
ACGrGrMulti.C
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
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 "ACGrGrMulti.h"
11
14
15template <bool is_ad>
18{
20 params.addClassDescription("Multi-phase poly-crystalline Allen-Cahn Kernel");
21 params.addRequiredParam<std::vector<MaterialPropertyName>>(
22 "gamma_names",
23 "List of gamma material property names for each other order parameter. Place "
24 "in same order as order parameters (v)!");
25 return params;
26}
27
28template <bool is_ad>
30 : ACGrGrMultiBase<is_ad>(parameters),
31 _gamma_names(this->template getParam<std::vector<MaterialPropertyName>>("gamma_names")),
32 _num_j(_gamma_names.size()),
33 _prop_gammas(_num_j)
34{
35 // check passed in parameter vectors
36 if (_num_j != this->coupledComponents("v"))
37 this->paramError(
38 "gamma_names",
39 "Need to pass in as many gamma_names as coupled variables in v in ACGrGrMulti");
40
41 for (unsigned int n = 0; n < _num_j; ++n)
42 _prop_gammas[n] = &this->template getGenericMaterialProperty<Real, is_ad>(_gamma_names[n]);
43}
44
46 : ACGrGrMultiTempl<false>(parameters),
47 _uname(this->template getParam<NonlinearVariableName>("variable")),
48 _dmudu(this->template getMaterialPropertyDerivative<Real>("mu", _uname)),
49 _vname(this->template getParam<std::vector<VariableName>>("v")),
50 _dmudEtaj(_num_j)
51{
52 for (unsigned int n = 0; n < _num_j; ++n)
53 _dmudEtaj[n] = &this->template getMaterialPropertyDerivative<Real>("mu", _vname[n]);
54}
55
56Real
57ACGrGrMulti::computeDFDOP(PFFunctionType type)
58{
59 // Sum all other order parameters
60 Real SumGammaEtaj = 0.0;
61 for (const auto i : make_range(_op_num))
62 SumGammaEtaj += (*_prop_gammas[i])[_qp] * (*_vals[i])[_qp] * (*_vals[i])[_qp];
63
64 // Calculate either the residual or Jacobian of the grain growth free energy
65 switch (type)
66 {
67 case Residual:
68 {
69 return _mu[_qp] * computedF0du();
70 }
71
72 case Jacobian:
73 {
74 Real d2f0du2 = 3.0 * _u[_qp] * _u[_qp] - 1.0 + 2.0 * SumGammaEtaj;
75 return _phi[_j][_qp] * (_mu[_qp] * d2f0du2 + _dmudu[_qp] * computedF0du());
76 }
77
78 default:
79 mooseError("Invalid type passed in");
80 }
81}
82
85{
86 // Sum all other order parameters
87 ADReal SumGammaEtaj = 0.0;
88 for (const auto i : make_range(_op_num))
89 SumGammaEtaj += (*_prop_gammas[i])[_qp] * (*_vals[i])[_qp] * (*_vals[i])[_qp];
90
91 return _mu[_qp] * computedF0du();
92}
93
94Real
96{
97 for (unsigned int i = 0; i < _op_num; ++i)
98 if (jvar == _vals_var[i])
99 {
100 // Derivative of SumGammaEtaj
101 const Real dSumGammaEtaj = 2.0 * (*_prop_gammas[i])[_qp] * (*_vals[i])[_qp];
102 const Real dDFDOP = _mu[_qp] * 2.0 * _u[_qp] * dSumGammaEtaj;
103
104 return _L[_qp] * _test[_i][_qp] * _phi[_j][_qp] *
105 (dDFDOP + (*_dmudEtaj[i])[_qp] * computedF0du());
106 }
107
108 return 0.0;
109}
110
111template <bool is_ad>
114{
115 GenericReal<is_ad> SumGammaEtaj = 0.0;
116 for (const auto i : make_range(_op_num))
117 SumGammaEtaj += (*_prop_gammas[i])[_qp] * (*_vals[i])[_qp] * (*_vals[i])[_qp];
118
119 return _u[_qp] * _u[_qp] * _u[_qp] - _u[_qp] + 2.0 * _u[_qp] * SumGammaEtaj;
120}
121
122template class ACGrGrMultiTempl<false>;
123template class ACGrGrMultiTempl<true>;
registerMooseObject("PhaseFieldApp", ACGrGrMulti)
typename std::conditional< is_ad, ADGrainGrowthBase, ACGrGrBase >::type ACGrGrMultiBase
This kernel calculates the residual for grain growth for a multi-phase, poly-crystal system.
Definition ACGrGrMulti.h:22
DualNumber< Real, DNDerivativeType, true > ADReal
void mooseError(Args &&... args)
Moose::GenericType< Real, is_ad > GenericReal
ACGrGrMultiTempl(const InputParameters &parameters)
Definition ACGrGrMulti.C:29
static InputParameters validParams()
Definition ACGrGrMulti.C:17
std::vector< const GenericMaterialProperty< Real, is_ad > * > _prop_gammas
Values of gammas for each order parameter.
Definition ACGrGrMulti.h:38
GenericReal< is_ad > computedF0du()
virtual Real computeDFDOP(PFFunctionType type) override
Definition ACGrGrMulti.C:57
const MaterialProperty< Real > & _dmudu
Definition ACGrGrMulti.h:59
virtual Real computeQpOffDiagJacobian(unsigned int jvar) override
Definition ACGrGrMulti.C:95
std::vector< const MaterialProperty< Real > * > _dmudEtaj
Definition ACGrGrMulti.h:61
ACGrGrMulti(const InputParameters &parameters)
Definition ACGrGrMulti.C:45
virtual ADReal computeDFDOP() override
Definition ACGrGrMulti.C:84
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)