ChemicalFemPhysics
The GeMA Standard Chemical FEM Physics Plugin
Loading...
Searching...
No Matches
GmpIphreeqcReaction Class Reference

Extends the basic chemical physics transport equation by providing reaction rates based on the Iphreeqc package. More...

#include <gmpIphreeqcReaction.h>

Inheritance diagram for GmpIphreeqcReaction:
Collaboration diagram for GmpIphreeqcReaction:

Public Member Functions

 GmpIphreeqcReaction (GmSimulationData *simulation, QString id, QString description, const GmLogCategory &logger)
 
virtual ~GmpIphreeqcReaction ()
 Destructor.
 
virtual const char * pluginType () const
 
virtual const QVariantMap * physicsMetaDataMap ()
 Returns a pointer to the basic chemical physics attribute map, built when the function is called for the first time. Will be extended by sub-classes providing the reactive term.
 
virtual bool checkLoadedData ()
 Checks the existance of the velocity accessor, and also sizes for the dispersion and retardation coefficients, as well as sizes for the prescribed concentration and prescribed flux boundary conditions.
 
bool checksNodalAccessors ()
 
virtual bool beforeElementStiffnessLoop (const GmpFemMatrixSet &elemMatrices, const GmpFemVectorSet &elemVectors)
 
bool createIPhreeqcInput (IPhreeqc &R, const char *dump, int node)
 
bool runIPhreeqc (IPhreeqc &R)
 
bool evaluateInitialConditions (QString &input)
 
virtual bool setsInitialConditions (IPhreeqc &R, int node)
 
bool getSelectedPhreeqcOutputs (IPhreeqc &phreeqc, GmVector &data, int node)
 
bool saveIPhreeqcValuesToNode (IPhreeqc &R, int node)
 
bool updatesSolution (IPhreeqc &R, GmValueAccessor *ionAcc, int node)
 Updates solution ions of each especies for the next Phreeqc simulation.
 
bool updatesKinetics (IPhreeqc &R, GmValueAccessor *ionAcc, int node)
 Updates kinetic reaction of each mineral for the next Phreeqc simulation.
 
bool updatesEquilibrium (IPhreeqc &R, GmValueAccessor *ionAcc, int node)
 Updates equilibrium reaction of each mineral for the next Phreeqc simulation.
 
bool loadsChemicalParameters (QString &inputPhreeqc)
 
bool loadsOutputData (const QString &line, QString &Keyword, QList< QPair< QString, int > > &data, int offset=1)
 
QString extractSegment (const QString &input, const QString &startWord, const QString &endWord)
 
virtual bool calcDerivedResults (bool nonLinearSolver)
 Calc velocity and flow on nodes and/or Gauss points.
 
bool runIphreeqcNodes ()
 
void getReactionValues (const GmElement *e, const GmVector &Rg, GmVector &Re, int pos) const
 
virtual void FillElementalReaction (const GmElement *e, GmVector &elemFe, const GmVector &Fr, int pos) const
 
void getMineralValues (const GmElement *e, GmVector &Rg, GmVector &Re, int pos) const
 
- Public Member Functions inherited from GmpChemicalFemPhysics
 GmpChemicalFemPhysics (GmSimulationData *simulation, QString id, QString description, const GmLogCategory &logger)
 Constructor. Will be called by the plugin loading code.
 
virtual ~GmpChemicalFemPhysics ()
 Destructor.
 
virtual const char * pluginName () const
 
virtual FemResultType fillElementData (const GmElement *e, GmpFemMatrixSet &elemMatrices, GmpFemVectorSet &elemVectors)
 Fills the element stiffness matrix for element 'e' with diffusive and convective terms. Calls the virtual function reactionRate() for filling the external forces().
 
virtual FemResultType fillElementDataForBc (const GmElement *e, const GmBoundaryCondition *bc, int bcIndex, int bcListIndex, int border, GmpFemMatrixSet &elemMatrices, GmpFemVectorSet &elemVectors)
 Fills the element force vector elemF for element 'e', taking into account fixed flux boundary conditions.
 
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 concentrations

 
virtual bool fillFixedNodalDofsBCAlkalinity (QVector< int > &nodes, QVector< int > &dof, QVector< double > &values, bool *constantValues) const
 See comments on base class. Fills vectors with prescribed node concentrations.
 
virtual bool fillFixedNodalDofsBCbasalt (QVector< int > &nodes, QVector< int > &dof, QVector< double > &values, bool *constantValues) const
 

Protected Types

enum  iPhreeqcReactionPhysicsAttributeIds { IPHREEQC_DATABASE_ID = GmpChemicalFemPhysics::NUM_ATTRIBUTE_IDS , INPUT_A_ID , POROS_A_ID , NUM_ATTRIBUTE_IDS }
 Additional IDs for physics attributes. More...
 
enum  NodeAttributeIds {
  IonSol_NA_ID = GmpChemicalFemPhysics::NUM_NA_IDS , IonSolOld_NA_ID , SIndex_NA_ID , EqM_NA_ID ,
  KiM_NA_ID , poroM_NA_ID , poroMOld_NA_ID , NUM_NA_IDS
}
 IDs for physics node attributes. More...
 
enum  GaussAttributeIds { MASS_GA_ID = GmpChemicalFemPhysics::NUM_GA_IDS , NUM_GA_IDS }
 
