GEOS
Classes | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
geos::WellSolverBase Class Referenceabstract

#include <WellSolverBase.hpp>

Inheritance diagram for geos::WellSolverBase:
Inheritance graph
[legend]

Classes

struct  viewKeyStruct
 

Public Member Functions

 WellSolverBase (const string &name, Group *const parent)
 main constructor for Group Objects More...
 
virtual ~WellSolverBase () override
 default destructor
 
 WellSolverBase ()=delete
 deleted default constructor
 
 WellSolverBase (WellSolverBase const &)=delete
 deleted copy constructor
 
 WellSolverBase (WellSolverBase &&)=delete
 default move constructor
 
WellSolverBaseoperator= (WellSolverBase const &)=delete
 deleted assignment operator
 
WellSolverBaseoperator= (WellSolverBase &&)=delete
 deleted move operator
 
virtual GroupcreateChild (string const &childKey, string const &childName) override
 Create a new constraint object as a child of this group. More...
 
virtual void expandObjectCatalogs () override
 Expand catalog for schema generation.
 
void setFlowSolverName (string const &name)
 setter for the name of the flow solver (needed to use the flow kernels like UpdateFluid) More...
 
string const & getFlowSolverName () const
 getter for the name of the flow solver (used in UpdateState) More...
 
localIndex numDofPerWellElement () const
 getter for the number of degrees of freedom per well element More...
 
localIndex numDofPerResElement () const
 getter for the number of degrees of freedom per mesh element More...
 
integer isThermal () const
 getter for iso/thermal switch More...
 
virtual string wellElementDofName () const =0
 get the name of DOF defined on well elements More...
 
virtual string resElementDofName () const =0
 get the name of DOF defined on well elements More...
 
virtual localIndex numFluidComponents () const =0
 const getter for the number of fluid components More...
 
virtual localIndex numFluidPhases () const =0
 Get the number of fluid phases. More...
 
WellSolverBasegetWell (WellElementSubRegion const &subRegion)
 getter for the well associated to this subRegion More...
 
WellControlsgetWellControls (WellElementSubRegion const &subRegion)
 getter for the well controls associated to this well subRegion More...
 
WellControls const & getWellControls (WellElementSubRegion const &subRegion) const
 const getter for the well controls associated to this well subRegion More...
 
void setPerforationStatus (real64 const &time_n, DomainPartition &domain)
 Open and close perfs based on user defined perf status table. More...
 
void setPerforationStatus (real64 const &time_n, WellElementSubRegion &subRegion)
 
virtual void registerDataOnMesh (Group &meshBodies) override
 Register data on mesh entities. More...
 
virtual real64 calculateWellResidualNorm (real64 const &GEOS_UNUSED_PARAM(time_n), real64 const &GEOS_UNUSED_PARAM(dt), WellElementSubRegion const &GEOS_UNUSED_PARAM(subRegion), DofManager const &GEOS_UNUSED_PARAM(dofManager), arrayView1d< real64 const > const &GEOS_UNUSED_PARAM(localRhs))=0
 
virtual real64 scalingForWellSystemSolution (ElementSubRegionBase &GEOS_UNUSED_PARAM(subRegion), DofManager const &GEOS_UNUSED_PARAM(dofManager), arrayView1d< real64 const > const &GEOS_UNUSED_PARAM(localSolution))=0
 
virtual bool checkWellSystemSolution (ElementSubRegionBase &GEOS_UNUSED_PARAM(subRegion), DofManager const &GEOS_UNUSED_PARAM(dofManager), arrayView1d< real64 const > const &GEOS_UNUSED_PARAM(localSolution), real64 const GEOS_UNUSED_PARAM(scalingFactor))=0
 
virtual void applyWellSystemSolution (DofManager const &GEOS_UNUSED_PARAM(dofManager), arrayView1d< real64 const > const &GEOS_UNUSED_PARAM(localSolution), real64 const GEOS_UNUSED_PARAM(scalingFactor), real64 const GEOS_UNUSED_PARAM(dt), DomainPartition &GEOS_UNUSED_PARAM(domain), MeshLevel &GEOS_UNUSED_PARAM(mesh), WellElementSubRegion &GEOS_UNUSED_PARAM(subRegion))=0
 
virtual real64 setNextDt (real64 const &currentTime, real64 const &currentDt, DomainPartition &domain) override
 function to set the next time step size More...
 
virtual void setupDofs (DomainPartition const &domain, DofManager &dofManager) const override
 
virtual void implicitStepComplete (real64 const &GEOS_UNUSED_PARAM(time_n), real64 const &GEOS_UNUSED_PARAM(dt), DomainPartition &GEOS_UNUSED_PARAM(domain)) override
 
virtual void applyBoundaryConditions (real64 const GEOS_UNUSED_PARAM(time_n), real64 const GEOS_UNUSED_PARAM(dt), DomainPartition &GEOS_UNUSED_PARAM(domain), DofManager const &GEOS_UNUSED_PARAM(dofManager), CRSMatrixView< real64, globalIndex const > const &GEOS_UNUSED_PARAM(localMatrix), arrayView1d< real64 > const &GEOS_UNUSED_PARAM(localRhs)) override
 
void selectWellConstraint (real64 const &time_n, real64 const &dt, integer const coupledIterationNumber, DomainPartition &domain)
 Selects the active well constraint based on current conditions. More...
 
virtual void assembleSystem (real64 const time, real64 const dt, DomainPartition &domain, DofManager const &dofManager, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs) override
 function to assemble the linear system matrix and rhs More...
 
virtual void assembleFluxTerms (real64 const &time_n, real64 const &dt, DomainPartition &domain, DofManager const &dofManager, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs)=0
 assembles the flux terms for individual well for all connections between well elements More...
 
virtual void assembleAccumulationTerms (real64 const &time_n, real64 const &dt, DomainPartition &domain, DofManager const &dofManager, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs)=0
 assembles the accumulation term for all the well elements More...
 
virtual real64 updateWellState (MeshBody const &meshBody, ElementRegionManager const &elemManager, WellElementSubRegion &subRegion)=0
 Recompute all dependent quantities from primary variables (including constitutive models) More...
 
