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 "ACInterfaceKobayashi1.h" 11 : 12 : registerMooseObject("PhaseFieldApp", ACInterfaceKobayashi1); 13 : 14 : InputParameters 15 40 : ACInterfaceKobayashi1::validParams() 16 : { 17 40 : InputParameters params = JvarMapKernelInterface<KernelGrad>::validParams(); 18 40 : params.addClassDescription("Anisotropic gradient energy Allen-Cahn Kernel Part 1"); 19 80 : params.addParam<MaterialPropertyName>("mob_name", "L", "The mobility used with the kernel"); 20 80 : params.addParam<MaterialPropertyName>("eps_name", "eps", "The anisotropic interface parameter"); 21 80 : params.addParam<MaterialPropertyName>( 22 : "deps_name", 23 : "deps", 24 : "The derivative of the anisotropic interface parameter with respect to angle"); 25 80 : params.addParam<MaterialPropertyName>( 26 : "depsdgrad_op_name", 27 : "depsdgrad_op", 28 : "The derivative of the anisotropic interface parameter eps with respect to grad_op"); 29 80 : params.addParam<MaterialPropertyName>( 30 : "ddepsdgrad_op_name", "ddepsdgrad_op", "The derivative of deps with respect to grad_op"); 31 40 : return params; 32 0 : } 33 : 34 21 : ACInterfaceKobayashi1::ACInterfaceKobayashi1(const InputParameters & parameters) 35 : : DerivativeMaterialInterface<JvarMapKernelInterface<KernelGrad>>(parameters), 36 21 : _L(getMaterialProperty<Real>("mob_name")), 37 21 : _dLdop(getMaterialPropertyDerivative<Real>("mob_name", _var.name())), 38 42 : _eps(getMaterialProperty<Real>("eps_name")), 39 42 : _deps(getMaterialProperty<Real>("deps_name")), 40 42 : _depsdgrad_op(getMaterialProperty<RealGradient>("depsdgrad_op_name")), 41 63 : _ddepsdgrad_op(getMaterialProperty<RealGradient>("ddepsdgrad_op_name")) 42 : { 43 : // reserve space for derivatives 44 21 : _dLdarg.resize(_n_args); 45 21 : _depsdarg.resize(_n_args); 46 21 : _ddepsdarg.resize(_n_args); 47 : 48 : // Iterate over all coupled variables 49 21 : for (unsigned int i = 0; i < _n_args; ++i) 50 : { 51 0 : _dLdarg[i] = &getMaterialPropertyDerivative<Real>("mob_name", i); 52 0 : _depsdarg[i] = &getMaterialPropertyDerivative<Real>("eps_name", i); 53 0 : _ddepsdarg[i] = &getMaterialPropertyDerivative<Real>("deps_name", i); 54 : } 55 21 : } 56 : 57 : RealGradient 58 2449408 : ACInterfaceKobayashi1::precomputeQpResidual() 59 : { 60 : // Set modified gradient vector 61 2449408 : const RealGradient v(-_grad_u[_qp](1), _grad_u[_qp](0), 0); 62 : 63 : // Define anisotropic interface residual 64 2449408 : return _eps[_qp] * _deps[_qp] * _L[_qp] * v; 65 : } 66 : 67 : RealGradient 68 3031040 : ACInterfaceKobayashi1::precomputeQpJacobian() 69 : { 70 : // Set modified gradient vector 71 3031040 : const RealGradient v(-_grad_u[_qp](1), _grad_u[_qp](0), 0); 72 : 73 : // dvdgrad_op*_grad_phi 74 3031040 : const RealGradient dv(-_grad_phi[_j][_qp](1), _grad_phi[_j][_qp](0), 0); 75 : 76 : // Derivative of epsilon wrt nodal op values 77 3031040 : Real depsdop_i = _depsdgrad_op[_qp] * _grad_phi[_j][_qp]; 78 3031040 : Real ddepsdop_i = _ddepsdgrad_op[_qp] * _grad_phi[_j][_qp]; 79 : ; 80 : 81 : // Set the Jacobian 82 3031040 : RealGradient jac1 = _eps[_qp] * _deps[_qp] * dv; 83 3031040 : RealGradient jac2 = _deps[_qp] * depsdop_i * v; 84 3031040 : RealGradient jac3 = _eps[_qp] * ddepsdop_i * v; 85 : 86 3031040 : return _L[_qp] * (jac1 + jac2 + jac3); 87 : } 88 : 89 : Real 90 0 : ACInterfaceKobayashi1::computeQpOffDiagJacobian(unsigned int jvar) 91 : { 92 : // get the coupled variable jvar is referring to 93 : const unsigned int cvar = mapJvarToCvar(jvar); 94 : 95 : // Set modified gradient vector 96 0 : const RealGradient v(-_grad_u[_qp](1), _grad_u[_qp](0), 0); 97 : 98 : // Set off-diagonal jaocbian terms from mobility dependence 99 : Real dsum = 100 0 : _L[_qp] * (_deps[_qp] * (*_depsdarg[cvar])[_qp] * _phi[_j][_qp] * v * _grad_test[_i][_qp]); 101 0 : dsum += 102 0 : _L[_qp] * (_eps[_qp] * (*_ddepsdarg[cvar])[_qp] * _phi[_j][_qp] * v * _grad_test[_i][_qp]); 103 0 : dsum += (*_dLdarg[cvar])[_qp] * _phi[_j][_qp] * _eps[_qp] * _deps[_qp] * v * _grad_test[_i][_qp]; 104 : 105 0 : return dsum; 106 : }