mirror of
https://github.com/OPM/opm-simulators.git
synced 2024-12-26 09:10:59 -06:00
Merge pull request #1450 from GitPaean/update_VFP_related
adapting to the change related to VFP from the parser.
This commit is contained in:
commit
63dabb4777
@ -116,8 +116,8 @@ typedef Eigen::Array<double,
|
||||
, geo_ (geo)
|
||||
, rock_comp_props_(rock_comp_props)
|
||||
, vfp_properties_(
|
||||
eclState->getTableManager().getVFPInjTables(),
|
||||
eclState->getTableManager().getVFPProdTables())
|
||||
schedule->getVFPInjTables(well_model.currentStep()),
|
||||
schedule->getVFPProdTables(well_model.currentStep() ) )
|
||||
, linsolver_ (linsolver)
|
||||
, active_(detail::activePhases(fluid.phaseUsage()))
|
||||
, canph_ (detail::active2Canonical(fluid.phaseUsage()))
|
||||
|
@ -170,9 +170,6 @@ namespace Opm {
|
||||
|
||||
using WellInterfacePtr = std::unique_ptr<WellInterface<TypeTag> >;
|
||||
// a vector of all the wells.
|
||||
// eventually, the wells_ above should be gone.
|
||||
// the name is just temporary
|
||||
// later, might make share_ptr const later.
|
||||
std::vector<WellInterfacePtr > well_container_;
|
||||
|
||||
using ConvergenceReport = typename WellInterface<TypeTag>::ConvergenceReport;
|
||||
|
@ -128,10 +128,14 @@ namespace Opm {
|
||||
}
|
||||
}
|
||||
|
||||
// compute VFP properties
|
||||
// update VFP properties
|
||||
vfp_properties_.reset (new VFPProperties (
|
||||
eclState.getTableManager().getVFPInjTables(),
|
||||
eclState.getTableManager().getVFPProdTables()) );
|
||||
schedule().getVFPInjTables(timeStepIdx),
|
||||
schedule().getVFPProdTables(timeStepIdx)) );
|
||||
|
||||
for (auto& well : well_container_) {
|
||||
well->setVFPProperties(vfp_properties_.get());
|
||||
}
|
||||
|
||||
// update the previous well state. This is used to restart failed steps.
|
||||
previous_well_state_ = well_state_;
|
||||
|
@ -201,7 +201,7 @@ namespace Opm
|
||||
// Run a multiple steps of the solver depending on the time step control.
|
||||
solver_timer.start();
|
||||
|
||||
const WellModel well_model(wells, &(wells_manager.wellCollection()));
|
||||
const WellModel well_model(wells, &(wells_manager.wellCollection()), timer.currentStepNum());
|
||||
|
||||
std::unique_ptr<Solver> solver = asImpl().createSolver(well_model);
|
||||
|
||||
|
@ -2123,7 +2123,7 @@ namespace Opm
|
||||
const auto row_index = colC.index();
|
||||
auto& row = mat[row_index];
|
||||
auto col = row.begin();
|
||||
|
||||
|
||||
for ( auto colB = duneB_[0].begin(), endB = duneB_[0].end(); colB != endB; ++colB )
|
||||
{
|
||||
const auto col_index = colB.index();
|
||||
|
@ -71,7 +71,7 @@ namespace Opm {
|
||||
Eigen::Dynamic,
|
||||
Eigen::RowMajor>;
|
||||
// --------- Public methods ---------
|
||||
StandardWells(const Wells* wells_arg, WellCollection* well_collection);
|
||||
StandardWells(const Wells* wells_arg, WellCollection* well_collection, const int current_step);
|
||||
|
||||
void init(const BlackoilPropsAdFromDeck* fluid_arg,
|
||||
const std::vector<bool>* active_arg,
|
||||
@ -203,6 +203,8 @@ namespace Opm {
|
||||
template<class WellState>
|
||||
const WellState& wellState(const WellState& well_state) const { return well_state; }
|
||||
|
||||
int currentStep() const;
|
||||
|
||||
|
||||
protected:
|
||||
bool wells_active_;
|
||||
@ -211,6 +213,8 @@ namespace Opm {
|
||||
// It will probably need to be updated during running time.
|
||||
WellCollection* well_collection_;
|
||||
|
||||
const int current_step_;
|
||||
|
||||
// The efficiency factor for each connection
|
||||
// It is specified based on wells and groups
|
||||
// By default, they should all be one.
|
||||
|
@ -71,11 +71,12 @@ namespace Opm
|
||||
|
||||
|
||||
|
||||
StandardWells::StandardWells(const Wells* wells_arg, WellCollection* well_collection)
|
||||
StandardWells::StandardWells(const Wells* wells_arg, WellCollection* well_collection, const int current_step)
|
||||
: wells_active_(wells_arg!=nullptr)
|
||||
, wells_(wells_arg)
|
||||
, wops_(wells_arg)
|
||||
, well_collection_(well_collection)
|
||||
, current_step_(current_step)
|
||||
, well_perforation_efficiency_factors_(Vector::Ones(wells_!=nullptr ? wells_->well_connpos[wells_->number_of_wells] : 0))
|
||||
, fluid_(nullptr)
|
||||
, active_(nullptr)
|
||||
@ -1544,6 +1545,15 @@ namespace Opm
|
||||
|
||||
|
||||
|
||||
int StandardWells::currentStep() const
|
||||
{
|
||||
return current_step_;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
template <class WellState>
|
||||
void
|
||||
StandardWells::
|
||||
|
@ -22,8 +22,8 @@
|
||||
#define OPM_AUTODIFF_VFPHELPERS_HPP_
|
||||
|
||||
|
||||
#include <opm/parser/eclipse/EclipseState/Tables/VFPProdTable.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Tables/VFPInjTable.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/VFPInjTable.hpp>
|
||||
#include <opm/autodiff/AutoDiffHelpers.hpp>
|
||||
#include <opm/material/densead/Math.hpp>
|
||||
#include <opm/material/densead/Evaluation.hpp>
|
||||
|
@ -24,7 +24,6 @@
|
||||
#include "config.h"
|
||||
|
||||
#include <opm/autodiff/VFPInjProperties.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Tables/VFPProdTable.hpp>
|
||||
#include <opm/core/props/BlackoilPhases.hpp>
|
||||
#include <opm/common/ErrorMacros.hpp>
|
||||
#include <opm/autodiff/AutoDiffBlock.hpp>
|
||||
@ -64,7 +63,7 @@ VFPInjProperties::VFPInjProperties(const VFPInjTable* table){
|
||||
|
||||
VFPInjProperties::VFPInjProperties(const std::map<int, VFPInjTable>& tables) {
|
||||
for (const auto& table : tables) {
|
||||
m_tables[table.first] = &table.second;
|
||||
m_tables[table.first] = &(table.second);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
#ifndef OPM_AUTODIFF_VFPINJPROPERTIES_HPP_
|
||||
#define OPM_AUTODIFF_VFPINJPROPERTIES_HPP_
|
||||
|
||||
#include <opm/parser/eclipse/EclipseState/Tables/VFPInjTable.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/VFPInjTable.hpp>
|
||||
#include <opm/core/wells.h>
|
||||
#include <opm/material/densead/Math.hpp>
|
||||
#include <opm/material/densead/Evaluation.hpp>
|
||||
|
@ -20,7 +20,6 @@
|
||||
#include "config.h"
|
||||
|
||||
#include <opm/autodiff/VFPProdProperties.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Tables/VFPProdTable.hpp>
|
||||
#include <opm/core/props/BlackoilPhases.hpp>
|
||||
#include <opm/common/ErrorMacros.hpp>
|
||||
#include <opm/autodiff/AutoDiffBlock.hpp>
|
||||
@ -51,7 +50,7 @@ VFPProdProperties::VFPProdProperties(const VFPProdTable* table){
|
||||
|
||||
VFPProdProperties::VFPProdProperties(const std::map<int, VFPProdTable>& tables) {
|
||||
for (const auto& table : tables) {
|
||||
m_tables[table.first] = &table.second;
|
||||
m_tables[table.first] = &(table.second);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
#ifndef OPM_AUTODIFF_VFPPRODPROPERTIES_HPP_
|
||||
#define OPM_AUTODIFF_VFPPRODPROPERTIES_HPP_
|
||||
|
||||
#include <opm/parser/eclipse/EclipseState/Tables/VFPProdTable.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.hpp>
|
||||
#include <opm/core/wells.h>
|
||||
#include <opm/material/densead/Math.hpp>
|
||||
#include <opm/material/densead/Evaluation.hpp>
|
||||
|
@ -20,8 +20,8 @@
|
||||
#ifndef OPM_AUTODIFF_VFPPROPERTIES_HPP_
|
||||
#define OPM_AUTODIFF_VFPPROPERTIES_HPP_
|
||||
|
||||
#include <opm/parser/eclipse/EclipseState/Tables/VFPInjTable.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Tables/VFPProdTable.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/VFPInjTable.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.hpp>
|
||||
|
||||
#include <map>
|
||||
|
||||
|
@ -39,7 +39,7 @@
|
||||
#include <opm/parser/eclipse/Parser/Parser.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/checkDeck.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/EclipseState.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Tables/VFPProdTable.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.hpp>
|
||||
#include <opm/parser/eclipse/Units/UnitSystem.hpp>
|
||||
|
||||
#include <opm/autodiff/VFPProperties.hpp>
|
||||
@ -372,9 +372,6 @@ struct TrivialFixture {
|
||||
}
|
||||
|
||||
|
||||
inline void initTable() {
|
||||
}
|
||||
|
||||
inline void initProperties() {
|
||||
//Initialize table
|
||||
table.init(table_ids[0],
|
||||
@ -1047,8 +1044,7 @@ VFPPROD \n\
|
||||
BOOST_REQUIRE(deck.hasKeyword("VFPPROD"));
|
||||
BOOST_CHECK_EQUAL(deck.count("VFPPROD"), 1);
|
||||
|
||||
Opm::VFPProdTable table;
|
||||
table.init(deck.getKeyword("VFPPROD", 0), units);
|
||||
Opm::VFPProdTable table(deck.getKeyword("VFPPROD", 0), units);
|
||||
|
||||
Opm::VFPProdProperties properties(&table);
|
||||
|
||||
@ -1110,8 +1106,7 @@ BOOST_AUTO_TEST_CASE(ParseInterpolateRealisticVFPPROD)
|
||||
BOOST_REQUIRE(deck.hasKeyword("VFPPROD"));
|
||||
BOOST_CHECK_EQUAL(deck.count("VFPPROD"), 1);
|
||||
|
||||
Opm::VFPProdTable table;
|
||||
table.init(deck.getKeyword("VFPPROD", 0), units);
|
||||
Opm::VFPProdTable table(deck.getKeyword("VFPPROD", 0), units);
|
||||
|
||||
Opm::VFPProdProperties properties(&table);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user