LCOV - code coverage report
Current view: top level - src/materials - PorousFlowTotalGravitationalDensityFullySaturatedFromPorosity.C (source / functions) Hit Total Coverage
Test: idaholab/moose porous_flow: #31405 (292dce) with base fef103 Lines: 25 29 86.2 %
Date: 2025-09-04 07:55:56 Functions: 4 4 100.0 %
Legend: Lines: hit not hit

          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 : }

Generated by: LCOV version 1.14