virtual void updateState (DomainPartition &domain) override
 Recompute all dependent quantities from primary variables (including constitutive models) More...
 
virtual void initializeWells (DomainPartition &domain, real64 const &time_n)=0
 Initialize all the primary and secondary variables in all the wells. More...
 
virtual real64 updateSubRegionState (WellElementSubRegion &subRegion)=0
 Recompute all dependent quantities from primary variables (including constitutive models) More...
 
virtual void computePerforationRates (real64 const &time_n, real64 const &dt, DomainPartition &domain)=0
 Recompute the perforation rates for all the wells. More...
 
void setKeepVariablesConstantDuringInitStep (bool const keepVariablesConstantDuringInitStep)
 Utility function to keep the well variables during a time step (used in poromechanics simulations) More...
 
- Public Member Functions inherited from geos::WellControls
virtual void registerWellDataOnMesh (WellElementSubRegion &subRegion)
 
virtual void setConstitutiveNames (ElementSubRegionBase &subRegion) const =0
 
virtual void createSeparator (WellElementSubRegion &subRegion)=0
 Create well separator.
 
virtual bool isCompositional () const =0
 
virtual void initializeWell (DomainPartition &domain, Group &meshBodies, string const &meshBodyName, MeshLevel &mesh, WellElementSubRegion &subRegion, real64 const &time_n)=0
 Initialize well for the beginning of a simulation or restart. More...
 
real64 setNextDt (real64 const &currentTime, real64 const &currentDt, WellElementSubRegion &subRegion)
 function to set the next time step size More...
 
virtual void implicitStepSetup (real64 const &time_n, real64 const &GEOS_UNUSED_PARAM(dt), DomainPartition &domain, string const &meshBodyName, ElementRegionManager &elemManager, WellElementSubRegion &subRegion)=0
 
virtual void implicitStepComplete (real64 const &time, real64 const &dt, WellElementSubRegion const &subRegion)=0
 
virtual real64 updateSubRegionState (real64 const time_n, MeshBody const &meshBody, ElementRegionManager const &elemManager, WellElementSubRegion &subRegion)=0
 
bool evaluateConstraints (real64 const &time_n, WellElementSubRegion &subRegion)
 Function to evaluate well constraints after applying the solution update. More...
 
bool evaluateConstraints (real64 const &time_n, real64 const &dt, integer const cycleNumber, integer const coupledIterationNumber, DomainPartition &domain, MeshLevel &mesh, ElementRegionManager &elemManager, WellElementSubRegion &subRegion, DofManager const &dofManager)
 Function to evaluate well constraints after applying the solution update. More...
 
void solveConstraint (WellConstraintBase *constraint, real64 const &time_n, real64 const &dt, integer const cycleNumber, integer const coupledIterationNumber, DomainPartition &domain, MeshLevel &mesh, ElementRegionManager &elemManager, WellElementSubRegion &subRegion, DofManager const &dofManager)
 
void assembleSystem (real64 const &time_n, real64 const &dt, integer const cycleNumber, ElementRegionManager &elemManager, WellElementSubRegion &subRegion, DofManager const &dofManager, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs)
 
virtual void assembleWellAccumulationTerms (real64 const &time, real64 const &dt, WellElementSubRegion &subRegion, DofManager const &dofManager, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs)=0
 assembles the accumulation term for an individual well More...
 
virtual void assembleWellPressureRelations (real64 const &time_n, real64 const &dt, WellElementSubRegion const &subRegion, DofManager const &dofManager, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs)=0
 assembles the well momentum terms for an individual well More...
 
virtual void assembleWellConstraintTerms (real64 const &time_n, real64 const &dt, WellElementSubRegion const &subRegion, DofManager const &dofManager, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs)=0
 assembles the well constraint terms for an individual well More...
 
virtual void computeWellPerforationRates (real64 const &time_n, real64 const &GEOS_UNUSED_PARAM(dt), ElementRegionManager &elemManager, WellElementSubRegion &subRegion)=0
 Recompute the perforation rates for all the wells. More...
 
virtual void assembleWellFluxTerms (real64 const &time, real64 const &dt, WellElementSubRegion const &subRegion, DofManager const &dofManager, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs)=0
 assembles the flux terms for individual well for all connections between well elements More...
 
virtual real64 calculateWellResidualNorm (real64 const &time_n, real64 const &dt, NonlinearSolverParameters const &nonlinearSolverParameters, WellElementSubRegion const &subRegion, DofManager const &dofManager, arrayView1d< real64 const > const &localRhs)=0
 
virtual array1d< real64calculateLocalWellResidualNorm (real64 const &time_n, real64 const &dt, NonlinearSolverParameters const &nonlinearSolverParameters, WellElementSubRegion const &subRegion, DofManager const &dofManager, arrayView1d< real64 const > const &localRhs)=0
 
virtual real64 scalingForWellSystemSolution (WellElementSubRegion &subRegion, DofManager const &dofManager, arrayView1d< real64 const > const &localSolution)=0
 
virtual bool checkWellSystemSolution (WellElementSubRegion &subRegion, DofManager const &dofManager, arrayView1d< real64 const > const &localSolution, real64 const scalingFactor, real64 &minPressure, real64 &minDensity, real64 &minTotalDensity, ElementsReporterBuffer &negPressureIds, ElementsReporterBuffer &negDensityIds, ElementsReporterBuffer &negTotalDensityIds)=0
 
virtual void applyWellSystemSolution (DofManager const &dofManager, arrayView1d< real64 const > const &localSolution, real64 const scalingFactor, real64 const dt, DomainPartition &domain, MeshLevel &mesh, WellElementSubRegion &subRegion)=0
 
virtual void applyWellBoundaryConditions (real64 const time_n, real64 const dt, ElementRegionManager &elemManager, WellElementSubRegion &subRegion, DofManager const &dofManager, arrayView1d< real64 > const &localRhs, CRSMatrixView< real64, globalIndex const > const &localMatrix)=0
 
virtual void resetStateToBeginningOfStep (DomainPartition &domain, string const &meshBodyName, ElementRegionManager const &elemManager, WellElementSubRegion &subRegion)=0
 Reset the well state to the beginning of the time step. More...
 