- Protected Types inherited from GmpChemicalFemPhysics
enum  PhysicsAttributeIds {
  ISOPARAMETRIC_ID , MULTI_DISPERSION_ID , MULTI_RETARDATION_ID , ALKALINITY_ID ,
  BASALTRXN_ID , NUM_ATTRIBUTE_IDS
}
 IDs for physics attributes. More...
 
enum  StateVarIds { C_ID }
 IDs fo physics state vars. More...
 
enum  NodeAttributeIds { NUM_NA_IDS }
 IDs for physics node attributes. More...
 
enum  GaussAttributeIds { V_GA_ID , NUM_GA_IDS }
 IDs for physics Gauss attributes. More...
 
enum  ElementPropertyIds {
  D_ID , K_ID , V_ID , PHI_ID ,
  THICKNESS_ID , NUM_PROPERTY_IDS
}
 IDs for physics element properties. More...
 
enum  BoundaryConditionIds {
  PRESCRIBED_C_BC_ID , PRESCRIBED_FLUX_BC_ID , PRESCRIBED_MIXED_BC_ID , PRESCRIBED_CN_BC_ID ,
  NUM_BC_IDS
}
 IDs for accepted boundary condition types. More...
 
enum  BoundaryConditionValueIds {
  BC_C_ID , BC_CN_ID , BC_Q_ID , BC_QDIR_ID ,
  BC_MX_ID , NUM_BCV_IDS
}
 IDs for property values from accepted boundary condition types. More...
 

Protected Member Functions

virtual bool checkAndLoadPrivateData (LuaTable &table)
 
virtual bool reactionRate (const GmElement *e, const GmVector *ip, int ipIndex, const GmVector &N, const GmVector &C, double wtJ, GmVector &elemFe, GmMatrix &elemK, bool needsFe, bool needsK)
 Virtual function called by fillElementData() for each integration point so that derived classes can add specific reaction rate terms to the convection-diffusion equation.
 
bool fillElementalMass ()
 
- Protected Member Functions inherited from GmpChemicalFemPhysics

Private Attributes

bool _isKinetics
 
bool _isEquilibrium
 
bool _isSaturation
 
int _nOut
 
IPhreeqc _iphreeqc
 
QByteArray _dumpData
 
QList< QPair< QString, int > > _solution
 
QList< QPair< QString, int > > _kiMineral
 
QList< QPair< QString, int > > _eqMineral
 
QList< QPair< QString, int > > _siMineral
 
QString _selectedOutput
 

Additional Inherited Members

- Protected Attributes inherited from GmpChemicalFemPhysics
GmVector _data
 Save alkalinity data for boundary condition.
 
GmVector _Cglobal
 

Detailed Description

Extends the basic chemical physics transport equation by providing reaction rates based on the Iphreeqc package.

Member Enumeration Documentation

◆ GaussAttributeIds

Enumerator
NUM_GA_IDS 

The number of gauss attributes.

◆ iPhreeqcReactionPhysicsAttributeIds

Additional IDs for physics attributes.

Enumerator
IPHREEQC_DATABASE_ID 

Id for retrieving the reaction matrix physics attribute.

NUM_ATTRIBUTE_IDS 

The number of attribute ids above.

◆ NodeAttributeIds

IDs for physics node attributes.

Enumerator
IonSol_NA_ID 

Base Id for Ion transport node attribute(s)

IonSolOld_NA_ID 

Base Id for history of Ion transport node attribute(s)

SIndex_NA_ID 

Base Id for Saturation index.

EqM_NA_ID 

Base Id for Reaction in equillibrium.

KiM_NA_ID 

Base Id for mineral for reaction.

poroM_NA_ID 

Base Id for porosity variation.

NUM_NA_IDS 

The number of node attribute ids above.

Member Function Documentation

◆ calcDerivedResults()

bool GmpIphreeqcReaction::calcDerivedResults ( bool nonLinearSolver)
virtual

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

Reimplemented from GmpChemicalFemPhysics.

◆ checkLoadedData()

bool GmpIphreeqcReaction::checkLoadedData ( )
virtual

Checks the existance of the velocity accessor, and also sizes for the dispersion and retardation coefficients, as well as sizes for the prescribed concentration and prescribed flux boundary conditions.

Reimplemented from GmpChemicalFemPhysics.

◆ physicsMetaDataMap()

const QVariantMap * GmpIphreeqcReaction::physicsMetaDataMap ( )
virtual

Returns a pointer to the basic chemical physics attribute map, built when the function is called for the first time. Will be extended by sub-classes providing the reactive term.

Reimplemented from GmpChemicalFemPhysics.

◆ reactionRate()

bool GmpIphreeqcReaction::reactionRate ( const GmElement * e,
const GmVector * ip,
int ipIndex,
const GmVector & N,
const GmVector & C,
double wtJ,
GmVector & elemFe,
GmMatrix & elemK,
bool needsFe,
bool needsK )
protectedvirtual

Virtual function called by fillElementData() for each integration point so that derived classes can add specific reaction rate terms to the convection-diffusion equation.

It receives as parameters the current element, integration point coordinate and index being processed, along with the shape function vector calculated over this point, a concentration vector for the element nodes and a constant 'wtJ' storing the product of the current integration point weight, the element thickness for 2D scenarions and the element Jacobian determinant.

The function should add its contributions to the elemFe and elemK vector / matrix according to the request given by needsFe and needsK.

Implements GmpChemicalFemPhysics.


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