LCOV - code coverage report
Current view: top level - src/materials - PorousFlowTotalGravitationalDensityFullySaturatedFromPorosity.C (source / functions) Hit Total Coverage
Test: idaholab/moose porous_flow: #32971 (54bef8) with base c6cf66 Lines: 25 29 86.2 %
Date: 2026-05-29 20:38: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          78 : PorousFlowTotalGravitationalDensityFullySaturatedFromPorosity::validParams()
      16             : {
      17          78 :   InputParameters params = PorousFlowTotalGravitationalDensityBase::validParams();
      18         156 :   params.addRequiredRangeCheckedParam<Real>(
      19             :       "rho_s", "rho_s >= 0", "The density of the solid matrix");
      20          78 :   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          78 :   return params;
      27           0 : }
      28             : 
      29          60 : PorousFlowTotalGravitationalDensityFullySaturatedFromPorosity::
      30             :     PorousFlowTotalGravitationalDensityFullySaturatedFromPorosity(
      31          60 :         const InputParameters & parameters)
      32             :   : PorousFlowTotalGravitationalDensityBase(parameters),
      33          60 :     _rho_s(getParam<Real>("rho_s")),
      34         120 :     _rho_f_qp(getMaterialProperty<std::vector<Real>>("PorousFlow_fluid_phase_density_qp")),
      35         120 :     _porosity_qp(getMaterialProperty<Real>("PorousFlow_porosity_qp")),
      36         120 :     _drho_f_qp_dvar(getMaterialProperty<std::vector<std::vector<Real>>>(
      37             :         "dPorousFlow_fluid_phase_density_qp_dvar")),
      38         180 :     _dporosity_qp_dvar(getMaterialProperty<std::vector<Real>>("dPorousFlow_porosity_qp_dvar"))
      39             : {
      40          60 :   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          60 :   if (_nodal_material == true)
      47           0 :     mooseError("PorousFlowTotalGravitationalDensityFullySaturatedFromPorosity is only defined for "
      48             :                "at_nodes = false");
      49          60 : }
      50             : 
      51             : void
      52         832 : PorousFlowTotalGravitationalDensityFullySaturatedFromPorosity::initQpStatefulProperties()
      53             : {
      54             :   const unsigned ph = 0;
      55         832 :   _gravdensity[_qp] = _rho_s * (1.0 - _porosity_qp[_qp]) + _rho_f_qp[_qp][ph] * _porosity_qp[_qp];
      56         832 : }
      57             : 
      58             : void
      59        2454 : PorousFlowTotalGravitationalDensityFullySaturatedFromPorosity::computeQpProperties()
      60             : {
      61             :   const unsigned ph = 0;
      62        2454 :   _gravdensity[_qp] = _rho_s * (1.0 - _porosity_qp[_qp]) + _rho_f_qp[_qp][ph] * _porosity_qp[_qp];
      63             : 
      64        2454 :   _dgravdensity_dvar[_qp].resize(_num_var);
      65       11838 :   for (unsigned int v = 0; v < _num_var; ++v)
      66             :   {
      67        9384 :     _dgravdensity_dvar[_qp][v] = _dporosity_qp_dvar[_qp][v] * (_rho_f_qp[_qp][ph] - _rho_s) +
      68        9384 :                                  _drho_f_qp_dvar[_qp][ph][v] * _porosity_qp[_qp];
      69             :   }
      70        2454 : }

Generated by: LCOV version 1.14