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 "PorousFlowDesorpedMassVolumetricExpansion.h" 11 : 12 : #include "MooseVariable.h" 13 : 14 : registerMooseObject("PorousFlowApp", PorousFlowDesorpedMassVolumetricExpansion); 15 : 16 : InputParameters 17 26 : PorousFlowDesorpedMassVolumetricExpansion::validParams() 18 : { 19 26 : InputParameters params = TimeKernel::validParams(); 20 52 : params.addRequiredParam<UserObjectName>( 21 : "PorousFlowDictator", "The UserObject that holds the list of PorousFlow variable names."); 22 52 : params.addRequiredCoupledVar( 23 : "conc_var", "The variable that represents the concentration of desorped species"); 24 26 : params.addClassDescription("Desorped_mass * rate_of_solid_volumetric_expansion"); 25 26 : return params; 26 0 : } 27 : 28 14 : PorousFlowDesorpedMassVolumetricExpansion::PorousFlowDesorpedMassVolumetricExpansion( 29 14 : const InputParameters & parameters) 30 : : TimeKernel(parameters), 31 14 : _dictator(getUserObject<PorousFlowDictator>("PorousFlowDictator")), 32 14 : _conc_var_number(coupled("conc_var")), 33 14 : _conc(coupledValue("conc_var")), 34 28 : _porosity(getMaterialProperty<Real>("PorousFlow_porosity_qp")), 35 28 : _dporosity_dvar(getMaterialProperty<std::vector<Real>>("dPorousFlow_porosity_qp_dvar")), 36 14 : _dporosity_dgradvar( 37 14 : getMaterialProperty<std::vector<RealGradient>>("dPorousFlow_porosity_qp_dgradvar")), 38 28 : _strain_rate_qp(getMaterialProperty<Real>("PorousFlow_volumetric_strain_rate_qp")), 39 28 : _dstrain_rate_qp_dvar(getMaterialProperty<std::vector<RealGradient>>( 40 14 : "dPorousFlow_volumetric_strain_rate_qp_dvar")) 41 : { 42 14 : } 43 : 44 : Real 45 10656 : PorousFlowDesorpedMassVolumetricExpansion::computeQpResidual() 46 : { 47 10656 : return _test[_i][_qp] * (1.0 - _porosity[_qp]) * _conc[_qp] * _strain_rate_qp[_qp]; 48 : } 49 : 50 : Real 51 2080 : PorousFlowDesorpedMassVolumetricExpansion::computeQpJacobian() 52 : { 53 2080 : return computeQpJac(_var.number()); 54 : } 55 : 56 : Real 57 7424 : PorousFlowDesorpedMassVolumetricExpansion::computeQpOffDiagJacobian(unsigned int jvar) 58 : { 59 7424 : return computeQpJac(jvar); 60 : } 61 : 62 : Real 63 9504 : PorousFlowDesorpedMassVolumetricExpansion::computeQpJac(unsigned int jvar) const 64 : { 65 : Real deriv = 0.0; 66 : 67 9504 : if (jvar == _conc_var_number) 68 288 : deriv = (1.0 - _porosity[_qp]) * _phi[_j][_qp] * _strain_rate_qp[_qp]; 69 : 70 9504 : if (_dictator.notPorousFlowVariable(jvar)) 71 0 : return _test[_i][_qp] * deriv; 72 9504 : const unsigned int pvar = _dictator.porousFlowVariableNum(jvar); 73 : 74 9504 : deriv -= _dporosity_dgradvar[_qp][pvar] * _grad_phi[_j][_qp] * _conc[_qp] * _strain_rate_qp[_qp]; 75 9504 : deriv -= _dporosity_dvar[_qp][pvar] * _phi[_j][_qp] * _conc[_qp] * _strain_rate_qp[_qp]; 76 9504 : deriv += 77 9504 : (1.0 - _porosity[_qp]) * _conc[_qp] * _dstrain_rate_qp_dvar[_qp][pvar] * _grad_phi[_j][_qp]; 78 : 79 9504 : return _test[_i][_qp] * deriv; 80 : }