Skip to content

Commit

Permalink
Merge pull request #286 from joakim-hove/save-eclgrid-after-deactivat…
Browse files Browse the repository at this point in the history
…ing-cells

Changed EclipseGridParser::saveEGRID() to take globalCells input
  • Loading branch information
bska committed Jul 30, 2013
2 parents 054b764 + 0595269 commit 0023e50
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 50 deletions.
5 changes: 3 additions & 2 deletions opm/core/grid/GridManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,9 @@ namespace Opm
}
}


void GridManager::saveEGRID(const std::string& filename , const Opm::EclipseGridParser& deck) {
deck.saveEGRID( filename , ug_->number_of_cells , ug_->global_cell );
}


/// Destructor.
Expand All @@ -136,7 +138,6 @@ namespace Opm
}



// Construct corner-point grid from deck.
void GridManager::initFromDeckCornerpoint(const Opm::EclipseGridParser& deck)
{
Expand Down
2 changes: 2 additions & 0 deletions opm/core/grid/GridManager.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ namespace Opm
/// Destructor.
~GridManager();

void saveEGRID(const std::string& filename , const Opm::EclipseGridParser& deck);

/// Access the managed UnstructuredGrid.
/// The method is named similarly to c_str() in std::string,
/// to make it clear that we are returning a C-compatible struct.
Expand Down
100 changes: 57 additions & 43 deletions opm/core/io/eclipse/EclipseGridParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -966,49 +966,61 @@ ecl_grid_type * EclipseGridParser::newGrid( ) {
}
*/

void EclipseGridParser::saveEGRID( const std::string & filename) const {
bool endian_flip = true;//ECL_ENDIAN_FLIP;
bool fmt_file;
struct grdecl grdecl = get_grdecl();
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();
}
void EclipseGridParser::saveEGRID( const std::string & filename , int num_cells , const int * global_cell) const {
bool endian_flip = true;//ECL_ENDIAN_FLIP;
bool fmt_file;
struct grdecl grdecl = get_grdecl();
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;
}

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_kw_type * coord_kw = newEclKW( COORD_KW , ECL_FLOAT_TYPE );
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 );


ecl_kw_fwrite( coord_kw , fortio );
ecl_kw_fwrite( zcorn_kw , fortio );
if (global_cell) {
int global_size = grdecl.dims[0] * grdecl.dims[1] * grdecl.dims[2];
ecl_kw_type * actnum_kw = ecl_kw_alloc( ACTNUM_KW , global_size , ECL_INT_TYPE );
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 = newEclKW( ACTNUM_KW , ECL_INT_TYPE );
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 );
ecl_kw_free( actnum_kw );
ecl_kw_free( endgrid_kw );
}
fortio_fclose( fortio );
}

/**
Will query the deck for keyword @kw; and save it to the @fortio
Expand Down Expand Up @@ -1092,12 +1104,14 @@ void EclipseGridParser::saveEGRID_INIT( const std::string& output_dir , const st
}
#else

void EclipseGridParser::saveEGRID( const std::string & filename) 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.
static_cast<void>(num_cells); // Suppress "unused variable" warning.
static_cast<void>(global_cell); // Suppress "unused variable" warning.
THROW("Cannot write EGRID format without ERT library support. Reconfigure opm-core with ERT support and recompile.");
}

#endif

// Read an imported fortio data file using Ert.
Expand Down
11 changes: 6 additions & 5 deletions opm/core/io/eclipse/EclipseGridParser.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -225,13 +225,14 @@ public:

struct grdecl get_grdecl() const;

/// Save grid parts of deck in EGRID format.
void saveEGRID(const std::string & filename) const;
/// Save grid parts of deck in EGRID format.
void saveEGRID(const std::string & filename, int num_cells , const int * global_cell) const;

#ifdef HAVE_ERT
void saveEGRID_INIT( const std::string& output_dir , const std::string& basename, bool fmt_file = false);
void saveINIT( const std::string & filename , const ecl_grid_type * ecl_grid);
ecl_grid_type * newGrid( );
//void saveEGRID_INIT( const std::string& output_dir , const std::string& basename, bool fmt_file = false);
void saveINIT( const std::string & filename , const ecl_grid_type * ecl_grid);
void saveEGRID_INIT( const std::string& output_dir , const std::string& basename, bool fmt_file);
ecl_grid_type * newGrid( );
#endif


Expand Down

0 comments on commit 0023e50

Please sign in to comment.