Use opm-internal algorithm for volume calculation

This commit is contained in:
Joakim Hove
2018-03-19 10:41:01 +01:00
committed by Atgeirr Flø Rasmussen
parent ca79b16b26
commit 976bfdab35
2 changed files with 22 additions and 6 deletions

View File

@@ -181,9 +181,9 @@ namespace Opm {
Value<double> m_pinch;
PinchMode::ModeEnum m_pinchoutMode;
PinchMode::ModeEnum m_multzMode;
std::vector<double> volume_cache mutable;
mutable std::vector< int > activeMap;
bool m_circle = false;
/*
The internal class grid_ptr is a a std::unique_ptr with
special copy semantics. The purpose of implementing this is

View File

@@ -61,7 +61,8 @@ namespace Opm {
m_minpvMode(MinpvMode::ModeEnum::Inactive),
m_pinch("PINCH"),
m_pinchoutMode(PinchMode::ModeEnum::TOPBOT),
m_multzMode(PinchMode::ModeEnum::TOP)
m_multzMode(PinchMode::ModeEnum::TOP),
volume_cache(dims[0] * dims[1] * dims[2], -1)
{
initCornerPointGrid( dims, coord , zcorn , actnum , mapaxes );
}
@@ -78,7 +79,8 @@ namespace Opm {
m_minpvMode(MinpvMode::ModeEnum::Inactive),
m_pinch("PINCH"),
m_pinchoutMode(PinchMode::ModeEnum::TOPBOT),
m_multzMode(PinchMode::ModeEnum::TOP)
m_multzMode(PinchMode::ModeEnum::TOP),
volume_cache(dims[0] * dims[1] * dims[2], -1)
{
ecl_grid_type * new_ptr = ecl_grid_load_case__( filename.c_str() , false );
if (new_ptr)
@@ -100,6 +102,7 @@ namespace Opm {
m_pinch("PINCH"),
m_pinchoutMode(PinchMode::ModeEnum::TOPBOT),
m_multzMode(PinchMode::ModeEnum::TOP),
volume_cache(dims[0] * dims[1] * dims[2], -1)
m_grid( ecl_grid_alloc_rectangular(nx, ny, nz, dx, dy, dz, NULL) )
{
}
@@ -110,7 +113,8 @@ namespace Opm {
m_minpvMode( src.m_minpvMode ),
m_pinch( src.m_pinch ),
m_pinchoutMode( src.m_pinchoutMode ),
m_multzMode( src.m_multzMode )
m_multzMode( src.m_multzMode ),
volume_cache(dims[0] * dims[1] * dims[2], -1)
{
const int * actnum_data = (actnum.empty()) ? nullptr : actnum.data();
m_grid.reset( ecl_grid_alloc_processed_copy( src.c_ptr(), zcorn , actnum_data ));
@@ -163,7 +167,8 @@ namespace Opm {
m_minpvMode(MinpvMode::ModeEnum::Inactive),
m_pinch("PINCH"),
m_pinchoutMode(PinchMode::ModeEnum::TOPBOT),
m_multzMode(PinchMode::ModeEnum::TOP)
m_multzMode(PinchMode::ModeEnum::TOP),
volume_cache(dims[0] * dims[1] * dims[2], -1)
{
const std::array<int, 3> dims = getNXYZ();
@@ -728,7 +733,18 @@ namespace Opm {
double EclipseGrid::getCellVolume(size_t globalIndex) const {
assertGlobalIndex( globalIndex );
return ecl_grid_get_cell_volume1( c_ptr() , static_cast<int>(globalIndex));
if (volume_cache[global_index] < 0) {
std::vector<double> x(8,0);
std::vector<double> y(8,0);
std::vector<double> z(8,0);
for (int i=0; i < 8; i++)
ecl_grid_gell_corner_xyz1(c_ptr(), static_cast<int>(globalIndex), i, &x.data()[i], &y.data()[i], &z.data()[i]);
volume_cache[i] = calc_cell_volume(x,y,z);
}
return volume_cache[global_index];
}