diff --git a/opm/core/wells/WellsManager.cpp b/opm/core/wells/WellsManager.cpp index 67dbf29e7..32d763e73 100644 --- a/opm/core/wells/WellsManager.cpp +++ b/opm/core/wells/WellsManager.cpp @@ -341,7 +341,7 @@ namespace Opm UgGridHelpers::dimensions(grid), UgGridHelpers::cell2Faces(grid), UgGridHelpers::beginFaceCentroids(grid), permeability, dummy_list_econ_limited, dummy_well_potentials, - std::set()); + std::set()); } diff --git a/opm/core/wells/WellsManager.hpp b/opm/core/wells/WellsManager.hpp index 5eb42dcb5..4d1c60742 100644 --- a/opm/core/wells/WellsManager.hpp +++ b/opm/core/wells/WellsManager.hpp @@ -78,7 +78,8 @@ namespace Opm /// well productivity indices, otherwise it must be given in /// order to approximate these by the Peaceman formula. /// - /// \param deactivated_wells A set of wells that should be treated + /// \param deactivated_wells The indices (according to the + /// eclipse schedule) of wells that should be treated /// like shut wells. E.g. in a a parallel run these would be /// the wells handeled by another process. Defaults to empty set. template @@ -94,7 +95,7 @@ namespace Opm const DynamicListEconLimited& list_econ_limited, bool is_parallel_run=false, const std::vector& well_potentials={}, - const std::set& deactivated_wells = {}); + const std::set& deactivated_wells = {}); WellsManager(const Opm::EclipseStateConstPtr eclipseState, const size_t timeStep, @@ -164,7 +165,7 @@ namespace Opm const double* permeability, const DynamicListEconLimited& list_econ_limited, const std::vector& well_potentials, - const std::set& deactivated_wells); + const std::set& deactivated_wells); // Disable copying and assignment. WellsManager(const WellsManager& other); WellsManager& operator=(const WellsManager& other); @@ -189,7 +190,7 @@ namespace Opm const double* permeability, const NTG& ntg, std::vector& wells_on_proc, - const std::set& deactivated_wells, + const std::set& deactivated_wells, const DynamicListEconLimited& list_econ_limited); void addChildGroups(GroupTreeNodeConstPtr parentNode, std::shared_ptr< const Schedule > schedule, size_t timeStep, const PhaseUsage& phaseUsage); diff --git a/opm/core/wells/WellsManager_impl.hpp b/opm/core/wells/WellsManager_impl.hpp index 440270b01..57c617340 100644 --- a/opm/core/wells/WellsManager_impl.hpp +++ b/opm/core/wells/WellsManager_impl.hpp @@ -121,7 +121,7 @@ void WellsManager::createWellsFromSpecs(std::vector& wells, size_t const double* permeability, const NTG& ntg, std::vector& wells_on_proc, - const std::set& ignored_wells, + const std::set& ignored_wells, const DynamicListEconLimited& list_econ_limited) { if (dimensions != 3) { @@ -134,6 +134,8 @@ void WellsManager::createWellsFromSpecs(std::vector& wells, size_t wellperf_data.resize(wells.size()); wells_on_proc.resize(wells.size(), 1); + auto ignored_well = ignored_wells.begin(); + // The well index on the current process. // Note that some wells are deactivated as they live on the interior // domain of another proccess. Therefore this might different from @@ -141,9 +143,11 @@ void WellsManager::createWellsFromSpecs(std::vector& wells, size_t int active_well_index = 0; for (auto wellIter= wells.begin(); wellIter != wells.end(); ++wellIter) { const auto* well = (*wellIter); + const int well_index = wellIter - wells.begin(); - if ( ignored_wells.find(well->name()) != ignored_wells.end() ) { - wells_on_proc[ wellIter - wells.begin() ] = 0; + if ( ignored_well != ignored_wells.end() && *ignored_well == well_index ) { + wells_on_proc[ well_index ] = 0; + ++ignored_well; continue; } @@ -317,7 +321,7 @@ WellsManager(const Opm::EclipseStateConstPtr eclipseState, const DynamicListEconLimited& list_econ_limited, bool is_parallel_run, const std::vector& well_potentials, - const std::set& deactivated_wells) + const std::set& deactivated_wells) : w_(0), is_parallel_run_(is_parallel_run) { init(eclipseState, timeStep, number_of_cells, global_cell, @@ -339,7 +343,7 @@ WellsManager::init(const Opm::EclipseStateConstPtr eclipseState, const double* permeability, const DynamicListEconLimited& list_econ_limited, const std::vector& well_potentials, - const std::set& deactivated_wells) + const std::set& deactivated_wells) { if (dimensions != 3) { OPM_THROW(std::runtime_error,