LCOV - code coverage report
Current view: top level - src/materials - PorousConservedVarMaterial.C (source / functions) Hit Total Coverage
Test: idaholab/moose navier_stokes: 9fc4b0 Lines: 106 107 99.1 %
Date: 2025-08-14 10:14:56 Functions: 3 3 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             : // Navier-Stokes includes
      11             : #include "PorousConservedVarMaterial.h"
      12             : #include "NS.h"
      13             : #include "NavierStokesMethods.h"
      14             : 
      15             : // FluidProperties includes
      16             : #include "SinglePhaseFluidProperties.h"
      17             : 
      18             : registerMooseObject("NavierStokesApp", PorousConservedVarMaterial);
      19             : 
      20             : InputParameters
      21         681 : PorousConservedVarMaterial::validParams()
      22             : {
      23         681 :   auto params = Material::validParams();
      24         681 :   params.addRequiredParam<UserObjectName>(NS::fluid, "Fluid properties userobject");
      25         681 :   params.addRequiredCoupledVar(NS::density, "density");
      26         681 :   params.addRequiredCoupledVar(NS::total_energy_density, "total fluid energy");
      27         681 :   params.addRequiredCoupledVar(NS::superficial_momentum_x, "The x-momentum times the porosity");
      28         681 :   params.addCoupledVar(NS::superficial_momentum_y, "The y-momentum times the porosity");
      29         681 :   params.addCoupledVar(NS::superficial_momentum_z, "The z-momentum times the porosity");
      30         681 :   params.addClassDescription("Provides access to variables for a conserved variable set "
      31             :                              "of density, total fluid energy, and momentum");
      32         681 :   params.addRequiredParam<MaterialPropertyName>(NS::porosity, "the porosity");
      33         681 :   return params;
      34           0 : }
      35             : 
      36         513 : PorousConservedVarMaterial::PorousConservedVarMaterial(const InputParameters & params)
      37             :   : Material(params),
      38        1026 :     _fluid(UserObjectInterface::getUserObject<SinglePhaseFluidProperties>(NS::fluid)),
      39         513 :     _var_rho(adCoupledValue(NS::density)),
      40         513 :     _var_grad_rho(adCoupledGradient(NS::density)),
      41         513 :     _var_rho_ud(adCoupledValue(NS::superficial_momentum_x)),
      42         513 :     _var_rho_vd(isCoupled(NS::superficial_momentum_y) ? adCoupledValue(NS::superficial_momentum_y)
      43             :                                                       : _ad_zero),
      44         513 :     _var_rho_wd(isCoupled(NS::superficial_momentum_z) ? adCoupledValue(NS::superficial_momentum_z)
      45             :                                                       : _ad_zero),
      46         513 :     _var_grad_rho_ud(adCoupledGradient(NS::superficial_momentum_x)),
      47         513 :     _var_grad_rho_vd(isCoupled(NS::superficial_momentum_y)
      48         513 :                          ? adCoupledGradient(NS::superficial_momentum_y)
      49             :                          : _ad_grad_zero),
      50         513 :     _var_grad_rho_wd(isCoupled(NS::superficial_momentum_z)
      51         513 :                          ? adCoupledGradient(NS::superficial_momentum_z)
      52             :                          : _ad_grad_zero),
      53         513 :     _var_total_energy_density(adCoupledValue(NS::total_energy_density)),
      54         513 :     _var_grad_rho_et(adCoupledGradient(NS::total_energy_density)),
      55         513 :     _epsilon(getMaterialProperty<Real>(NS::porosity)),
      56         513 :     _rho(declareADProperty<Real>(NS::density)),
      57         513 :     _superficial_rho(declareADProperty<Real>(NS::superficial_density)),
      58         513 :     _mass_flux(declareADProperty<RealVectorValue>(NS::mass_flux)),
      59         513 :     _momentum(declareADProperty<RealVectorValue>(NS::momentum)),
      60         513 :     _total_energy_density(declareADProperty<Real>(NS::total_energy_density)),
      61         513 :     _velocity(declareADProperty<RealVectorValue>(NS::velocity)),
      62         513 :     _speed(declareADProperty<Real>(NS::speed)),
      63         513 :     _superficial_velocity(declareADProperty<RealVectorValue>(NS::superficial_velocity)),
      64         513 :     _sup_vel_x(declareADProperty<Real>(NS::superficial_velocity_x)),
      65         513 :     _sup_vel_y(declareADProperty<Real>(NS::superficial_velocity_y)),
      66         513 :     _sup_vel_z(declareADProperty<Real>(NS::superficial_velocity_z)),
      67         513 :     _grad_sup_vel_x(declareADProperty<RealVectorValue>(NS::grad(NS::superficial_velocity_x))),
      68         513 :     _grad_sup_vel_y(declareADProperty<RealVectorValue>(NS::grad(NS::superficial_velocity_y))),
      69         513 :     _grad_sup_vel_z(declareADProperty<RealVectorValue>(NS::grad(NS::superficial_velocity_z))),
      70         513 :     _sup_mom_x(declareADProperty<Real>(NS::superficial_momentum_x)),
      71         513 :     _sup_mom_y(declareADProperty<Real>(NS::superficial_momentum_y)),
      72         513 :     _sup_mom_z(declareADProperty<Real>(NS::superficial_momentum_z)),
      73         513 :     _vel_x(declareADProperty<Real>(NS::velocity_x)),
      74         513 :     _vel_y(declareADProperty<Real>(NS::velocity_y)),
      75         513 :     _vel_z(declareADProperty<Real>(NS::velocity_z)),
      76         513 :     _rhou(declareADProperty<Real>(NS::momentum_x)),
      77         513 :     _rhov(declareADProperty<Real>(NS::momentum_y)),
      78         513 :     _rhow(declareADProperty<Real>(NS::momentum_z)),
      79         513 :     _v(declareADProperty<Real>(NS::v)),
      80         513 :     _specific_internal_energy(declareADProperty<Real>(NS::specific_internal_energy)),
      81         513 :     _pressure(declareADProperty<Real>(NS::pressure)),
      82         513 :     _grad_pressure(declareADProperty<RealVectorValue>(NS::grad(NS::pressure))),
      83         513 :     _specific_total_enthalpy(declareADProperty<Real>(NS::specific_total_enthalpy)),
      84         513 :     _rho_ht(declareADProperty<Real>(NS::total_enthalpy_density)),
      85         513 :     _superficial_rho_et(declareADProperty<Real>(NS::superficial_total_energy_density)),
      86         513 :     _superficial_rho_ht(declareADProperty<Real>(NS::superficial_total_enthalpy_density)),
      87         513 :     _T_fluid(declareADProperty<Real>(NS::T_fluid)),
      88        1026 :     _grad_T_fluid(declareADProperty<RealVectorValue>(NS::grad(NS::T_fluid)))
      89             : {
      90         513 : }
      91             : 
      92             : void
      93      403580 : PorousConservedVarMaterial::computeQpProperties()
      94             : {
      95      403580 :   _rho[_qp] = _var_rho[_qp];
      96      807160 :   _superficial_rho[_qp] = _rho[_qp] * _epsilon[_qp];
      97      403580 :   _mass_flux[_qp] = {_var_rho_ud[_qp], _var_rho_vd[_qp], _var_rho_wd[_qp]};
      98      403580 :   _sup_mom_x[_qp] = _mass_flux[_qp](0);
      99      403580 :   _sup_mom_y[_qp] = _mass_flux[_qp](1);
     100      403580 :   _sup_mom_z[_qp] = _mass_flux[_qp](2);
     101      807160 :   _momentum[_qp] = _mass_flux[_qp] / _epsilon[_qp];
     102      403580 :   _total_energy_density[_qp] = _var_total_energy_density[_qp];
     103      807160 :   _superficial_rho_et[_qp] = _epsilon[_qp] * _total_energy_density[_qp];
     104             : 
     105      807160 :   _superficial_velocity[_qp] = _mass_flux[_qp] / _rho[_qp];
     106      403580 :   _sup_vel_x[_qp] = _superficial_velocity[_qp](0);
     107      403580 :   _sup_vel_y[_qp] = _superficial_velocity[_qp](1);
     108      403580 :   _sup_vel_z[_qp] = _superficial_velocity[_qp](2);
     109      807160 :   _grad_sup_vel_x[_qp] = _var_grad_rho_ud[_qp] / _rho[_qp] -
     110      807160 :                          _var_rho_ud[_qp] / (_rho[_qp] * _rho[_qp]) * _var_grad_rho[_qp];
     111      807160 :   _grad_sup_vel_y[_qp] = _var_grad_rho_vd[_qp] / _rho[_qp] -
     112      807160 :                          _var_rho_vd[_qp] / (_rho[_qp] * _rho[_qp]) * _var_grad_rho[_qp];
     113      807160 :   _grad_sup_vel_z[_qp] = _var_grad_rho_wd[_qp] / _rho[_qp] -
     114      807160 :                          _var_rho_wd[_qp] / (_rho[_qp] * _rho[_qp]) * _var_grad_rho[_qp];
     115             : 
     116      807160 :   _velocity[_qp] = _superficial_velocity[_qp] / _epsilon[_qp];
     117      403580 :   _speed[_qp] = NS::computeSpeed<ADReal>(_velocity[_qp]);
     118      403580 :   _vel_x[_qp] = _velocity[_qp](0);
     119      403580 :   _vel_y[_qp] = _velocity[_qp](1);
     120      403580 :   _vel_z[_qp] = _velocity[_qp](2);
     121      403580 :   const auto grad_vel_x = _grad_sup_vel_x[_qp] / _epsilon[_qp];
     122      403580 :   const auto grad_vel_y = _grad_sup_vel_y[_qp] / _epsilon[_qp];
     123      403580 :   const auto grad_vel_z = _grad_sup_vel_z[_qp] / _epsilon[_qp];
     124      807160 :   _rhou[_qp] = _vel_x[_qp] * _rho[_qp];
     125      807160 :   _rhov[_qp] = _vel_y[_qp] * _rho[_qp];
     126      807160 :   _rhow[_qp] = _vel_z[_qp] * _rho[_qp];
     127             : 
     128      807160 :   _v[_qp] = 1 / _rho[_qp];
     129      807160 :   const auto grad_v = (-1. / (_rho[_qp] * _rho[_qp])) * _var_grad_rho[_qp];
     130             : 
     131      403580 :   _specific_internal_energy[_qp] =
     132     1210740 :       _total_energy_density[_qp] / _rho[_qp] - (_velocity[_qp] * _velocity[_qp]) / 2;
     133             :   const auto grad_e =
     134      807160 :       _var_grad_rho_et[_qp] / _rho[_qp] -
     135      807160 :       _total_energy_density[_qp] / (_rho[_qp] * _rho[_qp]) * _var_grad_rho[_qp] -
     136      807160 :       (_vel_x[_qp] * grad_vel_x + _vel_y[_qp] * grad_vel_y + _vel_z[_qp] * grad_vel_z);
     137             : 
     138             :   ADReal dp_dv, dp_de;
     139      403580 :   _fluid.p_from_v_e(_v[_qp], _specific_internal_energy[_qp], _pressure[_qp], dp_dv, dp_de);
     140      807160 :   _grad_pressure[_qp] = dp_dv * grad_v + dp_de * grad_e;
     141             : 
     142      807160 :   _specific_total_enthalpy[_qp] = (_total_energy_density[_qp] + _pressure[_qp]) / _rho[_qp];
     143      807160 :   _rho_ht[_qp] = _specific_total_enthalpy[_qp] * _rho[_qp];
     144      807160 :   _superficial_rho_ht[_qp] = _rho_ht[_qp] * _epsilon[_qp];
     145             : 
     146             :   ADReal dT_dv, dT_de;
     147      403580 :   _fluid.T_from_v_e(_v[_qp], _specific_internal_energy[_qp], _T_fluid[_qp], dT_dv, dT_de);
     148      807160 :   _grad_T_fluid[_qp] = dT_dv * grad_v + dT_de * grad_e;
     149      403580 : }

Generated by: LCOV version 1.14