mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Merge pull request #5049 from bska/removed-dashed-line-in-report
Remove Dashed Lines Between Records in PRT File Reports
This commit is contained in:
@@ -94,9 +94,10 @@ void LogOutputHelper<Scalar>::
|
||||
cumulative(const std::size_t reportStepNum,
|
||||
std::function<bool(const std::string&)> isDefunct) const
|
||||
{
|
||||
this->beginCumulativeReport_();
|
||||
|
||||
std::vector<Scalar> tmp_values(WellCumDataType::numWCValues, 0.0);
|
||||
std::vector<std::string> tmp_names(WellCumDataType::numWCNames, "");
|
||||
this->outputCumulativeReport_(tmp_values, tmp_names);
|
||||
|
||||
const auto& st = summaryState_;
|
||||
for (const auto& gname : schedule_.groupNames()) {
|
||||
@@ -129,7 +130,7 @@ cumulative(const std::size_t reportStepNum,
|
||||
tmp_values[9] = get("GVIT"); // WellCumDataType::FluidResVolInj
|
||||
}
|
||||
|
||||
this->outputCumulativeReport_(tmp_values, tmp_names);
|
||||
this->outputCumulativeReportRecord_(tmp_values, tmp_names);
|
||||
}
|
||||
|
||||
for (const auto& wname : schedule_.wellNames(reportStepNum)) {
|
||||
@@ -225,8 +226,10 @@ cumulative(const std::size_t reportStepNum,
|
||||
tmp_values[8] = get("WGIT"); // WellCumDataType::GasInj
|
||||
tmp_values[9] = get("WVIT"); // WellCumDataType::FluidResVolInj
|
||||
|
||||
this->outputCumulativeReport_(tmp_values, tmp_names);
|
||||
this->outputCumulativeReportRecord_(tmp_values, tmp_names);
|
||||
}
|
||||
|
||||
this->endCumulativeReport_();
|
||||
}
|
||||
|
||||
template<class Scalar>
|
||||
@@ -336,9 +339,10 @@ void LogOutputHelper<Scalar>::
|
||||
injection(const std::size_t reportStepNum,
|
||||
std::function<bool(const std::string&)> isDefunct) const
|
||||
{
|
||||
this->beginInjectionReport_();
|
||||
|
||||
std::vector<Scalar> tmp_values(WellInjDataType::numWIValues, 0.0);
|
||||
std::vector<std::string> tmp_names(WellInjDataType::numWINames, "");
|
||||
this->outputInjectionReport_(tmp_values, tmp_names);
|
||||
|
||||
const auto& st = summaryState_;
|
||||
for (const auto& gname : schedule_.groupNames()) {
|
||||
@@ -362,7 +366,7 @@ injection(const std::size_t reportStepNum,
|
||||
tmp_values[5] = get("GVIR"); // WellInjDataType::FluidResVol
|
||||
}
|
||||
|
||||
this->outputInjectionReport_(tmp_values, tmp_names);
|
||||
this->outputInjectionReportRecord_(tmp_values, tmp_names);
|
||||
}
|
||||
|
||||
for (const auto& wname : schedule_.wellNames(reportStepNum)) {
|
||||
@@ -450,8 +454,10 @@ injection(const std::size_t reportStepNum,
|
||||
tmp_values[7] = get("WTHP"); // WellInjDataType::THP
|
||||
//tmp_values[8] = 0; // WellInjDataType::SteadyStateII
|
||||
|
||||
this->outputInjectionReport_(tmp_values, tmp_names);
|
||||
this->outputInjectionReportRecord_(tmp_values, tmp_names);
|
||||
}
|
||||
|
||||
this->endInjectionReport_();
|
||||
}
|
||||
|
||||
template<class Scalar>
|
||||
@@ -459,9 +465,10 @@ void LogOutputHelper<Scalar>::
|
||||
production(const std::size_t reportStepNum,
|
||||
std::function<bool(const std::string&)> isDefunct) const
|
||||
{
|
||||
this->beginProductionReport_();
|
||||
|
||||
std::vector<Scalar> tmp_values(WellProdDataType::numWPValues, 0.0);
|
||||
std::vector<std::string> tmp_names(WellProdDataType::numWPNames, "");
|
||||
this->outputProductionReport_(tmp_values, tmp_names);
|
||||
|
||||
const auto& st = summaryState_;
|
||||
for (const auto& gname : schedule_.groupNames()) {
|
||||
@@ -494,7 +501,7 @@ production(const std::size_t reportStepNum,
|
||||
tmp_values[8] = 0.0;
|
||||
}
|
||||
|
||||
this->outputProductionReport_(tmp_values, tmp_names);
|
||||
this->outputProductionReportRecord_(tmp_values, tmp_names);
|
||||
}
|
||||
|
||||
for (const auto& wname : schedule_.wellNames(reportStepNum)) {
|
||||
@@ -559,181 +566,237 @@ production(const std::size_t reportStepNum,
|
||||
tmp_values[8] = 0.0;
|
||||
}
|
||||
|
||||
this->outputProductionReport_(tmp_values, tmp_names);
|
||||
this->outputProductionReportRecord_(tmp_values, tmp_names);
|
||||
}
|
||||
|
||||
this->endProductionReport_();
|
||||
}
|
||||
|
||||
template <typename Scalar>
|
||||
void LogOutputHelper<Scalar>::beginCumulativeReport_() const
|
||||
{
|
||||
const auto unitType = this->eclState_.getUnits().getType();
|
||||
|
||||
std::ostringstream ss;
|
||||
|
||||
ss << "\n=================================================== CUMULATIVE PRODUCTION/INJECTION REPORT =========================================\n"
|
||||
<< ": WELL : LOCATION : WELL :CTRL: OIL : WATER : GAS : Prod : OIL : WATER : GAS : INJ :\n"
|
||||
<< ": NAME : (I,J,K) : TYPE :MODE: PROD : PROD : PROD : RES.VOL. : INJ : INJ : INJ : RES.VOL. :\n";
|
||||
|
||||
if (unitType == UnitSystem::UnitType::UNIT_TYPE_METRIC) {
|
||||
ss << ": : : : : MSCM : MSCM : MMSCM : MRCM : MSCM : MSCM : MMSCM : MRCM :\n";
|
||||
} else if (unitType == UnitSystem::UnitType::UNIT_TYPE_FIELD) {
|
||||
ss << ": : : : : MSTB : MSTB : MMSCF : MRB : MSTB : MSTB : MMSCF : MRB :\n";
|
||||
} else if (unitType == UnitSystem::UnitType::UNIT_TYPE_LAB) {
|
||||
ss << ": : : : : MSCC : MSCC : MMSCC : MRCC : MSCC : MSCC : MMSCC : MRCC :\n";
|
||||
}
|
||||
|
||||
ss << "====================================================================================================================================";
|
||||
|
||||
OpmLog::note(ss.str());
|
||||
}
|
||||
|
||||
template <typename Scalar>
|
||||
void LogOutputHelper<Scalar>::endCumulativeReport_() const
|
||||
{
|
||||
const auto ss = std::string { ":--------:-----------:--------:----:-----------:-----------:-----------:-----------:-----------:-----------:-----------:-----------:" };
|
||||
|
||||
OpmLog::note(ss);
|
||||
}
|
||||
|
||||
template<class Scalar>
|
||||
void LogOutputHelper<Scalar>::
|
||||
outputCumulativeReport_(const std::vector<Scalar>& wellCum,
|
||||
const std::vector<std::string>& wellCumNames) const
|
||||
outputCumulativeReportRecord_(const std::vector<Scalar>& wellCum,
|
||||
const std::vector<std::string>& wellCumNames) const
|
||||
{
|
||||
const UnitSystem& units = eclState_.getUnits();
|
||||
std::ostringstream ss;
|
||||
if (wellCumNames[WellCumDataType::WellName].empty()) {
|
||||
ss << "\n=================================================== CUMULATIVE PRODUCTION/INJECTION REPORT =========================================\n"
|
||||
<< ": WELL : LOCATION : WELL :CTRL: OIL : WATER : GAS : Prod : OIL : WATER : GAS : INJ :\n"
|
||||
<< ": NAME : (I,J,K) : TYPE :MODE: PROD : PROD : PROD : RES.VOL. : INJ : INJ : INJ : RES.VOL. :\n";
|
||||
if (units.getType() == UnitSystem::UnitType::UNIT_TYPE_METRIC) {
|
||||
ss << ": : : : : MSCM : MSCM : MMSCM : MRCM : MSCM : MSCM : MMSCM : MRCM :\n";
|
||||
} else if (units.getType() == UnitSystem::UnitType::UNIT_TYPE_FIELD) {
|
||||
ss << ": : : : : MSTB : MSTB : MMSCF : MRB : MSTB : MSTB : MMSCF : MRB :\n";
|
||||
} else if (units.getType() == UnitSystem::UnitType::UNIT_TYPE_LAB) {
|
||||
ss << ": : : : : MSCC : MSCC : MMSCC : MRCC : MSCC : MSCC : MMSCC : MRCC :\n";
|
||||
ss << ":--------:-----------:--------:----:-----------:-----------:-----------:-----------:------------:----------:-----------:-----------:";
|
||||
}
|
||||
ss << "====================================================================================================================================";
|
||||
|
||||
ss << std::right << std::fixed << std::setprecision(0) << ':'
|
||||
<< std::setw(8) << wellCumNames[WellCumDataType::WellName] << ':';
|
||||
|
||||
if (wellCum[WellCumDataType::WellLocationi] < 1) {
|
||||
ss << std::setw(11) << "" << ':';
|
||||
} else {
|
||||
if (wellCum[WellCumDataType::WellLocationi] < 1) {
|
||||
ss << std::right << std::fixed << std::setprecision(0) << ":" << std::setw (8)
|
||||
<< wellCumNames[WellCumDataType::WellName] << ":"
|
||||
<< std::setw(11) << "" << ":"
|
||||
<< std::setw(8) << wellCumNames[WellCumDataType::WellType] << ":"
|
||||
<< std::setw(4) << wellCumNames[WellCumDataType::WellCTRL] << ":"
|
||||
<< std::setprecision(1) << std::setw(11) << wellCum[WellCumDataType::OilProd] / 1000.0 << ":"
|
||||
<< std::setw(11) << wellCum[WellCumDataType::WaterProd] / 1000.0 << ":"
|
||||
<< std::setw(11)<< wellCum[WellCumDataType::GasProd] / 1000.0 << ":"
|
||||
<< std::setw(11) << wellCum[WellCumDataType::FluidResVolProd] / 1000.0 << ":"
|
||||
<< std::setw(11) << wellCum[WellCumDataType::OilInj] / 1000.0 << ":"
|
||||
<< std::setw(11) << wellCum[WellCumDataType::WaterInj] / 1000.0 << ":"
|
||||
<< std::setw(11) << wellCum[WellCumDataType::GasInj] / 1000.0 << ":"
|
||||
<< std::setw(11) << wellCum[WellCumDataType::FluidResVolInj] / 1000.0 << ": \n";
|
||||
} else {
|
||||
ss << std::right << std::fixed << std::setprecision(0) << ":"
|
||||
<< std::setw (8) << wellCumNames[WellCumDataType::WellName] << ":"
|
||||
<< std::setw(5) << wellCum[WellCumDataType::WellLocationi] << ","
|
||||
<< std::setw(5) << wellCum[WellCumDataType::WellLocationj] << ":"
|
||||
<< std::setw(8) << wellCumNames[WellCumDataType::WellType] << ":"
|
||||
<< std::setw(4) << wellCumNames[WellCumDataType::WellCTRL] << ":"
|
||||
<< std::setprecision(1) << std::setw(11) << wellCum[WellCumDataType::OilProd] / 1000.0 << ":"
|
||||
<< std::setw(11) << wellCum[WellCumDataType::WaterProd] / 1000.0 << ":"
|
||||
<< std::setw(11)<< wellCum[WellCumDataType::GasProd] / 1000.0 << ":"
|
||||
<< std::setw(11) << wellCum[WellCumDataType::FluidResVolProd] / 1000.0 << ":"
|
||||
<< std::setw(11) << wellCum[WellCumDataType::OilInj] / 1000.0 << ":"
|
||||
<< std::setw(11) << wellCum[WellCumDataType::WaterInj] / 1000.0 << ":"
|
||||
<< std::setw(11) << wellCum[WellCumDataType::GasInj] / 1000.0 << ":"
|
||||
<< std::setw(11) << wellCum[WellCumDataType::FluidResVolInj] / 1000.0 << ": \n";
|
||||
}
|
||||
ss << ":--------:-----------:--------:----:-----------:-----------:-----------:-----------:------------:----------:-----------:-----------:";
|
||||
ss << std::setw( 5) << wellCum[WellCumDataType::WellLocationi] << ','
|
||||
<< std::setw( 5) << wellCum[WellCumDataType::WellLocationj] << ':';
|
||||
}
|
||||
|
||||
auto scaledValue = [&wellCum](const typename WellCumDataType::WCId quantity)
|
||||
{
|
||||
// Unit M*
|
||||
return wellCum[quantity] / 1000.0;
|
||||
};
|
||||
|
||||
auto scaledGasValue = [&wellCum](const typename WellCumDataType::WCId quantity)
|
||||
{
|
||||
// Unit MM*
|
||||
return wellCum[quantity] / (1000.0 * 1000.0);
|
||||
};
|
||||
|
||||
ss << std::setw( 8) << wellCumNames[WellCumDataType::WCId::WellType] << ':'
|
||||
<< std::setw( 4) << wellCumNames[WellCumDataType::WCId::WellCTRL] << ':' << std::setprecision(1)
|
||||
<< std::setw(11) << scaledValue(WellCumDataType::WCId::OilProd) << ':'
|
||||
<< std::setw(11) << scaledValue(WellCumDataType::WCId::WaterProd) << ':'
|
||||
<< std::setw(11) << scaledGasValue(WellCumDataType::WCId::GasProd) << ':'
|
||||
<< std::setw(11) << scaledValue(WellCumDataType::WCId::FluidResVolProd) << ':'
|
||||
<< std::setw(11) << scaledValue(WellCumDataType::WCId::OilInj) << ':'
|
||||
<< std::setw(11) << scaledValue(WellCumDataType::WCId::WaterInj) << ':'
|
||||
<< std::setw(11) << scaledGasValue(WellCumDataType::WCId::GasInj) << ':'
|
||||
<< std::setw(11) << scaledValue(WellCumDataType::WCId::FluidResVolInj) << ':';
|
||||
|
||||
OpmLog::note(ss.str());
|
||||
}
|
||||
|
||||
template <typename Scalar>
|
||||
void LogOutputHelper<Scalar>::beginInjectionReport_() const
|
||||
{
|
||||
const auto unitType = this->eclState_.getUnits().getType();
|
||||
|
||||
std::ostringstream ss;
|
||||
ss << "\n=================================================== INJECTION REPORT ========================================\n"//===================== \n"
|
||||
<< ": WELL : LOCATION : CTRL : CTRL : CTRL : OIL : WATER : GAS : FLUID : BHP OR : THP OR :\n"// STEADY-ST II :\n"
|
||||
<< ": NAME : (I,J,K) : MODE : MODE : MODE : RATE : RATE : RATE : RES.VOL. : CON.PR.: BLK.PR.:\n";// OR POTENTIAL :\n";
|
||||
|
||||
if (unitType == UnitSystem::UnitType::UNIT_TYPE_METRIC) {
|
||||
ss << ": : : OIL : WAT : GAS : SCM/DAY : SCM/DAY : SCM/DAY : RCM/DAY : BARSA : BARSA :\n";// :\n";
|
||||
} else if (unitType == UnitSystem::UnitType::UNIT_TYPE_FIELD) {
|
||||
ss << ": : : OIL : WAT : GAS : STB/DAY : STB/DAY : MSCF/DAY : RB/DAY : PSIA : PSIA :\n";// :\n";
|
||||
} else if (unitType == UnitSystem::UnitType::UNIT_TYPE_LAB) {
|
||||
ss << ": : : OIL : WAT : GAS : SCC/HR : SCC/HR : SCC/HR : RCC/HR : ATMA : ATMA :\n";// :\n";
|
||||
}
|
||||
|
||||
ss << "=============================================================================================================";//=====================";
|
||||
|
||||
OpmLog::note(ss.str());
|
||||
}
|
||||
|
||||
template <typename Scalar>
|
||||
void LogOutputHelper<Scalar>::endInjectionReport_() const
|
||||
{
|
||||
const auto ss = std::string { ":--------:-----------:------:------:------:-----------:-----------:-----------:-----------:--------:--------:" };
|
||||
|
||||
OpmLog::note(ss);
|
||||
}
|
||||
|
||||
template<class Scalar>
|
||||
void LogOutputHelper<Scalar>::
|
||||
outputInjectionReportRecord_(const std::vector<Scalar>& wellInj,
|
||||
const std::vector<std::string>& wellInjNames) const
|
||||
{
|
||||
const auto isWellRecord =
|
||||
wellInj[WellProdDataType::WellLocationi] >= 1;
|
||||
|
||||
std::ostringstream ss;
|
||||
|
||||
ss << std::right << std::fixed << std::setprecision(0) << ':'
|
||||
<< std::setw(8) << wellInjNames[WellInjDataType::WellName] << ':';
|
||||
|
||||
if (! isWellRecord) {
|
||||
ss << std::setw(11) << "" << ':';
|
||||
} else {
|
||||
ss << std::setw( 5) << wellInj[WellInjDataType::WellLocationi] << ','
|
||||
<< std::setw( 5) << wellInj[WellInjDataType::WellLocationj] << ':';
|
||||
}
|
||||
|
||||
ss << std::setw( 6) << wellInjNames[WellInjDataType::CTRLModeOil] << ':'
|
||||
<< std::setw( 6) << wellInjNames[WellInjDataType::CTRLModeWat] << ':'
|
||||
<< std::setw( 6) << wellInjNames[WellInjDataType::CTRLModeGas] << ':' << std::setprecision(1)
|
||||
<< std::setw(11) << wellInj[WellInjDataType::OilRate] << ':'
|
||||
<< std::setw(11) << wellInj[WellInjDataType::WaterRate] << ':'
|
||||
<< std::setw(11) << wellInj[WellInjDataType::GasRate] << ':'
|
||||
<< std::setw(11) << wellInj[WellInjDataType::FluidResVol] << ':';
|
||||
|
||||
if (! isWellRecord) {
|
||||
ss << std::setw(8) << "" << ':' << std::setw(8) << "" << ':'; //wellInj[WellInjDataType::SteadyStateII] << std::setw(10) << "\n"
|
||||
} else {
|
||||
ss << std::setw(8) << wellInj[WellInjDataType::BHP] << ':'
|
||||
<< std::setw(8) << wellInj[WellInjDataType::THP] << ':'; //wellInj[WellInjDataType::SteadyStateII] << std::setw(10) << "\n"
|
||||
}
|
||||
|
||||
OpmLog::note(ss.str());
|
||||
}
|
||||
|
||||
template <typename Scalar>
|
||||
void LogOutputHelper<Scalar>::beginProductionReport_() const
|
||||
{
|
||||
const auto unitType = this->eclState_.getUnits().getType();
|
||||
|
||||
std::ostringstream ss;
|
||||
ss << "\n======================================================= PRODUCTION REPORT =======================================================\n"//=================== \n"
|
||||
<< ": WELL : LOCATION :CTRL: OIL : WATER : GAS : FLUID : WATER : GAS/OIL : WAT/GAS : BHP OR : THP OR :\n"// STEADY-ST PI :\n"
|
||||
<< ": NAME : (I,J,K) :MODE: RATE : RATE : RATE : RES.VOL. : CUT : RATIO : RATIO : CON.PR.: BLK.PR.:\n";// OR POTN OF PREF. PH:\n";
|
||||
|
||||
if (unitType == UnitSystem::UnitType::UNIT_TYPE_METRIC) {
|
||||
ss << ": : : : SCM/DAY : SCM/DAY : SCM/DAY : RCM/DAY : SCM/SCM : SCM/SCM : SCM/SCM : BARSA : BARSA :\n";// :\n";
|
||||
} else if (unitType == UnitSystem::UnitType::UNIT_TYPE_FIELD) {
|
||||
ss << ": : : : STB/DAY : STB/DAY : MSCF/DAY : RB/DAY : : MSCF/STB : STB/MSCF : PSIA : PSIA :\n";// :\n";
|
||||
} else if (unitType == UnitSystem::UnitType::UNIT_TYPE_LAB) {
|
||||
ss << ": : : : SCC/HR : SCC/HR : SCC/HR : RCC : SCC/SCC : SCC/SCC : SCC/SCC : ATMA : ATMA :\n";// :\n";
|
||||
}
|
||||
|
||||
ss << "=================================================================================================================================";//===================";
|
||||
|
||||
OpmLog::note(ss.str());
|
||||
}
|
||||
|
||||
template <typename Scalar>
|
||||
void LogOutputHelper<Scalar>::endProductionReport_() const
|
||||
{
|
||||
std::ostringstream ss;
|
||||
|
||||
ss << ':' << std::setfill ('-') << std::setw (9) << ':'
|
||||
<< std::setfill ('-') << std::setw (12) << ':'
|
||||
<< std::setfill ('-') << std::setw ( 5) << ':'
|
||||
<< std::setfill ('-') << std::setw (12) << ':'
|
||||
<< std::setfill ('-') << std::setw (12) << ':'
|
||||
<< std::setfill ('-') << std::setw (12) << ':'
|
||||
<< std::setfill ('-') << std::setw (12) << ':'
|
||||
<< std::setfill ('-') << std::setw (12) << ':'
|
||||
<< std::setfill ('-') << std::setw (11) << ':'
|
||||
<< std::setfill ('-') << std::setw (13) << ':'
|
||||
<< std::setfill ('-') << std::setw ( 9) << ':'
|
||||
<< std::setfill ('-') << std::setw ( 9) << ':';
|
||||
|
||||
OpmLog::note(ss.str());
|
||||
}
|
||||
|
||||
template<class Scalar>
|
||||
void LogOutputHelper<Scalar>::
|
||||
outputInjectionReport_(const std::vector<Scalar>& wellInj,
|
||||
const std::vector<std::string>& wellInjNames) const
|
||||
outputProductionReportRecord_(const std::vector<Scalar>& wellProd,
|
||||
const std::vector<std::string>& wellProdNames) const
|
||||
{
|
||||
const UnitSystem& units = eclState_.getUnits();
|
||||
std::ostringstream ss;
|
||||
if (wellInjNames[WellInjDataType::WellName].empty()) {
|
||||
ss << "\n=================================================== INJECTION REPORT ========================================\n"//===================== \n"
|
||||
<< ": WELL : LOCATION : CTRL : CTRL : CTRL : OIL : WATER : GAS : FLUID : BHP OR : THP OR :\n"// STEADY-ST II :\n"
|
||||
<< ": NAME : (I,J,K) : MODE : MODE : MODE : RATE : RATE : RATE : RES.VOL. : CON.PR.: BLK.PR.:\n";// OR POTENTIAL :\n";
|
||||
if (units.getType() == UnitSystem::UnitType::UNIT_TYPE_METRIC) {
|
||||
ss << ": : : OIL : WAT : GAS : SCM/DAY : SCM/DAY : SCM/DAY : RCM/DAY : BARSA : BARSA :\n";// :\n";
|
||||
} else if (units.getType() == UnitSystem::UnitType::UNIT_TYPE_FIELD) {
|
||||
ss << ": : : OIL : WAT : GAS : STB/DAY : STB/DAY : MSCF/DAY : RB/DAY : PSIA : PSIA :\n";// :\n";
|
||||
} else if (units.getType() == UnitSystem::UnitType::UNIT_TYPE_LAB) {
|
||||
ss << ": : : OIL : WAT : GAS : SCC/HR : SCC/HR : SCC/HR : RCC/HR : ATMA : ATMA :\n";// :\n";
|
||||
ss << ":--------:-----------:------:------:------:-----------:-----------:-----------:-----------:--------:--------:";//--------------------:";
|
||||
}
|
||||
ss << "==============================================================================================================";//=====================";
|
||||
} else {
|
||||
if (wellInj[WellInjDataType::WellLocationi] < 1) {
|
||||
ss << std::right << std::fixed << std::setprecision(0) << ":"
|
||||
<< std::setw (8) << wellInjNames[WellInjDataType::WellName] << ":"
|
||||
<< std::setw(11) << "" << ":"
|
||||
<< std::setw(6) << wellInjNames[WellInjDataType::CTRLModeOil] << ":"
|
||||
<< std::setw(6) << wellInjNames[WellInjDataType::CTRLModeWat] << ":"
|
||||
<< std::setw(6) << wellInjNames[WellInjDataType::CTRLModeGas] << ":"
|
||||
<< std::setprecision(1) << std::setw(11) << wellInj[WellInjDataType::OilRate] << ":"
|
||||
<< std::setw(11) << wellInj[WellInjDataType::WaterRate] << ":"
|
||||
<< std::setw(11)<< wellInj[WellInjDataType::GasRate] << ":"
|
||||
<< std::setw(11) << wellInj[WellInjDataType::FluidResVol] << ":"
|
||||
<< std::setw(8)<< "" << ":" << std::setw(8)<< "" << ": \n";//wellInj[WellInjDataType::SteadyStateII] << std::setw(10) << "\n"
|
||||
} else {
|
||||
ss << std::right << std::fixed << std::setprecision(0) << ":"
|
||||
<< std::setw (8) << wellInjNames[WellInjDataType::WellName] << ":"
|
||||
<< std::setw(5) << wellInj[WellInjDataType::WellLocationi] << ","
|
||||
<< std::setw(5) << wellInj[WellInjDataType::WellLocationj] << ":"
|
||||
<< std::setw(6) << wellInjNames[WellInjDataType::CTRLModeOil] << ":"
|
||||
<< std::setw(6) << wellInjNames[WellInjDataType::CTRLModeWat] << ":"
|
||||
<< std::setw(6) << wellInjNames[WellInjDataType::CTRLModeGas] << ":"
|
||||
<< std::setprecision(1) << std::setw(11) << wellInj[WellInjDataType::OilRate] << ":"
|
||||
<< std::setw(11) << wellInj[WellInjDataType::WaterRate] << ":"
|
||||
<< std::setw(11) << wellInj[WellInjDataType::GasRate] << ":"
|
||||
<< std::setw(11) << wellInj[WellInjDataType::FluidResVol] << ":"
|
||||
<< std::setw(8) << wellInj[WellInjDataType::BHP] << ":"
|
||||
<< std::setw(8)<< wellInj[WellInjDataType::THP] << ": \n";//wellInj[WellInjDataType::SteadyStateII] << std::setw(10) << "\n"
|
||||
}
|
||||
ss << ":--------:-----------:------:------:------:-----------:-----------:-----------:-----------:--------:--------:";//--------------------:";
|
||||
}
|
||||
OpmLog::note(ss.str());
|
||||
}
|
||||
const auto isWellRecord =
|
||||
wellProd[WellProdDataType::WellLocationi] >= 1;
|
||||
|
||||
template<class Scalar>
|
||||
void LogOutputHelper<Scalar>::
|
||||
outputProductionReport_(const std::vector<Scalar>& wellProd,
|
||||
const std::vector<std::string>& wellProdNames) const
|
||||
{
|
||||
const UnitSystem& units = eclState_.getUnits();
|
||||
std::ostringstream ss;
|
||||
if (wellProdNames[WellProdDataType::WellName].empty()) {
|
||||
ss << "\n======================================================= PRODUCTION REPORT =======================================================\n"//=================== \n"
|
||||
<< ": WELL : LOCATION :CTRL: OIL : WATER : GAS : FLUID : WATER : GAS/OIL : WAT/GAS : BHP OR : THP OR :\n"// STEADY-ST PI :\n"
|
||||
<< ": NAME : (I,J,K) :MODE: RATE : RATE : RATE : RES.VOL. : CUT : RATIO : RATIO : CON.PR.: BLK.PR.:\n";// OR POTN OF PREF. PH:\n";
|
||||
if (units.getType() == UnitSystem::UnitType::UNIT_TYPE_METRIC) {
|
||||
ss << ": : : : SCM/DAY : SCM/DAY : SCM/DAY : RCM/DAY : SCM/SCM : SCM/SCM : SCM/SCM : BARSA : BARSA :\n";// :\n";
|
||||
} else if (units.getType() == UnitSystem::UnitType::UNIT_TYPE_FIELD) {
|
||||
ss << ": : : : STB/DAY : STB/DAY : MSCF/DAY : RB/DAY : : MSCF/STB : STB/MSCF : PSIA : PSIA :\n";// :\n";
|
||||
} else if (units.getType() == UnitSystem::UnitType::UNIT_TYPE_LAB) {
|
||||
ss << ": : : : SCC/HR : SCC/HR : SCC/HR : RCC : SCC/SCC : SCC/SCC : SCC/SCC : ATMA : ATMA :\n";// :\n";
|
||||
}
|
||||
ss << "=================================================================================================================================";//===================";
|
||||
|
||||
ss << std::right << std::fixed << ':'
|
||||
<< std::setw(8) << wellProdNames[WellProdDataType::WellName] << ':';
|
||||
|
||||
if (! isWellRecord) {
|
||||
ss << std::setprecision(0) << std::setw(11) << "" << ':';
|
||||
} else {
|
||||
if (wellProd[WellProdDataType::WellLocationi] < 1) {
|
||||
ss << std::right << std::fixed << ":"
|
||||
<< std::setw(8) << wellProdNames[WellProdDataType::WellName] << ":"
|
||||
<< std::setprecision(0) << std::setw(11) << "" << ":"
|
||||
<< std::setw(4) << wellProdNames[WellProdDataType::CTRLMode] << ":"
|
||||
<< std::setprecision(1) << std::setw(11) << wellProd[WellProdDataType::OilRate] << ":"
|
||||
<< std::setw(11) << wellProd[WellProdDataType::WaterRate] << ":"
|
||||
<< std::setw(11)<< wellProd[WellProdDataType::GasRate] << ":"
|
||||
<< std::setw(11) << wellProd[WellProdDataType::FluidResVol] << std::setprecision(3) << ":"
|
||||
<< std::setw(11) << wellProd[WellProdDataType::WaterCut] << std::setprecision(2) << ":"
|
||||
<< std::setw(10) << wellProd[WellProdDataType::GasOilRatio] << std::setprecision(4) << ":"
|
||||
<< std::setw(12) << wellProd[WellProdDataType::WatGasRatio] << std::setprecision(1) << ":"
|
||||
<< std::setw(8) << "" << ":" << std::setw(8) << "" << ": \n";
|
||||
} else {
|
||||
ss << std::right << std::fixed << ":"
|
||||
<< std::setw (8) << wellProdNames[WellProdDataType::WellName] << ":"
|
||||
<< std::setprecision(0) << std::setw(5) << wellProd[WellProdDataType::WellLocationi] << ","
|
||||
<< std::setw(5) << wellProd[WellProdDataType::WellLocationj] << ":"
|
||||
<< std::setw(4) << wellProdNames[WellProdDataType::CTRLMode] << ":"
|
||||
<< std::setprecision(1) << std::setw(11) << wellProd[WellProdDataType::OilRate] << ":"
|
||||
<< std::setw(11) << wellProd[WellProdDataType::WaterRate] << ":"
|
||||
<< std::setw(11)<< wellProd[WellProdDataType::GasRate] << ":"
|
||||
<< std::setw(11) << wellProd[WellProdDataType::FluidResVol] << std::setprecision(3) << ":"
|
||||
<< std::setw(11) << wellProd[WellProdDataType::WaterCut] << std::setprecision(2) << ":"
|
||||
<< std::setw(10) << wellProd[WellProdDataType::GasOilRatio] << std::setprecision(4) << ":"
|
||||
<< std::setw(12) << wellProd[WellProdDataType::WatGasRatio] << std::setprecision(1) << ":"
|
||||
<< std::setw(8) << wellProd[WellProdDataType::BHP] << ":"
|
||||
<< std::setw(8) << wellProd[WellProdDataType::THP] << ": \n";
|
||||
}
|
||||
ss << ":"<< std::setfill ('-') << std::setw (9) << ":"
|
||||
<< std::setfill ('-') << std::setw (12) << ":"
|
||||
<< std::setfill ('-') << std::setw (5) << ":"
|
||||
<< std::setfill ('-') << std::setw (12) << ":"
|
||||
<< std::setfill ('-') << std::setw (12) << ":"
|
||||
<< std::setfill ('-') << std::setw (12) << ":"
|
||||
<< std::setfill ('-') << std::setw (12) << ":"
|
||||
<< std::setfill ('-') << std::setw (12) << ":"
|
||||
<< std::setfill ('-') << std::setw (11) << ":"
|
||||
<< std::setfill ('-') << std::setw (13) << ":"
|
||||
<< std::setfill ('-') << std::setw (9) << ":"
|
||||
<< std::setfill ('-') << std::setw (9) << ':';
|
||||
ss << std::setprecision(0)
|
||||
<< std::setw(5) << wellProd[WellProdDataType::WellLocationi] << ','
|
||||
<< std::setw(5) << wellProd[WellProdDataType::WellLocationj] << ':';
|
||||
}
|
||||
|
||||
ss << std::setw( 4) << wellProdNames[WellProdDataType::CTRLMode] << ':' << std::setprecision(1)
|
||||
<< std::setw(11) << wellProd[WellProdDataType::OilRate] << ':'
|
||||
<< std::setw(11) << wellProd[WellProdDataType::WaterRate] << ':'
|
||||
<< std::setw(11) << wellProd[WellProdDataType::GasRate] << ':'
|
||||
<< std::setw(11) << wellProd[WellProdDataType::FluidResVol] << ':' << std::setprecision(3)
|
||||
<< std::setw(11) << wellProd[WellProdDataType::WaterCut] << ':' << std::setprecision(2)
|
||||
<< std::setw(10) << wellProd[WellProdDataType::GasOilRatio] << ':' << std::setprecision(4)
|
||||
<< std::setw(12) << wellProd[WellProdDataType::WatGasRatio] << ':' << std::setprecision(1);
|
||||
|
||||
if (! isWellRecord) {
|
||||
ss << std::setw(8) << "" << ':' << std::setw(8) << "" << ':';
|
||||
} else {
|
||||
ss << std::setw(8) << wellProd[WellProdDataType::BHP] << ':'
|
||||
<< std::setw(8) << wellProd[WellProdDataType::THP] << ':';
|
||||
}
|
||||
|
||||
OpmLog::note(ss.str());
|
||||
}
|
||||
|
||||
|
||||
@@ -69,8 +69,10 @@ public:
|
||||
std::function<bool(const std::string&)> isDefunct) const;
|
||||
|
||||
private:
|
||||
void outputCumulativeReport_(const std::vector<Scalar>& wellCum,
|
||||
const std::vector<std::string>& wellCumNames) const;
|
||||
void beginCumulativeReport_() const;
|
||||
void endCumulativeReport_() const;
|
||||
void outputCumulativeReportRecord_(const std::vector<Scalar>& wellCum,
|
||||
const std::vector<std::string>& wellCumNames) const;
|
||||
|
||||
void outputRegionFluidInPlace_(std::unordered_map<Inplace::Phase, Scalar> oip,
|
||||
std::unordered_map<Inplace::Phase, Scalar> cip,
|
||||
@@ -81,11 +83,15 @@ private:
|
||||
void outputResvFluidInPlace_(std::unordered_map<Inplace::Phase, Scalar> cipr,
|
||||
const int reg) const;
|
||||
|
||||
void outputInjectionReport_(const std::vector<Scalar>& wellInj,
|
||||
const std::vector<std::string>& wellInjNames) const;
|
||||
void beginInjectionReport_() const;
|
||||
void endInjectionReport_() const;
|
||||
void outputInjectionReportRecord_(const std::vector<Scalar>& wellInj,
|
||||
const std::vector<std::string>& wellInjNames) const;
|
||||
|
||||
void outputProductionReport_(const std::vector<Scalar>& wellProd,
|
||||
const std::vector<std::string>& wellProdNames) const;
|
||||
void beginProductionReport_() const;
|
||||
void endProductionReport_() const;
|
||||
void outputProductionReportRecord_(const std::vector<Scalar>& wellProd,
|
||||
const std::vector<std::string>& wellProdNames) const;
|
||||
|
||||
void fipUnitConvert_(std::unordered_map<Inplace::Phase, Scalar>& fip) const;
|
||||
void pressureUnitConvert_(Scalar& pav) const;
|
||||
|
||||
@@ -99,13 +99,10 @@ BOOST_AUTO_TEST_CASE(Cumulative)
|
||||
: : : : : MSTB : MSTB : MMSCF : MRB : MSTB : MSTB : MMSCF : MRB :
|
||||
====================================================================================================================================
|
||||
: FIELD: : : : 1.0: 2.0: 3.0: 4.0: 5.0: 6.0: 7.0: 8.0:
|
||||
:--------:-----------:--------:----:-----------:-----------:-----------:-----------:------------:----------:-----------:-----------:
|
||||
: G1: : : : 9.0: 10.0: 11.0: 12.0: 13.0: 14.0: 15.0: 15.0:
|
||||
:--------:-----------:--------:----:-----------:-----------:-----------:-----------:------------:----------:-----------:-----------:
|
||||
: PROD: 10, 10: PROD:ORAT: 16.0: 17.0: 18.0: 19.0: 20.0: 21.0: 22.0: 23.0:
|
||||
:--------:-----------:--------:----:-----------:-----------:-----------:-----------:------------:----------:-----------:-----------:
|
||||
: INJ: 1, 1: INJ:GRAT: 24.0: 25.0: 26.0: 27.0: 28.0: 29.0: 30.0: 31.0:
|
||||
:--------:-----------:--------:----:-----------:-----------:-----------:-----------:------------:----------:-----------:-----------:
|
||||
:--------:-----------:--------:----:-----------:-----------:-----------:-----------:-----------:-----------:-----------:-----------:
|
||||
)";
|
||||
|
||||
std::stringstream str;
|
||||
@@ -124,38 +121,42 @@ BOOST_AUTO_TEST_CASE(Cumulative)
|
||||
|
||||
Opm::EclipseState eclState(deck);
|
||||
Opm::SummaryState st;
|
||||
|
||||
// Note: Cumulative gas values--e.g., FGPT--multiplied by an additional
|
||||
// factor of 1000, for a total multiplicative factor of one million, in
|
||||
// order to produce the expected balance sheet output in MM* units.
|
||||
constexpr auto fields = std::array {
|
||||
std::pair{"FOPT", 1.0},
|
||||
std::pair{"FWPT", 2.0},
|
||||
std::pair{"FGPT", 3.0},
|
||||
std::pair{"FGPT", 3.0e3},
|
||||
std::pair{"FVPT", 4.0},
|
||||
std::pair{"FOIT", 5.0},
|
||||
std::pair{"FWIT", 6.0},
|
||||
std::pair{"FGIT", 7.0},
|
||||
std::pair{"FGIT", 7.0e3},
|
||||
std::pair{"FVIT", 8.0},
|
||||
std::pair{"GOPT:G1", 9.0},
|
||||
std::pair{"GWPT:G1", 10.0},
|
||||
std::pair{"GGPT:G1", 11.0},
|
||||
std::pair{"GGPT:G1", 11.0e3},
|
||||
std::pair{"GVPT:G1", 12.0},
|
||||
std::pair{"GOIT:G1", 13.0},
|
||||
std::pair{"GWIT:G1", 14.0},
|
||||
std::pair{"GGIT:G1", 15.0},
|
||||
std::pair{"GGIT:G1", 15.0e3},
|
||||
std::pair{"GVIT:G1", 15.0},
|
||||
std::pair{"WOPT:PROD", 16.0},
|
||||
std::pair{"WWPT:PROD", 17.0},
|
||||
std::pair{"WGPT:PROD", 18.0},
|
||||
std::pair{"WGPT:PROD", 18.0e3},
|
||||
std::pair{"WVPT:PROD", 19.0},
|
||||
std::pair{"WOIT:PROD", 20.0},
|
||||
std::pair{"WWIT:PROD", 21.0},
|
||||
std::pair{"WGIT:PROD", 22.0},
|
||||
std::pair{"WGIT:PROD", 22.0e3},
|
||||
std::pair{"WVIT:PROD", 23.0},
|
||||
std::pair{"WOPT:INJ", 24.0},
|
||||
std::pair{"WWPT:INJ", 25.0},
|
||||
std::pair{"WGPT:INJ", 26.0},
|
||||
std::pair{"WGPT:INJ", 26.0e3},
|
||||
std::pair{"WVPT:INJ", 27.0},
|
||||
std::pair{"WOIT:INJ", 28.0},
|
||||
std::pair{"WWIT:INJ", 29.0},
|
||||
std::pair{"WGIT:INJ", 30.0},
|
||||
std::pair{"WGIT:INJ", 30.0e3},
|
||||
std::pair{"WVIT:INJ", 31.0},
|
||||
};
|
||||
for (const auto& p : fields) {
|
||||
@@ -333,11 +334,9 @@ BOOST_AUTO_TEST_CASE(Injection)
|
||||
: WELL : LOCATION : CTRL : CTRL : CTRL : OIL : WATER : GAS : FLUID : BHP OR : THP OR :
|
||||
: NAME : (I,J,K) : MODE : MODE : MODE : RATE : RATE : RATE : RES.VOL. : CON.PR.: BLK.PR.:
|
||||
: : : OIL : WAT : GAS : STB/DAY : STB/DAY : MSCF/DAY : RB/DAY : PSIA : PSIA :
|
||||
==============================================================================================================
|
||||
=============================================================================================================
|
||||
: FIELD: : : : : 1.0: 2.0: 3.0: 4.0: : :
|
||||
:--------:-----------:------:------:------:-----------:-----------:-----------:-----------:--------:--------:
|
||||
: G1: : : : : 5.0: 6.0: 7.0: 8.0: : :
|
||||
:--------:-----------:------:------:------:-----------:-----------:-----------:-----------:--------:--------:
|
||||
: INJ: 1, 1: : : GRAT: 9.0: 10.0: 11.0: 12.0: 13.0: 14.0:
|
||||
:--------:-----------:------:------:------:-----------:-----------:-----------:-----------:--------:--------:
|
||||
)";
|
||||
@@ -391,9 +390,7 @@ BOOST_AUTO_TEST_CASE(Production)
|
||||
: : : : STB/DAY : STB/DAY : MSCF/DAY : RB/DAY : : MSCF/STB : STB/MSCF : PSIA : PSIA :
|
||||
=================================================================================================================================
|
||||
: FIELD: : : 1.0: 2.0: 3.0: 4.0: 5.000: 6.00: 0.6667: : :
|
||||
:--------:-----------:----:-----------:-----------:-----------:-----------:-----------:----------:------------:--------:--------:
|
||||
: G1: : : 7.0: 8.0: 9.0: 10.0: 11.000: 12.00: 0.8889: : :
|
||||
:--------:-----------:----:-----------:-----------:-----------:-----------:-----------:----------:------------:--------:--------:
|
||||
: PROD: 10, 10:ORAT: 13.0: 14.0: 15.0: 16.0: 17.000: 18.00: 0.9333: 19.0: 20.0:
|
||||
:--------:-----------:----:-----------:-----------:-----------:-----------:-----------:----------:------------:--------:--------:
|
||||
)";
|
||||
|
||||
Reference in New Issue
Block a user