www.mooseframework.org
PorousFlowActionBase.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 "Action.h"
13 #include "PorousFlowDependencies.h"
14 #include "MooseEnum.h"
15 
16 #include "libmesh/vector_value.h"
17 
19 
20 template <>
21 InputParameters validParams<PorousFlowActionBase>();
22 
35 class PorousFlowActionBase : public Action, public PorousFlowDependencies
36 {
37 public:
38  PorousFlowActionBase(const InputParameters & params);
39 
40  virtual void act() override;
41 
42  using Action::addRelationshipManagers;
43  virtual void addRelationshipManagers(Moose::RelationshipManagerType when_type) override;
44 
45 protected:
51  std::vector<std::string> _included_objects;
52 
54  const std::string _dictator_name;
55 
57  const unsigned int _num_aqueous_equilibrium;
58 
60  const unsigned int _num_aqueous_kinetic;
61 
63  const RealVectorValue _gravity;
64 
66  const std::vector<VariableName> & _mass_fraction_vars;
67 
69  const unsigned _num_mass_fraction_vars;
70 
72  const std::vector<VariableName> & _temperature_var;
73 
75  const std::vector<VariableName> & _displacements;
76 
78  const unsigned _ndisp;
79 
81  std::vector<VariableName> _coupled_displacements;
82 
84  const MooseEnum _flux_limiter_type;
85 
86  const enum class StabilizationEnum { Full, KT } _stabilization;
87 
89  Moose::CoordinateSystemType _coord_system;
90 
92  bool _transient;
93 
97  virtual void addDictator() = 0;
98 
102  virtual void addUserObjects();
103 
107  virtual void addAuxObjects();
108 
112  virtual void addKernels();
113 
118  virtual void addMaterialDependencies();
119 
123  virtual void addMaterials();
124 
129  void addSaturationAux(unsigned phase);
130 
135  void addDarcyAux(const RealVectorValue & gravity);
136 
140  void addStressAux();
141 
146  void addTemperatureMaterial(bool at_nodes);
147 
152  void addMassFractionMaterial(bool at_nodes);
153 
158  void addEffectiveFluidPressureMaterial(bool at_nodes);
159 
166  void addVolumetricStrainMaterial(const std::vector<VariableName> & displacements,
167  bool consistent_with_displaced_mesh);
168 
178  void addSingleComponentFluidMaterial(bool at_nodes,
179  unsigned phase,
180  bool compute_density_and_viscosity,
181  bool compute_internal_energy,
182  bool compute_enthalpy,
183  const UserObjectName & fp);
184 
194  void addBrineMaterial(const VariableName xnacl,
195  bool at_nodes,
196  unsigned phase,
197  bool compute_density_and_viscosity,
198  bool compute_internal_energy,
199  bool compute_enthalpy);
200 
208  void
209  addRelativePermeabilityCorey(bool at_nodes, unsigned phase, Real n, Real s_res, Real sum_s_res);
210 
218  void
219  addRelativePermeabilityFLAC(bool at_nodes, unsigned phase, Real m, Real s_res, Real sum_s_res);
220 
227  void addCapillaryPressureVG(Real m, Real alpha, std::string userobject_name);
228 
229  void addAdvectiveFluxCalculatorSaturated(unsigned phase,
230  bool multiply_by_density,
231  std::string userobject_name);
232 
233  void addAdvectiveFluxCalculatorUnsaturated(unsigned phase,
234  bool multiply_by_density,
235  std::string userobject_name);
236 
237  void addAdvectiveFluxCalculatorSaturatedHeat(unsigned phase,
238  bool multiply_by_density,
239  std::string userobject_name);
240 
241  void addAdvectiveFluxCalculatorUnsaturatedHeat(unsigned phase,
242  bool multiply_by_density,
243  std::string userobject_name);
244 
246  unsigned fluid_component,
247  bool multiply_by_density,
248  std::string userobject_name);
249 
251  unsigned fluid_component,
252  bool multiply_by_density,
253  std::string userobject_name);
254 };
255 
PorousFlowActionBase::_num_mass_fraction_vars
const unsigned _num_mass_fraction_vars
Number of mass-fraction variables.
Definition: PorousFlowActionBase.h:69
PorousFlowActionBase::_coord_system
Moose::CoordinateSystemType _coord_system
Coordinate system of the simulation (eg RZ, XYZ, etc)
Definition: PorousFlowActionBase.h:89
PorousFlowActionBase::addAuxObjects
virtual void addAuxObjects()
Add all AuxVariables and AuxKernels.
Definition: PorousFlowActionBase.C:180
PorousFlowActionBase::_transient
bool _transient
Flag to denote if the simulation is transient.
Definition: PorousFlowActionBase.h:92
PorousFlowActionBase::PorousFlowActionBase
PorousFlowActionBase(const InputParameters &params)
Definition: PorousFlowActionBase.C:83
PorousFlowActionBase::addMaterials
virtual void addMaterials()
Add all Materials.
Definition: PorousFlowActionBase.C:190
PorousFlowActionBase::_stabilization
enum PorousFlowActionBase::StabilizationEnum _stabilization
PorousFlowActionBase::addStressAux
void addStressAux()
Add AuxVariables and AuxKernels to compute effective stress.
Definition: PorousFlowActionBase.C:258
PorousFlowDependencies
Holds the PorousFlow dependencies of kernels, auxkernels, materials, etc.
Definition: PorousFlowDependencies.h:28
PorousFlowActionBase::_displacements
const std::vector< VariableName > & _displacements
Displacement NonlinearVariable names (if any)
Definition: PorousFlowActionBase.h:75
PorousFlowActionBase::addAdvectiveFluxCalculatorSaturated
void addAdvectiveFluxCalculatorSaturated(unsigned phase, bool multiply_by_density, std::string userobject_name)
Definition: PorousFlowActionBase.C:544
PorousFlowActionBase::addUserObjects
virtual void addUserObjects()
Add all other UserObjects.
Definition: PorousFlowActionBase.C:174
PorousFlowActionBase::act
virtual void act() override
Definition: PorousFlowActionBase.C:115
PorousFlowActionBase::addKernels
virtual void addKernels()
Add all Kernels.
Definition: PorousFlowActionBase.C:185
PorousFlowActionBase::addAdvectiveFluxCalculatorUnsaturated
void addAdvectiveFluxCalculatorUnsaturated(unsigned phase, bool multiply_by_density, std::string userobject_name)
Definition: PorousFlowActionBase.C:562
PorousFlowActionBase::addRelationshipManagers
virtual void addRelationshipManagers(Moose::RelationshipManagerType when_type) override
Definition: PorousFlowActionBase.C:106
PorousFlowActionBase::_coupled_displacements
std::vector< VariableName > _coupled_displacements
Displacement Variable names.
Definition: PorousFlowActionBase.h:81
validParams< PorousFlowActionBase >
InputParameters validParams< PorousFlowActionBase >()
Definition: PorousFlowActionBase.C:22
PorousFlowActionBase::_mass_fraction_vars
const std::vector< VariableName > & _mass_fraction_vars
Name of the mass-fraction variables (if any)
Definition: PorousFlowActionBase.h:66
PorousFlowActionBase::StabilizationEnum::Full
PorousFlowActionBase::addCapillaryPressureVG
void addCapillaryPressureVG(Real m, Real alpha, std::string userobject_name)
Adds a van Genuchten capillary pressure UserObject.
Definition: PorousFlowActionBase.C:531
PorousFlowDependencies.h
PorousFlowActionBase::addAdvectiveFluxCalculatorSaturatedMultiComponent
void addAdvectiveFluxCalculatorSaturatedMultiComponent(unsigned phase, unsigned fluid_component, bool multiply_by_density, std::string userobject_name)
Definition: PorousFlowActionBase.C:616
PorousFlowActionBase::StabilizationEnum
StabilizationEnum
Definition: PorousFlowActionBase.h:86
PorousFlowActionBase::addAdvectiveFluxCalculatorUnsaturatedMultiComponent
void addAdvectiveFluxCalculatorUnsaturatedMultiComponent(unsigned phase, unsigned fluid_component, bool multiply_by_density, std::string userobject_name)
Definition: PorousFlowActionBase.C:636
PorousFlowActionBase::_ndisp
const unsigned _ndisp
Number of displacement variables supplied.
Definition: PorousFlowActionBase.h:78
PorousFlowActionBase::addDarcyAux
void addDarcyAux(const RealVectorValue &gravity)
Add AuxVariables and AuxKernels to calculate Darcy velocity.
Definition: PorousFlowActionBase.C:220
PorousFlowActionBase::addTemperatureMaterial
void addTemperatureMaterial(bool at_nodes)
Adds a nodal and a quadpoint Temperature material.
Definition: PorousFlowActionBase.C:339
PorousFlowActionBase::_gravity
const RealVectorValue _gravity
Gravity.
Definition: PorousFlowActionBase.h:63
PorousFlowActionBase::_num_aqueous_kinetic
const unsigned int _num_aqueous_kinetic
Number of aqeuous-kinetic secondary species that are involved in mineralisation.
Definition: PorousFlowActionBase.h:60
PorousFlowActionBase::_num_aqueous_equilibrium
const unsigned int _num_aqueous_equilibrium
Number of aqueous-equilibrium secondary species.
Definition: PorousFlowActionBase.h:57
PorousFlowActionBase::addRelativePermeabilityFLAC
void addRelativePermeabilityFLAC(bool at_nodes, unsigned phase, Real m, Real s_res, Real sum_s_res)
Adds a relative-permeability Material of the FLAC variety.
Definition: PorousFlowActionBase.C:507
PorousFlowActionBase::addSingleComponentFluidMaterial
void addSingleComponentFluidMaterial(bool at_nodes, unsigned phase, bool compute_density_and_viscosity, bool compute_internal_energy, bool compute_enthalpy, const UserObjectName &fp)
Adds a single-component fluid Material.
Definition: PorousFlowActionBase.C:424
fp
Definition: DimensionlessFlowNumbers.h:19
PorousFlowActionBase::_temperature_var
const std::vector< VariableName > & _temperature_var
Name of the temperature variable (if any)
Definition: PorousFlowActionBase.h:72
PorousFlowActionBase::addMassFractionMaterial
void addMassFractionMaterial(bool at_nodes)
Adds a nodal and a quadpoint MassFraction material.
Definition: PorousFlowActionBase.C:363
PorousFlowActionBase::addAdvectiveFluxCalculatorSaturatedHeat
void addAdvectiveFluxCalculatorSaturatedHeat(unsigned phase, bool multiply_by_density, std::string userobject_name)
Definition: PorousFlowActionBase.C:580
PorousFlowActionBase::addDictator
virtual void addDictator()=0
Add the PorousFlowDictator object.
PorousFlowActionBase::_dictator_name
const std::string _dictator_name
The name of the PorousFlowDictator object to be added.
Definition: PorousFlowActionBase.h:54
PorousFlowActionBase::addAdvectiveFluxCalculatorUnsaturatedHeat
void addAdvectiveFluxCalculatorUnsaturatedHeat(unsigned phase, bool multiply_by_density, std::string userobject_name)
Definition: PorousFlowActionBase.C:598
PorousFlowActionBase::addBrineMaterial
void addBrineMaterial(const VariableName xnacl, bool at_nodes, unsigned phase, bool compute_density_and_viscosity, bool compute_internal_energy, bool compute_enthalpy)
Adds a brine fluid Material.
Definition: PorousFlowActionBase.C:453
PorousFlowActionBase::addVolumetricStrainMaterial
void addVolumetricStrainMaterial(const std::vector< VariableName > &displacements, bool consistent_with_displaced_mesh)
Adds a quadpoint volumetric strain material.
Definition: PorousFlowActionBase.C:407
PorousFlowActionBase::_flux_limiter_type
const MooseEnum _flux_limiter_type
Flux limiter type in the Kuzmin-Turek FEM-TVD stabilization scheme.
Definition: PorousFlowActionBase.h:84
PorousFlowActionBase::addRelativePermeabilityCorey
void addRelativePermeabilityCorey(bool at_nodes, unsigned phase, Real n, Real s_res, Real sum_s_res)
Adds a relative-permeability Material of the Corey variety.
Definition: PorousFlowActionBase.C:482
PorousFlowActionBase::addSaturationAux
void addSaturationAux(unsigned phase)
Add an AuxVariable and AuxKernel to calculate saturation.
Definition: PorousFlowActionBase.C:195
PorousFlowActionBase::_included_objects
std::vector< std::string > _included_objects
List of Kernels, AuxKernels, Materials, etc, that are added in this input file.
Definition: PorousFlowActionBase.h:51
PorousFlowActionBase::StabilizationEnum::KT
PorousFlowActionBase
Base class for PorousFlow actions.
Definition: PorousFlowActionBase.h:35
PorousFlowActionBase::addEffectiveFluidPressureMaterial
void addEffectiveFluidPressureMaterial(bool at_nodes)
Adds a nodal and a quadpoint effective fluid pressure material.
Definition: PorousFlowActionBase.C:388
PorousFlowActionBase::addMaterialDependencies
virtual void addMaterialDependencies()
Add all material dependencies so that the correct version of each material can be added.
Definition: PorousFlowActionBase.C:152