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 "PorousFlowTotalGravitationalDensityFullySaturatedFromPorosity.h" 11 : 12 : registerMooseObject("PorousFlowApp", PorousFlowTotalGravitationalDensityFullySaturatedFromPorosity); 13 : 14 : InputParameters 15 170 : PorousFlowTotalGravitationalDensityFullySaturatedFromPorosity::validParams() 16 : { 17 170 : InputParameters params = PorousFlowTotalGravitationalDensityBase::validParams(); 18 340 : params.addRequiredRangeCheckedParam<Real>( 19 : "rho_s", "rho_s >= 0", "The density of the solid matrix"); 20 170 : params.addClassDescription( 21 : "This Material calculates the porous medium density from the porosity, solid density " 22 : "(assumed constant) and fluid density, for the fully-saturated single fluid phase case, " 23 : "using a linear weighted average. " 24 : "density = phi * rho_f + (1 - phi) * rho_s, where phi is porosity and rho_f, rho_s are " 25 : "the densities of the fluid and solid phases."); 26 170 : return params; 27 0 : } 28 : 29 132 : PorousFlowTotalGravitationalDensityFullySaturatedFromPorosity:: 30 : PorousFlowTotalGravitationalDensityFullySaturatedFromPorosity( 31 132 : const InputParameters & parameters) 32 : : PorousFlowTotalGravitationalDensityBase(parameters), 33 132 : _rho_s(getParam<Real>("rho_s")), 34 264 : _rho_f_qp(getMaterialProperty<std::vector<Real>>("PorousFlow_fluid_phase_density_qp")), 35 264 : _porosity_qp(getMaterialProperty<Real>("PorousFlow_porosity_qp")), 36 264 : _drho_f_qp_dvar(getMaterialProperty<std::vector<std::vector<Real>>>( 37 : "dPorousFlow_fluid_phase_density_qp_dvar")), 38 396 : _dporosity_qp_dvar(getMaterialProperty<std::vector<Real>>("dPorousFlow_porosity_qp_dvar")) 39 : { 40 132 : if (_num_phases != 1) 41 0 : mooseError("The Dictator proclaims that the number of phases is ", 42 0 : _dictator.numPhases(), 43 : " whereas PorousFlowThermalConductivityFromPorosity can only be used for 1-phase " 44 : "simulations. Be aware that the Dictator has noted your mistake."); 45 : 46 132 : if (_nodal_material == true) 47 0 : mooseError("PorousFlowTotalGravitationalDensityFullySaturatedFromPorosity is only defined for " 48 : "at_nodes = false"); 49 132 : } 50 : 51 : void 52 1344 : PorousFlowTotalGravitationalDensityFullySaturatedFromPorosity::initQpStatefulProperties() 53 : { 54 : const unsigned ph = 0; 55 1344 : _gravdensity[_qp] = _rho_s * (1.0 - _porosity_qp[_qp]) + _rho_f_qp[_qp][ph] * _porosity_qp[_qp]; 56 1344 : } 57 : 58 : void 59 3516 : PorousFlowTotalGravitationalDensityFullySaturatedFromPorosity::computeQpProperties() 60 : { 61 : const unsigned ph = 0; 62 3516 : _gravdensity[_qp] = _rho_s * (1.0 - _porosity_qp[_qp]) + _rho_f_qp[_qp][ph] * _porosity_qp[_qp]; 63 : 64 3516 : _dgravdensity_dvar[_qp].resize(_num_var); 65 16932 : for (unsigned int v = 0; v < _num_var; ++v) 66 : { 67 13416 : _dgravdensity_dvar[_qp][v] = _dporosity_qp_dvar[_qp][v] * (_rho_f_qp[_qp][ph] - _rho_s) + 68 13416 : _drho_f_qp_dvar[_qp][ph][v] * _porosity_qp[_qp]; 69 : } 70 3516 : }