Support cylindrical grids as a spiderweb with corrected volumes
This commit is contained in:
@@ -1465,6 +1465,112 @@ BOOST_AUTO_TEST_CASE(SpiderDetailsDZ) {
|
||||
}
|
||||
}
|
||||
|
||||
static Opm::Deck radial_details() {
|
||||
const char* deckData =
|
||||
"RUNSPEC\n"
|
||||
"\n"
|
||||
"DIMENS\n"
|
||||
"1 5 2 /\n"
|
||||
"RADIAL\n"
|
||||
"GRID\n"
|
||||
"INRAD\n"
|
||||
"1 /\n"
|
||||
"DRV\n"
|
||||
"1 /\n"
|
||||
"DTHETAV\n"
|
||||
"3*90 60 30/\n"
|
||||
"DZV\n"
|
||||
"2*1 /\n"
|
||||
"TOPS\n"
|
||||
"5*1.0 /\n"
|
||||
"PORO \n"
|
||||
" 10*0.15 /"
|
||||
"\n";
|
||||
|
||||
Opm::Parser parser;
|
||||
return parser.parseString( deckData);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(RadialDetails) {
|
||||
Opm::Deck deck = radial_details();
|
||||
Opm::EclipseGrid grid( deck );
|
||||
|
||||
BOOST_CHECK_CLOSE( grid.getCellVolume( 0 , 0 , 0 ) , 0.75 * M_PI, 0.0001);
|
||||
BOOST_CHECK_CLOSE( grid.getCellVolume( 0 , 3 , 0 ) , 0.5 * M_PI , 0.0001);
|
||||
auto pos0 = grid.getCellCenter(0,0,0);
|
||||
auto pos2 = grid.getCellCenter(0,2,0);
|
||||
|
||||
BOOST_CHECK_CLOSE( std::get<0>(pos0) , 0.75 , 0.0001);
|
||||
BOOST_CHECK_CLOSE( std::get<1>(pos0) , 0.75 , 0.0001);
|
||||
BOOST_CHECK_CLOSE( std::get<2>(pos0) , 1.50 , 0.0001);
|
||||
|
||||
BOOST_CHECK_CLOSE( std::get<0>(pos2) , -0.75 , 0.0001);
|
||||
BOOST_CHECK_CLOSE( std::get<1>(pos2) , -0.75 , 0.0001);
|
||||
BOOST_CHECK_CLOSE( std::get<2>(pos2) , 1.50 , 0.0001);
|
||||
|
||||
{
|
||||
const auto& p0 = grid.getCornerPos( 0,0,0 , 0 );
|
||||
const auto& p6 = grid.getCornerPos( 0,0,0 , 6 );
|
||||
BOOST_CHECK_CLOSE( p0[0]*p0[0] + p0[1]*p0[1] , 1.0, 0.0001);
|
||||
BOOST_CHECK_CLOSE( p6[0]*p6[0] + p6[1]*p6[1] , 1.0, 0.0001);
|
||||
|
||||
BOOST_CHECK_THROW( grid.getCornerPos( 0,0,0 , 8 ) , std::invalid_argument);
|
||||
}
|
||||
}
|
||||
|
||||
static Opm::Deck radial_details_dz() {
|
||||
const char* deckData =
|
||||
"RUNSPEC\n"
|
||||
"\n"
|
||||
"DIMENS\n"
|
||||
"1 5 2 /\n"
|
||||
"RADIAL\n"
|
||||
"GRID\n"
|
||||
"INRAD\n"
|
||||
"1 /\n"
|
||||
"DRV\n"
|
||||
"1 /\n"
|
||||
"DTHETAV\n"
|
||||
"3*90 60 30/\n"
|
||||
"DZ\n"
|
||||
"10*1 /\n"
|
||||
"TOPS\n"
|
||||
"5*1.0 /\n"
|
||||
"PORO \n"
|
||||
" 10*0.15 /"
|
||||
"\n";
|
||||
|
||||
Opm::Parser parser;
|
||||
return parser.parseString( deckData);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(RadialDetailsDZ) {
|
||||
Opm::Deck deck = radial_details_dz();
|
||||
Opm::EclipseGrid grid( deck );
|
||||
|
||||
BOOST_CHECK_CLOSE( grid.getCellVolume( 0 , 0 , 0 ) , 0.75 * M_PI, 0.0001);
|
||||
BOOST_CHECK_CLOSE( grid.getCellVolume( 0 , 3 , 0 ) , 0.5 * M_PI , 0.0001);
|
||||
auto pos0 = grid.getCellCenter(0,0,0);
|
||||
auto pos2 = grid.getCellCenter(0,2,0);
|
||||
|
||||
BOOST_CHECK_CLOSE( std::get<0>(pos0) , 0.75 , 0.0001);
|
||||
BOOST_CHECK_CLOSE( std::get<1>(pos0) , 0.75 , 0.0001);
|
||||
BOOST_CHECK_CLOSE( std::get<2>(pos0) , 1.50 , 0.0001);
|
||||
|
||||
BOOST_CHECK_CLOSE( std::get<0>(pos2) , -0.75 , 0.0001);
|
||||
BOOST_CHECK_CLOSE( std::get<1>(pos2) , -0.75 , 0.0001);
|
||||
BOOST_CHECK_CLOSE( std::get<2>(pos2) , 1.50 , 0.0001);
|
||||
|
||||
{
|
||||
const auto& p0 = grid.getCornerPos( 0,0,0 , 0 );
|
||||
const auto& p6 = grid.getCornerPos( 0,0,0 , 6 );
|
||||
BOOST_CHECK_CLOSE( p0[0]*p0[0] + p0[1]*p0[1] , 1.0, 0.0001);
|
||||
BOOST_CHECK_CLOSE( p6[0]*p6[0] + p6[1]*p6[1] , 1.0, 0.0001);
|
||||
|
||||
BOOST_CHECK_THROW( grid.getCornerPos( 0,0,0 , 8 ) , std::invalid_argument);
|
||||
}
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(CoordMapper) {
|
||||
size_t nx = 10;
|
||||
size_t ny = 7;
|
||||
|
||||
Reference in New Issue
Block a user