do not explicitly pass the permeability to the well model anymore
this information is already part of the EclipseState. The reason why this should IMO be avoided is that this enforces an implementation (ordering of the permeability matrices) the simulator on the well model. If this needs to be done for performance reasons, IMO it would be smarter to pass an array of matrices, instead of passing a raw array of doubles. I doubt that this is necessary, though: completing the full Norne deck takes about 0.25 seconds longer on my machine, that's substantially less than 0.1% of the total runtime. in order to avoid code duplication, the permeability extraction function of the RockFromDeck class is now made a public static function and used as an implementation detail of the WellsManager. finally, the permfield_valid_ attribute is removed from the RockFromDeck class because this data was unused and not accessible via the class' public API.
This commit is contained in:
@@ -58,7 +58,7 @@ BOOST_AUTO_TEST_CASE(TestStoppedWells)
|
||||
|
||||
// Both wells are open in the first schedule step
|
||||
{
|
||||
Opm::WellsManager wellsManager(eclipseState , 0 , *gridManager.c_grid(), NULL);
|
||||
Opm::WellsManager wellsManager(eclipseState , 0 , *gridManager.c_grid());
|
||||
const Wells* wells = wellsManager.c_wells();
|
||||
const struct WellControls* ctrls0 = wells->ctrls[0];
|
||||
const struct WellControls* ctrls1 = wells->ctrls[1];
|
||||
@@ -78,7 +78,7 @@ BOOST_AUTO_TEST_CASE(TestStoppedWells)
|
||||
|
||||
// The injector is stopped
|
||||
{
|
||||
Opm::WellsManager wellsManager(eclipseState , 1 , *gridManager.c_grid(), NULL);
|
||||
Opm::WellsManager wellsManager(eclipseState , 1 , *gridManager.c_grid());
|
||||
const Wells* wells = wellsManager.c_wells();
|
||||
const struct WellControls* ctrls0 = wells->ctrls[0];
|
||||
const struct WellControls* ctrls1 = wells->ctrls[1];
|
||||
|
||||
@@ -185,19 +185,19 @@ BOOST_AUTO_TEST_CASE(New_Constructor_Works) {
|
||||
Opm::GridManager gridManager(eclipseState.getInputGrid());
|
||||
|
||||
{
|
||||
Opm::WellsManager wellsManager(eclipseState, 0, *gridManager.c_grid(), NULL);
|
||||
Opm::WellsManager wellsManager(eclipseState, 0, *gridManager.c_grid());
|
||||
wells_static_check(wellsManager.c_wells());
|
||||
check_controls_epoch0(wellsManager.c_wells()->ctrls);
|
||||
}
|
||||
|
||||
{
|
||||
Opm::WellsManager wellsManager(eclipseState, 1, *gridManager.c_grid(), NULL);
|
||||
Opm::WellsManager wellsManager(eclipseState, 1, *gridManager.c_grid());
|
||||
wells_static_check(wellsManager.c_wells());
|
||||
check_controls_epoch1(wellsManager.c_wells()->ctrls);
|
||||
}
|
||||
|
||||
{
|
||||
Opm::WellsManager wellsManager(eclipseState, 3, *gridManager.c_grid(), NULL);
|
||||
Opm::WellsManager wellsManager(eclipseState, 3, *gridManager.c_grid());
|
||||
const Wells* wells = wellsManager.c_wells();
|
||||
|
||||
// There is 3 wells in total in the deck at the 3rd schedule step.
|
||||
@@ -220,8 +220,8 @@ BOOST_AUTO_TEST_CASE(WellsEqual) {
|
||||
Opm::EclipseState eclipseState(deck, parseContext);
|
||||
Opm::GridManager gridManager(eclipseState.getInputGrid());
|
||||
|
||||
Opm::WellsManager wellsManager0(eclipseState, 0, *gridManager.c_grid(), NULL);
|
||||
Opm::WellsManager wellsManager1(eclipseState, 1, *gridManager.c_grid(), NULL);
|
||||
Opm::WellsManager wellsManager0(eclipseState, 0, *gridManager.c_grid());
|
||||
Opm::WellsManager wellsManager1(eclipseState, 1, *gridManager.c_grid());
|
||||
|
||||
BOOST_CHECK(wells_equal( wellsManager0.c_wells() , wellsManager0.c_wells(),false));
|
||||
BOOST_CHECK(!wells_equal( wellsManager0.c_wells() , wellsManager1.c_wells(),false));
|
||||
@@ -235,8 +235,8 @@ BOOST_AUTO_TEST_CASE(ControlsEqual) {
|
||||
Opm::EclipseState eclipseState(deck, parseContext);
|
||||
Opm::GridManager gridManager(eclipseState.getInputGrid());
|
||||
|
||||
Opm::WellsManager wellsManager0(eclipseState, 0, *gridManager.c_grid(), NULL);
|
||||
Opm::WellsManager wellsManager1(eclipseState, 1, *gridManager.c_grid(), NULL);
|
||||
Opm::WellsManager wellsManager0(eclipseState, 0, *gridManager.c_grid());
|
||||
Opm::WellsManager wellsManager1(eclipseState, 1, *gridManager.c_grid());
|
||||
|
||||
BOOST_CHECK(well_controls_equal( wellsManager0.c_wells()->ctrls[0] , wellsManager0.c_wells()->ctrls[0] , false));
|
||||
BOOST_CHECK(well_controls_equal( wellsManager0.c_wells()->ctrls[1] , wellsManager0.c_wells()->ctrls[1] , false));
|
||||
@@ -257,7 +257,7 @@ BOOST_AUTO_TEST_CASE(WellShutOK) {
|
||||
Opm::EclipseState eclipseState(deck, parseContext);
|
||||
Opm::GridManager gridManager(eclipseState.getInputGrid());
|
||||
|
||||
Opm::WellsManager wellsManager2(eclipseState, 2, *gridManager.c_grid(), NULL);
|
||||
Opm::WellsManager wellsManager2(eclipseState, 2, *gridManager.c_grid());
|
||||
|
||||
// Shut wells are not added to the deck. i.e number of wells should be 2-1
|
||||
BOOST_CHECK(wellsManager2.c_wells()->number_of_wells == 1);
|
||||
@@ -273,7 +273,7 @@ BOOST_AUTO_TEST_CASE(WellSTOPOK) {
|
||||
Opm::EclipseState eclipseState(deck, parseContext);
|
||||
Opm::GridManager gridManager(eclipseState.getInputGrid());
|
||||
|
||||
Opm::WellsManager wellsManager(eclipseState, 0, *gridManager.c_grid(), NULL);
|
||||
Opm::WellsManager wellsManager(eclipseState, 0, *gridManager.c_grid());
|
||||
|
||||
const Wells* wells = wellsManager.c_wells();
|
||||
const struct WellControls* ctrls0 = wells->ctrls[0];
|
||||
|
||||
@@ -21,6 +21,8 @@ DZV
|
||||
TOPS
|
||||
100*10 /
|
||||
|
||||
PERMX
|
||||
500*1.0 /
|
||||
|
||||
SCHEDULE
|
||||
|
||||
|
||||
@@ -22,6 +22,9 @@ DZV
|
||||
TOPS
|
||||
100*10 /
|
||||
|
||||
PERMX
|
||||
500*1.0 /
|
||||
|
||||
SCHEDULE
|
||||
|
||||
WELSPECS
|
||||
|
||||
@@ -26,6 +26,8 @@ TOPS
|
||||
100*10
|
||||
/
|
||||
|
||||
PERMX
|
||||
100*1.0 /
|
||||
|
||||
SCHEDULE
|
||||
|
||||
|
||||
Reference in New Issue
Block a user