HydroFemPhysics
The GeMA Hydraulic FEM Physics Plugin
Loading...
Searching...
No Matches
GmpHydraulicBrinkmanFlow Class Reference

Dual flow hydraulic 2D & 3D for Quad, Tri, Hex and Tet. More...

#include <gmpHydraulicBrinkmanFlow.h>

Inheritance diagram for GmpHydraulicBrinkmanFlow:
Collaboration diagram for GmpHydraulicBrinkmanFlow:

Public Member Functions

 GmpHydraulicBrinkmanFlow (const char *pluginType, GmSimulationData *simulation, QString id, QString description, const GmpFemPhysicsCommonMaterialFactory *matFactory, const GmLogCategory &logger)
 
virtual ~GmpHydraulicBrinkmanFlow ()
 Destructor.
 
virtual const QVariantMap * physicsMetaDataMap ()
 Returns a reference for the brinkman attribute map, built when the function is called for the first time.
 
virtual bool beforeElementStiffnessLoop (const GmpFemMatrixSet &elemMatrices, const GmpFemVectorSet &elemVectors)
 
virtual GmpFemPhysics::FemResultType fillElementData (const GmElement *e, GmpFemMatrixSet &elemMatrices, GmpFemVectorSet &elemVectors)
 Fills the element matrices and vectors for a generic dual flow 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 bool fillNeMatrix (GmMatrix &Nec, GmMatrix &Np, const GmVector &Ne, const GmVector &N) const
 
virtual void fillFluidMomentMatrix (const GmElement *e, const GmVector *coord, int ip, GmMatrix &Ac, const GmMatrix &Bp, const GmMatrix &N, double c)
 Calculates the flow stiffness matrix of fluid 2 due to permeability contribution or permeability matrix for element 'e' at the given integration point (coord, ip) storing the result at the Kfc matrix. Bp is the strain pore pressure matrix and c a constant equal to w * h * detJ.
 
virtual void fillStorageCompMatrix (const GmElement *e, const GmVector *coord, int ip, GmMatrix &Sc, const GmVector &N, double c)
 Calculates the storage matrix 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 = w * h * detJ.
 
virtual void fillFluidConservMatrix (const GmElement *e, const GmVector *coord, int ip, GmMatrix &Cm, const GmMatrix &Bp, const GmMatrix &Np, double c) const
 Calculates the fluid conserving matrix due to permeability contribution or permeability matrix for element 'e' at the given integration point (coord, ip) storing the result at the Kfc matrix. Bp is the strain pore pressure matrix and c a constant equal to w * h * detJ.
 
virtual void fillStiffnessMatrix (const GmElement *e, GmMatrix &K, const GmMatrix &Ac, const GmMatrix &Cm, const QVector< int > &iVe, const QVector< int > &iPe) const
 Fills the Stiffness matrix with the computed "permeability" Matrizes Returns K = Kc + Kfc, where: Kc is the permeability Matrix of the medium Kfc is the permeability Matrix of the fluid.
 
virtual bool calcDerivedResults (bool nonLinearSolver)
 Calc velocity and flow on nodes and/or Gauss points.
 
virtual void fillElementVelocities (const GmElement *e, GmVector &Vfe)
 Given an element, fills the vector vfe with nodal velocities. The vector should have size equal to dim * number of nodes.
 
virtual void fillDampingMatrix (const GmElement *e, GmMatrix &C, const GmMatrix &Sc, const QVector< int > &iVe) const
 Fills the Damping matrix with the computed "storage/compressibility" Matrizes Returns C = Sc + Sfc, where: Sc is the "storage/compressibility" Matrix of the medium Sfc is the "storage/compressibility" Matrix of the fluid.
 
virtual void fillInternalForceVector (const GmElement *e, GmVector &Fi, const GmMatrix &Ac, const GmMatrix &Cm, const GmVector &pe, const GmVector &vfe, const QVector< int > &iVe, const QVector< int > &iPe) const
 Fills the Internal force vector for both fluids Returns fi = Kc*pe + Kfc*pfe, where: Kc is the permeability Matrix of the medium Kfc is the permeability Matrix of the fluid.
 
virtual void FillDofIndexPosition (const GmElement *e, QVector< int > &iPe, QVector< int > &iPfe)
 Fills the position index of the two hydraulic degrees of freedom. the implementation supports order of the defined state variables i.e {P, Pf} or {Pf, P}.
 
virtual GmpFemPhysics::FemResultType fillElementDataForBc (const GmElement *e, const GmBoundaryCondition *bc, int bcIndex, int bcListIndex, int border, GmpFemMatrixSet &elemMatrices, GmpFemVectorSet &elemVectors)
 Fills the element stiffness matrix elemK and/or the force vector elemF for element 'e', taking into account pressure load and/or point generation boundary conditions, as indicated by the bc parameter.
 
virtual GmpFemPhysics::FemResultType fillBcElementData (const GmElement *e, const GmBoundaryCondition *bc, int bcIndex, int bcListIndex, int border, GmMatrix &elemMat, GmVector &elemVec)
 
virtual bool fillFixedNodalPressureBcLists (int dofId, QVector< int > &nodes, QVector< int > &dof, QVector< double > &values) const
 Fills fixed pressure boundary conditions.
 
virtual int numBCData () const
 returns number of fixed P bc data
 
void addBCData (int id, double value)
 Adds bc node.
 
virtual double bcData (int id) const
 Returns the bc value or NULL.
 
virtual QList< int > nodeIds () const
 Returns the node indexes.
 
