HydroFemPhysics
The GeMA Hydraulic FEM Physics Plugin
Loading...
Searching...
No Matches
GmpHydraulic Class Referenceabstract

Basic class for the hydraulic physics plugin object. More...

#include <gmpHydraulic.h>

Inheritance diagram for GmpHydraulic:
Collaboration diagram for GmpHydraulic:

Classes

struct  HMaterialPointAccessors
 

Public Types

enum  HMaterialPointStates { saturated , unsaturated }
 
enum  PhysicsAttributeIds {
  ISOPARAMETRIC_ID , POROSITY_UPDATE_ID , PERMEABILITY_UPDATE_ID , USE_CONSISTENT_MATRIX_ID ,
  VELOCITY_MODE_ID , FLOW_MODE_ID , DIRECT_ID , CGRAV_ID ,
  VF_MODE_ID , NUM_ATTRI_IDS
}
 IDs for physics attributes. More...
 
enum  StateVarIds { P_ID , NUM_STATEVAR_IDS }
 IDs fo physics state vars. More...
 
enum  NodeAttributeIds { V_NA_ID , Q_NA_ID , VF_NA_ID , NUM_NA_IDS }
 IDs for physics node attributes. More...
 
enum  cellAttributeIds { NUM_CA_IDS }
 IDs for physics Cell attributes. More...
 
enum  GaussAttributeIds {
  V_GA_ID , Q_GA_ID , FT_GA_ID , FTOLD_GA_ID ,
  NUM_GA_IDS
}
 IDs for physics Gauss attributes. More...
 
enum  ElementPropertyIds { THICKNESS_ID , GRAV_ID , SOURTERM_ID , NUM_PROPER_IDS }
 IDs for physics element properties. More...
 
enum  BoundaryConditionIds { FIXED_P_BC_ID , FIXED_Q_BC_ID , FIXED_SPF_BC_ID , NUM_BC_IDS }
 IDs for accepted boundary condition types. More...
 
enum  BoundaryConditionValueIds { BC_P_ID , BC_QW_ID , BC_IF_ID , NUM_BCV_IDS }
 IDs for property values from accepted boundary condition types. More...
 

Public Member Functions

 GmpHydraulic (const char *pluginType, GmSimulationData *simulation, QString id, QString description, const GmpFemPhysicsCommonMaterialFactory *matFactory, const GmLogCategory &logger)
 Constructor. Will be called by the plugin loading code.
 
virtual ~GmpHydraulic ()
 Destructor.
 
virtual const char * pluginName () const
 
virtual const char * pluginType () const
 
virtual const QVariantMap * physicsMetaDataMap ()
 Returns a reference for the single Hydraulics attribute map, built when the function is called for the first time.
 
virtual bool supportsStateDumping ()
 
virtual FemResultType fillElementData (const GmElement *e, GmpFemMatrixSet &elemMatrices, GmpFemVectorSet &elemVectors)
 Fills the element matrices and vectors for a generic element.
 
virtual bool fixedNodalForcesBc (QVector< int > &nodes, QVector< int > &dof, QVector< double > &values) const
 See comments on base class. Fills vectors with prescribed nodal forces - flow.
 
virtual bool fixedNodalDofsBc (QVector< int > &nodes, QVector< int > &dof, QVector< double > &values, bool *constantValues) const
 See comments on base class. Fills vectors with prescribed node pore pressures.
 
virtual FemResultType fillElementDataForBc (const GmElement *e, const GmBoundaryCondition *bc, int bcIndex, int bcListIndex, int border, GmpFemMatrixSet &elemMatrices, GmpFemVectorSet &elemVectors)
 
virtual FemResultType fillElementDataBc (const GmElement *e, const GmBoundaryCondition *bc, int bcIndex, int bcListIndex, int border, GmMatrix &elemMat, GmVector &elemVec)
 
virtual bool calcDerivedResults (bool nonLinearSolver)
 Calc velocity and flow on nodes and/or Gauss points.
 
