mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-01-27 16:16:28 -06:00
Remove EclProblemTpfa, folding all methods into EclProblem.
This commit is contained in:
parent
64474c0267
commit
c48770dc5f
@ -1438,6 +1438,14 @@ public:
|
|||||||
return pffDofData_.get(context.element(), toDofLocalIdx).transmissibility;
|
return pffDofData_.get(context.element(), toDofLocalIdx).transmissibility;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Direct access to the transmissibility between two elements.
|
||||||
|
*/
|
||||||
|
Scalar transmissibility(unsigned globalCenterElemIdx, unsigned globalElemIdx) const
|
||||||
|
{
|
||||||
|
return transmissibilities_.transmissibility(globalCenterElemIdx, globalElemIdx);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \copydoc EclTransmissiblity::diffusivity
|
* \copydoc EclTransmissiblity::diffusivity
|
||||||
*/
|
*/
|
||||||
@ -1534,6 +1542,19 @@ public:
|
|||||||
Scalar porosity(const Context& context, unsigned spaceIdx, unsigned timeIdx) const
|
Scalar porosity(const Context& context, unsigned spaceIdx, unsigned timeIdx) const
|
||||||
{
|
{
|
||||||
unsigned globalSpaceIdx = context.globalSpaceIndex(spaceIdx, timeIdx);
|
unsigned globalSpaceIdx = context.globalSpaceIndex(spaceIdx, timeIdx);
|
||||||
|
return this->porosity(globalSpaceIdx, timeIdx);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Direct indexed access to the porosity.
|
||||||
|
*
|
||||||
|
* For the EclProblem, this method is identical to referencePorosity(). The intensive
|
||||||
|
* quantities object may apply various multipliers (e.g. ones which model rock
|
||||||
|
* compressibility and water induced rock compaction) to it which depend on the
|
||||||
|
* current physical conditions.
|
||||||
|
*/
|
||||||
|
Scalar porosity(unsigned globalSpaceIdx, unsigned timeIdx) const
|
||||||
|
{
|
||||||
return this->referencePorosity_[timeIdx][globalSpaceIdx];
|
return this->referencePorosity_[timeIdx][globalSpaceIdx];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1547,11 +1568,11 @@ public:
|
|||||||
Scalar dofCenterDepth(const Context& context, unsigned spaceIdx, unsigned timeIdx) const
|
Scalar dofCenterDepth(const Context& context, unsigned spaceIdx, unsigned timeIdx) const
|
||||||
{
|
{
|
||||||
unsigned globalSpaceIdx = context.globalSpaceIndex(spaceIdx, timeIdx);
|
unsigned globalSpaceIdx = context.globalSpaceIndex(spaceIdx, timeIdx);
|
||||||
return dofCenterDepth(globalSpaceIdx);
|
return this->dofCenterDepth(globalSpaceIdx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Returns the depth of an degree of freedom [m]
|
* \brief Direct indexed acces to the depth of an degree of freedom [m]
|
||||||
*
|
*
|
||||||
* For ECL problems this is defined as the average of the depth of an element and is
|
* For ECL problems this is defined as the average of the depth of an element and is
|
||||||
* thus slightly different from the depth of an element's centroid.
|
* thus slightly different from the depth of an element's centroid.
|
||||||
@ -1561,7 +1582,6 @@ public:
|
|||||||
return this->simulator().vanguard().cellCenterDepth(globalSpaceIdx);
|
return this->simulator().vanguard().cellCenterDepth(globalSpaceIdx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \copydoc BlackoilProblem::rockCompressibility
|
* \copydoc BlackoilProblem::rockCompressibility
|
||||||
*/
|
*/
|
||||||
@ -1580,6 +1600,25 @@ public:
|
|||||||
return this->rockParams_[tableIdx].compressibility;
|
return this->rockParams_[tableIdx].compressibility;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Direct access to rock compressibility.
|
||||||
|
*
|
||||||
|
* While the above overload could be implemented in terms of this method,
|
||||||
|
* that would require always looking up the global space index, which
|
||||||
|
* is not always needed.
|
||||||
|
*/
|
||||||
|
Scalar rockCompressibility(unsigned globalSpaceIdx) const
|
||||||
|
{
|
||||||
|
if (this->rockParams_.empty())
|
||||||
|
return 0.0;
|
||||||
|
|
||||||
|
unsigned tableIdx = 0;
|
||||||
|
if (!this->rockTableIdx_.empty()) {
|
||||||
|
tableIdx = this->rockTableIdx_[globalSpaceIdx];
|
||||||
|
}
|
||||||
|
return this->rockParams_[tableIdx].compressibility;
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \copydoc BlackoilProblem::rockReferencePressure
|
* \copydoc BlackoilProblem::rockReferencePressure
|
||||||
*/
|
*/
|
||||||
@ -1598,6 +1637,25 @@ public:
|
|||||||
return this->rockParams_[tableIdx].referencePressure;
|
return this->rockParams_[tableIdx].referencePressure;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Direct access to rock reference pressure.
|
||||||
|
*
|
||||||
|
* While the above overload could be implemented in terms of this method,
|
||||||
|
* that would require always looking up the global space index, which
|
||||||
|
* is not always needed.
|
||||||
|
*/
|
||||||
|
Scalar rockReferencePressure(unsigned globalSpaceIdx) const
|
||||||
|
{
|
||||||
|
if (this->rockParams_.empty())
|
||||||
|
return 1e5;
|
||||||
|
|
||||||
|
unsigned tableIdx = 0;
|
||||||
|
if (!this->rockTableIdx_.empty()) {
|
||||||
|
tableIdx = this->rockTableIdx_[globalSpaceIdx];
|
||||||
|
}
|
||||||
|
return this->rockParams_[tableIdx].referencePressure;
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \copydoc FvBaseMultiPhaseProblem::materialLawParams
|
* \copydoc FvBaseMultiPhaseProblem::materialLawParams
|
||||||
*/
|
*/
|
||||||
@ -1606,11 +1664,13 @@ public:
|
|||||||
unsigned spaceIdx, unsigned timeIdx) const
|
unsigned spaceIdx, unsigned timeIdx) const
|
||||||
{
|
{
|
||||||
unsigned globalSpaceIdx = context.globalSpaceIndex(spaceIdx, timeIdx);
|
unsigned globalSpaceIdx = context.globalSpaceIndex(spaceIdx, timeIdx);
|
||||||
return materialLawParams(globalSpaceIdx);
|
return this->materialLawParams(globalSpaceIdx);
|
||||||
}
|
}
|
||||||
|
|
||||||
const MaterialLawParams& materialLawParams(unsigned globalDofIdx) const
|
const MaterialLawParams& materialLawParams(unsigned globalDofIdx) const
|
||||||
{ return materialLawManager_->materialLawParams(globalDofIdx); }
|
{
|
||||||
|
return materialLawManager_->materialLawParams(globalDofIdx);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Return the parameters for the energy storage law of the rock
|
* \brief Return the parameters for the energy storage law of the rock
|
||||||
@ -1953,14 +2013,21 @@ public:
|
|||||||
const Context& context,
|
const Context& context,
|
||||||
unsigned spaceIdx,
|
unsigned spaceIdx,
|
||||||
unsigned timeIdx) const
|
unsigned timeIdx) const
|
||||||
|
{
|
||||||
|
const unsigned globalDofIdx = context.globalSpaceIndex(spaceIdx, timeIdx);
|
||||||
|
source(rate, globalDofIdx, timeIdx);
|
||||||
|
}
|
||||||
|
|
||||||
|
void source(RateVector& rate,
|
||||||
|
unsigned globalDofIdx,
|
||||||
|
unsigned timeIdx) const
|
||||||
{
|
{
|
||||||
rate = 0.0;
|
rate = 0.0;
|
||||||
|
|
||||||
wellModel_.computeTotalRatesForDof(rate, context, spaceIdx, timeIdx);
|
wellModel_.computeTotalRatesForDof(rate, globalDofIdx, timeIdx);
|
||||||
|
|
||||||
// convert the source term from the total mass rate of the
|
// convert the source term from the total mass rate of the
|
||||||
// cell to the one per unit of volume as used by the model.
|
// cell to the one per unit of volume as used by the model.
|
||||||
const unsigned globalDofIdx = context.globalSpaceIndex(spaceIdx, timeIdx);
|
|
||||||
for (unsigned eqIdx = 0; eqIdx < numEq; ++ eqIdx) {
|
for (unsigned eqIdx = 0; eqIdx < numEq; ++ eqIdx) {
|
||||||
rate[eqIdx] /= this->model().dofTotalVolume(globalDofIdx);
|
rate[eqIdx] /= this->model().dofTotalVolume(globalDofIdx);
|
||||||
|
|
||||||
@ -1969,12 +2036,11 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (enableAquifers_)
|
if (enableAquifers_)
|
||||||
aquiferModel_.addToSource(rate, context, spaceIdx, timeIdx);
|
aquiferModel_.addToSource(rate, globalDofIdx, timeIdx);
|
||||||
|
|
||||||
// if requested, compensate systematic mass loss for cells which were "well
|
// if requested, compensate systematic mass loss for cells which were "well
|
||||||
// behaved" in the last time step
|
// behaved" in the last time step
|
||||||
if (enableDriftCompensation_) {
|
if (enableDriftCompensation_) {
|
||||||
const auto& intQuants = context.intensiveQuantities(spaceIdx, timeIdx);
|
|
||||||
const auto& simulator = this->simulator();
|
const auto& simulator = this->simulator();
|
||||||
const auto& model = this->model();
|
const auto& model = this->model();
|
||||||
|
|
||||||
@ -1982,11 +2048,11 @@ public:
|
|||||||
// current time step might be shorter than the last one
|
// current time step might be shorter than the last one
|
||||||
Scalar maxCompensation = 10.0*model.newtonMethod().tolerance();
|
Scalar maxCompensation = 10.0*model.newtonMethod().tolerance();
|
||||||
|
|
||||||
Scalar poro = intQuants.referencePorosity();
|
Scalar poro = this->porosity(globalDofIdx, timeIdx);
|
||||||
Scalar dt = simulator.timeStepSize();
|
Scalar dt = simulator.timeStepSize();
|
||||||
|
|
||||||
EqVector dofDriftRate = drift_[globalDofIdx];
|
EqVector dofDriftRate = drift_[globalDofIdx];
|
||||||
dofDriftRate /= dt*context.dofTotalVolume(spaceIdx, timeIdx);
|
dofDriftRate /= dt*model.dofTotalVolume(globalDofIdx);
|
||||||
|
|
||||||
// compute the weighted total drift rate
|
// compute the weighted total drift rate
|
||||||
Scalar totalDriftRate = 0.0;
|
Scalar totalDriftRate = 0.0;
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -23,12 +23,10 @@
|
|||||||
// modifications from standard
|
// modifications from standard
|
||||||
#include <opm/models/blackoil/blackoillocalresidualtpfa.hh>
|
#include <opm/models/blackoil/blackoillocalresidualtpfa.hh>
|
||||||
#include <opm/models/blackoil/blackoilintensivequantitiessimple.hh>
|
#include <opm/models/blackoil/blackoilintensivequantitiessimple.hh>
|
||||||
//#include <opm/models/discretization/common/fvbaselocalresidualtpfa.hh>
|
|
||||||
//#include <opm/models/discretization/common/fvbaseadlocallinearizertpfa.hh>
|
|
||||||
#include <opm/models/discretization/common/smallelementcontext.hh>
|
#include <opm/models/discretization/common/smallelementcontext.hh>
|
||||||
#include <opm/models/discretization/common/tpfalinearizer.hh>
|
#include <opm/models/discretization/common/tpfalinearizer.hh>
|
||||||
#include <ebos/eclfluxmoduletpfa.hh>
|
#include <ebos/eclfluxmoduletpfa.hh>
|
||||||
#include <ebos/eclproblemtpfa.hh>
|
#include <ebos/eclproblem.hh>
|
||||||
|
|
||||||
namespace Opm {
|
namespace Opm {
|
||||||
namespace Properties {
|
namespace Properties {
|
||||||
@ -42,16 +40,6 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace Opm {
|
|
||||||
namespace Properties {
|
|
||||||
template<class TypeTag>
|
|
||||||
struct Problem<TypeTag, TTag::EclFlowProblemTPFA> {
|
|
||||||
using type = EclProblemTPFA<TypeTag>;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
namespace Opm {
|
namespace Opm {
|
||||||
namespace Properties {
|
namespace Properties {
|
||||||
template<class TypeTag>
|
template<class TypeTag>
|
||||||
|
Loading…
Reference in New Issue
Block a user