virtual void initializePreSubGroups () override
 Called by Initialize() prior to initializing sub-Groups.
 
virtual void initializeWellPostInitialConditionsPreSubGroups (WellElementSubRegion &subRegion)=0
 
virtual void printRates (real64 const &time_n, real64 const &dt, WellElementSubRegion const &subRegion)=0
 
localIndex numDofPerWellElement () const
 getter for the number of degrees of freedom per well element More...
 
localIndex numDofPerResElement () const
 getter for the number of degrees of freedom per mesh element More...
 
void setPerforationStatus (real64 const &time_n, WellElementSubRegion &subRegion)
 
void setGravCoef (WellElementSubRegion &subRegion, R1Tensor const &gravVector)
 
template<typename ConstraintType >
void createConstraint (string const &constraintName)
 Create a constraint. More...
 
WellConstraintBase const * getBHPConstraint (const ConstraintSourceId source=ConstraintSourceId::USER) const
 Gets the defined BHP constraint. More...
 
WellConstraintBasegetBHPConstraint (const ConstraintSourceId source=ConstraintSourceId::USER)
 
stdVector< WellConstraintBase const * > getRateConstraints () const
 Gets a list of rate constraints. More...
 
stdVector< WellConstraintBase * > getRateConstraints ()
 
stdVector< WellConstraintBase const * > getAllConstraints () const
 Gets a list of all constraints constraints. More...
 
stdVector< WellConstraintBase * > getAllConstraints ()
 
void enableThermalEffects (bool enable)
 Set thermal effects enable. More...
 
bool thermalEffectsEnabled () const
 Are thermal effects enabled. More...
 
bool isoThermalEstimatorEnabled () const
 Is isoThermalEstimator enabled. More...
 
void setupWellDofs (DomainPartition &domain, WellElementRegion &wellElementRegion, string const &meshBodyName, MeshLevel const &meshLevel)
 
WellNewtonSolvergetWellNewtonSolver ()
 
void selectWellConstraint (real64 const &time_n, real64 const &dt, integer const cycleNumber, integer const coupledIterationNumber, DomainPartition &domain, string const &meshBodyName, MeshLevel &mesh, ElementRegionManager &elemManager, WellElementSubRegion &subRegion, DofManager const &dofManager)
 
 WellControls (string const &name, dataRepository::Group *const parent)
 Constructor for WellControls Objects. More...
 
 ~WellControls () override
 Default destructor.
 
 WellControls ()=delete
 Deleted default constructor.
 
 WellControls (WellControls const &)=delete
 Deleted copy constructor.
 
 WellControls (WellControls &&)=delete
 Deleted move constructor.
 
WellControlsoperator= (WellControls const &)=delete
 Deleted assignment operator. More...
 
WellControlsoperator= (WellControls &&)=delete
 Deleted move operator. More...
 
template<typename CONSTITUTIVE >
void setConstitutiveName (ElementSubRegionBase &subRegion, string const &wrapperName, string const &constitutiveType) const
 Register wrapper with given name and store constitutive model name on the subregion. More...
 
string_array const & getTargetRegionNames () const
 return the list of target regions More...
 
std::string getFlowSolverName () const
 Get the control type for the well. More...
 
void setFlowSolverName (const std::string &flowSolverName)
 Set the control type for the well. More...
 
std::string getDiscretizationName () const
 return the name of the discretization object More...
 
void setDiscretizationName (const std::string &discretizationName)
 set the name of the discretization object More...
 
ConstraintTypeId getControl () const
 Get the control type for the well. More...
 
void setControl (ConstraintTypeId const &newControl)
 Set the control type for the well. More...
 
ConstraintTypeId getInputControl () const
 Get the input control type for the well. More...
 
integer estimateSolution () const
 getter for esitmator switch More...
 
real64 getTargetBHP (real64 const &targetTime, const ConstraintSourceId source=ConstraintSourceId::USER) const
 Returns the target bottom hole pressure value. More...
 
real64 getInjectionTemperature () const
 Const accessor for the temperature of the injection stream. More...
 
arrayView1d< real64 const > getInjectionStream () const
 Const accessor for the injection stream. More...
 
integer getConstraintPhaseIndex () const
 Const accessor for the phase constraint index. More...
 
real64 getReferenceElevation () const
 Return the reference elvation where pressure constraint is measured. More...
 
integer useSurfaceConditions () const
 Getter for the flag specifying whether we check rates at surface or reservoir conditions. More...
 
string const & referenceReservoirRegion () const
 Getter for the reservoir region associated with reservoir volume constraint. More...
 
const real64getSurfacePressure () const
 Getter for the surface pressure when m_useSurfaceConditions == 1. More...
 
const real64getSurfaceTemperature () const
 Getter for the surface temperature when m_useSurfaceConditions == 1. More...
 
bool isInjector () const
 Is the well an injector? More...
 
bool isProducer () const
 Is the well a producer? More...
 
integer isThermal () const
 getter for iso/thermal switch More...
 
void setThermal (bool isThermal)
 setter for iso/thermal switch More...
 
void setUseMass (integer useMass)
 setter to activate mass formulation More...
 
integer useMass ()
 is useMass option active More...
 
bool isWellOpen () const
 Is the well open (or shut) at currentTime, status initalized in WellSolverBase::implicitStepSetup. More...
 
void setWellState (bool open)
 Set the well state. More...
 
bool getWellState () const
 Get the well state. More...
 
void setCurrentConstraint (WellConstraintBase *currentConstraint)
 Set the current consrtaint. More...
 
WellConstraintBasegetCurrentConstraint ()
 Get the current consrtaint. More...
 
WellConstraintBase const * getCurrentConstraint () const
 
bool isCrossflowEnabled () const
 Getter for the flag to enable crossflow. More...
 
real64 getInitialPressureCoefficient () const
 Getter for the initial pressure coefficient. More...
 
void setNextDtFromTables (real64 const &currentTime, real64 &nextDt)
 set next time step based on tables intervals More...
 
void setKeepVariablesConstantDuringInitStep (bool const keepVariablesConstantDuringInitStep)
 Utility function to keep the well variables during a time step (used in poromechanics simulations) More...
 