virtual void fillStorageCompMatrix (const GmElement *e, const GmVector *coord, int ip, GmMatrix &Sc, const GmVector &N, double c)
 Calculates the stiffness matrix of "storage / compressibility" for element 'e' at the given integration point (coord, ip) storing the result at the Sc matrix. N is the shape function vector and c a constant equal to w * h * detJ.
 
virtual void fillFlowMatrix (const GmElement *e, const GmVector *coord, int ip, GmMatrix &Kc, const GmMatrix &Bp, double c) const
 Calculates the flow stiffness matrix due to permeability contribution or permeability matrix for element 'e' at the given integration point (coord, ip) storing the result at the Kc matrix. Bp is the strain pore pressure matrix and c a constant equal to w * h * detJ.
 
virtual void fillFluidVelocity (const GmElement *e, const GmVector *coord, int ip, GmVector &Vip, const GmVector &Pe, const GmMatrix &Bp) const
 Evaluates velocity at integration points (it should be improved to consider gravity effect)
 
virtual void fillElementPorePressure (const GmElement *e, GmVector &pe)
 Given an element, fills the vector pe with nodal pore pressure. The vector should have size equal to the number of calculated nodes.
 
virtual void gravitySupplyFluid (const GmElement *e, const GmVector *coord, int ip, GmVector &qext_gsf, GmMatrix &Bp, double c)
 
virtual void fillSourceTermVector (const GmElement *e, const GmVector *coord, int ip, GmVector &St, const GmVector &N, double c)
 Calculates the source term due the porosity rate of porous eskeleton for element 'e' at the given integration point (coord, ip) storing the result at external vector. N is the shape function vector and c a constant equal to w * h * detJ.
 
virtual double fillBpMatrix (const GmShape *shape, const GmVector &ncoord, const GmMatrix &X, const GmVector &N, const GmMatrix &J, GmMatrix &Bp)=0
 Given a point 'ncoord', the element coordinate matrix 'X', the point shape functions 'N' and the transformation Jacobian 'J', fills the matrix with cartesian partial derivatives Bp using the provided shape function and returns the scaled jacobian determinant.
 
virtual void gravityVector (const GmElement *e, const GmVector *coord, int ip, GmVector &grav) const
 Returns the gravity accelaration vector.
 
virtual bool isAxisymmetric ()
 Returns TRUE only for axisymmetric models.
 
virtual double axisymmetricFactor (const GmElement *e, const GmMatrix &X, const GmVector &N) const
 Returns the factor that should be applied when using axis symetric elements. 1.0 for other etypes.
 
HMaterialPointAccessorshydraulicMaterialPoint ()
 Returns the hydraulic material point accessor.
 

Protected Member Functions

virtual bool checkAndLoadAttributeAccessors (LuaTable &nodeTable, LuaTable &cellTable, LuaTable &gaussTable)
 Checks the loaded data.
 
virtual void calcElementDerivedResultAtPoints (const GmElement *e, int resultId, const GmMatrix &evalPoints, bool evalAtIp, GmMatrix &result)
 The virtual function used by calcDerivedResults() to effectivelly calculate the velocity (resultId = 0) or the flow (resultId = 1) at the given evaluation points.
 
void calcElementVelocityAtPoints (const GmElement *e, const GmMatrix &evalPoints, GmMatrix &v)
 The function responsible for effectivelly calculating the velocity at the given evaluation points, filling v.
 
void calcElementFlowAtPoints (const GmElement *e, const GmMatrix &evalPoints, bool evalAtIp, GmMatrix &q)
 The function responsible for effectivelly calculating the flow at the given evaluation points, filling q.
 

Protected Attributes

HMaterialPointAccessors _hmaterialPointAccessor
 Access to hydraulic material point.
 
bool _setInitialCond
 Sets the initial conditions required by the physics.
 

Private Attributes

const char * _pluginType
 The plugin type name.
 

Detailed Description

Basic class for the hydraulic physics plugin object.

Member Enumeration Documentation

◆ BoundaryConditionIds

