Line data Source code
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 "ACKappaFunction.h" 11 : 12 : registerMooseObject("PhaseFieldApp", ACKappaFunction); 13 : registerMooseObject("PhaseFieldApp", ADACKappaFunction); 14 : 15 : template <bool is_ad> 16 : InputParameters 17 133 : ACKappaFunctionTempl<is_ad>::validParams() 18 : { 19 : InputParameters params = GenericKernel<is_ad>::validParams(); 20 133 : params.addClassDescription("Gradient energy term for when kappa as a function of the variable"); 21 266 : params.addParam<MaterialPropertyName>("mob_name", "L", "The mobility used with the kernel"); 22 266 : params.addParam<MaterialPropertyName>("kappa_name", "kappa_op", "The kappa function name"); 23 266 : params.addCoupledVar("v", "Vector of order parameters"); 24 133 : return params; 25 0 : } 26 : template <bool is_ad> 27 70 : ACKappaFunctionTempl<is_ad>::ACKappaFunctionTempl(const InputParameters & parameters) 28 : : DerivativeMaterialInterface<JvarMapKernelInterface<GenericKernel<is_ad>>>(parameters), 29 70 : _L(this->template getGenericMaterialProperty<Real, is_ad>("mob_name")), 30 70 : _kappa_name(this->template getParam<MaterialPropertyName>("kappa_name")), 31 140 : _dkappadvar(this->template getGenericMaterialProperty<Real, is_ad>( 32 70 : this->derivativePropertyNameFirst(_kappa_name, _var.name()))), 33 70 : _v_num(this->coupledComponents("v")), 34 140 : _grad_v(_v_num) 35 : { 36 128 : for (unsigned int i = 0; i < _v_num; ++i) 37 58 : _grad_v[i] = &this->template coupledGenericGradient<is_ad>("v", i); 38 70 : } 39 : 40 36 : ACKappaFunction::ACKappaFunction(const InputParameters & parameters) 41 : : ACKappaFunctionTempl<false>(parameters), 42 36 : _dLdvar(getMaterialPropertyDerivative<Real>("mob_name", _var.name())), 43 36 : _d2kappadvar2(getMaterialPropertyDerivative<Real>(_kappa_name, _var.name(), _var.name())), 44 36 : _v_map(getParameterJvarMap("v")), 45 36 : _dLdv(_v_num), 46 72 : _d2kappadvardv(_v_num) 47 : { 48 60 : for (unsigned int i = 0; i < _v_num; ++i) 49 : { 50 24 : auto v_name = coupledName("v", i); 51 24 : _dLdv[i] = &getMaterialPropertyDerivative<Real>("mob_name", v_name); 52 24 : _d2kappadvardv[i] = &getMaterialPropertyDerivative<Real>(_kappa_name, _var.name(), v_name); 53 : } 54 36 : } 55 : 56 : template <bool is_ad> 57 : GenericReal<is_ad> 58 139926400 : ACKappaFunctionTempl<is_ad>::computeQpResidual() 59 : { 60 139926400 : return 0.5 * _test[_i][_qp] * _L[_qp] * _dkappadvar[_qp] * computeFg(); 61 : } 62 : 63 : Real 64 4326400 : ACKappaFunction::computeQpJacobian() 65 : { 66 4326400 : Real pre_jac = 0.5 * _test[_i][_qp] * _phi[_j][_qp] * computeFg(); 67 4326400 : Real term1 = _test[_i][_qp] * _L[_qp] * _dkappadvar[_qp] * _grad_u[_qp] * _grad_phi[_j][_qp]; 68 : 69 4326400 : return pre_jac * (_dLdvar[_qp] * _dkappadvar[_qp] + _L[_qp] * _d2kappadvar2[_qp]) + term1; 70 : } 71 : 72 : Real 73 4096000 : ACKappaFunction::computeQpOffDiagJacobian(unsigned int jvar) 74 : { 75 : auto i = mapJvarToCvar(jvar, _v_map); 76 4096000 : if (i >= 0) 77 : { 78 4096000 : const Real pre_jac = 0.5 * _test[_i][_qp] * _phi[_j][_qp] * computeFg(); 79 : const Real term1 = 80 4096000 : _test[_i][_qp] * _L[_qp] * _dkappadvar[_qp] * (*_grad_v[i])[_qp] * _grad_phi[_j][_qp]; 81 4096000 : return pre_jac * ((*_dLdv[i])[_qp] * _dkappadvar[_qp] + _L[_qp] * (*_d2kappadvardv[i])[_qp]) + 82 4096000 : term1; 83 : } 84 : 85 : return 0.0; 86 : } 87 : 88 : template <bool is_ad> 89 : GenericReal<is_ad> 90 148348800 : ACKappaFunctionTempl<is_ad>::computeFg() 91 : { 92 138316800 : GenericReal<is_ad> sum_grad_etai2 = 0.0; 93 296124800 : for (unsigned int i = 0; i < _v_num; ++i) 94 147776000 : sum_grad_etai2 += (*_grad_v[i])[_qp] * (*_grad_v[i])[_qp]; 95 : 96 286665600 : return sum_grad_etai2 + _grad_u[_qp] * _grad_u[_qp]; 97 : }