https://mooseframework.inl.gov
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 
56 ADReal
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 
64  if (_fluid_present)
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 }
FVPorousFlowEnergyTimeDerivative(const InputParameters &parameters)
const MaterialProperty< Real > & _porosity_old
registerADMooseObject("PorousFlowApp", FVPorousFlowEnergyTimeDerivative)
static InputParameters validParams()
const ADMaterialProperty< Real > & _rock_energy
Internal energy of porous matrix.
DualNumber< Real, DNDerivativeType, true > ADReal
void addRequiredParam(const std::string &name, const std::string &doc_string)
const bool _fluid_present
Whether fluid is present.
const MaterialProperty< Real > & _rock_energy_old
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
This holds maps between the nonlinear variables used in a PorousFlow simulation and the variable numb...
IntRange< T > make_range(T beg, T end)
const unsigned int _qp
void addClassDescription(const std::string &doc_string)
const ADMaterialProperty< Real > & _porosity
Porosity.
const unsigned int _num_phases
Number of fluid phases.