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 "ACInterfaceKobayashi2.h" 11 : 12 : registerMooseObject("PhaseFieldApp", ACInterfaceKobayashi2); 13 : 14 : InputParameters 15 40 : ACInterfaceKobayashi2::validParams() 16 : { 17 40 : InputParameters params = JvarMapKernelInterface<KernelGrad>::validParams(); 18 40 : params.addClassDescription("Anisotropic Gradient energy Allen-Cahn Kernel Part 2"); 19 80 : params.addParam<MaterialPropertyName>("mob_name", "L", "The mobility used with the kernel"); 20 80 : params.addParam<MaterialPropertyName>("eps_name", "eps", "The anisotropic parameter"); 21 80 : params.addParam<MaterialPropertyName>( 22 : "depsdgrad_op_name", 23 : "depsdgrad_op", 24 : "The derivative of the anisotropic interface parameter eps with respect to grad_op"); 25 40 : return params; 26 0 : } 27 : 28 21 : ACInterfaceKobayashi2::ACInterfaceKobayashi2(const InputParameters & parameters) 29 : : DerivativeMaterialInterface<JvarMapKernelInterface<KernelGrad>>(parameters), 30 21 : _L(getMaterialProperty<Real>("mob_name")), 31 21 : _dLdop(getMaterialPropertyDerivative<Real>("mob_name", _var.name())), 32 42 : _eps(getMaterialProperty<Real>("eps_name")), 33 42 : _depsdgrad_op(getMaterialProperty<RealGradient>("depsdgrad_op_name")), 34 21 : _dLdarg(_n_args), 35 42 : _depsdarg(_n_args) 36 : { 37 : // Iterate over all coupled variables 38 21 : for (unsigned int i = 0; i < _n_args; ++i) 39 : { 40 0 : _dLdarg[i] = &getMaterialPropertyDerivative<Real>("mob_name", i); 41 0 : _depsdarg[i] = &getMaterialPropertyDerivative<Real>("eps_name", i); 42 : } 43 21 : } 44 : 45 : RealGradient 46 2449408 : ACInterfaceKobayashi2::precomputeQpResidual() 47 : { 48 : // Set interfacial part of residual 49 2449408 : return _eps[_qp] * _eps[_qp] * _L[_qp] * _grad_u[_qp]; 50 : } 51 : 52 : RealGradient 53 3031040 : ACInterfaceKobayashi2::precomputeQpJacobian() 54 : { 55 : // Calculate depsdop_i 56 3031040 : Real depsdop_i = _depsdgrad_op[_qp] * _grad_phi[_j][_qp]; 57 : 58 : // Set Jacobian using product rule 59 3031040 : return _L[_qp] * 60 3031040 : (_eps[_qp] * _eps[_qp] * _grad_phi[_j][_qp] + 2.0 * _eps[_qp] * depsdop_i * _grad_u[_qp]); 61 : } 62 : 63 : Real 64 0 : ACInterfaceKobayashi2::computeQpOffDiagJacobian(unsigned int jvar) 65 : { 66 : // get the coupled variable jvar is referring to 67 : const unsigned int cvar = mapJvarToCvar(jvar); 68 : 69 : // Set off-diagonal jaocbian terms from mobility and epsilon dependence 70 0 : Real dsum = _L[_qp] * 2.0 * _eps[_qp] * (*_depsdarg[cvar])[_qp] * _phi[_j][_qp] * _grad_u[_qp] * 71 0 : _grad_test[_i][_qp]; 72 0 : dsum += _eps[_qp] * _eps[_qp] * (*_dLdarg[cvar])[_qp] * _phi[_j][_qp] * _grad_u[_qp] * 73 : _grad_test[_i][_qp]; 74 : 75 0 : return dsum; 76 : }