void clearBcData ()
 Returns the bc value or NULL.
 
virtual GmpFemPhysics::FemResultType fillPressureValues (const GmElement *e, double press, int border)
 Fills pressure values for fixed pressure boundary conditions.
 
- Public Member Functions inherited from GmpHydraulic
 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 bool supportsStateDumping ()
 
virtual FemResultType fillElementDataBc (const GmElement *e, const GmBoundaryCondition *bc, int bcIndex, int bcListIndex, int border, GmMatrix &elemMat, GmVector &elemVec)
 
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 Types

enum  BrinkmanStateVarIds { VF_ID = GmpHydraulic::NUM_STATEVAR_IDS , PL_BC_ID , NUM_STATEVAR_IDS }
 IDs fo physics state vars. More...
 
enum  BrinkmanBoundaryConditionIds { FIXED_VF_BC_ID = GmpHydraulic::NUM_BC_IDS , NUM_BC_IDS }
 IDs for accepted boundary condition types. More...
 
enum  BrinkmanBoundaryConditionValueIds {
  BC_VX_ID = GmpHydraulic::NUM_BCV_IDS , BC_VY_ID , BC_VZ_ID , BC_PL_ID ,
  NUM_BCV_IDS
}
 IDs for property values from accepted boundary condition types. More...
 

Protected Member Functions

virtual const GmElementDofdofMapping (GmCellType type) const
 
- Protected Member Functions inherited from GmpHydraulic
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

QMap< int, double > _bcData
 List with bc Data.
 
- Protected Attributes inherited from GmpHydraulic
HMaterialPointAccessors _hmaterialPointAccessor
 Access to hydraulic material point.
 
bool _setInitialCond
 Sets the initial conditions required by the physics.
 

Additional Inherited Members

- Public Types inherited from GmpHydraulic
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...
 

Detailed Description

Dual flow hydraulic 2D & 3D for Quad, Tri, Hex and Tet.

Member Enumeration Documentation

◆ BrinkmanBoundaryConditionIds

IDs for accepted boundary condition types.

Enumerator
FIXED_VF_BC_ID 

Id for fixed node velocity boundary condition.

NUM_BC_IDS 

The number of boundary conditions ids above.

◆ BrinkmanBoundaryConditionValueIds

IDs for property values from accepted boundary condition types.

Enumerator
BC_VX_ID 

Nodal velocity for fixed node velocity boundary condition.

BC_VY_ID 

Nodal velocity for fixed node velocity boundary condition.

BC_VZ_ID 

Nodal velocity for fixed node velocity boundary condition.

BC_PL_ID 

edge pressure load boundary condition

NUM_BCV_IDS 

The number of boundary conditions value ids above.

◆ BrinkmanStateVarIds

IDs fo physics state vars.

Enumerator
VF_ID 

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

PL_BC_ID 

Id for pressure load boundary condition.

NUM_STATEVAR_IDS 

The number of property ids above.

Member Function Documentation

◆ calcDerivedResults()

bool GmpHydraulicBrinkmanFlow::calcDerivedResults ( bool nonLinearSolver)
virtual

Calc velocity and flow on nodes and/or Gauss points.

Reimplemented from GmpHydraulic.

◆ fillElementData()

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

Fills the element matrices and vectors for a generic dual flow element.

Reimplemented from GmpHydraulic.

◆ fillElementDataForBc()

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

Fills the element stiffness matrix elemK and/or the force vector elemF for element 'e', taking into account pressure load and/or point generation boundary conditions, as indicated by the bc parameter.

Reference: "Programing the finite element Mthod", I.M. Smith and D. V. Griffits

Reimplemented from GmpHydraulic.

◆ fillFluidConservMatrix()

void GmpHydraulicBrinkmanFlow::fillFluidConservMatrix ( const GmElement * e,
const GmVector * coord,
int ip,
GmMatrix & Cm,
const GmMatrix & B,
const GmMatrix & N,
double c ) const
virtual

Calculates the fluid conserving matrix due to permeability contribution or permeability matrix for element 'e' at the given integration point (coord, ip) storing the result at the Kfc 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 (Kfc = nf x nf) where n is the number of element nodes and nf the number of element corner nodes.

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

◆ fillFluidMomentMatrix()

void GmpHydraulicBrinkmanFlow::fillFluidMomentMatrix ( const GmElement * e,
const GmVector * coord,
int ip,
GmMatrix & Ac,
const GmMatrix & Be,
const GmMatrix & Ne,
double c )
virtual

Calculates the flow stiffness matrix of fluid 2 due to permeability contribution or permeability matrix for element 'e' at the given integration point (coord, ip) storing the result at the Kfc 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 (Kfc = nf x nf) where n is the number of element nodes and nf the number of element corner nodes.

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

◆ fillStorageCompMatrix()

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

Calculates the storage matrix 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 = 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 * (rhow) * N.t() * c, where c = w * h * detJ

Reimplemented from GmpHydraulic.

◆ fixedNodalDofsBc()

bool GmpHydraulicBrinkmanFlow::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 from GmpHydraulic.

◆ fixedNodalForcesBc()

bool GmpHydraulicBrinkmanFlow::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 from GmpHydraulic.

◆ physicsMetaDataMap()

const QVariantMap * GmpHydraulicBrinkmanFlow::physicsMetaDataMap ( )
virtual

Returns a reference for the brinkman attribute map, built when the function is called for the first time.

Reimplemented from GmpHydraulic.


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