void setFluidSeparator (std::unique_ptr< constitutive::ConstitutiveBase > fluidSeparatorPtr)
 setter for multi fluid separator More...
 
constitutive::MultiFluidBase & getMultiFluidSeparator ()
 Getter for multi fluid separator. More...
 
constitutive::SingleFluidBase & getSingleFluidSeparator ()
 Getter for single fluid separator. More...
 
real64 getRegionAveragePressure () const
 Getter for the reservoir average pressure when m_useSurfaceConditions == 0. More...
 
void setRegionAveragePressure (real64 regionAveragePressure)
 Set the reservoir average pressure when m_useSurfaceConditions == 0. More...
 
real64 getRegionAverageTemperature () const
 Getter for the reservoir average temperature when m_useSurfaceConditions == 0. More...
 
void setRegionAverageTemperature (real64 regionAverageTemperature)
 Set the reservoir average temperature when m_useSurfaceConditions == 0. More...
 
void setWellStatus (real64 const &currentTime, WellControls::Status status)
 Set well status from time and internal action, eg. all perfs closed. More...
 
WellControls::Status getWellStatus () const
 Is the well open (or shut) based on internal action. More...
 
- Public Member Functions inherited from geos::dataRepository::Group
template<typename LOG_LEVEL_INFO >
std::enable_if_t< geos::is_log_level_info< LOG_LEVEL_INFO >, void > addLogLevel ()
 Append a levelCondition and a log description to the description of the wrapped object given a log info struct. Must be called in constructor. More...
 
virtual bool registerCallback (void *func, const std::type_info &funcType)
 Register a callback function on the group. More...
 
virtual void reinit ()
 Performs re-initialization of certain variable depending on the solver being used.
 
 Group (string const &name, Group *const parent)
 Constructor. More...
 
 Group (string const &name, conduit::Node &rootNode)
 Constructor. More...
 
 Group (Group &&source)=default
 Move constructor. More...
 
virtual ~Group ()
 Destructor, deletes all Groups and Wrappers owned by this Group.
 
 Group ()=delete
 Deleted default constructor.
 
 Group (Group const &)=delete
 Deleted copy constructor.
 
Groupoperator= (Group const &)=delete
 Deleted copy assignment operator. More...
 
Groupoperator= (Group &&)=delete
 Deleted move assignment operator. More...
 
void printDataHierarchy (integer indent=0) const
 Prints the data hierarchy recursively. More...
 
string dumpInputOptions () const
 
string dumpSubGroupsNames () const
 
string dumpWrappersNames () const
 
template<typename T = Group>
T & registerGroup (string const &name, std::unique_ptr< T > newObject)
 Register a new Group as a sub-group of current Group. More...
 
template<typename T = Group>
T & registerGroup (string const &name, T *newObject)
 Register a new Group as a sub-group of current Group. More...
 
template<typename T = Group>
T & registerGroup (string const &name)
 Register a new Group as a sub-group of current Group. More...
 
template<typename T = Group>
T & registerGroup (subGroupMap::KeyIndex const &keyIndex)
 Register a new Group as a sub-group of current Group. More...
 
void deregisterGroup (string const &name)
 Removes a child group from this group. More...
 
virtual GroupcreateChild (string const &childKey, string const &childName)
 Creates a new sub-Group using the ObjectCatalog functionality. More...
 
template<typename T = Group, typename KEY = void>
T * getGroupPointer (KEY const &key)
 Return a pointer to a sub-group of the current Group. More...
 
template<typename T = Group, typename KEY = void>
T const * getGroupPointer (KEY const &key) const
 Return a pointer to a sub-group of the current Group. More...
 
template<typename T = Group, typename KEY = void>
T & getGroup (KEY const &key)
 Return a reference to a sub-group of the current Group. More...
 
template<typename T = Group, typename KEY = void>
T const & getGroup (KEY const &key) const
 Return a reference to a sub-group of the current Group. More...
 
template<typename T = Group>
T & getGroupByPath (string const &path)
 Retrieve a group from the hierarchy using a path. More...
 
template<typename T = Group>
T const & getGroupByPath (string const &path) const
 Retrieve a group from the hierarchy using a path. More...
 
subGroupMapgetSubGroups ()
 Get the subgroups object. More...
 
subGroupMap const & getSubGroups () const
 Get the subgroups object. More...
 
localIndex numSubGroups () const
 return the number of sub groups in this Group More...
 
stdVector< stringgetSubGroupsNames () const
 
template<typename T = Group>
bool hasGroup (string const &name) const
 Check whether a sub-group exists. More...
 
template<typename T >
bool hasSubGroupOfType () const
 Check whether a sub-group exists by type. More...
 
template<typename GROUPTYPE = Group, typename ... GROUPTYPES, typename LAMBDA >
void forSubGroups (LAMBDA &&lambda)
 Apply the given functor to subgroups that can be casted to one of specified types. More...
 
template<typename GROUPTYPE = Group, typename ... GROUPTYPES, typename LAMBDA >
void forSubGroups (LAMBDA &&lambda) const
 Apply the given functor to subgroups that can be casted to one of specified types. More...
 
template<typename GROUPTYPE = Group, typename ... GROUPTYPES, typename LAMBDA >
void forSubGroupsIndex (LAMBDA &&lambda)
 Apply the given functor to subgroups that can be casted to one of specified types. More...
 
template<typename GROUPTYPE = Group, typename ... GROUPTYPES, typename LAMBDA >
void forSubGroupsIndex (LAMBDA &&lambda) const
 Apply the given functor to subgroups that can be casted to one of specified types. More...
 
template<typename GROUPTYPE = Group, typename ... GROUPTYPES, typename LOOKUP_CONTAINER , typename LAMBDA >
void forSubGroups (LOOKUP_CONTAINER const &subGroupKeys, LAMBDA &&lambda)
 Apply the given functor to subgroups that can be casted to one of specified types. More...
 
template<typename GROUPTYPE = Group, typename ... GROUPTYPES, typename LOOKUP_CONTAINER , typename LAMBDA >
void forSubGroups (LOOKUP_CONTAINER const &subGroupKeys, LAMBDA &&lambda) const
 Apply the given functor to subgroups that can be casted to one of specified types. More...
 
