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 276 : ACGBPoly::validParams() 17 : { 18 276 : InputParameters params = ACBulk<Real>::validParams(); 19 276 : params.addClassDescription("Grain-Boundary model concentration dependent residual"); 20 552 : params.addRequiredCoupledVar("c", "Other species concentration"); 21 552 : params.addParam<Real>("en_ratio", 1.0, "Ratio of surface energy to GB energy"); 22 276 : return params; 23 0 : } 24 : 25 144 : ACGBPoly::ACGBPoly(const InputParameters & parameters) 26 : : ACBulk<Real>(parameters), 27 144 : _c(coupledValue("c")), 28 144 : _c_var(coupled("c")), 29 288 : _mu(getMaterialProperty<Real>("mu")), 30 288 : _gamma(getMaterialProperty<Real>("gamma_asymm")), 31 432 : _en_ratio(getParam<Real>("en_ratio")) 32 : { 33 144 : } 34 : 35 : Real 36 37586384 : ACGBPoly::computeDFDOP(PFFunctionType type) 37 : { 38 37586384 : Real mult = 2.0 * _en_ratio * _mu[_qp] * _gamma[_qp]; 39 : 40 37586384 : Real c = _c[_qp]; 41 37586384 : if (c < 1.0e-8) 42 : c = 0.0; 43 3839248 : if (c > 1.0) 44 : c = 1.0; 45 : 46 37586384 : switch (type) 47 : { 48 23662864 : case Residual: 49 23662864 : return mult * _u[_qp] * c * c; 50 : 51 13923520 : case Jacobian: 52 13923520 : return mult * _phi[_j][_qp] * c * c; 53 : } 54 : 55 0 : mooseError("Invalid type passed in"); 56 : } 57 : 58 : Real 59 17779584 : ACGBPoly::computeQpOffDiagJacobian(unsigned int jvar) 60 : { 61 17779584 : Real c = _c[_qp]; 62 17779584 : if (c < 1.0e-8) 63 : c = 0.0; 64 1110912 : if (c > 1.0) 65 : c = 1.0; 66 : 67 17779584 : 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 : }