corrections to IWEL for pressure loss model and multiphase model

This commit is contained in:
Jostein Alvestad 2020-08-25 16:02:52 +02:00
parent 6eb9eb8414
commit 9a2410ddb2
2 changed files with 60 additions and 0 deletions

View File

@ -58,6 +58,18 @@ namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems
// Value 0 for regular wells // Value 0 for regular wells
// Value #segments for MS wells // Value #segments for MS wells
MSW_PlossMod = 81, // Pressure loss model for well segments
// = 0 for regular wells
// = 0 for MSW wells and HFA (WELSEGS item 6)
// = 1 for MSW wells and HF- (WELSEGS item 6)
// = 2 for MSW wells and H-- (WELSEGS item 6)
MSW_MulPhaseMod = 85, // Multiphase flow model for well segments - NOTE DF - model is not implemented yet!!
// = 0 for regular wells
// = 1 for MSW wells and HO (WELSEGS item 7)
// = 2 for MSW wells and DF (WELSEGS item 7)
CompOrd = 98, // Well's completion ordering scheme. CompOrd = 98, // Well's completion ordering scheme.
}; };
@ -97,6 +109,22 @@ namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems
// appearance in simulation model's // appearance in simulation model's
// COMPDAT keyword. // COMPDAT keyword.
}; };
enum PLossMod : int {
HFA = 0, // Components of pressure loss in MSW model for well (WELSEGS item 6)
// Hydrostatic, Friction, Acceleration
HF_ = 1, // Hydrostatic, Friction,
H__ = 2, // Hydrostatic
};
/*enum MPMod : int {
HO = 1, // Multiphase flow model for MSW well
// Homogeneous flow
DF = 2, // Drift flux model
};*/
} // Value } // Value
} // IWell } // IWell

View File

@ -186,6 +186,33 @@ namespace {
return 0; return 0;
} }
int PLossMod(const Opm::Well& well)
{
using CPD = ::Opm::WellSegments::CompPressureDrop;
using PLM = ::Opm::RestartIO::Helpers::
VectorItems::IWell::Value::PLossMod;
switch (well.getSegments().compPressureDrop()) {
case CPD::HFA: return PLM::HFA;
case CPD::HF_: return PLM::HF_;
case CPD::H__: return PLM::H__;
}
return 0;
}
/*int MPhaseMod(const Opm::Well& well)
{
using MPM = ::Opm::WellSegments::MultiPhaseModel;
using MUM = ::Opm::RestartIO::Helpers::
VectorItems::IWell::Value::MPMod;
switch (well.getSegments().multiPhaseModel()) {
case MPM::HO: return MUM::HO;
case MPM::DF: return MUM::DF;
}
return 0;
}*/
template <typename IWellArray> template <typename IWellArray>
void setCurrentControl(const Opm::Well& well, void setCurrentControl(const Opm::Well& well,
const int curr, const int curr,
@ -268,9 +295,14 @@ namespace {
// Multi-segmented well information // Multi-segmented well information
iWell[Ix::MsWID] = 0; // MS Well ID (0 or 1..#MS wells) iWell[Ix::MsWID] = 0; // MS Well ID (0 or 1..#MS wells)
iWell[Ix::NWseg] = 0; // Number of well segments iWell[Ix::NWseg] = 0; // Number of well segments
iWell[Ix::MSW_PlossMod] = 0; // Segment pressure loss model
iWell[Ix::MSW_MulPhaseMod] = 0; // Segment multi phase flow model
if (well.isMultiSegment()) { if (well.isMultiSegment()) {
iWell[Ix::MsWID] = static_cast<int>(msWellID); iWell[Ix::MsWID] = static_cast<int>(msWellID);
iWell[Ix::NWseg] = well.getSegments().size(); iWell[Ix::NWseg] = well.getSegments().size();
iWell[Ix::MSW_PlossMod] = PLossMod(well);
iWell[Ix::MSW_MulPhaseMod] = 1; // temporary solution - valid for HO - multiphase model - only implemented now
//iWell[Ix::MSW_MulPhaseMod] = MPhaseMod(well);
} }
iWell[Ix::CompOrd] = compOrder(well); iWell[Ix::CompOrd] = compOrder(well);