Add method RegionCache::wells()
The method RegionCache::wells() will output the wells with the first connection in region region_id.
This commit is contained in:
parent
44d9261258
commit
3bc490b693
@ -36,9 +36,12 @@ namespace out {
|
|||||||
RegionCache(const std::set<std::string>& fip_regions, const FieldPropsManager& fp, const EclipseGrid& grid, const Schedule& schedule);
|
RegionCache(const std::set<std::string>& fip_regions, const FieldPropsManager& fp, const EclipseGrid& grid, const Schedule& schedule);
|
||||||
const std::vector<std::pair<std::string,size_t>>& connections( const std::string& region_name, int region_id ) const;
|
const std::vector<std::pair<std::string,size_t>>& connections( const std::string& region_name, int region_id ) const;
|
||||||
|
|
||||||
|
// A well is assigned to the region_id where the first connection is
|
||||||
|
std::vector<std::string> wells(const std::string& region_name, int region_id) const;
|
||||||
private:
|
private:
|
||||||
std::vector<std::pair<std::string,size_t>> connections_empty;
|
std::vector<std::pair<std::string,size_t>> connections_empty;
|
||||||
std::map<std::pair<std::string, int> , std::vector<std::pair<std::string,size_t>>> connection_map;
|
std::map<std::pair<std::string, int> , std::vector<std::pair<std::string,size_t>>> connection_map;
|
||||||
|
std::map<std::pair<std::string, int>, std::vector<std::string>> well_map;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,9 @@ RegionCache::RegionCache(const std::set<std::string>& fip_regions, const FieldPr
|
|||||||
const auto& wells = schedule.getWellsatEnd();
|
const auto& wells = schedule.getWellsatEnd();
|
||||||
for (const auto& well : wells) {
|
for (const auto& well : wells) {
|
||||||
const auto& connections = well.getConnections( );
|
const auto& connections = well.getConnections( );
|
||||||
|
if (connections.empty())
|
||||||
|
continue;
|
||||||
|
|
||||||
for (const auto& c : connections) {
|
for (const auto& c : connections) {
|
||||||
if (grid.cellActive(c.getI(), c.getJ(), c.getK())) {
|
if (grid.cellActive(c.getI(), c.getJ(), c.getK())) {
|
||||||
size_t active_index = grid.activeIndex(c.getI(), c.getJ(), c.getK());
|
size_t active_index = grid.activeIndex(c.getI(), c.getJ(), c.getK());
|
||||||
@ -45,6 +48,11 @@ RegionCache::RegionCache(const std::set<std::string>& fip_regions, const FieldPr
|
|||||||
well_index_list.push_back( { well.name() , active_index } );
|
well_index_list.push_back( { well.name() , active_index } );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const auto& conn0 = connections[0];
|
||||||
|
auto region_id = fip_region[grid.activeIndex(conn0.global_index())];
|
||||||
|
auto key = std::make_pair(fip_name, region_id);
|
||||||
|
this->well_map[ key ].push_back(well.name());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -59,6 +67,16 @@ RegionCache::RegionCache(const std::set<std::string>& fip_regions, const FieldPr
|
|||||||
return iter->second;
|
return iter->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<std::string> RegionCache::wells(const std::string& region_name, int region_id) const {
|
||||||
|
auto key = std::make_pair(region_name, region_id);
|
||||||
|
const auto iter = this->well_map.find( key );
|
||||||
|
if (iter == this->well_map.end())
|
||||||
|
return {};
|
||||||
|
else
|
||||||
|
return iter->second;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,17 +63,17 @@ PERMZ
|
|||||||
REGIONS
|
REGIONS
|
||||||
|
|
||||||
FIPNUM
|
FIPNUM
|
||||||
100*1
|
50*1 50*11
|
||||||
100*2
|
50*2 50*12
|
||||||
100*3
|
50*3 50*13
|
||||||
100*4
|
50*4 50*14
|
||||||
100*5
|
50*5 50*15
|
||||||
100*6
|
50*6 50*16
|
||||||
100*7
|
50*7 50*17
|
||||||
100*8
|
50*8 50*18
|
||||||
100*9
|
50*9 50*19
|
||||||
100*10 /
|
50*10 50*20
|
||||||
|
/
|
||||||
|
|
||||||
SUMMARY
|
SUMMARY
|
||||||
DATE
|
DATE
|
||||||
@ -839,7 +839,7 @@ WELSPECS
|
|||||||
'W_2' 'G_1' 2 1 3.33 'OIL' 7* /
|
'W_2' 'G_1' 2 1 3.33 'OIL' 7* /
|
||||||
'W_3' 'G_2' 3 1 3.92 'WATER' 7* /
|
'W_3' 'G_2' 3 1 3.92 'WATER' 7* /
|
||||||
'W_6' 'G_2' 8 8 3.92 'GAS' 7* /
|
'W_6' 'G_2' 8 8 3.92 'GAS' 7* /
|
||||||
'W_5' 'G_3' 4 1 3.92 'OIL' 7* /
|
'W_5' 'G_3' 6 6 3.92 'OIL' 7* /
|
||||||
/
|
/
|
||||||
|
|
||||||
-- Completion data.
|
-- Completion data.
|
||||||
@ -850,7 +850,7 @@ COMPDAT
|
|||||||
W_2 0 0 1 1 2* 1* 5 20 0.5 / -- Active index: 1
|
W_2 0 0 1 1 2* 1* 5 20 0.5 / -- Active index: 1
|
||||||
W_2 0 0 2 2 2* 1* 5 10 0.2 / -- Active index: 101
|
W_2 0 0 2 2 2* 1* 5 10 0.2 / -- Active index: 101
|
||||||
W_3 0 0 1 1 2* 1* 2* 0.7 / -- Active index: 2
|
W_3 0 0 1 1 2* 1* 2* 0.7 / -- Active index: 2
|
||||||
W_6 0 0 2 2 2* 1* 2* 0.7 / -- Active index: 2
|
W_6 0 0 1 1 2* 1* 2* 0.7 / -- Active index: 2
|
||||||
/
|
/
|
||||||
|
|
||||||
COMPLUMP
|
COMPLUMP
|
||||||
@ -905,7 +905,7 @@ WELSPECS
|
|||||||
/
|
/
|
||||||
|
|
||||||
COMPDAT
|
COMPDAT
|
||||||
W_4 1 1 3 3 /
|
W_4 1 1 1 3 /
|
||||||
/
|
/
|
||||||
|
|
||||||
WPIMULT
|
WPIMULT
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include <boost/test/unit_test.hpp>
|
#include <boost/test/unit_test.hpp>
|
||||||
|
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
#include <unordered_set>
|
||||||
|
|
||||||
#include <opm/parser/eclipse/Python/Python.hpp>
|
#include <opm/parser/eclipse/Python/Python.hpp>
|
||||||
#include <opm/parser/eclipse/Deck/Deck.hpp>
|
#include <opm/parser/eclipse/Deck/Deck.hpp>
|
||||||
@ -38,6 +39,13 @@ using namespace Opm;
|
|||||||
|
|
||||||
const char* path = "summary_deck.DATA";
|
const char* path = "summary_deck.DATA";
|
||||||
|
|
||||||
|
bool cmp_list(const std::vector<std::string>& l1, const std::vector<std::string>& l2) {
|
||||||
|
std::unordered_set<std::string> s1(l1.begin(), l1.end());
|
||||||
|
std::unordered_set<std::string> s2(l2.begin(), l2.end());
|
||||||
|
return s1 == s2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(create) {
|
BOOST_AUTO_TEST_CASE(create) {
|
||||||
auto python = std::make_shared<Python>();
|
auto python = std::make_shared<Python>();
|
||||||
@ -54,11 +62,17 @@ BOOST_AUTO_TEST_CASE(create) {
|
|||||||
|
|
||||||
{
|
{
|
||||||
const auto& top_layer = rc.connections( "FIPNUM", 1 );
|
const auto& top_layer = rc.connections( "FIPNUM", 1 );
|
||||||
BOOST_CHECK_EQUAL( top_layer.size() , 3U );
|
BOOST_CHECK_EQUAL( top_layer.size() , 4U );
|
||||||
{
|
{
|
||||||
auto pair = top_layer[0];
|
auto pair = top_layer[0];
|
||||||
BOOST_CHECK_EQUAL( pair.first , "W_1");
|
BOOST_CHECK_EQUAL( pair.first , "W_1");
|
||||||
BOOST_CHECK_EQUAL( pair.second , grid.activeIndex( 0,0,0));
|
BOOST_CHECK_EQUAL( pair.second , grid.activeIndex( 0,0,0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_CHECK( rc.wells("FIPXYZ", 100).empty() );
|
||||||
|
BOOST_CHECK( rc.wells("FIPXYZ", 1).empty() );
|
||||||
|
BOOST_CHECK( rc.wells("FIPNUM", 100).empty() );
|
||||||
|
BOOST_CHECK( cmp_list(rc.wells("FIPNUM", 1), {"W_1", "W_2", "W_3", "W_4"}));
|
||||||
|
BOOST_CHECK( cmp_list(rc.wells("FIPNUM", 11), {"W_6"}));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user