www.mooseframework.org
PorousFlowEnergyTimeDerivative.h
Go to the documentation of this file.
1 /****************************************************************/
2 /* MOOSE - Multiphysics Object Oriented Simulation Environment */
3 /* */
4 /* All contents are licensed under LGPL V2.1 */
5 /* See LICENSE for full restrictions */
6 /****************************************************************/
7 
8 #ifndef POROUSFLOWENERGYTIMEDERIVATIVE_H
9 #define POROUSFLOWENERGYTIMEDERIVATIVE_H
10 
11 #include "TimeDerivative.h"
12 #include "PorousFlowDictator.h"
13 
14 // Forward Declarations
16 
17 template <>
19 
24 class PorousFlowEnergyTimeDerivative : public TimeKernel
25 {
26 public:
27  PorousFlowEnergyTimeDerivative(const InputParameters & parameters);
28 
29 protected:
30  virtual Real computeQpResidual() override;
31  virtual Real computeQpJacobian() override;
32  virtual Real computeQpOffDiagJacobian(unsigned int jvar) override;
33 
36 
38  const bool _var_is_porflow_var;
39 
41  const unsigned int _num_phases;
42 
44  const bool _fluid_present;
45 
48 
50  const MaterialProperty<Real> & _porosity;
51 
53  const MaterialProperty<Real> & _porosity_old;
54 
56  const MaterialProperty<std::vector<Real>> & _dporosity_dvar;
57 
59  const MaterialProperty<std::vector<RealGradient>> & _dporosity_dgradvar;
60 
62  const MaterialProperty<unsigned int> * const _nearest_qp;
63 
65  const MaterialProperty<Real> & _rock_energy_nodal;
66 
68  const MaterialProperty<Real> & _rock_energy_nodal_old;
69 
71  const MaterialProperty<std::vector<Real>> & _drock_energy_nodal_dvar;
72 
74  const MaterialProperty<std::vector<Real>> * const _fluid_density;
75 
77  const MaterialProperty<std::vector<Real>> * const _fluid_density_old;
78 
80  const MaterialProperty<std::vector<std::vector<Real>>> * const _dfluid_density_dvar;
81 
83  const MaterialProperty<std::vector<Real>> * const _fluid_saturation_nodal;
84 
86  const MaterialProperty<std::vector<Real>> * const _fluid_saturation_nodal_old;
87 
89  const MaterialProperty<std::vector<std::vector<Real>>> * const _dfluid_saturation_nodal_dvar;
90 
92  const MaterialProperty<std::vector<Real>> * const _energy_nodal;
93 
95  const MaterialProperty<std::vector<Real>> * const _energy_nodal_old;
96 
98  const MaterialProperty<std::vector<std::vector<Real>>> * const _denergy_nodal_dvar;
99 
105  Real computeQpJac(unsigned int pvar) const;
106 };
107 
108 #endif // POROUSFLOWENERGYTIMEDERIVATIVE_H
const MaterialProperty< std::vector< Real > > *const _fluid_saturation_nodal_old
old value of fluid saturation
const MaterialProperty< std::vector< Real > > *const _fluid_density
nodal fluid density
const MaterialProperty< std::vector< Real > > & _drock_energy_nodal_dvar
d(nodal rock energy density)/d(PorousFlow variable)
const PorousFlowDictator & _dictator
holds info on the PorousFlow variables
const MaterialProperty< unsigned int > *const _nearest_qp
the nearest qp to the node
PorousFlowEnergyTimeDerivative(const InputParameters &parameters)
const bool _fluid_present
whether _num_phases > 0
const MaterialProperty< Real > & _porosity
porosity at the nodes, but it can depend on grad(variables) which are actually evaluated at the qps ...
const MaterialProperty< std::vector< Real > > *const _fluid_density_old
old value of nodal fluid density
Real computeQpJac(unsigned int pvar) const
Derivative of residual with respect to PorousFlow variable number pvar This is used by both computeQp...
const MaterialProperty< std::vector< RealGradient > > & _dporosity_dgradvar
d(porosity)/d(grad porous-flow variable) - remember these derivatives will be wrt grad(vars) at qps ...
virtual Real computeQpOffDiagJacobian(unsigned int jvar) override
const MaterialProperty< Real > & _rock_energy_nodal
nodal rock energy density
const MaterialProperty< std::vector< std::vector< Real > > > *const _dfluid_density_dvar
d(nodal fluid density)/d(porous-flow variable)
const unsigned int _num_phases
number of fluid phases
const MaterialProperty< std::vector< std::vector< Real > > > *const _denergy_nodal_dvar
d(internal energy)/d(PorousFlow variable)
Kernel = (heat_energy - heat_energy_old)/dt It is lumped to the nodes.
const MaterialProperty< std::vector< Real > > *const _energy_nodal
internal energy of the phases, evaluated at the nodes
const MaterialProperty< std::vector< Real > > *const _fluid_saturation_nodal
nodal fluid saturation
const MaterialProperty< Real > & _porosity_old
old value of porosity
const MaterialProperty< std::vector< Real > > *const _energy_nodal_old
old value of internal energy of the phases, evaluated at the nodes
const MaterialProperty< std::vector< std::vector< Real > > > *const _dfluid_saturation_nodal_dvar
d(nodal fluid saturation)/d(porous-flow variable)
This holds maps between the nonlinear variables used in a PorousFlow simulation and the variable numb...
InputParameters validParams< PorousFlowEnergyTimeDerivative >()
const MaterialProperty< Real > & _rock_energy_nodal_old
old value of nodal rock energy density
const MaterialProperty< std::vector< Real > > & _dporosity_dvar
d(porosity)/d(porous-flow variable) - these derivatives will be wrt variables at the nodes ...
const bool _var_is_porflow_var
whether the Variable for this Kernel is a porous-flow variable according to the Dictator ...
const bool _strain_at_nearest_qp
whether the porosity uses the volumetric strain at the closest quadpoint