IDs for accepted boundary condition types.

Enumerator
FIXED_P_BC_ID 

Id for fixed node pore pressure boundary condition.

FIXED_Q_BC_ID 

Id for fixed node flow boundary condition.

FIXED_SPF_BC_ID 

Id for prescribed surface flow boundary condition.

NUM_BC_IDS 

The number of boundary conditions ids above.

◆ BoundaryConditionValueIds

IDs for property values from accepted boundary condition types.

Enumerator
BC_P_ID 

Nodal pore pressure for fixed node pore pressure boundary condition.

BC_QW_ID 

Nodal pore flow for fixed node pore flow boundary condition.

BC_IF_ID 

surface pore flow for prescribed edge or face pore flow boundary conditions - inflow/outflow

NUM_BCV_IDS 

The number of boundary conditions value ids above.

◆ cellAttributeIds

IDs for physics Cell attributes.

Enumerator
NUM_CA_IDS 

The number of cell attribute ids above.

◆ ElementPropertyIds

IDs for physics element properties.

Enumerator
THICKNESS_ID 

Id for retrieving the plane width accessor.

GRAV_ID 

Id for retrieving the gravity accessor.

SOURTERM_ID 

Id for retrieving the source term accessor.

NUM_PROPER_IDS 

The number of property ids above.

◆ GaussAttributeIds

IDs for physics Gauss attributes.

Enumerator
V_GA_ID 

Base Id for Gauss attribute(s) used to store the calculated velocity.

Q_GA_ID 

Base Id for Gauss attribute(s) used to store the calculated flow.

FT_GA_ID 

Id for retrieving the material point state accessor at the current state.

FTOLD_GA_ID 

Id for retrieving the material point state accessor at the previous state.

NUM_GA_IDS 

The number of Gauss attribute ids above.

◆ NodeAttributeIds

IDs for physics node attributes.

Enumerator
V_NA_ID 

Base Id for node attribute(s) used to store the calculated velocity.

Q_NA_ID 

Base Id for node attribute(s) used to store the calculated flow.

VF_NA_ID 

Base Id for node attribute(s) used to store the calculated reaction volume flux.

NUM_NA_IDS 

The number of node attribute ids above.

◆ PhysicsAttributeIds

IDs for physics attributes.

Enumerator
ISOPARAMETRIC_ID 

Id for retrieving the isoParametric physics attribute.

POROSITY_UPDATE_ID 

Id for retrieving the porosityUpdate physics attribute.

PERMEABILITY_UPDATE_ID 

Id for retrieving the permeabilityUpdate physics attribute.

USE_CONSISTENT_MATRIX_ID 

Id for retrieving the useConsistentMatrix physics attribute.

VELOCITY_MODE_ID 

Id for retrieving the heatFluxMode physics attribute.

FLOW_MODE_ID 

Id for retrieving the flowMode physics attribute.

DIRECT_ID 

Id for retrieving the directNodeEvaluation physics attribute.

CGRAV_ID 

Id for retrieving the gravity attribute.

VF_MODE_ID 

Id for retrieving the volumeFluxMode physics atribute.

NUM_ATTRI_IDS 

The number of physics attribute ids above.

◆ StateVarIds

IDs fo physics state vars.

Enumerator
P_ID 

Id for retrieving the accessor to the pore pressure state var.

NUM_STATEVAR_IDS 

The number of property ids above.

Member Function Documentation

◆ calcDerivedResults()

bool GmpHydraulic::calcDerivedResults ( bool nonLinearSolver)
virtual

◆ calcElementDerivedResultAtPoints()

void GmpHydraulic::calcElementDerivedResultAtPoints ( const GmElement * e,
int resultId,
const GmMatrix & evalPoints,
bool evalAtIp,
GmMatrix & result )
protectedvirtual

The virtual function used by calcDerivedResults() to effectivelly calculate the velocity (resultId = 0) or the flow (resultId = 1) at the given evaluation points.

See the base class for a parameter description.

Reimplemented in GmpHydraulicDualFlow.

