Move fip computation and unit conversion to separate method.

This commit is contained in:
Atgeirr Flø Rasmussen 2017-11-15 16:31:06 +01:00
parent 4256af6754
commit d8ad13c4b5

View File

@ -240,18 +240,9 @@ public:
auto solver = createSolver(well_model); auto solver = createSolver(well_model);
std::vector<std::vector<double>> currentFluidInPlace;
std::vector<double> currentFluidInPlaceTotals;
// Compute orignal fluid in place if this has not been done yet // Compute orignal fluid in place if this has not been done yet
if (originalFluidInPlace_.empty()) { if (originalFluidInPlace_.data.empty()) {
originalFluidInPlace_ = solver->computeFluidInPlace(fipnum_); originalFluidInPlace_ = computeFluidInPlace(*solver);
originalFluidInPlaceTotals_ = FIPTotals(originalFluidInPlace_);
FIPUnitConvert(eclState().getUnits(), originalFluidInPlace_);
FIPUnitConvert(eclState().getUnits(), originalFluidInPlaceTotals_);
currentFluidInPlace = originalFluidInPlace_;
currentFluidInPlaceTotals = originalFluidInPlaceTotals_;
} }
// write the inital state at the report stage // write the inital state at the report stage
@ -260,7 +251,7 @@ public:
perfTimer.start(); perfTimer.start();
if (terminal_output_) { if (terminal_output_) {
outputFluidInPlace(timer, originalFluidInPlace_, originalFluidInPlaceTotals_); outputFluidInPlace(timer, originalFluidInPlace_);
} }
// No per cell data is written for initial step, but will be // No per cell data is written for initial step, but will be
@ -345,15 +336,11 @@ public:
++timer; ++timer;
// Compute current fluid in place. // Compute current fluid in place.
currentFluidInPlace = solver->computeFluidInPlace(fipnum_); const auto currentFluidInPlace = computeFluidInPlace(*solver);
currentFluidInPlaceTotals = FIPTotals(currentFluidInPlace);
FIPUnitConvert(eclState().getUnits(), currentFluidInPlace);
FIPUnitConvert(eclState().getUnits(), currentFluidInPlaceTotals);
if (terminal_output_ ) if (terminal_output_ )
{ {
outputFluidInPlace(timer, currentFluidInPlace, currentFluidInPlaceTotals); outputFluidInPlace(timer, currentFluidInPlace);
std::string msg = std::string msg =
"Time step took " + std::to_string(solver_timer.secsSinceStart()) + " seconds; " "Time step took " + std::to_string(solver_timer.secsSinceStart()) + " seconds; "
@ -503,22 +490,38 @@ protected:
} }
struct FluidInPlace
{
std::vector<std::vector<double>> data;
std::vector<double> totals;
};
FluidInPlace computeFluidInPlace(const Solver& solver)
{
FluidInPlace fip;
fip.data = solver.computeFluidInPlace(fipnum_);
fip.totals = FIPTotals(fip.data);
FIPUnitConvert(eclState().getUnits(), fip.data);
FIPUnitConvert(eclState().getUnits(), fip.totals);
return fip;
}
void outputFluidInPlace(const SimulatorTimer& timer, void outputFluidInPlace(const SimulatorTimer& timer,
const std::vector<std::vector<double>>& currentFluidInPlace, const FluidInPlace& currentFluidInPlace)
const std::vector<double>& currentFluidInPlaceTotals)
{ {
if (!timer.initialStep()) { if (!timer.initialStep()) {
const std::string version = moduleVersionName(); const std::string version = moduleVersionName();
outputTimestampFIP(timer, version); outputTimestampFIP(timer, version);
} }
outputRegionFluidInPlace(originalFluidInPlaceTotals_, outputRegionFluidInPlace(originalFluidInPlace_.totals,
currentFluidInPlaceTotals, currentFluidInPlace.totals,
eclState().getUnits(), eclState().getUnits(),
0); 0);
for (size_t reg = 0; reg < originalFluidInPlace_.size(); ++reg) { for (size_t reg = 0; reg < originalFluidInPlace_.data.size(); ++reg) {
outputRegionFluidInPlace(originalFluidInPlace_[reg], outputRegionFluidInPlace(originalFluidInPlace_.data[reg],
currentFluidInPlace[reg], currentFluidInPlace.data[reg],
eclState().getUnits(), eclState().getUnits(),
reg+1); reg+1);
} }
@ -736,8 +739,7 @@ protected:
Simulator& ebosSimulator_; Simulator& ebosSimulator_;
std::vector<int> fipnum_; std::vector<int> fipnum_;
std::vector<std::vector<double>> originalFluidInPlace_; FluidInPlace originalFluidInPlace_;
std::vector<double> originalFluidInPlaceTotals_;
typedef typename Solver::SolverParameters SolverParameters; typedef typename Solver::SolverParameters SolverParameters;