www.mooseframework.org
PorousFlowDarcyBase.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
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 #pragma once
11 
12 #include "Kernel.h"
13 #include "PorousFlowDictator.h"
14 
16 
17 template <>
18 InputParameters validParams<PorousFlowDarcyBase>();
19 
28 class PorousFlowDarcyBase : public Kernel
29 {
30 public:
31  PorousFlowDarcyBase(const InputParameters & parameters);
32 
33 protected:
34  virtual void timestepSetup() override;
35  virtual Real computeQpResidual() override;
36  virtual void computeResidual() override;
37  virtual void computeJacobian() override;
38  virtual void computeOffDiagJacobian(MooseVariableFEBase & jvar) override;
39  using Kernel::computeOffDiagJacobian;
40 
42  virtual Real darcyQp(unsigned int ph) const;
43 
45  virtual Real darcyQpJacobian(unsigned int jvar, unsigned int ph) const;
46 
53  virtual Real mobility(unsigned nodenum, unsigned phase) const;
54 
61  virtual Real dmobility(unsigned nodenum, unsigned phase, unsigned pvar) const;
62 
63  enum class JacRes
64  {
67  };
68 
84  void computeResidualAndJacobian(JacRes res_or_jac, unsigned int jvar);
85 
87  const MaterialProperty<RealTensorValue> & _permeability;
88 
90  const MaterialProperty<std::vector<RealTensorValue>> & _dpermeability_dvar;
91 
93  const MaterialProperty<std::vector<std::vector<RealTensorValue>>> & _dpermeability_dgradvar;
94 
96  const MaterialProperty<std::vector<Real>> & _fluid_density_node;
97 
99  const MaterialProperty<std::vector<std::vector<Real>>> & _dfluid_density_node_dvar;
100 
102  const MaterialProperty<std::vector<Real>> & _fluid_density_qp;
103 
105  const MaterialProperty<std::vector<std::vector<Real>>> & _dfluid_density_qp_dvar;
106 
108  const MaterialProperty<std::vector<Real>> & _fluid_viscosity;
109 
111  const MaterialProperty<std::vector<std::vector<Real>>> & _dfluid_viscosity_dvar;
112 
114  const MaterialProperty<std::vector<Real>> & _pp;
115 
117  const MaterialProperty<std::vector<RealGradient>> & _grad_p;
118 
120  const MaterialProperty<std::vector<std::vector<Real>>> & _dgrad_p_dgrad_var;
121 
123  const MaterialProperty<std::vector<std::vector<RealGradient>>> & _dgrad_p_dvar;
124 
127 
129  const unsigned int _num_phases;
130 
132  const RealVectorValue _gravity;
133 
135  const bool _perm_derivs;
136 
141  const unsigned _full_upwind_threshold;
142 
153 
160  std::vector<std::vector<Real>> _proto_flux;
161 
167  std::vector<std::vector<std::vector<Real>>> _jacobian;
168 
174  std::unordered_map<unsigned, std::vector<std::vector<unsigned>>> _num_upwinds;
175 
181  std::unordered_map<unsigned, std::vector<std::vector<unsigned>>> _num_downwinds;
182 
189  void fullyUpwind(JacRes res_or_jac, unsigned int ph, unsigned int pvar);
190 
198  void quickUpwind(JacRes res_or_jac, unsigned int ph, unsigned int pvar);
199 
207  void harmonicMean(JacRes res_or_jac, unsigned int ph, unsigned int pvar);
208 };
PorousFlowDarcyBase::computeOffDiagJacobian
virtual void computeOffDiagJacobian(MooseVariableFEBase &jvar) override
Definition: PorousFlowDarcyBase.C:147
PorousFlowDarcyBase::_dictator
const PorousFlowDictator & _dictator
PorousFlowDictator UserObject.
Definition: PorousFlowDarcyBase.h:126
PorousFlowDictator.h
PorousFlowDarcyBase::_full_upwind_threshold
const unsigned _full_upwind_threshold
If the number of upwind-downwind swaps is less than this amount then full upwinding is used.
Definition: PorousFlowDarcyBase.h:141
PorousFlowDarcyBase::_dgrad_p_dgrad_var
const MaterialProperty< std::vector< std::vector< Real > > > & _dgrad_p_dgrad_var
Derivative of Grad porepressure in each phase wrt grad(PorousFlow variables)
Definition: PorousFlowDarcyBase.h:120
PorousFlowDarcyBase::quickUpwind
void quickUpwind(JacRes res_or_jac, unsigned int ph, unsigned int pvar)
Calculate the residual or Jacobian using the nodal mobilities, but without conserving fluid mass.
Definition: PorousFlowDarcyBase.C:420
PorousFlowDarcyBase::JacRes::CALCULATE_RESIDUAL
PorousFlowDarcyBase::_fallback_scheme
enum PorousFlowDarcyBase::FallbackEnum _fallback_scheme
PorousFlowDarcyBase::_grad_p
const MaterialProperty< std::vector< RealGradient > > & _grad_p
Gradient of the pore pressure in each phase.
Definition: PorousFlowDarcyBase.h:117
PorousFlowDarcyBase::_fluid_viscosity
const MaterialProperty< std::vector< Real > > & _fluid_viscosity
Viscosity of each component in each phase.
Definition: PorousFlowDarcyBase.h:108
PorousFlowDarcyBase::_dfluid_density_qp_dvar
const MaterialProperty< std::vector< std::vector< Real > > > & _dfluid_density_qp_dvar
Derivative of the fluid density for each phase wrt PorousFlow variables (at the qp)
Definition: PorousFlowDarcyBase.h:105
PorousFlowDarcyBase::_perm_derivs
const bool _perm_derivs
Flag to check whether permeabiity derivatives are non-zero.
Definition: PorousFlowDarcyBase.h:135
PorousFlowDarcyBase::_fluid_density_node
const MaterialProperty< std::vector< Real > > & _fluid_density_node
Fluid density for each phase (at the node)
Definition: PorousFlowDarcyBase.h:96
PorousFlowDarcyBase::JacRes
JacRes
Definition: PorousFlowDarcyBase.h:63
PorousFlowDarcyBase::_num_upwinds
std::unordered_map< unsigned, std::vector< std::vector< unsigned > > > _num_upwinds
Number of nonlinear iterations (in this timestep and this element) that a node is an upwind node for ...
Definition: PorousFlowDarcyBase.h:174
PorousFlowDarcyBase::timestepSetup
virtual void timestepSetup() override
Definition: PorousFlowDarcyBase.C:87
PorousFlowDarcyBase::_permeability
const MaterialProperty< RealTensorValue > & _permeability
Permeability of porous material.
Definition: PorousFlowDarcyBase.h:87
PorousFlowDarcyBase::JacRes::CALCULATE_JACOBIAN
PorousFlowDarcyBase::_dpermeability_dvar
const MaterialProperty< std::vector< RealTensorValue > > & _dpermeability_dvar
d(permeabiity)/d(PorousFlow variable)
Definition: PorousFlowDarcyBase.h:90
validParams< PorousFlowDarcyBase >
InputParameters validParams< PorousFlowDarcyBase >()
Definition: PorousFlowDarcyBase.C:21
PorousFlowDarcyBase::_jacobian
std::vector< std::vector< std::vector< Real > > > _jacobian
Derivative of _proto_flux with respect to nodal variables.
Definition: PorousFlowDarcyBase.h:167
PorousFlowDarcyBase::_dgrad_p_dvar
const MaterialProperty< std::vector< std::vector< RealGradient > > > & _dgrad_p_dvar
Derivative of Grad porepressure in each phase wrt PorousFlow variables.
Definition: PorousFlowDarcyBase.h:123
PorousFlowDarcyBase::mobility
virtual Real mobility(unsigned nodenum, unsigned phase) const
The mobility of the fluid.
Definition: PorousFlowDarcyBase.C:511
PorousFlowDictator
This holds maps between the nonlinear variables used in a PorousFlow simulation and the variable numb...
Definition: PorousFlowDictator.h:71
PorousFlowDarcyBase::_pp
const MaterialProperty< std::vector< Real > > & _pp
Nodal pore pressure in each phase.
Definition: PorousFlowDarcyBase.h:114
PorousFlowDarcyBase::fullyUpwind
void fullyUpwind(JacRes res_or_jac, unsigned int ph, unsigned int pvar)
Calculate the residual or Jacobian using full upwinding.
Definition: PorousFlowDarcyBase.C:307
PorousFlowDarcyBase::_num_downwinds
std::unordered_map< unsigned, std::vector< std::vector< unsigned > > > _num_downwinds
Number of nonlinear iterations (in this timestep and this element) that a node is an downwind node fo...
Definition: PorousFlowDarcyBase.h:181
PorousFlowDarcyBase::_dfluid_viscosity_dvar
const MaterialProperty< std::vector< std::vector< Real > > > & _dfluid_viscosity_dvar
Derivative of the fluid viscosity for each phase wrt PorousFlow variables.
Definition: PorousFlowDarcyBase.h:111
PorousFlowDarcyBase::FallbackEnum::HARMONIC
PorousFlowDarcyBase::_dfluid_density_node_dvar
const MaterialProperty< std::vector< std::vector< Real > > > & _dfluid_density_node_dvar
Derivative of the fluid density for each phase wrt PorousFlow variables (at the node)
Definition: PorousFlowDarcyBase.h:99
PorousFlowDarcyBase::harmonicMean
void harmonicMean(JacRes res_or_jac, unsigned int ph, unsigned int pvar)
Calculate the residual or Jacobian by using the harmonic mean of the nodal mobilities for the entire ...
Definition: PorousFlowDarcyBase.C:457
PorousFlowDarcyBase::darcyQp
virtual Real darcyQp(unsigned int ph) const
The Darcy part of the flux (this is the non-upwinded part)
Definition: PorousFlowDarcyBase.C:95
PorousFlowDarcyBase::computeQpResidual
virtual Real computeQpResidual() override
Definition: PorousFlowDarcyBase.C:128
PorousFlowDarcyBase::darcyQpJacobian
virtual Real darcyQpJacobian(unsigned int jvar, unsigned int ph) const
Jacobian of the Darcy part of the flux.
Definition: PorousFlowDarcyBase.C:102
PorousFlowDarcyBase::_num_phases
const unsigned int _num_phases
The number of fluid phases.
Definition: PorousFlowDarcyBase.h:129
PorousFlowDarcyBase::computeJacobian
virtual void computeJacobian() override
Definition: PorousFlowDarcyBase.C:141
PorousFlowDarcyBase::computeResidual
virtual void computeResidual() override
Definition: PorousFlowDarcyBase.C:135
PorousFlowDarcyBase::computeResidualAndJacobian
void computeResidualAndJacobian(JacRes res_or_jac, unsigned int jvar)
Computation of the residual and Jacobian.
Definition: PorousFlowDarcyBase.C:153
PorousFlowDarcyBase
Darcy advective flux.
Definition: PorousFlowDarcyBase.h:28
PorousFlowDarcyBase::_gravity
const RealVectorValue _gravity
Gravity. Defaults to 9.81 m/s^2.
Definition: PorousFlowDarcyBase.h:132
PorousFlowDarcyBase::FallbackEnum::QUICK
PorousFlowDarcyBase::_fluid_density_qp
const MaterialProperty< std::vector< Real > > & _fluid_density_qp
Fluid density for each phase (at the qp)
Definition: PorousFlowDarcyBase.h:102
PorousFlowDarcyBase::PorousFlowDarcyBase
PorousFlowDarcyBase(const InputParameters &parameters)
Definition: PorousFlowDarcyBase.C:45
PorousFlowDarcyBase::dmobility
virtual Real dmobility(unsigned nodenum, unsigned phase, unsigned pvar) const
The derivative of mobility with respect to PorousFlow variable pvar.
Definition: PorousFlowDarcyBase.C:517
PorousFlowDarcyBase::FallbackEnum
FallbackEnum
If full upwinding is failing due to nodes swapping between upwind and downwind in successive nonlinea...
Definition: PorousFlowDarcyBase.h:152
PorousFlowDarcyBase::_proto_flux
std::vector< std::vector< Real > > _proto_flux
The Darcy flux.
Definition: PorousFlowDarcyBase.h:160
PorousFlowDarcyBase::_dpermeability_dgradvar
const MaterialProperty< std::vector< std::vector< RealTensorValue > > > & _dpermeability_dgradvar
d(permeabiity)/d(grad(PorousFlow variable))
Definition: PorousFlowDarcyBase.h:93