◆ calcElementFlowAtPoints()

void GmpHydraulic::calcElementFlowAtPoints ( const GmElement * e,
const GmMatrix & evalPoints,
bool evalAtIp,
GmMatrix & q )
protected

The function responsible for effectivelly calculating the flow at the given evaluation points, filling q.

This function result is a matrix with size d x m where 'm' is the number of evaluation points and 'd' the result dimension (2 or 3 for representing qxx, qyy and qzz)

Parameters
eThe element where we are calculating the result matrix
evalPointsMatrix filled with natural coordinates for the 'm' points where results will be evaluated. Size = natural_coord_dimension x m.
evalAtIpFlag that when set to true means that column 'i' in evalPoints is the coordinate of the 'i'th integration point.
qCalculated results for each of the evaluation points. For each point of the 'm' points, a matrix column should be filled with the given point result. Size = d x m, where 'd' is the result dimension.

◆ calcElementVelocityAtPoints()

void GmpHydraulic::calcElementVelocityAtPoints ( const GmElement * e,
const GmMatrix & evalPoints,
GmMatrix & v )
protected

The function responsible for effectivelly calculating the velocity at the given evaluation points, filling v.

This function result is a matrix with size d x m where 'm' is the number of evaluation points and 'd' the result dimension (2 or 3 for representing vxx, vyy and vzz)

IMPORTANT: This function currently requires that evalPoints are equal to the elements integration points, and in the same order.

Parameters
eThe element where we are calculating the result matrix
evalPointsMatrix filled with natural coordinates for the 'm' points where results will be evaluated. Size = natural_coord_dimension x m.
vCalculated results for each of the evaluation points. For each point of the 'm' points, a matrix column should be filled with the given point result. Size = d x m, where 'd' is the result dimension.

◆ checkAndLoadAttributeAccessors()

bool GmpHydraulic::checkAndLoadAttributeAccessors ( LuaTable & nodeTable,
LuaTable & cellTable,
LuaTable & gaussTable )
protectedvirtual

Checks the loaded data.

Reimplementation of the common function to init the _hmaterialPointAccessor structure

Reimplemented in GmpHydraulicEmbeddedFracture, GmpHydraulicEmbeddedFractureConductive, GmpHydraulicInterface, GmpHydraulicInterfaceTwoPhaseFlow, GmpHydraulicPipe, and GmpHydraulicTwoPhaseFlow.

◆ fillBpMatrix()

virtual double GmpHydraulic::fillBpMatrix ( const GmShape * shape,
const GmVector & ncoord,
const GmMatrix & X,
const GmVector & N,
const GmMatrix & J,
GmMatrix & Bp )
pure virtual

Given a point 'ncoord', the element coordinate matrix 'X', the point shape functions 'N' and the transformation Jacobian 'J', fills the matrix with cartesian partial derivatives Bp using the provided shape function and returns the scaled jacobian determinant.

The shape function given as parameter is the shape function that should be used to calculate the partial derivatives. It will be a linear function in case of iso-parametric elements and the element shape function otherwise.

Matrices J, X and N should have been calculated using the element shape function even in an iso-parametric setting.

Implemented in GmpHydraulicPipe.

◆ fillElementData()

GmpFemPhysics::FemResultType GmpHydraulic::fillElementData ( const GmElement * e,
GmpFemMatrixSet & elemMatrices,
GmpFemVectorSet & elemVectors )
virtual

◆ fillElementDataForBc()

GmpFemPhysics::FemResultType GmpHydraulic::fillElementDataForBc ( const GmElement * e,
const GmBoundaryCondition * bc,
int bcIndex,
int bcListIndex,
int border,
GmpFemMatrixSet & elemMatrices,
GmpFemVectorSet & elemVectors )
virtual

Reimplemented in GmpHydraulicBrinkmanFlow.

◆ fillElementPorePressure()

void GmpHydraulic::fillElementPorePressure ( const GmElement * e,
GmVector & pe )
virtual

