Changed EclipseGridParser::saveEGRID() to take globalCells as input

This commit is contained in:
Joakim Hove 2013-07-25 12:08:08 +02:00
parent 59b99f7444
commit 9cc3d4dd2d
3 changed files with 64 additions and 62 deletions

View File

@ -116,17 +116,7 @@ namespace Opm
} }
void GridManager::saveEGRID(const std::string& filename , const Opm::EclipseGridParser& deck) { void GridManager::saveEGRID(const std::string& filename , const Opm::EclipseGridParser& deck) {
int global_size = ug_->cartdims[0] * ug_->cartdims[1] * ug_->cartdims[2]; deck.saveEGRID( "FILE.EGRID" , ug_->number_of_cells , ug_->global_cell );
std::vector<int> actnum(global_size);
if (ug_->global_cell) {
actnum.assign( actnum.size() , 0 );
for (int c=0; c < ug_->number_of_cells; c++)
actnum[ug_->global_cell[c]] = 1;
} else
actnum.assign( actnum.size() , 1 );
deck.saveEGRID( "FILE.EGRID" , actnum );
} }

View File

@ -966,54 +966,66 @@ ecl_grid_type * EclipseGridParser::newGrid( ) {
} }
*/ */
void EclipseGridParser::saveEGRID( const std::string & filename , std::vector<int>& actnum) const { void EclipseGridParser::saveEGRID( const std::string & filename , int num_cells , const int * global_cell) const {
bool endian_flip = true;//ECL_ENDIAN_FLIP; bool endian_flip = true;//ECL_ENDIAN_FLIP;
bool fmt_file; bool fmt_file;
struct grdecl grdecl = get_grdecl(); struct grdecl grdecl = get_grdecl();
fortio_type * fortio; fortio_type * fortio;
if (!ecl_util_fmt_file( filename.c_str() , &fmt_file)) {
cerr << "Could not determine formatted/unformatted status of file:" << filename << " non-standard name?" << endl;
throw exception();
}
fortio = fortio_open_writer( filename.c_str() , fmt_file , endian_flip );
{
float * mapaxes = NULL;
if (grdecl.mapaxes != NULL) {
mapaxes = new float[6];
for (int i=0; i < 6; i++)
mapaxes[i]= grdecl.mapaxes[i];
}
ecl_grid_fwrite_EGRID_header( grdecl.dims , mapaxes , fortio );
if (grdecl.mapaxes != NULL)
delete[] mapaxes;
}
if (!ecl_util_fmt_file( filename.c_str() , &fmt_file)) { {
cerr << "Could not determine formatted/unformatted status of file:" << filename << " non-standard name?" << endl; ecl_kw_type * coord_kw = newEclKW( COORD_KW , ECL_FLOAT_TYPE );
throw exception(); ecl_kw_type * zcorn_kw = newEclKW( ZCORN_KW , ECL_FLOAT_TYPE );
} ecl_kw_type * endgrid_kw = ecl_kw_alloc( ENDGRID_KW , 0 , ECL_INT_TYPE );
fortio = fortio_open_writer( filename.c_str() , fmt_file , endian_flip );
{ ecl_kw_fwrite( coord_kw , fortio );
float * mapaxes = NULL; ecl_kw_fwrite( zcorn_kw , fortio );
if (grdecl.mapaxes != NULL) { if (global_cell) {
mapaxes = new float[6]; int global_size = grdecl.dims[0] * grdecl.dims[1] * grdecl.dims[2];
for (int i=0; i < 6; i++) ecl_kw_type * actnum_kw = ecl_kw_alloc( ACTNUM_KW , global_size , ECL_INT_TYPE );
mapaxes[i]= grdecl.mapaxes[i]; int * actnum_data = ecl_kw_get_int_ptr( actnum_kw );
ecl_kw_scalar_set_int( actnum_kw , 0 );
for (int c=0; c < num_cells; c++)
actnum_data[global_cell[c]] = 1;
ecl_kw_fwrite( actnum_kw , fortio );
ecl_kw_free( actnum_kw );
}
ecl_kw_fwrite( endgrid_kw , fortio );
ecl_kw_free( coord_kw );
ecl_kw_free( zcorn_kw );
ecl_kw_free( endgrid_kw );
}
fortio_fclose( fortio );
} }
ecl_grid_fwrite_EGRID_header( grdecl.dims , mapaxes , fortio );
if (grdecl.mapaxes != NULL)
delete[] mapaxes;
}
{
ecl_kw_type * coord_kw = newEclKW( COORD_KW , ECL_FLOAT_TYPE );
ecl_kw_type * zcorn_kw = newEclKW( ZCORN_KW , ECL_FLOAT_TYPE );
ecl_kw_type * actnum_kw = ecl_kw_alloc_new_shared( ACTNUM_KW , grdecl.dims[0] * grdecl.dims[1] * grdecl.dims[2] , ECL_INT_TYPE , &actnum );
ecl_kw_type * endgrid_kw = ecl_kw_alloc( ENDGRID_KW , 0 , ECL_INT_TYPE );
ecl_kw_fwrite( coord_kw , fortio );
ecl_kw_fwrite( zcorn_kw , fortio );
ecl_kw_fwrite( actnum_kw , fortio );
ecl_kw_fwrite( endgrid_kw , fortio );
ecl_kw_free( coord_kw ); /**
ecl_kw_free( zcorn_kw ); Will query the deck for keyword @kw; and save it to the @fortio
ecl_kw_free( actnum_kw ); instance if the keyword can be found.
ecl_kw_free( endgrid_kw ); */
}
fortio_fclose( fortio );
}
/**
Will query the deck for keyword @kw; and save it to the @fortio
instance if the keyword can be found.
*/
void EclipseGridParser::save_kw( fortio_type * fortio , const std::string & kw , ecl_type_enum ecl_type) { void EclipseGridParser::save_kw( fortio_type * fortio , const std::string & kw , ecl_type_enum ecl_type) {
ecl_kw_type * ecl_kw = newEclKW( kw , ecl_type ); ecl_kw_type * ecl_kw = newEclKW( kw , ecl_type );
if (ecl_kw != NULL) { if (ecl_kw != NULL) {
@ -1092,12 +1104,12 @@ void EclipseGridParser::saveEGRID_INIT( const std::string& output_dir , const st
} }
#else #else
void EclipseGridParser::saveEGRID( const std::string & filename, std::vector<int>& actnum) const void EclipseGridParser::saveEGRID( const std::string & filename, int num_cells , const int * global_cell) const
{ {
static_cast<void>(filename); // Suppress "unused variable" warning. static_cast<void>(filename); // Suppress "unused variable" warning.
THROW("Cannot write EGRID format without ERT library support. Reconfigure opm-core with ERT support and recompile."); THROW("Cannot write EGRID format without ERT library support. Reconfigure opm-core with ERT support and recompile.");
} }
#endif #endif
// Read an imported fortio data file using Ert. // Read an imported fortio data file using Ert.

View File

@ -226,7 +226,7 @@ public:
struct grdecl get_grdecl() const; struct grdecl get_grdecl() const;
/// Save grid parts of deck in EGRID format. /// Save grid parts of deck in EGRID format.
void saveEGRID(const std::string & filename, std::vector<int>& actnum) const; void saveEGRID(const std::string & filename, int num_cells , const int * global_cell) const;
#ifdef HAVE_ERT #ifdef HAVE_ERT
void saveEGRID_INIT( const std::string& output_dir , const std::string& basename, bool fmt_file = false); void saveEGRID_INIT( const std::string& output_dir , const std::string& basename, bool fmt_file = false);