template<typename LAMBDA >
void forWrappers (LAMBDA &&lambda)
 Apply the given functor to wrappers. More...
 
template<typename LAMBDA >
void forWrappers (LAMBDA &&lambda) const
 Apply the given functor to wrappers. More...
 
template<typename TYPE , typename ... TYPES, typename LAMBDA >
void forWrappers (LAMBDA &&lambda)
 Apply the given functor to wrappers that can be cast to one of specified types. More...
 
template<typename TYPE , typename ... TYPES, typename LAMBDA >
void forWrappers (LAMBDA &&lambda) const
 Apply the given functor to wrappers that can be cast to one of specified types. More...
 
template<typename T , typename TBASE = T>
Wrapper< TBASE > & registerWrapper (string const &name, wrapperMap::KeyIndex::index_type *const rkey=nullptr)
 Create and register a Wrapper around a new object. More...
 
template<typename T , typename TBASE = T>
Wrapper< TBASE > & registerWrapper (Group::wrapperMap::KeyIndex const &viewKey)
 Create and register a Wrapper around a new object. More...
 
template<typename T >
Wrapper< T > & registerWrapper (string const &name, std::unique_ptr< T > newObject)
 Register a Wrapper around a given object and take ownership. More...
 
template<typename T >
Wrapper< T > & registerWrapper (string const &name, T *newObject)
 Register a Wrapper around an existing object, does not take ownership of the object. More...
 
WrapperBaseregisterWrapper (std::unique_ptr< WrapperBase > wrapper)
 Register and take ownership of an existing Wrapper. More...
 
void deregisterWrapper (string const &name)
 Removes a Wrapper from this group. More...
 
void generateDataStructureSkeleton (integer const level)
 Build a complete datastructure for schema generation. More...
 
virtual void setSchemaDeviations (xmlWrapper::xmlNode schemaRoot, xmlWrapper::xmlNode schemaParent, integer documentationType)
 Inform the schema generator of any deviations between the xml and GEOS data structures. More...
 
virtual void registerDataOnMeshRecursive (Group &meshBodies)
 Calls RegisterDataOnMesh() recursively. More...
 
virtual localIndex packSize (string_array const &wrapperNames, integer const recursive, bool onDevice, parallelDeviceEvents &events) const
 Get the size required to pack a list of wrappers. More...
 
virtual localIndex packSize (string_array const &wrapperNames, arrayView1d< localIndex const > const &packList, integer const recursive, bool onDevice, parallelDeviceEvents &events) const
 Get the size required to pack a list of indices within a list of wrappers. More...
 
localIndex packSize (arrayView1d< localIndex const > const &packList, integer const recursive, bool onDevice, parallelDeviceEvents &events) const
 Get the size required to pack a list of indices for all registered wrappers. More...
 
virtual localIndex pack (buffer_unit_type *&buffer, string_array const &wrapperNames, integer const recursive, bool onDevice, parallelDeviceEvents &events) const
 Pack a list of wrappers to a buffer. More...
 
virtual localIndex pack (buffer_unit_type *&buffer, string_array const &wrapperNames, arrayView1d< localIndex const > const &packList, integer const recursive, bool onDevice, parallelDeviceEvents &events) const
 Pack a list of indices within a list of wrappers. More...
 
localIndex pack (buffer_unit_type *&buffer, arrayView1d< localIndex const > const &packList, integer const recursive, bool onDevice, parallelDeviceEvents &events) const
 Pack a list of indices for all registered wrappers. More...
 
virtual localIndex unpack (buffer_unit_type const *&buffer, arrayView1d< localIndex > &packList, integer const recursive, bool onDevice, parallelDeviceEvents &events, MPI_Op op=MPI_REPLACE)
 Unpack a buffer. More...
 
template<typename KEY >
WrapperBase const & getWrapperBase (KEY const &key) const
 Return a reference to a WrapperBase stored in this group. More...
 
template<typename KEY >
WrapperBasegetWrapperBase (KEY const &key)
 Return a reference to a WrapperBase stored in this group. More...
 
indexType getWrapperIndex (string const &name) const
 
wrapperMap const & wrappers () const
 Get access to the internal wrapper storage. More...
 
wrapperMapwrappers ()
 Get access to the internal wrapper storage. More...
 
indexType numWrappers () const
 Return the number of wrappers. More...
 
stdVector< stringgetWrappersNames () const
 
template<typename LOOKUP_TYPE >
bool hasWrapper (LOOKUP_TYPE const &lookup) const
 Check if a wrapper exists. More...
 
template<typename T , typename LOOKUP_TYPE >
Wrapper< T > const & getWrapper (LOOKUP_TYPE const &index) const
 Retrieve a Wrapper stored in this group. More...
 
template<typename T , typename LOOKUP_TYPE >
Wrapper< T > & getWrapper (LOOKUP_TYPE const &index)
 Retrieve a Wrapper stored in this group. More...
 
template<typename T , typename LOOKUP_TYPE >
Wrapper< T > const * getWrapperPointer (LOOKUP_TYPE const &index) const
 Retrieve a Wrapper stored in this group. More...
 
template<typename T , typename LOOKUP_TYPE >
Wrapper< T > * getWrapperPointer (LOOKUP_TYPE const &index)
 Retrieve a Wrapper stored in this group. More...
 
template<typename T , typename LOOKUP_TYPE >
GEOS_DECLTYPE_AUTO_RETURN getReference (LOOKUP_TYPE const &lookup) const
 Look up a wrapper and get reference to wrapped object. More...
 
template<typename T , typename LOOKUP_TYPE >
T & getReference (LOOKUP_TYPE const &lookup)
 Look up a wrapper and get reference to wrapped object. More...
 
virtual void resize (localIndex const newSize)
 Resize the group and all contained wrappers that resize with parent. More...
 
virtual void reserve (indexType const newsize)
 Set the new capacity and reserve it in all wrappers that resize with parent. More...
 
localIndex capacity () const
 Get the "capacity" of the group, which determines the capacity of resizable wrappers. More...
 