Given an element, fills the vector pe with nodal pore pressure. The vector should have size equal to the number of calculated nodes.

Reimplemented in GmpHydraulicInterface, and GmpHydraulicPipe.

◆ fillFlowMatrix()

void GmpHydraulic::fillFlowMatrix ( const GmElement * e,
const GmVector * coord,
int ip,
GmMatrix & Kc,
const GmMatrix & Bp,
double c ) const
virtual

Calculates the flow stiffness matrix due to permeability contribution or permeability matrix for element 'e' at the given integration point (coord, ip) storing the result at the Kc matrix. Bp is the strain pore pressure matrix and c a constant equal to w * h * detJ.

This function can operate either in an iso parametric setting (Kc = n x n) or in a super parametric setting (Kc = nf x nf) where n is the number of element nodes and nf the number of element corner nodes.

Returns Kc = Bp.t() * Kaux * Bp * c, where c should be equal to w * h * detJ

◆ fillSourceTermVector()

void GmpHydraulic::fillSourceTermVector ( const GmElement * e,
const GmVector * coord,
int ip,
GmVector & St,
const GmVector & N,
double c )
virtual

Calculates the source term due the porosity rate of porous eskeleton for element 'e' at the given integration point (coord, ip) storing the result at external vector. N is the shape function vector and c a constant equal to w * h * detJ.

This function can operate either in an iso parametric setting (St = n) or in a super parametric setting (St = nf x nf) where n is the number of element nodes and nf the number of element corner nodes.

Returns Sc = N * (Bp + porosity/Kw) * N.t() * c, where c should be equal to w * h * detJ

◆ fillStorageCompMatrix()

void GmpHydraulic::fillStorageCompMatrix ( const GmElement * e,
const GmVector * coord,
int ip,
GmMatrix & Sc,
const GmVector & N,
double c )
virtual

Calculates the stiffness matrix of "storage / compressibility" for element 'e' at the given integration point (coord, ip) storing the result at the Sc matrix. N is the shape function vector and c a constant equal to w * h * detJ.

This function can operate either in an iso parametric setting (Sc = n x n) or in a super parametric setting (Sc = nf x nf) where n is the number of element nodes and nf the number of element corner nodes.

Returns Sc = N * (Bp + porosity/Kw) * N.t() * c, where c should be equal to w * h * detJ

Reimplemented in GmpHydraulicBrinkmanFlow, and GmpHydraulicInterface.

◆ fixedNodalDofsBc()

bool GmpHydraulic::fixedNodalDofsBc ( QVector< int > & nodes,
QVector< int > & dof,
QVector< double > & values,
bool * constantValues ) const
virtual

See comments on base class. Fills vectors with prescribed node pore pressures.

Reimplemented in GmpHydraulicBrinkmanFlow, GmpHydraulicDualFlow, GmpHydraulicInterfaceTwoPhaseFlow, GmpHydraulicMultiPhaseFlow, GmpHydraulicTwoPhaseFlow, and GmpHydraulicTwoPhaseFlowPgPc.

◆ fixedNodalForcesBc()

bool GmpHydraulic::fixedNodalForcesBc ( QVector< int > & nodes,
QVector< int > & dof,
QVector< double > & values ) const
virtual

See comments on base class. Fills vectors with prescribed nodal forces - flow.

Reimplemented in GmpHydraulicBrinkmanFlow, GmpHydraulicDualFlow, GmpHydraulicInterfaceTwoPhaseFlow, GmpHydraulicMultiPhaseFlow, GmpHydraulicTwoPhaseFlow, and GmpHydraulicTwoPhaseFlowPgPc.

◆ gravityVector()

void GmpHydraulic::gravityVector ( const GmElement * e,
const GmVector * coord,
int ip,
GmVector & grav ) const
virtual

Returns the gravity accelaration vector.

Reimplemented in GmpHydraulicTwoPhaseFlow.

◆ physicsMetaDataMap()

const QVariantMap * GmpHydraulic::physicsMetaDataMap ( )
virtual

The documentation for this class was generated from the following files: