From ca70d67d832aea1b7e4b04ed9dbaec177d5d6250 Mon Sep 17 00:00:00 2001 From: Liu Ming Date: Fri, 26 Sep 2014 14:06:01 +0800 Subject: [PATCH] some changes, mostly of them are API changes from opm-autodiff and opm-parser. --- .../FullyImplicitCompressiblePolymerSolver.cpp | 15 ++++++++------- .../FullyImplicitCompressiblePolymerSolver.hpp | 6 +++--- .../SimulatorFullyImplicitCompressiblePolymer.cpp | 8 +++++--- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/opm/polymer/fullyimplicit/FullyImplicitCompressiblePolymerSolver.cpp b/opm/polymer/fullyimplicit/FullyImplicitCompressiblePolymerSolver.cpp index 936bd9191..41721d932 100644 --- a/opm/polymer/fullyimplicit/FullyImplicitCompressiblePolymerSolver.cpp +++ b/opm/polymer/fullyimplicit/FullyImplicitCompressiblePolymerSolver.cpp @@ -569,15 +569,16 @@ namespace { } ADB cell_rho_total = ADB::constant(V::Zero(nc), state.pressure.blockPattern()); std::vector press = computePressures(state); + const std::vector cond = phaseCondition(); for (int phase = 0; phase < 2; ++phase) { - const ADB cell_rho = fluidDensity(phase, press[phase], cells_); + const ADB cell_rho = fluidDensity(phase, press[phase], cond, cells_); cell_rho_total += state.saturation[phase] * cell_rho; } ADB inj_rho_total = ADB::constant(V::Zero(nperf), state.pressure.blockPattern()); assert(np == wells_.number_of_phases); const DataBlock compi = Eigen::Map(wells_.comp_frac, nw, np); for (int phase = 0; phase < 2; ++phase) { - const ADB cell_rho = fluidDensity(phase, press[phase], cells_); + const ADB cell_rho = fluidDensity(phase, press[phase], cond, cells_); const V fraction = compi.col(phase); inj_rho_total += (wops_.w2p * fraction.matrix()).array() * subset(cell_rho, well_cells); } @@ -938,7 +939,7 @@ namespace { ADB FullyImplicitCompressiblePolymerSolver::fluidReciprocFVF(const int phase, const ADB& p , - const std::vector& cond + const std::vector& cond, const std::vector& cells) const { const ADB null = ADB::constant(V::Zero(grid_.number_of_cells, 1), p.blockPattern()); @@ -960,7 +961,7 @@ namespace { ADB FullyImplicitCompressiblePolymerSolver::fluidDensity(const int phase, const ADB& p , - const std::vector& cond + const std::vector& cond, const std::vector& cells) const { const double* rhos = fluid_.surfaceDensity(); @@ -1039,12 +1040,12 @@ namespace { void FullyImplicitCompressiblePolymerSolver::classifyCondition(const PolymerBlackoilState& state) { - const nc = grid_.number_of_cells; + const int nc = grid_.number_of_cells; const DataBlock s = Eigen::Map(& state.saturation()[0], nc, 2); const V so = s.col(1); - for (V::Index c = 0; e = so.size(); c != e; ++c) { - phaseConditon_[c].setFreeWater(); + for (V::Index c = 0, e = so.size(); c != e; ++c) { + phaseCondition_[c].setFreeWater(); if (so[c] > 0) { phaseCondition_[c].setFreeOil(); } diff --git a/opm/polymer/fullyimplicit/FullyImplicitCompressiblePolymerSolver.hpp b/opm/polymer/fullyimplicit/FullyImplicitCompressiblePolymerSolver.hpp index 855d0e7ea..b93fe206e 100644 --- a/opm/polymer/fullyimplicit/FullyImplicitCompressiblePolymerSolver.hpp +++ b/opm/polymer/fullyimplicit/FullyImplicitCompressiblePolymerSolver.hpp @@ -135,8 +135,8 @@ namespace Opm { const WellOps wops_; const M grav_; V cmax_; - std::vector rq_; std::vector phaseCondition_; + std::vector rq_; // The mass_balance vector has one element for each active phase, // each of which has size equal to the number of cells. // The well_eq has size equal to the number of wells. @@ -225,7 +225,7 @@ namespace Opm { ADB fluidReciprocFVF(const int phase, const ADB& p , - const std::vector& cond + const std::vector& cond, const std::vector& cells) const; ADB @@ -241,7 +241,7 @@ namespace Opm { transMult(const ADB& p) const; const std::vector - phaseCondition() const { return phaseConditon_; } + phaseCondition() const { return phaseCondition_; } void classifyCondition(const PolymerBlackoilState& state); diff --git a/opm/polymer/fullyimplicit/SimulatorFullyImplicitCompressiblePolymer.cpp b/opm/polymer/fullyimplicit/SimulatorFullyImplicitCompressiblePolymer.cpp index eafa8daba..1c58031c4 100644 --- a/opm/polymer/fullyimplicit/SimulatorFullyImplicitCompressiblePolymer.cpp +++ b/opm/polymer/fullyimplicit/SimulatorFullyImplicitCompressiblePolymer.cpp @@ -86,6 +86,7 @@ namespace Opm public: Impl(const parameter::ParameterGroup& param, const UnstructuredGrid& grid, + const DerivedGeology& geo, const BlackoilPropsAdInterface& props, const PolymerPropsAd& polymer_props, const RockCompressibility* rock_comp_props, @@ -131,6 +132,7 @@ namespace Opm SimulatorFullyImplicitCompressiblePolymer:: SimulatorFullyImplicitCompressiblePolymer(const parameter::ParameterGroup& param, const UnstructuredGrid& grid, + const DerivedGeology& geo, const BlackoilPropsAdInterface& props, const PolymerPropsAd& polymer_props, const RockCompressibility* rock_comp_props, @@ -140,7 +142,7 @@ namespace Opm const double* gravity) { - pimpl_.reset(new Impl(param, grid, props, polymer_props, rock_comp_props, wells_manager, polymer_inflow, linsolver, gravity)); + pimpl_.reset(new Impl(param, grid, geo, props, polymer_props, rock_comp_props, wells_manager, polymer_inflow, linsolver, gravity)); } @@ -293,7 +295,7 @@ namespace Opm // Process transport sources (to include bdy terms and well flows). // Opm::computeTransportSource(props_, wells_, well_state, transport_src); // Run solver. - const double current_time = timer.currentTimeElapsed(); + const double current_time = timer.simulationTimeElapsed(); double stepsize = timer.currentStepLength(); polymer_inflow_.getInflowValues(current_time, current_time + stepsize, polymer_inflow_c); solver_timer.start(); @@ -347,7 +349,7 @@ namespace Opm tot_injected[1] += injected[1]; tot_produced[0] += produced[0]; tot_produced[1] += produced[1]; - watercut.push(timer.currentTimeElapsed() + timer.currentStepLength(), + watercut.push(timer.simulationTimeElapsed() + timer.currentStepLength(), produced[0]/(produced[0] + produced[1]), tot_produced[0]/tot_porevol_init); std::cout.precision(5);