localIndex size () const
 Get the "size" of the group, which determines the number of elements in resizable wrappers. More...
 
string const & getName () const
 Get group name. More...
 
string getPath () const
 Return the path of this Group in the data repository. Starts with '/' followed by the hierarchy of the children of the "Problem" in which the Group is. More...
 
DataContext const & getDataContext () const
 
template<typename KEY >
DataContext const & getWrapperDataContext (KEY key) const
 
GroupgetParent ()
 Access the group's parent. More...
 
Group const & getParent () const
 Access the group's parent. More...
 
bool hasParent () const
 
localIndex getIndexInParent () const
 Get the group's index within its parent group. More...
 
localIndex getSubGroupIndex (keyType const &key) const
 Get the index of a sub-Group within this group. More...
 
int sizedFromParent () const
 Check whether this Group is resized when its parent is resized. More...
 
GroupsetSizedFromParent (int val)
 Set whether this wrapper is resized when its parent is resized. More...
 
RestartFlags getRestartFlags () const
 Get flags that control restart output of this group. More...
 
void setRestartFlags (RestartFlags flags)
 Set flags that control restart output of this group. More...
 
InputFlags getInputFlags () const
 Get input flags for schema generation. More...
 
void setInputFlags (InputFlags flags)
 Set input flags for schema generation. More...
 
conduit::Node & getConduitNode ()
 Return the Conduit node object associated with this group. More...
 
conduit::Node const & getConduitNode () const
 Return the Conduit node object associated with this group. More...
 
void prepareToWrite ()
 Register the group and its wrappers with Conduit.
 
void finishWriting ()
 Write the group and its wrappers into Conduit.
 
void loadFromConduit ()
 Read the group and its wrappers from Conduit.
 
void setLogLevel (integer const logLevel)
 Set verbosity level. More...
 
integer getLogLevel () const
 
virtual void initialize_postMeshGeneration ()
 initialization post generation of the mesh.
 
void initialize ()
 Run initialization functions on this and all subgroups. More...
 
virtual void initializationOrder (string_array &order)
 Sets the initialization order for sub-Groups. More...
 
void initializePostInitialConditions ()
 Initialization routine to be called after calling ApplyInitialConditions(). More...
 
void postRestartInitializationRecursive ()
 Initialization routine to be called after calling reading a restart file. More...
 
void processInputFileRecursive (xmlWrapper::xmlDocument &xmlDocument, xmlWrapper::xmlNode &targetNode)
 Recursively read values using ProcessInputFile() from the input file and put them into the wrapped values for this group. Also add the includes content to the xmlDocument when Include nodes are encountered. More...
 
void processInputFileRecursive (xmlWrapper::xmlDocument &xmlDocument, xmlWrapper::xmlNode &targetNode, xmlWrapper::xmlNodePos const &targetNodePos)
 Same as processInputFileRecursive(xmlWrapper::xmlDocument &, xmlWrapper::xmlNode &) but allow to reuse an existing xmlNodePos. More...
 
void postInputInitializationRecursive ()
 Recursively call postInputInitialization() to apply post processing after reading input values.
 

Static Public Member Functions

static string coupledSolverAttributePrefix ()
 String used to form the solverName used to register single-physics solvers in CoupledSolver.
 
- Static Public Member Functions inherited from geos::WellControls
static string coupledSolverAttributePrefix ()
 String used to form the solverName used to register single-physics solvers in CoupledSolver.
 
static void setNextDtFromTable (TableFunction const *table, real64 const currentTime, real64 &nextDt)
 Set next time step based on a table function. More...
 
template<typename CONSTITUTIVE_BASE_TYPE >
static string getConstitutiveName (ElementSubRegionBase const &subRegion)
 Get the Constitutive Name object. More...
 
- Static Public Member Functions inherited from geos::dataRepository::Group
template<typename T0 , typename T1 , typename ... CASTTYPES, typename CONTAINERTYPE , typename LAMBDA >
static bool applyLambdaToContainer (CONTAINERTYPE &container, LAMBDA &&lambda)
 Apply a given functor to a container if the container can be cast to one of the specified types. More...
 
static CatalogInterface::CatalogTypegetCatalog ()
 Get the singleton catalog for this Group. More...
 
static string processInputName (xmlWrapper::xmlNode const &targetNode, xmlWrapper::xmlNodePos const &targetNodePos, string_view parentNodeName, xmlWrapper::xmlNodePos const &parentNodePos, std::set< string > &siblingNames)
 

Protected Member Functions

virtual void postInputInitialization () override
 
virtual void initializePostInitialConditionsPreSubGroups () override
 Called by InitializePostInitialConditions() prior to initializing sub-Groups.
 
virtual void initializePostSubGroups () override
 Called by Initialize() after to initializing sub-Groups.
 
virtual void validateWellConstraints (real64 const &time_n, real64 const &dt, WellElementSubRegion const &subRegion)=0
 Make sure that the well constraints are compatible. More...
 
virtual void printRates (real64 const &time_n, real64 const &dt, DomainPartition &domain)=0
 
- Protected Member Functions inherited from geos::WellControls
virtual void postRestartInitialization () override
 Performs initialization required after reading from a restart file.
 
void logConstraint (WellConstraintBase const *constraint, WellElementSubRegion const &region, real64 time, bool isLimiting=false) const
 Logs the state and values of a specific well constraint. More...
 
bool validateReferenceRegion () const
 Validates the reference region. More...
 
- Protected Member Functions inherited from geos::dataRepository::Group
virtual void initializePostInitialConditionsPostSubGroups ()
 Called by InitializePostInitialConditions() after to initializing sub-Groups.
 

Protected Attributes

string m_flowSolverName
 name of the flow solver
 
integer m_numPhases
 the max number of fluid phases
 
integer m_numComponents
 the number of fluid components
 
integer m_numDofPerWellElement
 the number of Degrees of Freedom per well element
 
integer m_numDofPerResElement
 the number of Degrees of Freedom per reservoir element
 
integer m_isThermal
 flag indicating whether thermal formulation is used
 
integer m_writeCSV
 rates output
 
string const m_ratesOutputDir
 
integer m_timeStepFromTables
 
