https://mooseframework.inl.gov
Loading...
Searching...
No Matches
FVPorousFlowEnergyTimeDerivative.C
Go to the documentation of this file.
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
11#include "PorousFlowDictator.h"
12
14
17{
19 params.addRequiredParam<UserObjectName>("PorousFlowDictator",
20 "The PorousFlowDictator UserObject");
21 params.addClassDescription("Derivative of heat energy with respect to time");
22 return params;
23}
24
26 const InputParameters & parameters)
27 : FVTimeKernel(parameters),
28 _dictator(getUserObject<PorousFlowDictator>("PorousFlowDictator")),
29 _num_phases(_dictator.numPhases()),
30 _fluid_present(_num_phases > 0),
31 _porosity(getADMaterialProperty<Real>("PorousFlow_porosity_qp")),
32 _porosity_old(getMaterialPropertyOld<Real>("PorousFlow_porosity_qp")),
33 _density(_fluid_present
34 ? &getADMaterialProperty<std::vector<Real>>("PorousFlow_fluid_phase_density_qp")
35 : nullptr),
36 _density_old(_fluid_present ? &getMaterialPropertyOld<std::vector<Real>>(
37 "PorousFlow_fluid_phase_density_qp")
38 : nullptr),
39 _rock_energy(getADMaterialProperty<Real>("PorousFlow_matrix_internal_energy_nodal")),
40 _rock_energy_old(getMaterialPropertyOld<Real>("PorousFlow_matrix_internal_energy_nodal")),
41 _energy(_fluid_present ? &getADMaterialProperty<std::vector<Real>>(
42 "PorousFlow_fluid_phase_internal_energy_qp")
43 : nullptr),
44 _energy_old(_fluid_present ? &getMaterialPropertyOld<std::vector<Real>>(
45 "PorousFlow_fluid_phase_internal_energy_qp")
46 : nullptr),
47 _saturation(_fluid_present
48 ? &getADMaterialProperty<std::vector<Real>>("PorousFlow_saturation_qp")
49 : nullptr),
50 _saturation_old(_fluid_present
51 ? &getMaterialPropertyOld<std::vector<Real>>("PorousFlow_saturation_qp")
52 : nullptr)
53{
54}
55
58{
60 ADReal energy = (1.0 - _porosity[_qp]) * _rock_energy[_qp];
61 Real energy_old = (1.0 - _porosity_old[_qp]) * _rock_energy_old[_qp];
62
65 for (const auto p : make_range(_num_phases))
66 {
67 energy += _porosity[_qp] * (*_density)[_qp][p] * (*_saturation)[_qp][p] * (*_energy)[_qp][p];
68 energy_old += _porosity_old[_qp] * (*_density_old)[_qp][p] * (*_saturation_old)[_qp][p] *
69 (*_energy_old)[_qp][p];
70 }
71
72 return (energy - energy_old) / _dt;
73}
DualNumber< Real, DNDerivativeType, true > ADReal
registerADMooseObject("PorousFlowApp", FVPorousFlowEnergyTimeDerivative)
const Real p
const unsigned int _qp
const MaterialProperty< Real > & _porosity_old
const bool _fluid_present
Whether fluid is present.
const unsigned int _num_phases
Number of fluid phases.
const ADMaterialProperty< Real > & _porosity
Porosity.
FVPorousFlowEnergyTimeDerivative(const InputParameters &parameters)
const ADMaterialProperty< Real > & _rock_energy
Internal energy of porous matrix.
const MaterialProperty< Real > & _rock_energy_old
static InputParameters validParams()
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
This holds maps between the nonlinear variables used in a PorousFlow simulation and the variable numb...