diff --git a/ebos/ecloutputblackoilmodule.hh b/ebos/ecloutputblackoilmodule.hh index bf3e5f8fd..e1126ecfb 100644 --- a/ebos/ecloutputblackoilmodule.hh +++ b/ebos/ecloutputblackoilmodule.hh @@ -94,11 +94,10 @@ class EclOutputBlackOilModule OilInPlaceInLiquidPhase = 3, //OIPL OilInPlaceInGasPhase = 4, //OIPG GasInPlaceInLiquidPhase = 5, //GIPL - GasInPlaceInGasPhase = 6, //GIPG + GasInPlaceInGasPhase = 6, //GIPG PoreVolume = 7, //PV - HydroCarbonPoreVolumeAveragedPressure = 8 //PAV }; - static const int numFipValues = HydroCarbonPoreVolumeAveragedPressure + 1 ; + static const int numFipValues = PoreVolume + 1 ; }; public: @@ -166,6 +165,12 @@ public: fip_[i].resize(bufferSize, 0.0); } } + if (!substep || summaryConfig.hasKeyword("FPR") || summaryConfig.hasKeyword("FPRP") || summaryConfig.hasKeyword("RPR")) { + fip_[FIPDataType::PoreVolume].resize(bufferSize, 0.0); + pvHydrocarbon_.resize(bufferSize, 0.0); + pPv_.resize(bufferSize, 0.0); + pPvHydrocarbon_.resize(bufferSize, 0.0); + } if (!substep) { // Output the same as legacy @@ -495,9 +500,27 @@ public: const double pv = elemCtx.simulator().model().dofTotalVolume(globalDofIdx) * intQuants.porosity().value(); - if (fip_[FIPDataType::PoreVolume].size() > 0) + + if (pPvHydrocarbon_.size() > 0 && pPv_.size() > 0) { + assert(pvHydrocarbon_.size() == pPvHydrocarbon_.size()); + assert(fip_[FIPDataType::PoreVolume].size() == pPv_.size() ); + fip_[FIPDataType::PoreVolume][globalDofIdx] = pv; + Scalar hydrocarbon = 0.0; + if (FluidSystem::phaseIsActive(oilPhaseIdx)) + hydrocarbon += Toolbox::value(fs.saturation(oilPhaseIdx)); + if (FluidSystem::phaseIsActive(gasPhaseIdx)) + hydrocarbon += Toolbox::value(fs.saturation(gasPhaseIdx)); + + pvHydrocarbon_[globalDofIdx] = pv * hydrocarbon; + + if (FluidSystem::phaseIsActive(oilPhaseIdx)) { + pPv_[globalDofIdx] = Toolbox::value(fs.pressure(oilPhaseIdx)) * pv; + pPvHydrocarbon_[globalDofIdx] = pPv_[globalDofIdx] * hydrocarbon; + } + } + Scalar fip[FluidSystem::numPhases]; for (unsigned phase = 0; phase < FluidSystem::numPhases; ++phase) { if (!FluidSystem::phaseIsActive(phase)) { @@ -509,24 +532,24 @@ public: fip[phase] = b * s * pv; } - if (FluidSystem::phaseIsActive(FluidSystem::oilPhaseIdx) && fip_[FIPDataType::OilInPlace].size() > 0) - fip_[FIPDataType::OilInPlace][globalDofIdx] = fip[FluidSystem::oilPhaseIdx]; - if (FluidSystem::phaseIsActive(FluidSystem::gasPhaseIdx) && fip_[FIPDataType::GasInPlace].size() > 0) - fip_[FIPDataType::GasInPlace][globalDofIdx] = fip[FluidSystem::gasPhaseIdx]; - if (FluidSystem::phaseIsActive(FluidSystem::waterPhaseIdx) && fip_[FIPDataType::WaterInPlace].size() > 0) - fip_[FIPDataType::WaterInPlace][globalDofIdx] = fip[FluidSystem::waterPhaseIdx]; + if (FluidSystem::phaseIsActive(oilPhaseIdx) && fip_[FIPDataType::OilInPlace].size() > 0) + fip_[FIPDataType::OilInPlace][globalDofIdx] = fip[oilPhaseIdx]; + if (FluidSystem::phaseIsActive(gasPhaseIdx) && fip_[FIPDataType::GasInPlace].size() > 0) + fip_[FIPDataType::GasInPlace][globalDofIdx] = fip[gasPhaseIdx]; + if (FluidSystem::phaseIsActive(waterPhaseIdx) && fip_[FIPDataType::WaterInPlace].size() > 0) + fip_[FIPDataType::WaterInPlace][globalDofIdx] = fip[waterPhaseIdx]; // Store the pure oil and gas FIP - if (FluidSystem::phaseIsActive(FluidSystem::oilPhaseIdx) && fip_[FIPDataType::OilInPlaceInLiquidPhase].size() > 0) - fip_[FIPDataType::OilInPlaceInLiquidPhase][globalDofIdx] = fip[FluidSystem::oilPhaseIdx]; + if (FluidSystem::phaseIsActive(oilPhaseIdx) && fip_[FIPDataType::OilInPlaceInLiquidPhase].size() > 0) + fip_[FIPDataType::OilInPlaceInLiquidPhase][globalDofIdx] = fip[oilPhaseIdx]; - if (FluidSystem::phaseIsActive(FluidSystem::gasPhaseIdx) && fip_[FIPDataType::GasInPlaceInGasPhase].size() > 0) - fip_[FIPDataType::GasInPlaceInGasPhase][globalDofIdx] = fip[FluidSystem::gasPhaseIdx]; + if (FluidSystem::phaseIsActive(gasPhaseIdx) && fip_[FIPDataType::GasInPlaceInGasPhase].size() > 0) + fip_[FIPDataType::GasInPlaceInGasPhase][globalDofIdx] = fip[gasPhaseIdx]; - if (FluidSystem::phaseIsActive(FluidSystem::oilPhaseIdx) && FluidSystem::phaseIsActive(FluidSystem::gasPhaseIdx)) { + if (FluidSystem::phaseIsActive(oilPhaseIdx) && FluidSystem::phaseIsActive(gasPhaseIdx)) { // Gas dissolved in oil and vaporized oil - Scalar gipl = Toolbox::value(fs.Rs()) * fip[FluidSystem::oilPhaseIdx]; - Scalar oipg = Toolbox::value(fs.Rv()) * fip[FluidSystem::gasPhaseIdx]; + Scalar gipl = Toolbox::value(fs.Rs()) * fip[oilPhaseIdx]; + Scalar oipg = Toolbox::value(fs.Rv()) * fip[gasPhaseIdx]; if (fip_[FIPDataType::GasInPlaceInGasPhase].size() > 0) fip_[FIPDataType::GasInPlaceInLiquidPhase][globalDofIdx] = gipl; if (fip_[FIPDataType::OilInPlaceInGasPhase].size() > 0) @@ -620,7 +643,7 @@ public: return; if ( oilPressure_.size() > 0 ) { - sol.insert( "PRESSURE", Opm::UnitSystem::measure::pressure, oilPressure_, Opm::data::TargetType::RESTART_SOLUTION); + sol.insert( "PRESSURE", Opm::UnitSystem::measure::pressure, std::move(oilPressure_), Opm::data::TargetType::RESTART_SOLUTION); } if ( temperature_.size() > 0 ) { @@ -628,10 +651,10 @@ public: } if( FluidSystem::phaseIsActive(waterPhaseIdx) && saturation_[waterPhaseIdx].size() > 0 ) { - sol.insert( "SWAT", Opm::UnitSystem::measure::identity, saturation_[waterPhaseIdx], Opm::data::TargetType::RESTART_SOLUTION ); + sol.insert( "SWAT", Opm::UnitSystem::measure::identity, std::move(saturation_[waterPhaseIdx]), Opm::data::TargetType::RESTART_SOLUTION ); } if( FluidSystem::phaseIsActive(gasPhaseIdx) && saturation_[gasPhaseIdx].size() > 0) { - sol.insert( "SGAS", Opm::UnitSystem::measure::identity, saturation_[gasPhaseIdx], Opm::data::TargetType::RESTART_SOLUTION ); + sol.insert( "SGAS", Opm::UnitSystem::measure::identity, std::move(saturation_[gasPhaseIdx]), Opm::data::TargetType::RESTART_SOLUTION ); } if ( gasDissolutionFactor_.size() > 0 ) { @@ -725,11 +748,10 @@ public: Opm::data::TargetType::SUMMARY); } } - } // write Fluid In Place to output log - void outputFIPLog() { + void outputFIPLog(std::map<std::string, double>& miscSummaryData, std::map<std::string, std::vector<double>>& regionData, const bool substep) { const auto& comm = simulator_.gridView().comm(); size_t ntFip = *std::max_element(fipnum_.begin(), fipnum_.end()); @@ -753,40 +775,76 @@ public: } // compute the hydrocarbon averaged pressure over the field. - totalValues[FIPDataType::HydroCarbonPoreVolumeAveragedPressure] = FipPav_(-1); + Scalar totalPoreVolumeAveragedPressure; + Scalar totalHydroCarbonPoreVolumeAveragedPressure; + pressureAverage_(-1, totalPoreVolumeAveragedPressure, totalHydroCarbonPoreVolumeAveragedPressure); - // convert units and output field values + // compute the hydrocarbon averaged pressure over the regions. + ScalarBuffer regPoreVolumeAveragedPressure(ntFip,0.0); + ScalarBuffer regHydroCarbonPoreVolumeAveragedPressure(ntFip,0.0); + for (size_t reg = 0; reg < ntFip; ++reg ) { + pressureAverage_(reg + 1, regPoreVolumeAveragedPressure[reg], regHydroCarbonPoreVolumeAveragedPressure[reg]); + } + + // output on io rank // the original Fip values are stored on the first step // TODO: Store initial Fip in the init file and restore them // and use them here. - if ( isIORank_() ) { - FIPUnitConvert_(simulator_.gridManager().eclState().getUnits(), totalValues); - if (origTotalValues_.empty()) - origTotalValues_ = totalValues; - - outputRegionFluidInPlace_(origTotalValues_, totalValues, simulator_.gridManager().eclState().getUnits(), 0); - } - - // Do the same on each region. - for (size_t reg = 0; reg < ntFip; ++reg ) { - ScalarBuffer tmp(FIPDataType::numFipValues,0.0); + const Opm::SummaryConfig summaryConfig = simulator_.gridManager().summaryConfig(); + if ( isIORank_()) { + // Field summary output for (int i = 0; i<FIPDataType::numFipValues; i++) { - tmp[i] = regionValues[i][reg]; + std::string key = "F" + stringOfEnumIndex_(i); + if (summaryConfig.hasKeyword(key)) + miscSummaryData[key] = totalValues[i]; } - tmp[FIPDataType::HydroCarbonPoreVolumeAveragedPressure] = FipPav_(reg+1); + if (summaryConfig.hasKeyword("FOE") && !origTotalValues_.empty()) + miscSummaryData["FOE"] = totalValues[FIPDataType::OilInPlace] / origTotalValues_[FIPDataType::OilInPlace]; - if ( isIORank_() ) { + if (summaryConfig.hasKeyword("FPR")) + miscSummaryData["FPR"] = totalHydroCarbonPoreVolumeAveragedPressure; - ScalarBuffer tmpO(FIPDataType::numFipValues,0.0); - for (int i = 0; i<FIPDataType::numFipValues; i++) { - tmpO[i] = origRegionValues_[i][reg]; + if (summaryConfig.hasKeyword("FPRP")) + miscSummaryData["FPRP"] = totalPoreVolumeAveragedPressure; + + // Region summary output + for (int i = 0; i<FIPDataType::numFipValues; i++) { + std::string key = "R" + stringOfEnumIndex_(i); + if (summaryConfig.hasKeyword(key)) + regionData[key] = regionValues[i]; + } + if (summaryConfig.hasKeyword("RPR")) + regionData["RPR"] = regHydroCarbonPoreVolumeAveragedPressure; + + if (summaryConfig.hasKeyword("FPRP")) + regionData["FPRP"] = regPoreVolumeAveragedPressure; + + // Output to log + if (!substep) { + + FIPUnitConvert_(totalValues); + if (origTotalValues_.empty()) + origTotalValues_ = totalValues; + + pressureUnitConvert_(totalHydroCarbonPoreVolumeAveragedPressure); + outputRegionFluidInPlace_(origTotalValues_, totalValues, totalHydroCarbonPoreVolumeAveragedPressure, 0); + for (size_t reg = 0; reg < ntFip; ++reg ) { + ScalarBuffer tmpO(FIPDataType::numFipValues,0.0); + for (int i = 0; i<FIPDataType::numFipValues; i++) { + tmpO[i] = origRegionValues_[i][reg]; + } + FIPUnitConvert_(tmpO); + ScalarBuffer tmp(FIPDataType::numFipValues,0.0); + for (int i = 0; i<FIPDataType::numFipValues; i++) { + tmp[i] = regionValues[i][reg]; + } + FIPUnitConvert_(tmp); + pressureUnitConvert_(regHydroCarbonPoreVolumeAveragedPressure[reg]); + outputRegionFluidInPlace_(tmpO, tmp, regHydroCarbonPoreVolumeAveragedPressure[reg], reg + 1); } - - FIPUnitConvert_(simulator_.gridManager().eclState().getUnits(), tmp); - FIPUnitConvert_(simulator_.gridManager().eclState().getUnits(), tmpO); - outputRegionFluidInPlace_(tmpO, tmp, simulator_.gridManager().eclState().getUnits() , reg + 1); } } + } void setRestart(const Opm::data::Solution& sol, unsigned elemIdx, unsigned globalDofIndex) @@ -986,30 +1044,23 @@ private: return totals; } - // computes the hydrocarbon volume weighted averaged pressure - // of a region (reg) + // computes the pore volume weighted averaged pressure + // of a region (reg) and the hydrocarbon volume weighted average // if reg == -1, the field average is computed. - Scalar FipPav_(int reg) + void pressureAverage_(int reg, Scalar& poreVolumeAveragedPressure, Scalar& hydroCarbonPoreVolumeAveragedPressure) { Scalar pPvSum = 0.0; Scalar pvSum = 0.0; Scalar pPvHydrocarbonSum = 0.0; Scalar pvHydrocarbonSum = 0.0; - size_t numElem = oilPressure_.size(); + size_t numElem = pPv_.size(); for (size_t elem = 0; elem < numElem; ++elem) { - if(static_cast<int>(fipnum_[elem]) == reg || -1 == reg) + if(static_cast<int>(fipnum_[elem]) == reg || (-1 == reg && fipnum_[elem] > 0) ) { - Scalar hydrocarbon = 0.0; - if (FluidSystem::phaseIsActive(oilPhaseIdx)) - hydrocarbon += saturation_[oilPhaseIdx][elem]; - if (FluidSystem::phaseIsActive(gasPhaseIdx)) - hydrocarbon += saturation_[gasPhaseIdx][elem]; - - Scalar pPv = oilPressure_[elem] * fip_[FIPDataType::PoreVolume][elem]; - pPvSum += pPv; + pPvSum += pPv_[elem];; pvSum += fip_[FIPDataType::PoreVolume][elem]; - pPvHydrocarbonSum += pPv * hydrocarbon; - pvHydrocarbonSum += fip_[FIPDataType::PoreVolume][elem] * hydrocarbon; + pPvHydrocarbonSum += pPvHydrocarbon_[elem]; + pvHydrocarbonSum += pvHydrocarbon_[elem]; } } const auto& comm = simulator_.gridView().comm(); @@ -1018,16 +1069,18 @@ private: pPvHydrocarbonSum = comm.sum(pPvHydrocarbonSum); pvHydrocarbonSum = comm.sum(pvHydrocarbonSum); - if (pvHydrocarbonSum > 1e-10) - return pPvHydrocarbonSum / pvHydrocarbonSum; + poreVolumeAveragedPressure = pPvSum / pvSum; + // use porevolume weighted pressure if no hydrocarbon + hydroCarbonPoreVolumeAveragedPressure = poreVolumeAveragedPressure; + + if (pvHydrocarbonSum > 1e-10) + hydroCarbonPoreVolumeAveragedPressure = pPvHydrocarbonSum / pvHydrocarbonSum; - // return the porevolume weighted pressure if no hydrocarbon - return pPvSum / pvSum;; } - void FIPUnitConvert_(const Opm::UnitSystem& units, - ScalarBuffer& fip) + void FIPUnitConvert_(ScalarBuffer& fip) { + const Opm::UnitSystem& units = simulator_.gridManager().eclState().getUnits(); if (units.getType() == Opm::UnitSystem::UnitType::UNIT_TYPE_FIELD) { fip[FIPDataType::WaterInPlace] = Opm::unit::convert::to(fip[FIPDataType::WaterInPlace], Opm::unit::stb); fip[FIPDataType::OilInPlace] = Opm::unit::convert::to(fip[FIPDataType::OilInPlace], Opm::unit::stb); @@ -1037,18 +1090,32 @@ private: fip[FIPDataType::GasInPlaceInLiquidPhase] = Opm::unit::convert::to(fip[FIPDataType::GasInPlaceInLiquidPhase], 1000*Opm::unit::cubic(Opm::unit::feet)); fip[FIPDataType::GasInPlaceInGasPhase] = Opm::unit::convert::to(fip[FIPDataType::GasInPlaceInGasPhase], 1000*Opm::unit::cubic(Opm::unit::feet)); fip[FIPDataType::PoreVolume] = Opm::unit::convert::to(fip[FIPDataType::PoreVolume], Opm::unit::stb); - fip[FIPDataType::HydroCarbonPoreVolumeAveragedPressure] = Opm::unit::convert::to(fip[FIPDataType::HydroCarbonPoreVolumeAveragedPressure], Opm::unit::psia); } else if (units.getType() == Opm::UnitSystem::UnitType::UNIT_TYPE_METRIC) { - fip[FIPDataType::HydroCarbonPoreVolumeAveragedPressure] = Opm::unit::convert::to(fip[FIPDataType::HydroCarbonPoreVolumeAveragedPressure], Opm::unit::barsa); + // nothing to do } else { OPM_THROW(std::runtime_error, "Unsupported unit type for fluid in place output."); } } - void outputRegionFluidInPlace_(const ScalarBuffer& oip, const ScalarBuffer& cip, const Opm::UnitSystem& units, const int reg) + void pressureUnitConvert_(Scalar& pav) { + const Opm::UnitSystem& units = simulator_.gridManager().eclState().getUnits(); + if (units.getType() == Opm::UnitSystem::UnitType::UNIT_TYPE_FIELD) { + pav = Opm::unit::convert::to(pav, Opm::unit::psia); + } else if (units.getType() == Opm::UnitSystem::UnitType::UNIT_TYPE_METRIC) { + pav = Opm::unit::convert::to(pav, Opm::unit::barsa); + } + else { + OPM_THROW(std::runtime_error, "Unsupported unit type for fluid in place output."); + } + } + + + + void outputRegionFluidInPlace_(const ScalarBuffer& oip, const ScalarBuffer& cip, const Scalar& pav, const int reg) { + const Opm::UnitSystem& units = simulator_.gridManager().eclState().getUnits(); std::ostringstream ss; if (!reg) { ss << " ===================================================\n" @@ -1059,9 +1126,9 @@ private: << std::setw(2) << reg << " :\n"; } if (units.getType() == Opm::UnitSystem::UnitType::UNIT_TYPE_METRIC) { - ss << " : PAV =" << std::setw(14) << cip[FIPDataType::HydroCarbonPoreVolumeAveragedPressure] << " BARSA :\n" + ss << " : PAV =" << std::setw(14) << pav << " BARSA :\n" << std::fixed << std::setprecision(0) - << " : PORV =" << std::setw(14) << cip[FIPDataType::PoreVolume] << " RM3 :\n"; + << " : PORV =" << std::setw(14) << oip[FIPDataType::PoreVolume] << " RM3 :\n"; if (!reg) { ss << " : Pressure is weighted by hydrocarbon pore volume :\n" << " : Porv volumes are taken at reference conditions :\n"; @@ -1069,9 +1136,9 @@ private: ss << " :--------------- Oil SM3 ---------------:-- Wat SM3 --:--------------- Gas SM3 ---------------:\n"; } if (units.getType() == Opm::UnitSystem::UnitType::UNIT_TYPE_FIELD) { - ss << " : PAV =" << std::setw(14) << cip[FIPDataType::HydroCarbonPoreVolumeAveragedPressure] << " PSIA :\n" + ss << " : PAV =" << std::setw(14) << pav << " PSIA :\n" << std::fixed << std::setprecision(0) - << " : PORV =" << std::setw(14) << cip[FIPDataType::PoreVolume] << " RB :\n"; + << " : PORV =" << std::setw(14) << oip[FIPDataType::PoreVolume] << " RB :\n"; if (!reg) { ss << " : Pressure is weighted by hydrocarbon pore volume :\n" << " : Pore volumes are taken at reference conditions :\n"; @@ -1096,12 +1163,11 @@ private: case FIPDataType::WaterInPlace: return "WIP"; break; case FIPDataType::OilInPlace: return "OIP"; break; case FIPDataType::GasInPlace: return "GIP"; break; - case FIPDataType::OilInPlaceInLiquidPhase:return "OIPL"; break; - case FIPDataType::OilInPlaceInGasPhase:return "OIPG"; break; - case FIPDataType::GasInPlaceInLiquidPhase:return "GIPL"; break; - case FIPDataType::GasInPlaceInGasPhase:return "GIPG"; break; - case FIPDataType::PoreVolume: return "PV"; break; - case FIPDataType::HydroCarbonPoreVolumeAveragedPressure: return "PAV"; break; + case FIPDataType::OilInPlaceInLiquidPhase: return "OIPL"; break; + case FIPDataType::OilInPlaceInGasPhase: return "OIPG"; break; + case FIPDataType::GasInPlaceInLiquidPhase: return "GIPL"; break; + case FIPDataType::GasInPlaceInGasPhase: return "GIPG"; break; + case FIPDataType::PoreVolume: return "PV"; break; } return "ERROR"; } @@ -1138,6 +1204,10 @@ private: ScalarBuffer fip_[FIPDataType::numFipValues]; ScalarBuffer origTotalValues_; ScalarBuffer origRegionValues_[FIPDataType::numFipValues]; + ScalarBuffer pv_; + ScalarBuffer pvHydrocarbon_; + ScalarBuffer pPv_; + ScalarBuffer pPvHydrocarbon_; }; } // namespace Ewoms diff --git a/ebos/eclproblem.hh b/ebos/eclproblem.hh index 1d4bc7ca7..697e6fb17 100644 --- a/ebos/eclproblem.hh +++ b/ebos/eclproblem.hh @@ -210,6 +210,10 @@ SET_BOOL_PROP(EclBaseProblem, EnableVtkOutput, false); // ... but enable the ECL output by default SET_BOOL_PROP(EclBaseProblem, EnableEclOutput, true); +// Output single precision is default +SET_BOOL_PROP(EclBaseProblem, EclOutputDoublePrecision, false); + + // the cache for intensive quantities can be used for ECL problems and also yields a // decent speedup... SET_BOOL_PROP(EclBaseProblem, EnableIntensiveQuantityCache, true); @@ -322,6 +326,8 @@ public: "Eclipse simulator"); EWOMS_REGISTER_PARAM(TypeTag, std::string, EclOutputDir, "The directory to which the ECL result files are written"); + EWOMS_REGISTER_PARAM(TypeTag, bool, EclOutputDoublePrecision, + "Tell the output writer to use double precision. Useful for 'perfect' restarts"); EWOMS_REGISTER_PARAM(TypeTag, unsigned, RestartWritingInterval, "The frequencies of which time steps are serialized to disk"); } diff --git a/ebos/eclwriter.hh b/ebos/eclwriter.hh index b797e7a10..85dfcc5e3 100644 --- a/ebos/eclwriter.hh +++ b/ebos/eclwriter.hh @@ -53,6 +53,7 @@ namespace Ewoms { namespace Properties { NEW_PROP_TAG(EnableEclOutput); +NEW_PROP_TAG(EclOutputDoublePrecision); } template <class TypeTag> @@ -157,23 +158,25 @@ public: if (collectToIORank_.isParallel()) collectToIORank_.collect(localCellData); - if (!substep) - eclOutputModule_.outputFIPLog(); + //if (!substep) + std::map<std::string, double> miscSummaryData; + std::map<std::string, std::vector<double>> regionData; + eclOutputModule_.outputFIPLog(miscSummaryData, regionData, substep); // write output on I/O rank if (collectToIORank_.isIORank()) { std::map<std::string, std::vector<double>> extraRestartData; - std::map<std::string, double> miscSummaryData; // Add suggested next timestep to extra data. - extraRestartData["OPMEXTRA"] = std::vector<double>(1, nextstep); + if (!substep) + extraRestartData["OPMEXTRA"] = std::vector<double>(1, nextstep); - // Add TCPU if simulatorReport is not defaulted. + // Add TCPU if (totalSolverTime != 0.0) { miscSummaryData["TCPU"] = totalSolverTime; } - + bool enableDoublePrecisionOutput = false; //EWOMS_GET_PARAM(TypeTag, bool, EclOutputDoublePrecision); const Opm::data::Solution& cellData = collectToIORank_.isParallel() ? collectToIORank_.globalCellData() : localCellData; eclIO_->writeTimeStep(episodeIdx, substep, @@ -181,8 +184,9 @@ public: cellData, dw, miscSummaryData, + regionData, extraRestartData, - false); + enableDoublePrecisionOutput); } #endif