bool m_keepVariablesConstantDuringInitStep
 flag to freeze the initial state during initialization in coupled problems
 
string m_referenceFluidModelName
 name of the fluid constitutive model used as a reference for component/phase description
 
integer m_estimateSolution
 flag to use the estimator
 
- Protected Attributes inherited from geos::WellControls
Type m_type
 Well type (as Type enum)
 
std::string m_flowSolverName
 Name of the flow solver managing this well.
 
std::string m_discretizationName
 Name of the discretization for the region.
 
integer m_useMass
 flag indicating whether mass or molar formulation should be used
 
integer m_numPhases
 the max number of fluid phases
 
integer m_numComponents
 the number of fluid components
 
integer m_numDofPerWellElement
 the number of Degrees of Freedom per well element
 
integer m_numDofPerResElement
 the number of Degrees of Freedom per reservoir element
 
integer m_isThermal
 flag indicating whether thermal formulation is used
 
bool m_keepVariablesConstantDuringInitStep
 flag to freeze the initial state during initialization in coupled problems
 
integer m_writeCSV
 rates output
 
string const m_ratesOutputDir
 
integer m_timeStepFromTables
 
real64 m_refElevation
 Reference elevation.
 
real64 m_refGravCoef
 Gravity coefficient of the reference elevation.
 
ConstraintTypeId m_inputControl
 Input well controls as a Control enum.
 
ConstraintTypeId m_currentControl
 Well controls as a Control enum.
 
integer m_useSurfaceConditions
 Flag to decide whether rates are controlled at rates or surface conditions.
 
std::unique_ptr< constitutive::ConstitutiveBase > m_fluidSeparatorPtr
 
string m_referenceFluidModelName
 name of the fluid constitutive model used as a reference for component/phase description on subregion
 
string m_referenceReservoirRegion
 Reservoir region associated with reservoir volume constraint.
 
real64 m_surfacePres
 Surface pressure.
 
real64 m_surfaceTemp
 Surface temperature.
 
string m_perfStatusTableName
 Perforation status table name.
 
integer m_isCrossflowEnabled
 Flag to enable crossflow.
 
real64 m_initialPressureCoefficient
 Tuning coefficient for the initial well pressure.
 
WellConstraintBasem_currentConstraint {}
 
WellControls::Status m_wellStatus
 Well status.
 
bool m_wellOpen
 Well open flag.
 
string m_statusTableName
 Well status table name.
 
TableFunction const * m_statusTable
 Status table.
 
real64 m_regionAveragePressure
 Region average pressure used in volume rate constraint calculations.
 
real64 m_regionAverageTemperature
 Region average temperature used in volume rate constraint calculations.
 
integer m_estimateSolution
 
integer m_enableIsoThermalEstimator
 
bool m_thermalEffectsEnabled
 
WellNewtonSolver m_wellNewtonSolver
 
DofManager m_estimatorDoFManager
 Well DofManager. More...
 
bool m_dofManagerInitialized
 

Additional Inherited Members

- Public Types inherited from geos::WellControls
enum class  Type : integer { PRODUCER , INJECTOR }
 
enum class  Status : integer { OPEN , CLOSED }
 
- Public Types inherited from geos::dataRepository::Group
using subGroupMap = MappedVector< Group, Group *, keyType, indexType >
 The template specialization of MappedVector to use for the collection of sub-Group objects.
 
using wrapperMap = MappedVector< WrapperBase, WrapperBase *, keyType, indexType >
 The template specialization of MappedVector to use for the collection wrappers objects.
 
using CatalogInterface = dataRepository::CatalogInterface< Group, string const &, Group *const >
 Type alias for catalog interface used by this class. See CatalogInterface.
 

Detailed Description

Base class for well solvers. Provides some common features

Definition at line 38 of file WellSolverBase.hpp.

Constructor & Destructor Documentation

◆ WellSolverBase()

geos::WellSolverBase::WellSolverBase ( const string name,
Group *const  parent 
)

main constructor for Group Objects

Parameters
namethe name of this instantiation of Group in the repository
parentthe parent group of this instantiation of Group

Member Function Documentation

◆ assembleAccumulationTerms()

virtual void geos::WellSolverBase::assembleAccumulationTerms ( real64 const &  time_n,
real64 const &  dt,
DomainPartition domain,
DofManager const &  dofManager,
CRSMatrixView< real64, globalIndex const > const &  localMatrix,
arrayView1d< real64 > const &  localRhs 
)
pure virtual

assembles the accumulation term for all the well elements

Parameters
domainthe physical domain object
dofManagerdegree-of-freedom manager associated with the linear system
matrixthe system matrix
rhsthe system right-hand side vector

◆ assembleFluxTerms()

virtual void geos::WellSolverBase::assembleFluxTerms ( real64 const &  time_n,
real64 const &  dt,
DomainPartition domain,
DofManager const &  dofManager,
CRSMatrixView< real64, globalIndex const > const &  localMatrix,
arrayView1d< real64 > const &  localRhs 
)
pure virtual

assembles the flux terms for individual well for all connections between well elements

Parameters
time_nprevious time value
dttime step
subRegionthe well subregion containing all the primary and dependent fields
dofManagerdegree-of-freedom manager associated with the linear system
matrixthe system matrix
rhsthe system right-hand side vector

◆ assembleSystem()

virtual void geos::WellSolverBase::assembleSystem ( real64 const  time,
real64 const  dt,
DomainPartition domain,
DofManager const &  dofManager,
CRSMatrixView< real64, globalIndex const > const &  localMatrix,
arrayView1d< real64 > const &  localRhs 
)
overridevirtual

function to assemble the linear system matrix and rhs

Parameters
timethe time at the beginning of the step
dtthe desired timestep
domainthe domain partition
dofManagerdegree-of-freedom manager associated with the linear system
localMatrixthe system matrix
localRhsthe system right-hand side vector

This function assembles the residual and the jacobian of the residual wrt the primary variables. In a stand alone physics solver, this function will fill a single block in the block system. However the capability to query the block system structure for any coupled blocks may be implemented to fill in off diagonal blocks of the system to enable coupling between solvers.

