GEOS
SinglePhaseWell.hpp
Go to the documentation of this file.
1 /*
2  * ------------------------------------------------------------------------------------------------------------
3  * SPDX-License-Identifier: LGPL-2.1-only
4  *
5  * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC
6  * Copyright (c) 2018-2024 TotalEnergies
7  * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University
8  * Copyright (c) 2023-2024 Chevron
9  * Copyright (c) 2019- GEOS/GEOSX Contributors
10  * All rights reserved
11  *
12  * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details.
13  * ------------------------------------------------------------------------------------------------------------
14  */
15 
20 #ifndef GEOS_PHYSICSSOLVERS_FLUIDFLOW_WELLS_SINGLEPHASEWELL_HPP_
21 #define GEOS_PHYSICSSOLVERS_FLUIDFLOW_WELLS_SINGLEPHASEWELL_HPP_
22 
23 #include "WellSolverBase.hpp"
24 
25 #include "constitutive/fluid/singlefluid/SingleFluidLayouts.hpp"
26 
27 namespace geos
28 {
29 
30 namespace dataRepository
31 {
32 class Group;
33 }
34 
35 namespace constitutive
36 {
37 class SingleFluidBase;
38 }
39 class WellElementSubRegion;
40 
47 {
48 public:
49 
50  using DerivOffset = constitutive::singlefluid::DerivativeOffsetC< 1 >;
56  SinglePhaseWell( const string & name,
57  Group * const parent );
58 
60  SinglePhaseWell() = delete;
61 
63  SinglePhaseWell( SinglePhaseWell const & ) = delete;
64 
67 
69  SinglePhaseWell & operator=( SinglePhaseWell const & ) = delete;
70 
73 
77  virtual ~SinglePhaseWell() override = default;
78 
83  static string catalogName() { return "SinglePhaseWell"; }
87  string getCatalogName() const override { return catalogName(); }
88 
89  virtual void registerDataOnMesh( Group & meshBodies ) override;
90 
98  virtual real64
99  calculateResidualNorm( real64 const & time_n,
100  real64 const & dt,
101  DomainPartition const & domain,
102  DofManager const & dofManager,
103  arrayView1d< real64 const > const & localRhs ) override;
104 
105  virtual bool
107  DofManager const & dofManager,
108  arrayView1d< real64 const > const & localSolution,
109  real64 const scalingFactor ) override;
110 
111  virtual void
112  applySystemSolution( DofManager const & dofManager,
113  arrayView1d< real64 const > const & localSolution,
114  real64 const scalingFactor,
115  real64 const dt,
116  DomainPartition & domain ) override;
117 
118  virtual void
120 
121  virtual void
122  implicitStepSetup( real64 const & time,
123  real64 const & dt,
124  DomainPartition & domain ) override;
125 
126  virtual void
128  real64 const & dt,
129  DomainPartition & domain ) override;
130 
133  virtual string wellElementDofName() const override { return viewKeyStruct::dofFieldString(); }
134 
135  virtual string resElementDofName() const override;
136 
137  virtual localIndex numFluidComponents() const override { return 1; }
138 
139  virtual localIndex numFluidPhases() const override { return 1; }
140 
146 
151  virtual void updateBHPForConstraint( WellElementSubRegion & subRegion );
152 
157  virtual void updateFluidModel( WellElementSubRegion & subRegion ) const;
158 
163  virtual void computePerforationRates( real64 const & time_n,
164  real64 const & dt, DomainPartition & domain ) override;
165 
170  virtual real64 updateSubRegionState( WellElementSubRegion & subRegion ) override;
171 
181  virtual void assembleFluxTerms( real64 const & time_n,
182  real64 const & dt,
183  DomainPartition & domain,
184  DofManager const & dofManager,
185  CRSMatrixView< real64, globalIndex const > const & localMatrix,
186  arrayView1d< real64 > const & localRhs ) override;
187 
195  virtual void assembleAccumulationTerms( real64 const & time_n,
196  real64 const & dt, DomainPartition & domain,
197  DofManager const & dofManager,
198  CRSMatrixView< real64, globalIndex const > const & localMatrix,
199  arrayView1d< real64 > const & localRhs ) override;
200 
209  DofManager const & dofManager,
210  CRSMatrixView< real64, globalIndex const > const & localMatrix,
211  arrayView1d< real64 > const & localRhs );
212 
222  virtual void assemblePressureRelations( real64 const & time_n,
223  real64 const & dt,
224  DomainPartition const & domain,
225  DofManager const & dofManager,
226  CRSMatrixView< real64, globalIndex const > const & localMatrix,
227  arrayView1d< real64 > const & localRhs ) override;
228 
230  {
231  static constexpr char const * dofFieldString() { return "singlePhaseWellVars"; }
232 
233  // control data (not registered on the mesh)
234  static constexpr char const * currentBHPString() { return "currentBHP"; }
235  static constexpr char const * dCurrentBHP_dPresString() { return "dCurrentBHP_dPres"; }
236 
237  static constexpr char const * currentVolRateString() { return "currentVolumetricRate"; }
238  static constexpr char const * dCurrentVolRate_dPresString() { return "dCurrentVolumetricRate_dPres"; }
239  static constexpr char const * dCurrentVolRate_dRateString() { return "dCurrentVolumetricRate_dRate"; }
240 
241  };
242 
243 protected:
244 
245  void printRates( real64 const & time_n,
246  real64 const & dt,
247  DomainPartition & domain ) override;
248 
251 
252 private:
253 
258  void initializeWells( DomainPartition & domain, real64 const & time_n, real64 const & dt ) override;
259 
266  virtual void validateWellConstraints( real64 const & time_n,
267  real64 const & dt,
268  WellElementSubRegion const & subRegion ) override;
269 
270 };
271 
272 } // namespace geos
273 
274 
275 #endif //GEOS_PHYSICSSOLVERS_FLUIDFLOW_WELLS_SINGLEPHASEWELL_HPP_
The DoFManager is responsible for allocating global dofs, constructing sparsity patterns,...
Definition: DofManager.hpp:44
Partition of the decomposed physical domain. It also manages the connexion information to its neighbo...
void assembleVolumeBalanceTerms(DomainPartition const &domain, DofManager const &dofManager, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs)
assembles the volume balance terms for all well elements
virtual real64 updateSubRegionState(WellElementSubRegion &subRegion) override
Recompute all dependent quantities from primary variables (including constitutive models) on the well...
virtual string resElementDofName() const override
get the name of DOF defined on well elements
virtual void updateVolRateForConstraint(WellElementSubRegion &subRegion)
Recompute the volumetric rate that are used in the well constraints.
virtual string wellElementDofName() const override
get the name of DOF defined on well elements
SinglePhaseWell(const string &name, Group *const parent)
main constructor for Group Objects
virtual ~SinglePhaseWell() override=default
default destructor
virtual void assemblePressureRelations(real64 const &time_n, real64 const &dt, DomainPartition const &domain, DofManager const &dofManager, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs) override
assembles the pressure relations at all connections between well elements except at the well head
static string catalogName()
name of the node manager in the object catalog
SinglePhaseWell & operator=(SinglePhaseWell const &)=delete
deleted assignment operator
SinglePhaseWell(SinglePhaseWell const &)=delete
deleted copy constructor
virtual void updateFluidModel(WellElementSubRegion &subRegion) const
Update fluid constitutive model state.
SinglePhaseWell(SinglePhaseWell &&)=default
default move constructor
integer m_allowNegativePressure
flag if negative pressure is allowed
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) override
assembles the flux terms for all connections between well elements
virtual localIndex numFluidComponents() const override
const getter for the number of fluid components
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) override
assembles the accumulation term for all the well elements
virtual void registerDataOnMesh(Group &meshBodies) override
Register wrappers that contain data on the mesh objects.
SinglePhaseWell & operator=(SinglePhaseWell &&)=delete
deleted move operator
string getCatalogName() const override
virtual void computePerforationRates(real64 const &time_n, real64 const &dt, DomainPartition &domain) override
Recompute the perforation rates for all the wells.
virtual localIndex numFluidPhases() const override
Get the number of fluid phases.
virtual void updateBHPForConstraint(WellElementSubRegion &subRegion)
Recompute the BHP pressure that is used in the well constraints.
SinglePhaseWell()=delete
deleted default constructor
This class describes a collection of local well elements and perforations.
virtual void implicitStepComplete(real64 const &time, real64 const &dt, DomainPartition &domain) override
perform cleanup for implicit timestep
virtual void resetStateToBeginningOfStep(DomainPartition &domain) override
reset state of physics back to the beginning of the step.
virtual void implicitStepSetup(real64 const &time, real64 const &dt, DomainPartition &domain) override
function to perform setup for implicit timestep
virtual void applySystemSolution(DofManager const &dofManager, arrayView1d< real64 const > const &localSolution, real64 const scalingFactor, real64 const dt, DomainPartition &domain) override
Function to apply the solution vector to the state.
virtual real64 calculateResidualNorm(real64 const &time_n, real64 const &dt, DomainPartition const &domain, DofManager const &dofManager, arrayView1d< real64 const > const &localRhs) override
calculate the norm of the global system residual
virtual bool checkSystemSolution(DomainPartition &domain, DofManager const &dofManager, arrayView1d< real64 const > const &localSolution, real64 const scalingFactor) override
Function to check system solution for physical consistency and constraint violation.
ArrayView< T, 1 > arrayView1d
Alias for 1D array view.
Definition: DataTypes.hpp:180
LvArray::CRSMatrixView< T, COL_INDEX, localIndex const, LvArray::ChaiBuffer > CRSMatrixView
Alias for CRS Matrix View.
Definition: DataTypes.hpp:310
double real64
64-bit floating point type.
Definition: DataTypes.hpp:99
GEOS_LOCALINDEX_TYPE localIndex
Local index type (for indexing objects within an MPI partition).
Definition: DataTypes.hpp:85
std::int32_t integer
Signed integer type.
Definition: DataTypes.hpp:82