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