Note
This function must be overridden in the derived physics solver in order to use an implict solution method such as LinearImplicitStep() or NonlinearImplicitStep().

◆ computePerforationRates()

virtual void geos::WellSolverBase::computePerforationRates ( real64 const &  time_n,
real64 const &  dt,
DomainPartition domain 
)
pure virtual

Recompute the perforation rates for all the wells.

Parameters
domainthe domain containing the mesh and fields

◆ createChild()

virtual Group* geos::WellSolverBase::createChild ( string const &  childKey,
string const &  childName 
)
overridevirtual

Create a new constraint object as a child of this group.

Parameters
childKeythe catalog key of the new constraint object to create
childNamethe name of the new constraint object in the repository
Returns
the group child

Reimplemented from geos::WellControls.

◆ getFlowSolverName()

string const& geos::WellSolverBase::getFlowSolverName ( ) const
inline

getter for the name of the flow solver (used in UpdateState)

Returns
a string containing the name of the flow solver

Definition at line 87 of file WellSolverBase.hpp.

◆ getWell()

WellSolverBase& geos::WellSolverBase::getWell ( WellElementSubRegion const &  subRegion)

getter for the well associated to this subRegion

Parameters
subRegionthe well subRegion whose controls are requested
Returns
a reference to the well

◆ getWellControls() [1/2]

WellControls& geos::WellSolverBase::getWellControls ( WellElementSubRegion const &  subRegion)

getter for the well controls associated to this well subRegion

Parameters
subRegionthe well subRegion whose controls are requested
Returns
a reference to the controls

◆ getWellControls() [2/2]

WellControls const& geos::WellSolverBase::getWellControls ( WellElementSubRegion const &  subRegion) const

const getter for the well controls associated to this well subRegion

Parameters
subRegionthe well subRegion whose controls are requested
Returns
a reference to the const controls

◆ initializeWells()

virtual void geos::WellSolverBase::initializeWells ( DomainPartition domain,
real64 const &  time_n 
)
pure virtual

Initialize all the primary and secondary variables in all the wells.

Parameters
domainthe domain containing the well manager to access individual wells

◆ isThermal()

integer geos::WellSolverBase::isThermal ( ) const
inline

getter for iso/thermal switch

Returns
True if thermal

Definition at line 105 of file WellSolverBase.hpp.

◆ numDofPerResElement()

localIndex geos::WellSolverBase::numDofPerResElement ( ) const
inline

getter for the number of degrees of freedom per mesh element

Returns
the number of dofs

Definition at line 99 of file WellSolverBase.hpp.

◆ numDofPerWellElement()

localIndex geos::WellSolverBase::numDofPerWellElement ( ) const
inline

getter for the number of degrees of freedom per well element

Returns
the number of dofs

Definition at line 93 of file WellSolverBase.hpp.

◆ numFluidComponents()

virtual localIndex geos::WellSolverBase::numFluidComponents ( ) const
pure virtual

const getter for the number of fluid components

Returns
the number of fluid components

Implements geos::WellControls.

◆ numFluidPhases()

virtual localIndex geos::WellSolverBase::numFluidPhases ( ) const
pure virtual

Get the number of fluid phases.

Returns
the number of phases

Implements geos::WellControls.

◆ postInputInitialization()

virtual void geos::WellSolverBase::postInputInitialization ( )
overrideprotectedvirtual

This function provides capability to post process input values prior to any other initialization operations.

Reimplemented from geos::WellControls.

◆ resElementDofName()

virtual string geos::WellSolverBase::resElementDofName ( ) const
pure virtual

get the name of DOF defined on well elements

Returns
name of the DOF field used by derived solver type

Implements geos::WellControls.

◆ setFlowSolverName()

void geos::WellSolverBase::setFlowSolverName ( string const &  name)
inline

setter for the name of the flow solver (needed to use the flow kernels like UpdateFluid)

Parameters
namethe name of the flow solver

Definition at line 81 of file WellSolverBase.hpp.

◆ setKeepVariablesConstantDuringInitStep()

void geos::WellSolverBase::setKeepVariablesConstantDuringInitStep ( bool const  keepVariablesConstantDuringInitStep)
inline

Utility function to keep the well variables during a time step (used in poromechanics simulations)

Parameters
[in]keepVariablesConstantDuringInitStepflag to tell the solver to freeze its primary variables during a time step @detail This function is meant to be called by a specific task before/after the initialization step

Definition at line 328 of file WellSolverBase.hpp.

◆ setPerforationStatus()

void geos::WellSolverBase::setPerforationStatus ( real64 const &  time_n,
DomainPartition domain 
)

Open and close perfs based on user defined perf status table.

Parameters
time_nevaluation time
domainthe domain

◆ updateState()

virtual void geos::WellSolverBase::updateState ( DomainPartition domain)
overridevirtual

Recompute all dependent quantities from primary variables (including constitutive models)

Parameters
domainthe domain containing the mesh and fields

◆ updateSubRegionState()

virtual real64 geos::WellSolverBase::updateSubRegionState ( WellElementSubRegion subRegion)
pure virtual

Recompute all dependent quantities from primary variables (including constitutive models)

Parameters
elemManagerthe element region manager fields

◆ updateWellState()

virtual real64 geos::WellSolverBase::updateWellState ( MeshBody const &  meshBody,
ElementRegionManager const &  elemManager,
WellElementSubRegion subRegion 
)
pure virtual

Recompute all dependent quantities from primary variables (including constitutive models)

Parameters
elemManagerthe element region manager
subRegionthe well subRegion containing the well elements and their associated fields

Implements geos::WellControls.

◆ validateWellConstraints()

virtual void geos::WellSolverBase::validateWellConstraints ( real64 const &  time_n,
real64 const &  dt,
WellElementSubRegion const &  subRegion 
)
protectedpure virtual

Make sure that the well constraints are compatible.

Parameters
time_nthe time at the beginning of the time step
dtthe time step dt
subRegionthe well subRegion

Implements geos::WellControls.

◆ wellElementDofName()

virtual string geos::WellSolverBase::wellElementDofName ( ) const
pure virtual

get the name of DOF defined on well elements

Returns
name of the DOF field used by derived solver type

Implements geos::WellControls.


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