https://mooseframework.inl.gov
PorousFlowActionBase.h
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 
10 #pragma once
11 
12 #include "Action.h"
13 #include "PorousFlowDependencies.h"
14 #include "MooseEnum.h"
15 
16 #include "libmesh/vector_value.h"
17 
31 {
32 public:
34 
35  PorousFlowActionBase(const InputParameters & params);
36 
37  virtual void act() override;
38 
40  virtual void addRelationshipManagers(Moose::RelationshipManagerType when_type) override;
41 
42 protected:
48  std::vector<std::string> _included_objects;
49 
51  const std::string _dictator_name;
52 
54  std::vector<SubdomainName> _subdomain_names;
55 
58 
60  const unsigned int _num_aqueous_equilibrium;
61 
63  const unsigned int _num_aqueous_kinetic;
64 
67 
69  const std::vector<VariableName> _mass_fraction_vars;
70 
72  const unsigned _num_mass_fraction_vars;
73 
75  const std::vector<VariableName> _temperature_var;
76 
78  const std::vector<VariableName> & _displacements;
79 
81  const unsigned _ndisp;
82 
84  std::vector<VariableName> _coupled_displacements;
85 
88 
89  const enum class StabilizationEnum { None, Full, KT } _stabilization;
90 
93 
96 
98  bool _transient;
99 
103  virtual void addDictator() = 0;
104 
108  virtual void addUserObjects();
109 
113  virtual void addAuxObjects();
114 
118  virtual void addKernels();
119 
124  virtual void addMaterialDependencies();
125 
129  virtual void addMaterials();
130 
135  void addSaturationAux(unsigned phase);
136 
141  void addDarcyAux(const RealVectorValue & gravity);
142 
146  void addStressAux();
147 
152  void addTemperatureMaterial(bool at_nodes);
153 
158  void addMassFractionMaterial(bool at_nodes);
159 
164  void addEffectiveFluidPressureMaterial(bool at_nodes);
165 
169  void addNearestQpMaterial();
170 
177  void addVolumetricStrainMaterial(const std::vector<VariableName> & displacements,
178  const std::string & base_name);
179 
192  void addSingleComponentFluidMaterial(bool at_nodes,
193  unsigned phase,
194  bool compute_density_and_viscosity,
195  bool compute_internal_energy,
196  bool compute_enthalpy,
197  const UserObjectName & fp,
198  const MooseEnum & temperature_unit,
199  const MooseEnum & pressure_unit,
200  const MooseEnum & time_unit);
201 
212  void addBrineMaterial(const VariableName xnacl,
213  bool at_nodes,
214  unsigned phase,
215  bool compute_density_and_viscosity,
216  bool compute_internal_energy,
217  bool compute_enthalpy,
218  const MooseEnum & temperature_unit);
219 
228  void addRelativePermeabilityConst(bool at_nodes, unsigned phase, Real kr);
229 
238  void
239  addRelativePermeabilityCorey(bool at_nodes, unsigned phase, Real n, Real s_res, Real sum_s_res);
240 
249  void
250  addRelativePermeabilityFLAC(bool at_nodes, unsigned phase, Real m, Real s_res, Real sum_s_res);
251 
258  void addCapillaryPressureVG(Real m, Real alpha, std::string userobject_name);
259 
260  void addAdvectiveFluxCalculatorSaturated(unsigned phase,
261  bool multiply_by_density,
262  std::string userobject_name);
263 
264  void addAdvectiveFluxCalculatorUnsaturated(unsigned phase,
265  bool multiply_by_density,
266  std::string userobject_name);
267 
268  void addAdvectiveFluxCalculatorSaturatedHeat(unsigned phase,
269  bool multiply_by_density,
270  std::string userobject_name);
271 
272  void addAdvectiveFluxCalculatorUnsaturatedHeat(unsigned phase,
273  bool multiply_by_density,
274  std::string userobject_name);
275 
277  unsigned fluid_component,
278  bool multiply_by_density,
279  std::string userobject_name);
280 
282  unsigned fluid_component,
283  bool multiply_by_density,
284  std::string userobject_name);
285 };
Moose::CoordinateSystemType _coord_system
Coordinate system of the simulation (eg RZ, XYZ, etc)
virtual void addKernels()
Add all Kernels.
void addStressAux()
Add AuxVariables and AuxKernels to compute effective stress.
void addSaturationAux(unsigned phase)
Add an AuxVariable and AuxKernel to calculate saturation.
const bool _subdomain_names_set
indicates, if the vector of subdomain names is set (dont set block restrictions, if not) ...
RelationshipManagerType
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.
PorousFlowActionBase(const InputParameters &params)
void addEffectiveFluidPressureMaterial(bool at_nodes)
Adds a nodal and a quadpoint effective fluid pressure material.
void addRelativePermeabilityConst(bool at_nodes, unsigned phase, Real kr)
Adds a relative-permeability Material of the constant variety (primarily to add kr = 1 in actions tha...
void addNearestQpMaterial()
Adds a PorousFlowNearestQp material.
std::vector< VariableName > _coupled_displacements
Displacement Variable names.
std::vector< std::string > _included_objects
List of Kernels, AuxKernels, Materials, etc, that are added in this input file.
virtual void addMaterials()
Add all Materials.
void addSingleComponentFluidMaterial(bool at_nodes, unsigned phase, bool compute_density_and_viscosity, bool compute_internal_energy, bool compute_enthalpy, const UserObjectName &fp, const MooseEnum &temperature_unit, const MooseEnum &pressure_unit, const MooseEnum &time_unit)
Adds a single-component fluid Material.
const unsigned int _num_aqueous_kinetic
Number of aqeuous-kinetic secondary species that are involved in mineralisation.
void addAdvectiveFluxCalculatorSaturated(unsigned phase, bool multiply_by_density, std::string userobject_name)
void addCapillaryPressureVG(Real m, Real alpha, std::string userobject_name)
Adds a van Genuchten capillary pressure UserObject.
virtual void addDictator()=0
Add the PorousFlowDictator object.
std::vector< SubdomainName > _subdomain_names
if this vector is not empty the variables, kernels and materials are restricted to these subdomains ...
virtual void act() override
void addBrineMaterial(const VariableName xnacl, bool at_nodes, unsigned phase, bool compute_density_and_viscosity, bool compute_internal_energy, bool compute_enthalpy, const MooseEnum &temperature_unit)
Adds a brine fluid Material.
void addAdvectiveFluxCalculatorSaturatedMultiComponent(unsigned phase, unsigned fluid_component, bool multiply_by_density, std::string userobject_name)
const unsigned _ndisp
Number of displacement variables supplied.
static InputParameters validParams()
void addDarcyAux(const RealVectorValue &gravity)
Add AuxVariables and AuxKernels to calculate Darcy velocity.
Base class for PorousFlow actions.
void addAdvectiveFluxCalculatorUnsaturated(unsigned phase, bool multiply_by_density, std::string userobject_name)
void addTemperatureMaterial(bool at_nodes)
Adds a nodal and a quadpoint Temperature material.
const RealVectorValue _gravity
Gravity.
void addMassFractionMaterial(bool at_nodes)
Adds a nodal and a quadpoint MassFraction material.
const std::vector< VariableName > _temperature_var
Name of the temperature variable (if any)
bool _transient
Flag to denote if the simulation is transient.
virtual void addRelationshipManagers(Moose::RelationshipManagerType when_type) override
CoordinateSystemType
static const std::string alpha
Definition: NS.h:134
Holds the PorousFlow dependencies of kernels, auxkernels, materials, etc.
const std::string _dictator_name
The name of the PorousFlowDictator object to be added.
const bool _strain_at_nearest_qp
Evaluate strain at the nearest quadpoint for porosity that depends on strain.
virtual void addAuxObjects()
Add all AuxVariables and AuxKernels.
void addVolumetricStrainMaterial(const std::vector< VariableName > &displacements, const std::string &base_name)
Adds a quadpoint volumetric strain material.
const unsigned _num_mass_fraction_vars
Number of mass-fraction variables.
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.
const std::vector< VariableName > & _displacements
Displacement NonlinearVariable names (if any)
virtual void addUserObjects()
Add all other UserObjects.
virtual void addRelationshipManagers(Moose::RelationshipManagerType when_type)
void addAdvectiveFluxCalculatorUnsaturatedMultiComponent(unsigned phase, unsigned fluid_component, bool multiply_by_density, std::string userobject_name)
void addAdvectiveFluxCalculatorSaturatedHeat(unsigned phase, bool multiply_by_density, std::string userobject_name)
virtual void addMaterialDependencies()
Add all material dependencies so that the correct version of each material can be added...
const unsigned int _num_aqueous_equilibrium
Number of aqueous-equilibrium secondary species.
const MooseEnum _flux_limiter_type
Flux limiter type in the Kuzmin-Turek FEM-TVD stabilization scheme.
enum PorousFlowActionBase::StabilizationEnum _stabilization
const std::vector< VariableName > _mass_fraction_vars
Name of the mass-fraction variables (if any)
void addAdvectiveFluxCalculatorUnsaturatedHeat(unsigned phase, bool multiply_by_density, std::string userobject_name)