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 "ACGBPoly.h" 11 : #include "Material.h" 12 : 13 : registerMooseObject("PhaseFieldApp", ACGBPoly); 14 : 15 : InputParameters 16 180 : ACGBPoly::validParams() 17 : { 18 180 : InputParameters params = ACBulk<Real>::validParams(); 19 180 : params.addClassDescription("Grain-Boundary model concentration dependent residual"); 20 360 : params.addRequiredCoupledVar("c", "Other species concentration"); 21 360 : params.addParam<Real>("en_ratio", 1.0, "Ratio of surface energy to GB energy"); 22 180 : return params; 23 0 : } 24 : 25 96 : ACGBPoly::ACGBPoly(const InputParameters & parameters) 26 : : ACBulk<Real>(parameters), 27 96 : _c(coupledValue("c")), 28 96 : _c_var(coupled("c")), 29 192 : _mu(getMaterialProperty<Real>("mu")), 30 192 : _gamma(getMaterialProperty<Real>("gamma_asymm")), 31 288 : _en_ratio(getParam<Real>("en_ratio")) 32 : { 33 96 : } 34 : 35 : Real 36 31973184 : ACGBPoly::computeDFDOP(PFFunctionType type) 37 : { 38 31973184 : Real mult = 2.0 * _en_ratio * _mu[_qp] * _gamma[_qp]; 39 : 40 31973184 : Real c = _c[_qp]; 41 31973184 : if (c < 1.0e-8) 42 : c = 0.0; 43 3275472 : if (c > 1.0) 44 : c = 1.0; 45 : 46 31973184 : switch (type) 47 : { 48 20141760 : case Residual: 49 20141760 : return mult * _u[_qp] * c * c; 50 : 51 11831424 : case Jacobian: 52 11831424 : return mult * _phi[_j][_qp] * c * c; 53 : } 54 : 55 0 : mooseError("Invalid type passed in"); 56 : } 57 : 58 : Real 59 15033600 : ACGBPoly::computeQpOffDiagJacobian(unsigned int jvar) 60 : { 61 15033600 : Real c = _c[_qp]; 62 15033600 : if (c < 1.0e-8) 63 : c = 0.0; 64 939264 : if (c > 1.0) 65 : c = 1.0; 66 : 67 15033600 : if (jvar == _c_var) 68 : { 69 0 : Real mult = 2.0 * _en_ratio * _mu[_qp] * _gamma[_qp]; 70 0 : Real dDFDOP = 2.0 * mult * _u[_qp] * c * _phi[_j][_qp]; 71 : 72 0 : return _L[_qp] * _test[_i][_qp] * dDFDOP; 73 : } 74 : 75 : return 0.0; 76 : }