diff --git a/examples/import_rewrite.cpp b/examples/import_rewrite.cpp index 50ec9da2..46647c53 100644 --- a/examples/import_rewrite.cpp +++ b/examples/import_rewrite.cpp @@ -45,7 +45,7 @@ const ecl_type_enum outputFloatType = ECL_DOUBLE_TYPE; /* Only keywords which have more >= minImportSize elements are converted to binary form. This is to avoid conversion of short - keywords like MAPAXES and TABDIMS. + keywords like MAPAXES and TABDIMS. */ const int minImportSize = 10; @@ -64,7 +64,7 @@ static void skipKeyword( std::ifstream& is) { break; } else is >> ignoreLine; - + if (!is.good()) { is.clear(); is.seekg( 0 , std::ios::end ); @@ -80,7 +80,7 @@ static void copyKeyword( std::ifstream& is , std::ofstream& os) { { std::ios::pos_type end_pos = is.tellg(); long length = end_pos - start_pos; - + { char * buffer = new char[length]; { @@ -121,7 +121,7 @@ static bool convertKeyword( const std::string& inputFile , const std::string& ou { std::ios::pos_type inputPos = is.tellg(); ecl_kw_type * ecl_kw = loadFromcstdio( inputFile , inputPos , ecl_type ); - + if (ecl_kw_get_size( ecl_kw ) >= minImportSize) { { if (outputPath.empty()) @@ -133,7 +133,7 @@ static bool convertKeyword( const std::string& inputFile , const std::string& ou ecl_kw_fwrite( ecl_kw , fortio ); fortio_fclose( fortio ); } - + os << "IMPORT" << std::endl << " '" << outputFile << "' /" << std::endl << std::endl; } is.seekg( inputPos ); @@ -141,7 +141,7 @@ static bool convertKeyword( const std::string& inputFile , const std::string& ou copyKeyword( is , os ); convert = false; } - + ecl_kw_free( ecl_kw ); } @@ -156,7 +156,7 @@ static bool parseFile(const std::string& inputFile, std::string& outputFile, con bool updateFile = false; std::cout << indent << "Parsing " << inputFile << "\n"; { - std::ifstream is(inputFile.c_str()); + std::ifstream is(inputFile.c_str()); if (is) { std::ofstream os; std::string keyword; @@ -165,11 +165,11 @@ static bool parseFile(const std::string& inputFile, std::string& outputFile, con boost::filesystem::path inputPath(inputFile); path = inputPath.parent_path().string(); } - + { std::string basename; std::string extension; - + outputFile = inputFile; size_t ext_pos = inputFile.rfind("."); if (ext_pos == std::string::npos) { @@ -179,14 +179,14 @@ static bool parseFile(const std::string& inputFile, std::string& outputFile, con basename = outputFile.substr(0,ext_pos); extension = outputFile.substr(ext_pos); } - + outputFile = basename + "_import" + extension; } os.open( outputFile.c_str() ); - + while(is.good()) { is >> ignoreWhitespace; - { + { std::ios::pos_type start_pos = is.tellg(); if (EclipseGridParser::readKeyword( is , keyword )) { FieldType fieldType = EclipseGridParser::classifyKeyword( keyword ); @@ -231,7 +231,7 @@ static bool parseFile(const std::string& inputFile, std::string& outputFile, con is >> ignoreLine; // Not at a valid keyword } } - + os.close(); is.close(); if (updateFile) diff --git a/opm/core/grid/ColumnExtract.hpp b/opm/core/grid/ColumnExtract.hpp index cbe570bf..9bb4b76a 100644 --- a/opm/core/grid/ColumnExtract.hpp +++ b/opm/core/grid/ColumnExtract.hpp @@ -57,7 +57,7 @@ namespace Opm { inline void extractColumn( const UnstructuredGrid& grid, std::vector >& columns ) { const int* dims = grid.cartdims; - + // Keeps track of column_index ---> index of vector std::map global_to_local; for (int cell = 0; cell < grid.number_of_cells; ++cell) { @@ -73,7 +73,7 @@ inline void extractColumn( const UnstructuredGrid& grid, std::vectorsecond; } else { local_index = columns.size(); - global_to_local[i_cart+j_cart*dims[0]] = local_index; + global_to_local[i_cart+j_cart*dims[0]] = local_index; columns.push_back(std::vector()); } columns[local_index].push_back(cell); @@ -116,7 +116,7 @@ inline void extractColumn( const UnstructuredGrid& grid, std::vector with x-dip in first component and y-dip in second. -*/ +*/ std::pair EclipseGridInspector::cellDips(int i, int j, int k) const { checkLogicalCoords(i, j, k); @@ -176,15 +176,15 @@ std::pair EclipseGridInspector::cellDips(int cell_idx) const boost::array EclipseGridInspector::cellIdxToLogicalCoords(int cell_idx) const { - + int i,j,k; // Position of cell in cell hierarchy int horIdx = (cell_idx+1) - int(std::floor(((double)(cell_idx+1))/((double)(logical_gridsize_[0]*logical_gridsize_[1]))))*logical_gridsize_[0]*logical_gridsize_[1]; // index in the corresponding horizon - if (horIdx == 0) { - horIdx = logical_gridsize_[0]*logical_gridsize_[1]; + if (horIdx == 0) { + horIdx = logical_gridsize_[0]*logical_gridsize_[1]; } i = horIdx - int(std::floor(((double)horIdx)/((double)logical_gridsize_[0])))*logical_gridsize_[0]; - if (i == 0) { - i = logical_gridsize_[0]; + if (i == 0) { + i = logical_gridsize_[0]; } j = (horIdx-i)/logical_gridsize_[0]+1; k = ((cell_idx+1)-logical_gridsize_[0]*(j-1)-1)/(logical_gridsize_[0]*logical_gridsize_[1])+1; diff --git a/opm/core/io/eclipse/EclipseGridInspector.hpp b/opm/core/io/eclipse/EclipseGridInspector.hpp index 261e765b..d83d655d 100644 --- a/opm/core/io/eclipse/EclipseGridInspector.hpp +++ b/opm/core/io/eclipse/EclipseGridInspector.hpp @@ -1,15 +1,15 @@ //=========================================================================== -// -// File: EclipseGridInspector.h -// -// Created: Mon Jun 2 09:46:08 2008 -// +// +// File: EclipseGridInspector.h +// +// Created: Mon Jun 2 09:46:08 2008 +// // Author: Atgeirr F Rasmussen // // $Date$ -// +// // Revision: $Id: EclipseGridInspector.h,v 1.2 2008/08/18 14:16:12 atgeirr Exp $ -// +// //=========================================================================== /* @@ -77,9 +77,9 @@ public: // Convert global cell index to logical ijk-coordinates boost::array cellIdxToLogicalCoords(int cell_idx) const; - + /// Returns a vector with the outer limits of grid (in the grid's unit). - /// The vector contains [xmin, xmax, ymin, ymax, zmin, zmax], as + /// The vector contains [xmin, xmax, ymin, ymax, zmin, zmax], as /// read from COORDS and ZCORN boost::array getGridLimits() const; diff --git a/opm/core/io/eclipse/EclipseGridParser.cpp b/opm/core/io/eclipse/EclipseGridParser.cpp index c4bfda4d..0d2957cb 100644 --- a/opm/core/io/eclipse/EclipseGridParser.cpp +++ b/opm/core/io/eclipse/EclipseGridParser.cpp @@ -176,7 +176,7 @@ namespace { return us; } - + } // anon namespace @@ -242,7 +242,7 @@ EclipseGridParser::EclipseGridParser(const string& filename, bool convert_to_SI) return Unknown; } } - + bool EclipseGridParser::readKeyword(std::istream& is, std::string& keyword) { @@ -253,7 +253,7 @@ bool EclipseGridParser::readKeyword(std::istream& is, std::string& keyword) for (i=0; i<9; ++i) { buf[i] = '\0'; } - + /* Read first character and check if it is uppercase*/ //buf[0] = fgetc(fp); is.get(buf[0]); @@ -261,7 +261,7 @@ bool EclipseGridParser::readKeyword(std::istream& is, std::string& keyword) is.unget(); return false; /* NOT VALID CHARACTER */ } - + /* Scan as much as possible possible keyword, 8 characters long */ i = 1; is.get(c); @@ -275,7 +275,7 @@ bool EclipseGridParser::readKeyword(std::istream& is, std::string& keyword) buf[i++] = c; is.get(c); } - + /* Skip rest of line */ if (c != '\n'){ is.get(c); @@ -288,14 +288,14 @@ bool EclipseGridParser::readKeyword(std::istream& is, std::string& keyword) if(c == '\n') { is.unget(); } - + /* Find first non-uppercase or non-digit character */ for (i=0; i<8; ++i) { if ( !(isupper(buf[i]) || isdigit(buf[i])) ) { break; } } - + /* Check if remaining characters are blank */ for (j = i; j<8; ++j) { if(!isspace(buf[j]) && buf[j] != '\0') { @@ -309,7 +309,7 @@ bool EclipseGridParser::readKeyword(std::istream& is, std::string& keyword) keyword = keyword.substr(0, end+1); return true; } - + /// Read the given stream, overwriting any previous data. //--------------------------------------------------------------------------- @@ -559,7 +559,7 @@ void EclipseGridParser::convertToSI() key == "PWAVEMOD" || key == "MULTPV" || key == "PWAVEMOD" || key == "SGAS" || key == "SWAT" || key == "SOIL" || key == "SWCR" || key == "SWL" || - key == "SWU" || key == "SOWCR" || key == "KRW" || + key == "SWU" || key == "SOWCR" || key == "KRW" || key == "KRWR" || key == "KRORW" || key == "KRO") { unit = 1.0; do_convert = false; // Dimensionless keywords... @@ -834,11 +834,11 @@ void EclipseGridParser::computeUnits() THROW("Unknown unit family " << unit_family); } } - + struct grdecl EclipseGridParser::get_grdecl() const { struct grdecl grdecl; - + // Extract data from deck. const std::vector& zcorn = getFloatingPointValue("ZCORN"); const std::vector& coord = getFloatingPointValue("COORD"); @@ -855,9 +855,9 @@ struct grdecl EclipseGridParser::get_grdecl() const { } else { THROW("Deck must have either DIMENS or SPECGRID."); } - + // Collect in input struct for preprocessing. - + grdecl.zcorn = &zcorn[0]; grdecl.coord = &coord[0]; grdecl.actnum = actnum; @@ -870,8 +870,8 @@ struct grdecl EclipseGridParser::get_grdecl() const { grdecl.mapaxes = &mapaxes[0]; } else grdecl.mapaxes = NULL; - - + + return grdecl; } @@ -880,16 +880,16 @@ struct grdecl EclipseGridParser::get_grdecl() const { /* This function will create a ecl_kw instance filled with the data from input argument @keyword. The ecl_kw will get it's own copy of - the data. + the data. If the input type ecl_type == ECL_INT_TYPE the function will use the getIntegerValue() method to get the keyword data, if ecl_type == ECL_DOUBLE_TYPE || ECL_FLOAT_TYPE the getFloatingPointValue() function is invoked. If ecl_type == ECL_FLOAT_TYPE the data will be converted to when inserting into the ecl_kw. - + When the ecl_kw instance is no longer needed it should be discarded - with a call to ecl_kw_free( ). + with a call to ecl_kw_free( ). If you are asking for a non-existent field the function will return NULL */ @@ -909,8 +909,8 @@ ecl_kw_type * EclipseGridParser::newEclKW(const std::string &keyword , ecl_type_ } else if (ecl_type == ECL_FLOAT_TYPE) { ecl_kw = ecl_kw_alloc( keyword.c_str() , data.size() , ecl_type ); for (std::vector::size_type i=0; i < data.size(); i++) - ecl_kw_iset_float( ecl_kw , i , data[i] ); - } + ecl_kw_iset_float( ecl_kw , i , data[i] ); + } } } return ecl_kw; @@ -920,7 +920,7 @@ ecl_kw_type * EclipseGridParser::newEclKW(const std::string &keyword , ecl_type_ /** This function will extract the COORD, ZCORN, ACTNUM and optionaly MAPAXES keywords from the eclipse deck and create an ecl_grid - instance. + instance. When you are finished working with the ecl_grid instance it should be disposed with ecl_grid_free( ). @@ -938,7 +938,7 @@ ecl_grid_type * EclipseGridParser::newGrid( ) { mapaxes_kw = newEclKW( MAPAXES_KW , ECL_FLOAT_TYPE ); grid = ecl_grid_alloc_GRDECL_kw( grdecl.dims[0] , grdecl.dims[1] , grdecl.dims[2] , zcorn_kw , coord_kw , actnum_kw , mapaxes_kw ); - + ecl_kw_free( coord_kw ); ecl_kw_free( zcorn_kw ); ecl_kw_free( actnum_kw ); @@ -952,7 +952,7 @@ ecl_grid_type * EclipseGridParser::newGrid( ) { /** This function will save an EGRID file based on the COORD, ZCORN, - ACTNUM and optionally MAPAXES keywords included in the deck. + ACTNUM and optionally MAPAXES keywords included in the deck. This function creates the EGRID file without going through a ecl_grid instance; this is obviously somewhat faster and less @@ -976,7 +976,7 @@ void EclipseGridParser::saveEGRID( const std::string & filename) const { 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; @@ -988,7 +988,7 @@ void EclipseGridParser::saveEGRID( const std::string & filename) const { ecl_grid_fwrite_EGRID_header( grdecl.dims , mapaxes , fortio ); - if (grdecl.mapaxes != NULL) + if (grdecl.mapaxes != NULL) delete[] mapaxes; } { @@ -1001,7 +1001,7 @@ void EclipseGridParser::saveEGRID( const std::string & filename) const { 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 ); @@ -1012,7 +1012,7 @@ void EclipseGridParser::saveEGRID( const std::string & filename) const { /** Will query the deck for keyword @kw; and save it to the @fortio - instance if the keyword can be found. + instance if the keyword can be found. */ 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 ); @@ -1045,25 +1045,25 @@ void EclipseGridParser::saveINIT( const std::string & filename , const ecl_grid_ { ecl_kw_type * poro_kw = newEclKW( PORO_KW , ECL_FLOAT_TYPE ); time_t start_date; - + { tm td_tm = to_tm( start_date_ ); start_date = mktime( &td_tm ); } - - ecl_init_file_fwrite_header( fortio , ecl_grid , poro_kw , phases , start_date ); + + ecl_init_file_fwrite_header( fortio , ecl_grid , poro_kw , phases , start_date ); ecl_kw_free( poro_kw ); } - + /* This collection of keywords is somewhat arbitrary and random. */ save_kw( fortio , "PERMX" , ECL_FLOAT_TYPE); save_kw( fortio , "PERMY" , ECL_FLOAT_TYPE); save_kw( fortio , "PERMZ" , ECL_FLOAT_TYPE); - + save_kw( fortio , "FIPNUM" , ECL_INT_TYPE); save_kw( fortio , "SATNUM" , ECL_INT_TYPE); save_kw( fortio , "EQLNUM" , ECL_INT_TYPE); - + fortio_fclose( fortio ); } @@ -1071,7 +1071,7 @@ void EclipseGridParser::saveINIT( const std::string & filename , const ecl_grid_ /** This is the main function used to save the state of the ECLIPSE deck in ECLIPSE format. The function will save an INIT file and an - EGRID file. + EGRID file. The input arguments are the output directory to store files in, and the basename to use for the files; the function will build up a @@ -1082,10 +1082,10 @@ void EclipseGridParser::saveEGRID_INIT( const std::string& output_dir , const st ecl_grid_type * ecl_grid = newGrid(); char * egrid_file = ecl_util_alloc_filename( output_dir.c_str() , basename.c_str() , ECL_EGRID_FILE , fmt_file , 0); char * init_file = ecl_util_alloc_filename( output_dir.c_str() , basename.c_str() , ECL_INIT_FILE , fmt_file , 0); - + ecl_grid_fwrite_EGRID( ecl_grid , egrid_file ); saveINIT( init_file , ecl_grid ); - + free( init_file ); free( egrid_file ); ecl_grid_free( ecl_grid ); @@ -1100,7 +1100,7 @@ void EclipseGridParser::saveEGRID( const std::string & filename) const #endif -// Read an imported fortio data file using Ert. +// Read an imported fortio data file using Ert. // Data stored in 'integer_field_map_' and 'floating_field_map_'. void EclipseGridParser::getNumericErtFields(const string& filename) { diff --git a/opm/core/io/eclipse/EclipseGridParser.hpp b/opm/core/io/eclipse/EclipseGridParser.hpp index f9fddb23..6032a3cf 100644 --- a/opm/core/io/eclipse/EclipseGridParser.hpp +++ b/opm/core/io/eclipse/EclipseGridParser.hpp @@ -1,15 +1,15 @@ //=========================================================================== -// -// File: EclipseGridParser.h -// -// Created: Wed Dec 5 17:05:13 2007 -// +// +// File: EclipseGridParser.h +// +// Created: Wed Dec 5 17:05:13 2007 +// // Author: Atgeirr F Rasmussen // // $Date$ -// +// // Revision: $Id: EclipseGridParser.h,v 1.3 2008/08/18 14:16:13 atgeirr Exp $ -// +// //=========================================================================== /* @@ -57,7 +57,7 @@ namespace Opm /** @brief A class for reading and parsing all fields of an eclipse file. - + This object is constructed using an Eclipse .grdecl-file. All data fields are extracted upon construction and written to vector data structures, which can then be read out afterwards via @@ -140,7 +140,7 @@ namespace Opm typedef boost::shared_ptr SpecialFieldPtr; - /// Returns a reference to a vector containing pointers to the values + /// Returns a reference to a vector containing pointers to the values /// corresponding to the given keyword when the values are not only integers /// or floats. const SpecialFieldPtr getSpecialValue(const std::string& keyword) const; @@ -225,7 +225,7 @@ public: 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) const; #ifdef HAVE_ERT diff --git a/opm/core/io/eclipse/EclipseGridParserHelpers.hpp b/opm/core/io/eclipse/EclipseGridParserHelpers.hpp index a476cd1a..a53e7292 100644 --- a/opm/core/io/eclipse/EclipseGridParserHelpers.hpp +++ b/opm/core/io/eclipse/EclipseGridParserHelpers.hpp @@ -147,7 +147,7 @@ namespace std::string dummy; is >> dummy; if (dummy == "/") { - is >> ignoreLine; + is >> ignoreLine; break; } else if (dummy[0] == '-') { // "comment test" is >> ignoreLine; // This line is a comment @@ -221,7 +221,7 @@ namespace } - // Returns month number 1-12. Returns 0 if illegal month name. + // Returns month number 1-12. Returns 0 if illegal month name. inline int getMonthNumber(const std::string& month_name) { const int num_months = 12; @@ -302,7 +302,7 @@ namespace const std::ctype& ct = std::use_facet< std::ctype >(std::locale::classic()); std::vector record; - std::vector > table; + std::vector > table; while (!is.eof()) { record.clear(); readVectorData(is, record); @@ -350,7 +350,7 @@ namespace const std::string& field_name, int ncol) { std::vector record; - std::vector > table(ncol); + std::vector > table(ncol); while (!is.eof()) { record.clear(); readVectorData(is, record); @@ -390,15 +390,15 @@ namespace for (int i=0; i xv, yv; for (int i=0; i record; - std::vector > table(ncol); + std::vector > table(ncol); while (!is.eof()) { record.clear(); readRelPermTable(is, record); diff --git a/opm/core/io/eclipse/SpecialEclipseFields.hpp b/opm/core/io/eclipse/SpecialEclipseFields.hpp index 9041b28b..56f8e39a 100644 --- a/opm/core/io/eclipse/SpecialEclipseFields.hpp +++ b/opm/core/io/eclipse/SpecialEclipseFields.hpp @@ -63,11 +63,11 @@ struct SpecialBase { -/// Class for keyword SPECGRID +/// Class for keyword SPECGRID struct SPECGRID : public SpecialBase { std::vector dimensions; // Number of grid blocks in x-, y- and z-directions. - int numres; // Number of reservoirs. + int numres; // Number of reservoirs. char qrdial; // Coordinates. F=cartesian, T=Cylindrical(radial). SPECGRID() @@ -98,14 +98,14 @@ struct SPECGRID : public SpecialBase } else { qrdial = candidate[0]; } - + if (ignoreSlashLine(is)) { return; } else { THROW("End of file reading" << name()); } } - + virtual void write(std::ostream& os) const { os << name() << std::endl; @@ -243,7 +243,7 @@ struct MULTFLT : public SpecialBase { os << name() << std::endl; for (int i=0; i<(int)multflts.size(); ++i) { - os << multflts[i].fault_name << " " + os << multflts[i].fault_name << " " << multflts[i].transmis_multiplier << " " << multflts[i].diffusivity_multiplier << std::endl; } @@ -301,7 +301,7 @@ struct GRUPTREE : public SpecialBase { std::cout << "CHILD = " << child << std::endl << "PARENT = " << parent << std::endl; tree[child] = parent; - + is >> ignoreSlashLine; is >> ignoreWhitespace; if(is.peek() == int('/')) { @@ -396,7 +396,7 @@ struct DENSITY : public SpecialBase struct PVDG : public SpecialBase { - table_t pvdg_; + table_t pvdg_; virtual std::string name() const {return std::string("PVDG");} @@ -433,7 +433,7 @@ struct PVDG : public SpecialBase struct PVDO : public SpecialBase { - table_t pvdo_; + table_t pvdo_; virtual std::string name() const {return std::string("PVDO");} @@ -470,7 +470,7 @@ struct PVDO : public SpecialBase struct PVTG : public SpecialBase { - table_t pvtg_; + table_t pvtg_; virtual std::string name() const {return std::string("PVTG");} @@ -522,7 +522,7 @@ struct PVTG : public SpecialBase struct PVTO : public SpecialBase { - table_t pvto_; + table_t pvto_; virtual std::string name() const {return std::string("PVTO");} @@ -667,7 +667,7 @@ struct ROCK : public SpecialBase struct ROCKTAB : public SpecialBase { - table_t rocktab_; + table_t rocktab_; virtual std::string name() const {return std::string("ROCKTAB");} @@ -702,7 +702,7 @@ struct ROCKTAB : public SpecialBase struct SGOF : public SpecialBase { - table_t sgof_; + table_t sgof_; virtual std::string name() const {return std::string("SGOF");} @@ -733,7 +733,7 @@ struct SGOF : public SpecialBase struct SWOF : public SpecialBase { - table_t swof_; + table_t swof_; virtual std::string name() const {return std::string("SWOF");} @@ -805,7 +805,7 @@ struct WELSPECS : public SpecialBase virtual void read(std::istream& is) { while(is) { - std::string wellname = readString(is); + std::string wellname = readString(is); if (wellname[0] == '/') { is >> ignoreLine; break; @@ -839,7 +839,7 @@ struct WELSPECS : public SpecialBase // welspecs_line.crossflow_ = readString(is); // int_data[0] = 0; // readDefaultedVectorData(is, int_data, 1); - // welspecs_line.pressure_table_number_ = int_data[0]; + // welspecs_line.pressure_table_number_ = int_data[0]; // welspecs_line.density_calc_type_ = readString(is); // int_data[0] = 0; // readDefaultedVectorData(is, int_data, 1); @@ -852,7 +852,7 @@ struct WELSPECS : public SpecialBase { os << name() << std::endl; for (int i=0; i<(int)welspecs.size(); ++i) { - os << welspecs[i].name_ << " " + os << welspecs[i].name_ << " " << welspecs[i].group_ << " " << welspecs[i].I_ << " " << welspecs[i].J_ << " " @@ -927,7 +927,7 @@ struct COMPDAT : public SpecialBase virtual void read(std::istream& is) { while(is) { - std::string wellname = readString(is); + std::string wellname = readString(is); if (wellname[0] == '/') { is >> ignoreLine; break; @@ -962,7 +962,7 @@ struct COMPDAT : public SpecialBase { os << name() << std::endl; for (int i=0; i<(int)compdat.size(); ++i) { - os << compdat[i].well_ << " " + os << compdat[i].well_ << " " << compdat[i].grid_ind_[0] << " " << compdat[i].grid_ind_[1] << " " << compdat[i].grid_ind_[2] << " " @@ -1004,7 +1004,7 @@ struct GconinjeLine double resv_flow_max_rate_; // Reservoir flow rate target or upper limit double reinjection_fraction_target_; double voidage_replacement_fraction_; - + // Default values GconinjeLine() : surface_flow_max_rate_(-1.0E20), @@ -1032,7 +1032,7 @@ struct GCONINJE : public SpecialBase virtual void read(std::istream& is) { while(is) { - std::string groupname = readString(is); + std::string groupname = readString(is); if (groupname[0] == '/') { is >> ignoreLine; break; @@ -1058,21 +1058,21 @@ struct GCONINJE : public SpecialBase ignoreSlashLine(is); } gconinje.push_back(gconinje_line); - + } - + } virtual void write(std::ostream& os) const { os << name() << std::endl; for (int i=0; i<(int) gconinje.size(); ++i) { - os << gconinje[i].group_ << " " - << gconinje[i].injector_type_ << " " - << gconinje[i].control_mode_ << " " - << gconinje[i].surface_flow_max_rate_ << " " + os << gconinje[i].group_ << " " + << gconinje[i].injector_type_ << " " + << gconinje[i].control_mode_ << " " + << gconinje[i].surface_flow_max_rate_ << " " << gconinje[i].reinjection_fraction_target_ - << std::endl; + << std::endl; } os << std::endl; } @@ -1135,7 +1135,7 @@ struct WCONINJE : public SpecialBase virtual void read(std::istream& is) { while(is) { - std::string wellname = readString(is); + std::string wellname = readString(is); if (wellname[0] == '/') { is >> ignoreLine; break; @@ -1151,8 +1151,8 @@ struct WCONINJE : public SpecialBase wconinje_line.open_shut_flag_ = readString(is); wconinje_line.control_mode_ = readString(is); std::vector double_data(6, -1.0E20); - double_data[2] = wconinje_line.BHP_limit_; - double_data[4] = wconinje_line.VFP_table_number_; + double_data[2] = wconinje_line.BHP_limit_; + double_data[4] = wconinje_line.VFP_table_number_; double_data[5] = wconinje_line.concentration_; const int num_to_read = 6; int num_read = readDefaultedVectorData(is, double_data, num_to_read); @@ -1174,17 +1174,17 @@ struct WCONINJE : public SpecialBase { os << name() << std::endl; for (int i=0; i<(int) wconinje.size(); ++i) { - os << wconinje[i].well_ << " " - << wconinje[i].injector_type_ << " " - << wconinje[i].open_shut_flag_ << " " - << wconinje[i].control_mode_ << " " - << wconinje[i].surface_flow_max_rate_ << " " - << wconinje[i].reservoir_flow_max_rate_ << " " - << wconinje[i].BHP_limit_ << " " - << wconinje[i].THP_limit_ << " " - << wconinje[i].VFP_table_number_ << " " + os << wconinje[i].well_ << " " + << wconinje[i].injector_type_ << " " + << wconinje[i].open_shut_flag_ << " " + << wconinje[i].control_mode_ << " " + << wconinje[i].surface_flow_max_rate_ << " " + << wconinje[i].reservoir_flow_max_rate_ << " " + << wconinje[i].BHP_limit_ << " " + << wconinje[i].THP_limit_ << " " + << wconinje[i].VFP_table_number_ << " " << wconinje[i].concentration_ - << std::endl; + << std::endl; } os << std::endl; } @@ -1244,7 +1244,7 @@ struct GCONPROD : public SpecialBase virtual void read(std::istream& is) { while(is) { - std::string groupname = readString(is); + std::string groupname = readString(is); if (groupname[0] == '/') { is >> ignoreLine; break; @@ -1257,7 +1257,7 @@ struct GCONPROD : public SpecialBase GconprodLine gconprod_line; gconprod_line.group_ = groupname; gconprod_line.control_mode_ = readString(is); - if (gconprod_line.control_mode_[gconprod_line.control_mode_.size() - 1] == '*') + if (gconprod_line.control_mode_[gconprod_line.control_mode_.size() - 1] == '*') { gconprod_line.control_mode_ = "NONE"; } @@ -1282,7 +1282,7 @@ struct GCONPROD : public SpecialBase std::string ignored_value = readString(is); if (ignored_value[ignored_value.size()-1]=='*') { // we've got defaulted argument, increment - + int num_defaulted; std::string num_defaulted_str = ignored_value.substr(0, ignored_value.size()-1); std::istringstream(num_defaulted_str) >> num_defaulted; @@ -1311,13 +1311,13 @@ struct GCONPROD : public SpecialBase } gconprod_line.procedure_ = procedure; - + gconprod.push_back(gconprod_line); // HACK! Ignore any further items if (num_read == num_to_read) { ignoreSlashLine(is); } - + } } @@ -1326,15 +1326,15 @@ struct GCONPROD : public SpecialBase { os << name() << std::endl; for (int i=0; i<(int) gconprod.size(); ++i) { - os << gconprod[i].group_ << " " - << gconprod[i].control_mode_ << " " - << gconprod[i].oil_max_rate_ << " " - << gconprod[i].water_max_rate_ << " " - << gconprod[i].gas_max_rate_ << " " - << gconprod[i].liquid_max_rate_ << " " - << gconprod[i].procedure_ << " " + os << gconprod[i].group_ << " " + << gconprod[i].control_mode_ << " " + << gconprod[i].oil_max_rate_ << " " + << gconprod[i].water_max_rate_ << " " + << gconprod[i].gas_max_rate_ << " " + << gconprod[i].liquid_max_rate_ << " " + << gconprod[i].procedure_ << " " << gconprod[i].resv_max_rate_ - << std::endl; + << std::endl; } os << std::endl; } @@ -1384,7 +1384,7 @@ struct WGRUPCON : public SpecialBase virtual void read(std::istream& is) { while(is) { - std::string wname = readString(is); + std::string wname = readString(is); if (wname[0] == '/') { is >> ignoreLine; break; @@ -1397,7 +1397,7 @@ struct WGRUPCON : public SpecialBase WgrupconLine wgrupcon_line; wgrupcon_line.well_ = wname; std::string available = readString(is); - if (available[available.size()-1] == '*') + if (available[available.size()-1] == '*') { available = "YES"; } @@ -1406,8 +1406,8 @@ struct WGRUPCON : public SpecialBase const int num_to_read = 1; int num_read = readDefaultedVectorData(is, double_data, num_to_read); wgrupcon_line.guide_rate_ = double_data[0]; - - std::string phase = readString(is); + + std::string phase = readString(is); if (phase[0] == '/') { is >> ignoreLine; break; @@ -1417,9 +1417,9 @@ struct WGRUPCON : public SpecialBase is >> ignoreLine; phase = readString(is); } - + wgrupcon_line.phase_ = phase; - + wgrupcon.push_back(wgrupcon_line); // HACK! Ignore any further items if (num_read == num_to_read) { @@ -1433,11 +1433,11 @@ struct WGRUPCON : public SpecialBase { os << name() << std::endl; for (int i=0; i<(int) wgrupcon.size(); ++i) { - os << wgrupcon[i].well_ << " " - << wgrupcon[i].available_for_group_control_ << " " - << wgrupcon[i].guide_rate_ << " " - << wgrupcon[i].phase_ << " " - << std::endl; + os << wgrupcon[i].well_ << " " + << wgrupcon[i].available_for_group_control_ << " " + << wgrupcon[i].guide_rate_ << " " + << wgrupcon[i].phase_ << " " + << std::endl; } os << std::endl; } @@ -1495,7 +1495,7 @@ struct WCONPROD : public SpecialBase virtual void read(std::istream& is) { while(is) { - std::string wellname = readString(is); + std::string wellname = readString(is); if (wellname[0] == '/') { is >> ignoreLine; break; @@ -1510,9 +1510,9 @@ struct WCONPROD : public SpecialBase wconprod_line.open_shut_flag_ = readString(is); wconprod_line.control_mode_ = readString(is); std::vector double_data(14, -1.0E20); - double_data[5] = wconprod_line.BHP_limit_; - double_data[6] = wconprod_line.THP_limit_; - double_data[7] = wconprod_line.VFP_table_number_; + double_data[5] = wconprod_line.BHP_limit_; + double_data[6] = wconprod_line.THP_limit_; + double_data[7] = wconprod_line.VFP_table_number_; double_data[8] = wconprod_line.artif_lift_quantity_; const int num_to_read = 14; int num_read = readDefaultedVectorData(is, double_data, num_to_read); @@ -1538,19 +1538,19 @@ struct WCONPROD : public SpecialBase { os << name() << std::endl; for (int i=0; i<(int) wconprod.size(); ++i) { - os << wconprod[i].well_ << " " - << wconprod[i].open_shut_flag_ << " " - << wconprod[i].control_mode_ << " " - << wconprod[i].oil_max_rate_ << " " - << wconprod[i].water_max_rate_ << " " - << wconprod[i].gas_max_rate_ << " " - << wconprod[i].liquid_max_rate_ << " " - << wconprod[i].reservoir_flow_max_rate_ << " " - << wconprod[i].BHP_limit_ << " " - << wconprod[i].THP_limit_ << " " - << wconprod[i].VFP_table_number_ << " " + os << wconprod[i].well_ << " " + << wconprod[i].open_shut_flag_ << " " + << wconprod[i].control_mode_ << " " + << wconprod[i].oil_max_rate_ << " " + << wconprod[i].water_max_rate_ << " " + << wconprod[i].gas_max_rate_ << " " + << wconprod[i].liquid_max_rate_ << " " + << wconprod[i].reservoir_flow_max_rate_ << " " + << wconprod[i].BHP_limit_ << " " + << wconprod[i].THP_limit_ << " " + << wconprod[i].VFP_table_number_ << " " << wconprod[i].artif_lift_quantity_ - << std::endl; + << std::endl; } os << std::endl; } @@ -1604,7 +1604,7 @@ struct WELTARG : public SpecialBase virtual void read(std::istream& is) { while(is) { - std::string wellname = readString(is); + std::string wellname = readString(is); if (wellname[0] == '/') { is >> ignoreLine; break; @@ -1627,8 +1627,8 @@ struct WELTARG : public SpecialBase { os << name() << std::endl; for (int i=0; i<(int)weltarg.size(); ++i) { - os << weltarg[i].well_ << " " - << weltarg[i].control_change_ << " " + os << weltarg[i].well_ << " " + << weltarg[i].control_change_ << " " << weltarg[i].new_value_ << " " << std::endl; } @@ -1643,7 +1643,7 @@ struct WELTARG : public SpecialBase for (int i=0; i<(int) weltarg.size(); ++i) { if (weltarg[i].control_change_[0] == 'O' || weltarg[i].control_change_[0] == 'W' || - weltarg[i].control_change_[0] == 'L') { + weltarg[i].control_change_[0] == 'L') { weltarg[i].new_value_ *= lrat; } else if (weltarg[i].control_change_[0] == 'G') { weltarg[i].new_value_ *= grat; @@ -1685,7 +1685,7 @@ struct WELOPEN : public SpecialBase virtual void read(std::istream& is) { while(is) { - std::string wellname = readString(is); + std::string wellname = readString(is); if (wellname[0] == '/') { is >> ignoreLine; break; @@ -1707,7 +1707,7 @@ struct WELOPEN : public SpecialBase { os << name() << std::endl; for (int i=0; i<(int)welopen.size(); ++i) { - os << welopen[i].well_ << " " + os << welopen[i].well_ << " " << welopen[i].openshutflag_ << std::endl; } @@ -1735,7 +1735,7 @@ struct EquilLine double gas_oil_cap_pressure_; // Gas-oil capillary pressure at the gas-oil // contact. int live_oil_table_index_; // Rs v Depth or Pb v Depth table index for - // under-saturated live oil. + // under-saturated live oil. int wet_gas_table_index_; // Rv v Depth or Pd v Depth table index for // under-saturated wet gas. int N_; // Integer defining the accuracy of the @@ -1793,8 +1793,8 @@ struct EQUIL : public SpecialBase { os << name() << std::endl; for (int i=0; i<(int)equil.size(); ++i) { - os << equil[i].datum_depth_ << " " - << equil[i].datum_depth_pressure_ << " " + os << equil[i].datum_depth_ << " " + << equil[i].datum_depth_pressure_ << " " << equil[i].water_oil_contact_depth_ << " " << equil[i].oil_water_cap_pressure_ << " " << equil[i].gas_oil_contact_depth_ << " " @@ -1925,8 +1925,8 @@ struct MultRec : public SpecialBase if (name.rfind('/') != std::string::npos) { continue; // Unquoted name } else { - is.seekg(pos); - break; // Read next keyword + is.seekg(pos); + break; // Read next keyword } } else if (ct.is(std::ctype_base::digit, c) || c== '.') { is >> ignoreSlashLine; // Decimal digit. Ignore data. @@ -2020,7 +2020,7 @@ struct PLYROCK : public SpecialBase virtual void convertToSI(const EclipseUnits& units) { - + plyrock_[2] *= units.polymer_density; } }; @@ -2104,7 +2104,7 @@ struct TLMIXPAR : public SpecialBase tlmixpar_.resize(2, -1e100); int num_to_read = 2; int num_read = readDefaultedVectorData(is, tlmixpar_, num_to_read); - if (tlmixpar_[1] < 0) { + if (tlmixpar_[1] < 0) { tlmixpar_[1] = tlmixpar_[0]; } if (num_read == num_to_read) { @@ -2134,7 +2134,7 @@ struct WpolymerLine double polymer_concentration_; double salt_concentration_; std::string polymer_group_; - std::string salt_group_; + std::string salt_group_; WpolymerLine() { @@ -2164,7 +2164,7 @@ struct WPOLYMER : public SpecialBase } WpolymerLine wpolymer_line; wpolymer_line.well_ = wellname; - is >> wpolymer_line.polymer_concentration_; + is >> wpolymer_line.polymer_concentration_; is >> wpolymer_line.salt_concentration_; std::string group = readString(is); if (group[0] == '/') { @@ -2192,7 +2192,7 @@ struct WPOLYMER : public SpecialBase << " " << wpolymer_[i].salt_concentration_ << " " << wpolymer_[i].polymer_group_ << " " << wpolymer_[i].salt_group_; - os << '\n'; + os << '\n'; } os << '\n'; } @@ -2316,7 +2316,7 @@ struct ENPTVD : public SpecialBase { while (!is.eof()) { if(is.peek() == int('/')) { if (sub_table[0].empty() && !(table_[0].empty())) { - is >> ignoreLine; + is >> ignoreLine; break; } else { THROW("Error reading ENPTVD data - none or incomplete table."); @@ -2344,7 +2344,7 @@ struct ENPTVD : public SpecialBase { if (sub_table[0].size() >= 2) { insertDefaultValues(sub_table, 5, -1.0, false); std::vector >::iterator it_sub = sub_table.begin(); - for(std::vector > >::size_type i=0; i > >::size_type i=0; i >::size_type j=0; j::size_type k=0; k::size_type k=0; k > >::size_type i=0; i >::size_type j=0; j::size_type k=0; k::size_type k=0; k> ignoreLine; + is >> ignoreLine; break; } else { THROW("Error reading ENKRVD data - none or incomplete table."); @@ -2431,7 +2431,7 @@ struct ENKRVD : public SpecialBase { if (sub_table[0].size() >= 2) { insertDefaultValues(sub_table, 5, -1.0, false); std::vector >::iterator it_sub = sub_table.begin(); - for(std::vector > >::size_type i=0; i > >::size_type i=0; i >::size_type j=0; j::size_type k=0; k::size_type k=0; k > >::size_type i=0; i >::size_type j=0; j::size_type k=0; k::size_type k=0; k * data , - int offset , + const std::string& kw_name , + const std::vector * data , + int offset , int stride ) { if (stride <= 0) @@ -51,7 +51,7 @@ namespace Opm THROW("Internal mismatch grid.number_of_cells: " << grid.number_of_cells << " data size: " << data->size() / stride); { ecl_kw_type * ecl_kw = ecl_kw_alloc( kw_name.c_str() , grid.number_of_cells , ECL_FLOAT_TYPE ); - for (int i=0; i < grid.number_of_cells; i++) + for (int i=0; i < grid.number_of_cells; i++) ecl_kw_iset_float( ecl_kw , i , (*data)[i*stride + offset]); return ecl_kw; } @@ -69,7 +69,7 @@ namespace Opm chunk and non-unified restart files which are one file for each report step. In addition the files can be either formatted (i.e. ASCII) or unformatted (i.e. binary). - + The writeECLData() function has two hardcoded settings: 'file_type' and 'fmt_file' which regulate which type of files the should be created. The extension of the files follow a convention: @@ -92,10 +92,10 @@ namespace Opm const boost::posix_time::ptime& current_date_time, const std::string& output_dir, const std::string& base_name) { - + ecl_file_enum file_type = ECL_UNIFIED_RESTART_FILE; // Alternatively ECL_RESTART_FILE for multiple restart files. bool fmt_file = false; - + char * filename = ecl_util_alloc_filename(output_dir.c_str() , base_name.c_str() , file_type , fmt_file , current_step ); int phases = ECL_OIL_PHASE + ECL_WATER_PHASE; double days = Opm::unit::convert::to(current_time, Opm::unit::day); @@ -105,20 +105,20 @@ namespace Opm int nz = grid.cartdims[2]; int nactive = grid.number_of_cells; ecl_rst_file_type * rst_file; - + { using namespace boost::posix_time; ptime t0( boost::gregorian::date(1970 , 1 ,1) ); time_duration::sec_type seconds = (current_date_time - t0).total_seconds(); - + date = time_t( seconds ); } - + if (current_step > 0 && file_type == ECL_UNIFIED_RESTART_FILE) rst_file = ecl_rst_file_open_append( filename ); else rst_file = ecl_rst_file_open_write( filename ); - + ecl_rst_file_fwrite_header( rst_file , current_step , date , days , nx , ny , nz , nactive , phases ); ecl_rst_file_start_solution( rst_file ); @@ -130,7 +130,7 @@ namespace Opm ecl_kw_free( pressure_kw ); } } - + { DataMap::const_iterator i = data.find("saturation"); if (i != data.end()) { @@ -146,7 +146,7 @@ namespace Opm ecl_rst_file_end_solution( rst_file ); ecl_rst_file_close( rst_file ); free(filename); - } + } } #else // that is, we have not defined HAVE_ERT diff --git a/opm/core/io/eclipse/writeECLData.hpp b/opm/core/io/eclipse/writeECLData.hpp index ab55235b..e962573a 100644 --- a/opm/core/io/eclipse/writeECLData.hpp +++ b/opm/core/io/eclipse/writeECLData.hpp @@ -41,6 +41,6 @@ namespace Opm const std::string& output_dir, const std::string& base_name); -} +} -#endif +#endif diff --git a/opm/core/io/vag/vag.cpp b/opm/core/io/vag/vag.cpp index 75854a2b..fa3f4b48 100644 --- a/opm/core/io/vag/vag.cpp +++ b/opm/core/io/vag/vag.cpp @@ -35,7 +35,7 @@ #include "config.h" #include -#include +#include #include #include #include @@ -77,7 +77,7 @@ namespace Opm if(pos_struct.pos.size()==0){ return; } - int n=pos_struct.pos.size()-1; + int n=pos_struct.pos.size()-1; pos_struct.pos.resize(n+1); pos_struct.pos[0]=0; for(int i=0;i< n;++i){ @@ -94,7 +94,7 @@ namespace Opm using namespace Opm; while (!is.eof()) { string keyword; - is >> keyword; + is >> keyword; //cout << keyword<< endl; if(keyword == "Number"){ string stmp; @@ -113,8 +113,8 @@ namespace Opm vag_grid.number_of_faces=number; }else if(entity=="edges"){ vag_grid.number_of_edges=number; - } - cout << "Found Number of: " << entity <<" " << number << endl; + } + cout << "Found Number of: " << entity <<" " << number << endl; } else { cerr << "Wrong format: Not of after Number" << endl; return; @@ -123,7 +123,7 @@ namespace Opm // read geometry defined by vertices if(keyword=="Vertices"){ int number; - is >> number; + is >> number; vag_grid.vertices.resize(3*number);// assume 3d data readVector(is,vag_grid.vertices); } @@ -131,33 +131,33 @@ namespace Opm else if(keyword=="Volumes->Faces" || keyword=="Volumes->faces"){ //vag_grid.volumes_to_faces= int number; - is >> number; + is >> number; readPosStruct(is,number,vag_grid.volumes_to_faces); cout << "Volumes->Faces: Number of " << number << endl; }else if(keyword=="Faces->edges" || keyword=="Faces->Edges" || keyword=="Faces->Edgess"){ int number; - is >> number; + is >> number; //vag_grid.volumes_to_faces= readPosStruct(is,number,vag_grid.faces_to_edges); cout << "Faces->edges: Number of " << number << endl; }else if(keyword=="Faces->Vertices" || keyword=="Faces->vertices"){ int number; - is >> number; + is >> number; //vag_grid.volumes_to_faces= readPosStruct(is,number,vag_grid.faces_to_vertices); - cout << "Faces->Vertices: Number of " << number << endl; + cout << "Faces->Vertices: Number of " << number << endl; }else if(keyword=="Volumes->Vertices" || keyword=="Volumes->Verticess"){ int number; - is >> number; + is >> number; //vag_grid.volumes_to_faces= readPosStruct(is,number,vag_grid.volumes_to_vertices); - cout << "Volumes->Vertices: Number of " << number << endl; + cout << "Volumes->Vertices: Number of " << number << endl; } - + // read simple mappings else if(keyword=="Edge" || keyword=="Edges"){ int number; - is >> number; + is >> number; vag_grid.edges.resize(2*number); readVector(is,vag_grid.edges); cout << "Edges: Number of " << number << endl; @@ -170,7 +170,7 @@ namespace Opm is >> number; vag_grid.faces_to_volumes.resize(2*number); readVector(is,vag_grid.faces_to_volumes); - cout << "Faces->Volumes: Number of " << number << endl; + cout << "Faces->Volumes: Number of " << number << endl; } // read material else if(keyword=="Material"){ @@ -179,7 +179,7 @@ namespace Opm int number; is >> number; cout << "Material number " << number << endl; - // we read all the rest into doubles + // we read all the rest into doubles while(!is.eof()){ double value; is >> value; @@ -203,18 +203,18 @@ namespace Opm grid.number_of_cells=vag_grid.number_of_volumes; grid.number_of_faces=vag_grid.number_of_faces; grid.number_of_nodes=vag_grid.number_of_vertices; - + // fill face_nodes for(int i=0;i< int(vag_grid.faces_to_vertices.pos.size());++i){ grid.face_nodepos[i] = vag_grid.faces_to_vertices.pos[i]; - } + } for(int i=0;i< int(vag_grid.faces_to_vertices.value.size());++i){ grid.face_nodes[i] = vag_grid.faces_to_vertices.value[i]-1; } // fill cell_face for(int i=0;i< int(vag_grid.volumes_to_faces.pos.size());++i){ grid.cell_facepos[i] = vag_grid.volumes_to_faces.pos[i]; - } + } for(int i=0;i< int(vag_grid.volumes_to_faces.value.size());++i){ grid.cell_faces[i] = vag_grid.volumes_to_faces.value[i]-1; } @@ -231,7 +231,7 @@ namespace Opm // is not used cout << "Computing geometry" << endl; compute_geometry(&grid); - + } void unstructuredGridToVag(UnstructuredGrid& grid,Opm::VAG& vag_grid){ @@ -242,7 +242,7 @@ namespace Opm vag_grid.number_of_volumes=grid.number_of_cells; vag_grid.number_of_faces=grid.number_of_faces; vag_grid.number_of_vertices=grid.number_of_nodes; - + // resizing vectors vag_grid.vertices.resize(grid.number_of_nodes*3); vag_grid.faces_to_vertices.pos.resize(grid.number_of_faces+1); @@ -252,8 +252,8 @@ namespace Opm vag_grid.volumes_to_faces.value.resize(grid.cell_facepos[grid.number_of_cells]);//not known - - + + // fill face_nodes for(int i=0;i< int(vag_grid.faces_to_vertices.pos.size());++i){ vag_grid.faces_to_vertices.pos[i] = grid.face_nodepos[i]; @@ -262,11 +262,11 @@ namespace Opm for(int i=0;i< int(vag_grid.faces_to_vertices.value.size());++i){ vag_grid.faces_to_vertices.value[i] = grid.face_nodes[i] +1; } - - // fill cell_face + + // fill cell_face for(int i=0;i< int(vag_grid.volumes_to_faces.pos.size());++i){ vag_grid.volumes_to_faces.pos[i] = grid.cell_facepos[i]; - } + } for(int i=0;i< int(vag_grid.volumes_to_faces.value.size());++i){ vag_grid.volumes_to_faces.value[i] = grid.cell_faces[i] +1; } @@ -280,7 +280,7 @@ namespace Opm vag_grid.vertices[i] = grid.node_coordinates[i]; } - + // The missing field need to be constructed // gennerate volume to vertice mapping std::vector< std::set > volumes_to_vertices(grid.number_of_cells); @@ -297,7 +297,7 @@ namespace Opm } volumes_to_vertices[i]=nodes; } - + // fill volume to vertice map vag_grid.volumes_to_vertices.pos.resize(grid.number_of_cells+1); vag_grid.volumes_to_vertices.value.resize(0); @@ -318,15 +318,15 @@ namespace Opm for(int i=0;i < grid.number_of_faces;++i){ int ne=grid.face_nodepos[i+1]-grid.face_nodepos[i]; nfe=nfe+ne; - + for(int j=0; j < ne-1;++j){ int node1=grid.face_nodes[grid.face_nodepos[i]+j]+1; int node2=grid.face_nodes[grid.face_nodepos[i]+j+1]+1; std::set spair; spair.insert(node1); - spair.insert(node2); + spair.insert(node2); edges.insert(spair); - faces_spares[i].push_back(spair); + faces_spares[i].push_back(spair); } // add end segment { @@ -334,12 +334,12 @@ namespace Opm int node1=grid.face_nodes[grid.face_nodepos[i]+ne-1]+1; int node2=grid.face_nodes[grid.face_nodepos[i]]+1; spair.insert(node1); - spair.insert(node2); + spair.insert(node2); edges.insert(spair); - faces_spares[i].push_back(spair); + faces_spares[i].push_back(spair); } } - + // make edge numbering and fill edges std::map, int> edge_map; std::set< std::set >::iterator it; @@ -358,18 +358,18 @@ namespace Opm vag_grid.faces_to_edges.pos.resize(vag_grid.number_of_faces+1); for(int i=0;i < grid.number_of_faces;++i){ int ne=grid.face_nodepos[i+1]-grid.face_nodepos[i]; - vag_grid.faces_to_edges.pos[i+1]=vag_grid.faces_to_edges.pos[i]+ne; + vag_grid.faces_to_edges.pos[i+1]=vag_grid.faces_to_edges.pos[i]+ne; for(int j=0;jfaces " << vag_grid.volumes_to_faces.pos.size()-1 << endl; - writePosStruct(os, vag_grid.volumes_to_faces); + writePosStruct(os, vag_grid.volumes_to_faces); os << "Volumes->Vertices " << vag_grid.volumes_to_vertices.pos.size()-1 << endl; - writePosStruct(os, vag_grid.volumes_to_vertices); + writePosStruct(os, vag_grid.volumes_to_vertices); os << "Faces->edges " << vag_grid.faces_to_edges.pos.size()-1 << endl; writePosStruct(os, vag_grid.faces_to_edges); os << "Faces->vertices " << vag_grid.faces_to_vertices.pos.size()-1 << endl; writePosStruct(os, vag_grid.faces_to_vertices); os << "Faces->Control volumes " << floor(vag_grid.faces_to_volumes.size()/2) << endl; - writeVector(os,vag_grid.faces_to_volumes,2); + writeVector(os,vag_grid.faces_to_volumes,2); os << "Edges " << floor(vag_grid.edges.size()/2) << endl; writeVector(os,vag_grid.edges,2); /* assert(vag_grid.material.size()%vag_grid.number_of_volumes==0); - int lines= floor(vag_grid.material.size()/vag_grid.number_of_volumes); + int lines= floor(vag_grid.material.size()/vag_grid.number_of_volumes); os << "Material number " << 1 << endl; writeVector(os,vag_grid.material,lines); */ diff --git a/opm/core/io/vag/vag.hpp b/opm/core/io/vag/vag.hpp index 412e4eaf..ab84af77 100644 --- a/opm/core/io/vag/vag.hpp +++ b/opm/core/io/vag/vag.hpp @@ -50,7 +50,7 @@ namespace Opm Struct to hold mapping from the natural numbers less than pos.size()-1 to a set of integers. value(pos(i):pos(i+1)-1) hold the integers corresponding to i. pos(end)-1==value.size(); - */ + */ struct PosStruct{ std::vector pos; std::vector value; @@ -60,7 +60,7 @@ namespace Opm 3D grids. */ struct VAG{ - int number_of_vertices; + int number_of_vertices; int number_of_volumes; int number_of_faces; int number_of_edges; @@ -104,7 +104,7 @@ namespace Opm Function to read a vector of some type from a stream. \param[in] os is is stream of the file. \param[out] vag_grid is a resized and filled vector containing the quantiy read. - */ + */ template void readVector(std::istream& is,std::vector& vec){ using namespace std; @@ -117,7 +117,7 @@ namespace Opm \param[in] os is is stream of the file. \param[out] vag_grid is a resized and filled vector containing the quantiy read. \param[in] n number of doubles on each line. - */ + */ template void writeVector(std::ostream& os,std::vector& vec,int n){ typedef typename std::vector::size_type sz_t; @@ -146,20 +146,20 @@ namespace Opm \param[in] pos_struct to write */ void writePosStruct(std::ostream& os,PosStruct& pos_struct); - + /** Fill a UnstructuredGrid from a vag_grid. \param[out] vag_grid s is a valid vag_grid struct. \param[in] grid is a grid with have allocated correct size to each pointer. */ void vagToUnstructuredGrid(Opm::VAG& vag_grid,UnstructuredGrid& grid); - + /** - Fill a vag_grid from UnstructuredGrid + Fill a vag_grid from UnstructuredGrid \param[out] vag_grid s is a valid vag_grid struct. \param[in] grid is a grid with have allocated correct size to each pointer. - */ + */ void unstructuredGridToVag(UnstructuredGrid& grid, Opm::VAG& vag_grid); } -#endif /* OPM_VAG_HPP_HEADER */ +#endif /* OPM_VAG_HPP_HEADER */ diff --git a/opm/core/io/vtk/writeVtkData.cpp b/opm/core/io/vtk/writeVtkData.cpp index b6dc7136..0343eb72 100644 --- a/opm/core/io/vtk/writeVtkData.cpp +++ b/opm/core/io/vtk/writeVtkData.cpp @@ -62,7 +62,7 @@ namespace Opm os << 1; } os << "\n"; - + os << "ORIGIN " << 0.0 << " " << 0.0 << " " << 0.0 << "\n"; os << "SPACING " << cell_size[0] << " " << cell_size[1]; @@ -106,7 +106,7 @@ namespace Opm indent(os); os << "<" << tag; for (PMap::const_iterator it = props.begin(); it != props.end(); ++it) { - os << " " << it->first << "=\"" << it->second << "\""; + os << " " << it->first << "=\"" << it->second << "\""; } os << ">\n"; ++indent_; @@ -310,7 +310,7 @@ namespace Opm || item == num_cells - 1) { os << '\n'; } - } + } } } } diff --git a/opm/core/linalg/LinearSolverFactory.cpp b/opm/core/linalg/LinearSolverFactory.cpp index 4e2f3679..166f572e 100644 --- a/opm/core/linalg/LinearSolverFactory.cpp +++ b/opm/core/linalg/LinearSolverFactory.cpp @@ -113,7 +113,7 @@ namespace Opm return solver_->solve(size, nonzeros, ia, ja, sa, rhs, solution); } - void LinearSolverFactory::setTolerance(const double tol) + void LinearSolverFactory::setTolerance(const double tol) { solver_->setTolerance(tol); } diff --git a/opm/core/linalg/LinearSolverInterface.hpp b/opm/core/linalg/LinearSolverInterface.hpp index b7c8da40..559eaaec 100644 --- a/opm/core/linalg/LinearSolverInterface.hpp +++ b/opm/core/linalg/LinearSolverInterface.hpp @@ -78,7 +78,7 @@ namespace Opm /// Get tolerance for the linear solver. /// \param[out] tolerance value virtual double getTolerance() const = 0; - + }; diff --git a/opm/core/linalg/LinearSolverIstl.hpp b/opm/core/linalg/LinearSolverIstl.hpp index b1f52348..da8e9ab3 100644 --- a/opm/core/linalg/LinearSolverIstl.hpp +++ b/opm/core/linalg/LinearSolverIstl.hpp @@ -97,7 +97,7 @@ namespace Opm int linsolver_smooth_steps_; /** \brief The factor to scale the coarse grid correction with. */ double linsolver_prolongate_factor_; - + }; diff --git a/opm/core/pressure/FlowBCManager.cpp b/opm/core/pressure/FlowBCManager.cpp index 075f87e7..be32c77d 100644 --- a/opm/core/pressure/FlowBCManager.cpp +++ b/opm/core/pressure/FlowBCManager.cpp @@ -99,7 +99,7 @@ namespace Opm int ok = flow_conditions_append_multi(BC_PRESSURE, faces.size(), &faces[0], pressure, bc_); if (!ok) { THROW("Failed to append pressure boundary conditions for side " << sideString(side)); - } + } } diff --git a/opm/core/pressure/msmfem/dfs.c b/opm/core/pressure/msmfem/dfs.c index 248b16a1..5b49a538 100644 --- a/opm/core/pressure/msmfem/dfs.c +++ b/opm/core/pressure/msmfem/dfs.c @@ -23,8 +23,8 @@ #include -/* - * Assign color (nonnegative number) to each connected component of graph +/* + * Assign color (nonnegative number) to each connected component of graph */ void dfs (int size, int *ia, int *ja, int *ncolors, int *color, int* work) { @@ -35,7 +35,7 @@ void dfs (int size, int *ia, int *ja, int *ncolors, int *color, int* work) int *bottom = stack; *ncolors = 0; /* colors are nonnegative */ - + for (i=0; i 0){ int child = ja[ia[c] + count[c]-1]; count[c]--; - + if (color[child] == UNVISITED) { *stack++ = child; color[c] = VISITED; } - + } else { color[c] = *ncolors; --stack; /* pop c */ @@ -104,9 +104,9 @@ int main (int argc, char *argv []) fprintf(stderr, "ncolors = %d\n", ncolors); for (j=0; j& scaleparam) { - bool useKeyword = deck.hasField(keyword); + bool useKeyword = deck.hasField(keyword); bool hasENPTVD = deck.hasField("ENPTVD"); bool hasENKRVD = deck.hasField("ENKRVD"); int itab = 0; @@ -301,8 +301,8 @@ namespace Opm } if (!useKeyword && itab > 0) { table = deck.getENPTVD().table_; - } - } else if (keyword[0] == 'K' && (useKeyword || hasENKRVD)) { + } + } else if (keyword[0] == 'K' && (useKeyword || hasENKRVD)) { if (keyword == std::string("KRW")) { if (useKeyword || deck.getENKRVD().mask_[0]) { itab = 1; @@ -336,7 +336,7 @@ namespace Opm } if (!useKeyword && itab > 0) { table = deck.getENKRVD().table_; - } + } } if (scaleparam.empty()) { @@ -371,7 +371,7 @@ namespace Opm } } } - + // Saturation scaling template @@ -380,11 +380,11 @@ namespace Opm const int wpos = phase_usage_.phase_pos[BlackoilPhases::Aqua]; const int opos = phase_usage_.phase_pos[BlackoilPhases::Liquid]; double ss[PhaseUsage::MaxNumPhases]; - + if (do_3pt_) { // Three-point scaling - // Transforms for water saturation + // Transforms for water saturation if (eps_.swcr_.empty() && eps_.swu_.empty()) { - ss[wpos] = s[wpos]; + ss[wpos] = s[wpos]; } else { double s_r = 1.0-funcForCell(cell).sowcr_; double sr = eps_.sowcr_.empty() ? s_r : 1.0-eps_.sowcr_[cell]; @@ -398,9 +398,9 @@ namespace Opm ss[wpos] = (s[wpos] >= swmax) ? sw_max : s_r+(s[wpos]-sr)*(sw_max-s_r)/(swmax-sr); } } - // Transforms for oil saturation + // Transforms for oil saturation if (eps_.sowcr_.empty() && eps_.swl_.empty()) { - ss[opos] = s[opos]; + ss[opos] = s[opos]; } else { double s_r = 1.0-funcForCell(cell).swcr_; double sr = eps_.swcr_.empty() ? s_r : 1.0-eps_.swcr_[cell]; @@ -415,9 +415,9 @@ namespace Opm } } } else { // Two-point scaling - // Transforms for water saturation + // Transforms for water saturation if (eps_.swcr_.empty() && eps_.swu_.empty()) { - ss[wpos] = s[wpos]; + ss[wpos] = s[wpos]; } else { double sw_cr = funcForCell(cell).swcr_; double swcr = eps_.swcr_.empty() ? sw_cr : eps_.swcr_[cell]; @@ -429,9 +429,9 @@ namespace Opm ss[wpos] = (s[wpos] >= swmax) ? sw_max : sw_cr + (s[wpos]-swcr)*(sw_max-sw_cr)/(swmax-swcr); } } - // Transforms for oil saturation + // Transforms for oil saturation if (eps_.sowcr_.empty() && eps_.swl_.empty()) { - ss[opos] = s[opos]; + ss[opos] = s[opos]; } else { double sow_cr = funcForCell(cell).sowcr_; double socr = eps_.sowcr_.empty() ? sow_cr : eps_.sowcr_[cell]; @@ -453,7 +453,7 @@ namespace Opm // Assume: sw_cr -> krw=0 sw_max -> krw= // sow_cr -> kro=0 sow_max -> kro= funcForCell(cell).evalKr(ss, kr); - } + } // Scaling of relperms values // - Water @@ -471,7 +471,7 @@ namespace Opm double sw_max = funcForCell(cell).smax_[wpos]; double s_r = 1.0-funcForCell(cell).sowcr_; sr = swcr + (s_r-sw_cr)*(swmax-swcr)/(sw_max-sw_cr); - } + } if (s[wpos] <= swcr) { kr[wpos] = 0.0; } else if (sr > swmax-1.0e-6) { @@ -496,7 +496,7 @@ namespace Opm kr[wpos] = eps_.krw_.empty() ? funcForCell(cell).krwmax_ : eps_.krw_[cell]; } } - + // - Oil if (eps_.kro_.empty() && eps_.krorw_.empty()) { // No value scaling } else if (eps_.krorw_.empty()) { // Two-point scaling diff --git a/opm/core/simulator/SimulatorTimer.cpp b/opm/core/simulator/SimulatorTimer.cpp index 4aa52ecf..c2d1342d 100644 --- a/opm/core/simulator/SimulatorTimer.cpp +++ b/opm/core/simulator/SimulatorTimer.cpp @@ -100,7 +100,7 @@ namespace Opm { return boost::posix_time::ptime(start_date_) + boost::posix_time::seconds( (int) current_time_ ); } - + /// Total time. diff --git a/opm/core/simulator/initState.hpp b/opm/core/simulator/initState.hpp index c88d60c2..0cbaf769 100644 --- a/opm/core/simulator/initState.hpp +++ b/opm/core/simulator/initState.hpp @@ -31,7 +31,7 @@ namespace Opm class BlackoilPropertiesInterface; /// \file - /// + /// /// Functions for initializing a reservoir state. /// Initialize a two-phase state from parameters. diff --git a/opm/core/simulator/initState_impl.hpp b/opm/core/simulator/initState_impl.hpp index ed9d4fd9..3e48845e 100644 --- a/opm/core/simulator/initState_impl.hpp +++ b/opm/core/simulator/initState_impl.hpp @@ -507,7 +507,7 @@ namespace Opm if (!deck.hasField("SGAS")) { THROW("initStateFromDeck(): missing SGAS keyword in 2-phase init"); } - const std::vector& sg_deck = deck.getFloatingPointValue("SGAS"); + const std::vector& sg_deck = deck.getFloatingPointValue("SGAS"); const int gpos = pu.phase_pos[BlackoilPhases::Vapour]; const int opos = pu.phase_pos[BlackoilPhases::Liquid]; for (int c = 0; c < num_cells; ++c) { diff --git a/opm/core/transport/TransportSolverTwophaseInterface.cpp b/opm/core/transport/TransportSolverTwophaseInterface.cpp index ae7cf34d..0c9ef610 100644 --- a/opm/core/transport/TransportSolverTwophaseInterface.cpp +++ b/opm/core/transport/TransportSolverTwophaseInterface.cpp @@ -9,19 +9,19 @@ /* Copyright 2011 SINTEF ICT, Applied Mathematics. Copyright 2011 Statoil ASA. - + This file is part of the Open Porous Media Project (OPM). - + OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - + OPM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with OPM. If not, see . */ diff --git a/opm/core/transport/implicit/GravityColumnSolver_impl.hpp b/opm/core/transport/implicit/GravityColumnSolver_impl.hpp index 7e31778c..96104b57 100644 --- a/opm/core/transport/implicit/GravityColumnSolver_impl.hpp +++ b/opm/core/transport/implicit/GravityColumnSolver_impl.hpp @@ -65,7 +65,7 @@ namespace Opm } // anon namespace - + /// \param[in] columns for each column columns.second, /// contains the cells on which to solve the segregation /// problem. For each column, its cells must be in a single @@ -90,16 +90,16 @@ namespace Opm // std::map >::const_iterator it; //for (it = columns.begin(); it != columns.end(); ++it) { int size = columns.size(); - + #pragma omp parallel for schedule(dynamic) for(int i = 0; i < size; ++i) { solveSingleColumn(columns[i], dt, s, increment); - } + } for (int cell = 0; cell < grid_.number_of_cells; ++cell) { sys.vector().writableSolution()[cell] += increment[cell]; } - + const double maxelem = *std::max_element(increment.begin(), increment.end()); const double minelem = *std::min_element(increment.begin(), increment.end()); max_delta = std::max(maxelem, -minelem); @@ -173,7 +173,7 @@ namespace Opm D[ci] += j1contrib; rhs[ci] += rescontrib; } - // model_.sourceTerms(); // Not needed + // model_.sourceTerms(); // Not needed // Solve. const MAT_SIZE_T num_rhs = 1, colSize = col_size; MAT_SIZE_T info = 0; diff --git a/opm/core/transport/implicit/SimpleFluid2pWrappingProps.hpp b/opm/core/transport/implicit/SimpleFluid2pWrappingProps.hpp index 92dbd297..3bf8fcf9 100644 --- a/opm/core/transport/implicit/SimpleFluid2pWrappingProps.hpp +++ b/opm/core/transport/implicit/SimpleFluid2pWrappingProps.hpp @@ -9,19 +9,19 @@ /* Copyright 2011 SINTEF ICT, Applied Mathematics. Copyright 2011 Statoil ASA. - + This file is part of the Open Porous Media Project (OPM). - + OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - + OPM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with OPM. If not, see . */ diff --git a/opm/core/transport/implicit/SimpleFluid2pWrappingProps_impl.hpp b/opm/core/transport/implicit/SimpleFluid2pWrappingProps_impl.hpp index 09dc6731..5525398d 100644 --- a/opm/core/transport/implicit/SimpleFluid2pWrappingProps_impl.hpp +++ b/opm/core/transport/implicit/SimpleFluid2pWrappingProps_impl.hpp @@ -9,19 +9,19 @@ /* Copyright 2011 SINTEF ICT, Applied Mathematics. Copyright 2011 Statoil ASA. - + This file is part of the Open Porous Media Project (OPM). - + OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - + OPM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with OPM. If not, see . */ diff --git a/opm/core/transport/minimal/spu_explicit.c b/opm/core/transport/minimal/spu_explicit.c index 91b12bc2..38a62b29 100644 --- a/opm/core/transport/minimal/spu_explicit.c +++ b/opm/core/transport/minimal/spu_explicit.c @@ -83,11 +83,11 @@ spu_explicit(struct UnstructuredGrid *g, double *s0, double *s, double *mob, } } - /* Water flux */ + /* Water flux */ assert(m1+m2>0.0); flux = m1/(m1+m2)*(dflux[f] + m2*gflux[f]); s[c1] -= flux*dt; s[c2] += flux*dt; } } -} +} diff --git a/opm/core/transport/minimal/spu_explicit.h b/opm/core/transport/minimal/spu_explicit.h index 411c658d..3d169f70 100644 --- a/opm/core/transport/minimal/spu_explicit.h +++ b/opm/core/transport/minimal/spu_explicit.h @@ -6,9 +6,9 @@ #ifndef SPU_EXPLICIT_H_INCLUDED #define SPU_EXPLICIT_H_INCLUDED void -spu_explicit(struct UnstructuredGrid *g, - double *s0, - double *s, +spu_explicit(struct UnstructuredGrid *g, + double *s0, + double *s, double *mob, double *dflux, double *gflux, diff --git a/opm/core/transport/minimal/spu_implicit.c b/opm/core/transport/minimal/spu_implicit.c index d544714c..fc889024 100644 --- a/opm/core/transport/minimal/spu_implicit.c +++ b/opm/core/transport/minimal/spu_implicit.c @@ -28,25 +28,25 @@ interpolate(int n, double h, double x0, double *tab, double x) assert((x-x0) < h*INT_MAX); assert((x-x0) > h*INT_MIN); - if ( x < x0 ) { + if ( x < x0 ) { return tab[0]; } - + i = ((x-x0)/h); assert(i>=0); - - if (i+1 > n-1) { + + if (i+1 > n-1) { return tab[n-1]; } - + a = (x-x0 - i*h) / h; - + return (1-a) * tab[i] + a * tab[i+1]; } /* Assume uniformly spaced table. */ -static double +static double differentiate(int n, double h, double x0, double *tab, double x) { int i; @@ -56,27 +56,27 @@ differentiate(int n, double h, double x0, double *tab, double x) assert((x-x0) > h*INT_MIN); assert(n>1); - if ( x < x0 ) { + if ( x < x0 ) { return (tab[1]-tab[0])/h; } - + i = ((x-x0)/h); assert(i>=0); - - if (i+1 > n-1) { + + if (i+1 > n-1) { return (tab[n-1]-tab[n-2])/h; } - + return (tab[i+1]-tab[i])/h; } -static void +static void compute_mobilities(int n, double *s, double *mob, double *dmob, int ntab, double h, double x0, double *tab) { double *tabw=tab; double *tabo=tab+ntab; - + int i; for (i=0; inumber_of_cells; int nhf = g->cell_facepos[nc]; /* Too much */ double infnorm; - double *b; + double *b; double *x; char *work; double *mob, *dmob; @@ -158,28 +158,28 @@ spu_implicit(struct UnstructuredGrid *g, double *s0, double *s, double h, double } b = malloc(nc * sizeof *b); - x = malloc(nc * sizeof *x); + x = malloc(nc * sizeof *x); work = malloc(6*sizeof (double)); mob = malloc(g->number_of_cells *2* sizeof *mob); dmob = malloc(g->number_of_cells *2* sizeof *dmob); - + infnorm = 1.0; it = 0; while (infnorm > 1e-9 && it++ < 20) { compute_mobilities(g->number_of_cells, s, mob, dmob, ntab, h, x0, tab); spu_implicit_assemble(g, s0, s, mob, dmob, dflux, gflux, src, dt, S, b, work); - + /* Compute inf-norm of residual */ infnorm = 0.0; for(i=0; i fabs(b[i]) ? infnorm : fabs(b[i])); } fprintf(stderr, " Max norm of residual: %e\n", infnorm); - + /* Solve system */ (*linear_solver)(S->m, S->ia, S->ja, S->sa, b, x); - + /* Return x. */ for(i=0; iia); free(S->ja); free(S->sa); free(S); - return infnorm; + return infnorm; } static void -phase_upwind_mobility(double darcyflux, double gravityflux, int i, int c, +phase_upwind_mobility(double darcyflux, double gravityflux, int i, int c, double *mob, double *dmob, double *m, double *dm, int *cix) { /* ====================================================== */ @@ -217,7 +217,7 @@ phase_upwind_mobility(double darcyflux, double gravityflux, int i, int c, dm[0] = dmob[2*i+0]; cix[0] = i; } - + /* Negative water phase flux */ else { m [0] = mob [2*c+0]; @@ -239,11 +239,11 @@ phase_upwind_mobility(double darcyflux, double gravityflux, int i, int c, cix[1] = c; } } - + /* ====================================================== */ /* If Darcy flux and gravity flux have opposite sign... */ else { - + /* Positive oil phase flux */ if (darcyflux>0) { m [1] = mob[2*i+1]; @@ -274,9 +274,9 @@ phase_upwind_mobility(double darcyflux, double gravityflux, int i, int c, } } -void +void spu_implicit_assemble(struct UnstructuredGrid *g, double *s0, double *s, double *mob, double *dmob, - double *dflux, double *gflux, double *src, double dt, sparse_t *S, + double *dflux, double *gflux, double *src, double dt, sparse_t *S, double *b, char *work) { int i, k, f, c1, c2, c; @@ -286,7 +286,7 @@ spu_implicit_assemble(struct UnstructuredGrid *g, double *s0, double *s, double double *dm = m + 2; int *cix = (int*)(dm + 2); double m1, m2, dm1, dm2, mt2; - + int *pja; double *psa; double *d; @@ -295,9 +295,9 @@ spu_implicit_assemble(struct UnstructuredGrid *g, double *s0, double *s, double pja = S->ja; psa = S->sa; - + /* Assemble system */ - S->ia[0] = 0; + S->ia[0] = 0; for (i=0; icell_facepos[i]; kcell_facepos[i+1]; ++k) { f = g->cell_faces[k]; @@ -316,7 +316,7 @@ spu_implicit_assemble(struct UnstructuredGrid *g, double *s0, double *s, double c2 = g->face_cells[2*f+1]; /* Skip all boundary terms (for now). */ - if (c1 == -1 || c2 == -1) { continue; } + if (c1 == -1 || c2 == -1) { continue; } /* Set cell index of other cell, set correct sign of fluxes. */ c = (i==c1 ? c2 : c1); @@ -334,21 +334,21 @@ spu_implicit_assemble(struct UnstructuredGrid *g, double *s0, double *s, double mt2 = (m[0]+m[1])*(m[0]+m[1]); *psa = 0.0; *pja = c; - + /* dFw/dmw·dmw/dsw */ if (cix[0] == c ) { *psa += m[1]/mt2*(df + m[1]*gf)*dm[0]; } else { *d += m[1]/mt2*(df + m[1]*gf)*dm[0]; } - + /* dFw/dmo·dmo/dsw */ if (cix[1] == c) { *psa += -m[0]/mt2*(df - m[0]*gf)*dm[1]; } else { *d += -m[0]/mt2*(df - m[0]*gf)*dm[1]; } - - + + if (cix[0] == c || cix[1] == c) { ++psa; ++pja; } - } + } } /* Injection */ @@ -358,18 +358,18 @@ spu_implicit_assemble(struct UnstructuredGrid *g, double *s0, double *s, double m2 = 0.0; b[i] -= dt*src[i] * m1/(m1+m2); } - + /* Production */ else { m1 = mob [2*i+0]; m2 = mob [2*i+1]; dm1 = dmob[2*i+0]; dm2 = dmob[2*i+1]; - + *d -= dt*src[i] *(m2*dm1-m1*dm2)/(m1+m2)/(m1+m2); b[i] -= dt*src[i] *m1/(m1+m2); - + } S->ia[i+1] = pja - S->ja; } -} +} diff --git a/opm/core/transport/minimal/spu_implicit.h b/opm/core/transport/minimal/spu_implicit.h index 80546a5d..ee24f95b 100644 --- a/opm/core/transport/minimal/spu_implicit.h +++ b/opm/core/transport/minimal/spu_implicit.h @@ -16,14 +16,14 @@ typedef struct Sparse { -void +void spu_implicit_assemble(struct UnstructuredGrid *g, double *s0, double *s, double *mob, double *dmob, - double *dflux, double *gflux, double *src, double dt, sparse_t *S, + double *dflux, double *gflux, double *src, double dt, sparse_t *S, double *b, char *work); -double +double spu_implicit(struct UnstructuredGrid *g, double *s0, double *s, double h, double x0, int ntab, double *tab, - double *dflux, double *gflux, double *src, double dt, + double *dflux, double *gflux, double *src, double dt, void (*linear_solver)(int, int*, int*, double *, double *, double *)); #endif /* SPU_IMPLICIT_H_INCLUDED */ diff --git a/opm/core/utility/MonotCubicInterpolator.cpp b/opm/core/utility/MonotCubicInterpolator.cpp index f2e02002..d6889e1a 100644 --- a/opm/core/utility/MonotCubicInterpolator.cpp +++ b/opm/core/utility/MonotCubicInterpolator.cpp @@ -1,17 +1,17 @@ /* MonotCubicInterpolator Copyright (C) 2006 Statoil ASA - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. @@ -24,7 +24,7 @@ Class to represent a one-dimensional function with single-valued argument. Cubic interpolation, preserving the monotonicity of the discrete known function values - + @see MonotCubicInterpolator.h for further documentation. */ @@ -50,8 +50,8 @@ using namespace std; Internal data structure of points and values: - vector(s): - - Easier coding + vector(s): + - Easier coding - Faster vector operations when setting up derivatives. - sorting slightly more complex. - insertion of further values bad. @@ -61,11 +61,11 @@ using namespace std; - code complexity almost as for map. - insertion of additional values bad - vector over struct datapoint { x, f, d} + vector over struct datapoint { x, f, d} - nice code - not as sortable, insertion is cumbersome. - ** This is used currently: ** + ** This is used currently: ** map one for (x,f) and one for (x,d) - Naturally sorted on x-values (done by the map-construction) - Slower to set up, awkward loop coding (?) @@ -79,7 +79,7 @@ using namespace std; - even more unreadable(??) code? - higher skills needed by programmer. - + MONOTONE CUBIC INTERPOLATION: It is a local algorithm. Adding one point only incur recomputation @@ -87,7 +87,7 @@ using namespace std; divided). NOTE: We do not currently make use of this local fact. Upon - insertion of a new data pair, everything is recomputed. Revisit + insertion of a new data pair, everything is recomputed. Revisit this when needed. */ @@ -102,7 +102,7 @@ MonotCubicInterpolator(const vector & x, const vector & f) { if (x.size() != f.size()) { throw("Unable to constuct MonotCubicInterpolator from vectors.") ; } - + // Add the contents of the input vectors to our map of values. vector::const_iterator posx, posf; for (posx = x.begin(), posf = f.begin(); posx != x.end(); ++posx, ++posf) { @@ -114,9 +114,9 @@ MonotCubicInterpolator(const vector & x, const vector & f) { -bool +bool MonotCubicInterpolator:: -read(const std::string & datafilename, int xColumn, int fColumn) +read(const std::string & datafilename, int xColumn, int fColumn) { data.clear() ; ddata.clear() ; @@ -125,7 +125,7 @@ read(const std::string & datafilename, int xColumn, int fColumn) if (!datafile_fs) { return false ; } - + string linestring; while (!datafile_fs.eof()) { getline(datafile_fs, linestring); @@ -140,7 +140,7 @@ read(const std::string & datafilename, int xColumn, int fColumn) stringstream strs(linestring); int columnindex = 0; - std::vector value; + std::vector value; if (linestring.size() > 0 && linestring.at(0) != '#') { while (!(strs.rdstate() & std::ios::failbit)) { double tmp; @@ -152,34 +152,34 @@ read(const std::string & datafilename, int xColumn, int fColumn) if (columnindex >= (max(xColumn, fColumn))) { data[value[xColumn-1]] = value[fColumn-1] ; } - } + } datafile_fs.close(); - + if (data.size() == 0) { return false ; } - + computeInternalFunctionData(); return true ; } -void +void MonotCubicInterpolator:: addPair(double newx, double newf) throw(const char*) { if (std::isnan(newx) || std::isinf(newx) || std::isnan(newf) || std::isinf(newf)) { throw("MonotCubicInterpolator: addPair() received inf/nan input."); } data[newx] = newf ; - + // In a critical application, we should only update the - // internal function data for the offended interval, + // internal function data for the offended interval, // not for all function values over again. computeInternalFunctionData(); } - -double + +double MonotCubicInterpolator:: evaluate(double x) const throw(const char*){ @@ -189,7 +189,7 @@ evaluate(double x) const throw(const char*){ // xf becomes the first (xdata,fdata) pair where xdata >= x map::const_iterator xf_iterator = data.lower_bound(x); - + // First check if we must extrapolate: if (xf_iterator == data.begin()) { if (data.begin()->first == x) { // Just on the interval limit @@ -204,36 +204,36 @@ evaluate(double x) const throw(const char*){ // Constant extrapolation (!!) return data.rbegin()->second; } - - + + // Ok, we have x_min < x < x_max pair xf2 = *xf_iterator; pair xf1 = *(--xf_iterator); - // we now have: xf2.first > x - + // we now have: xf2.first > x + // Linear interpolation if derivative data is not available: if (ddata.size() != data.size()) { - double finterp = xf1.second + - (xf2.second - xf1.second) / (xf2.first - xf1.first) + double finterp = xf1.second + + (xf2.second - xf1.second) / (xf2.first - xf1.first) * (x - xf1.first); return finterp; } else { // Do Cubic Hermite spline double t = (x - xf1.first)/(xf2.first - xf1.first); // t \in [0,1] double h = xf2.first - xf1.first; - double finterp - = xf1.second * H00(t) + double finterp + = xf1.second * H00(t) + ddata[xf1.first] * H10(t) * h - + xf2.second * H01(t) + + xf2.second * H01(t) + ddata[xf2.first] * H11(t) * h ; return finterp; } - + } -// double +// double // MonotCubicInterpolator:: // evaluate(double x, double& errorestimate_output) { // cout << "Error: errorestimate not implemented" << endl; @@ -241,12 +241,12 @@ evaluate(double x) const throw(const char*){ // return x; // } -vector +vector MonotCubicInterpolator:: -get_xVector() const +get_xVector() const { map::const_iterator xf_iterator = data.begin(); - + vector outputvector; outputvector.reserve(data.size()); for (xf_iterator = data.begin(); xf_iterator != data.end(); ++xf_iterator) { @@ -258,11 +258,11 @@ get_xVector() const vector MonotCubicInterpolator:: -get_fVector() const +get_fVector() const { map::const_iterator xf_iterator = data.begin(); - + vector outputvector; outputvector.reserve(data.size()); for (xf_iterator = data.begin(); xf_iterator != data.end(); ++xf_iterator) { @@ -275,7 +275,7 @@ get_fVector() const string MonotCubicInterpolator:: -toString() const +toString() const { const int precision = 20; std::string dataString; @@ -295,9 +295,9 @@ toString() const dataStringStream << setprecision(precision) << it->second; dataStringStream << '\n'; } - + return dataStringStream.str(); - + } @@ -306,31 +306,31 @@ MonotCubicInterpolator:: getMissingX() const throw(const char*) { if( data.size() < 2) { - throw("MonotCubicInterpolator::getMissingX() only one datapoint."); + throw("MonotCubicInterpolator::getMissingX() only one datapoint."); } - + // Search for biggest difference value in function-datavalues: - + map::const_iterator maxfDiffPair_iterator = data.begin();; double maxfDiffValue = 0; - + map::const_iterator xf_iterator; map::const_iterator xf_next_iterator; - + for (xf_iterator = data.begin(), xf_next_iterator = ++(data.begin()); - xf_next_iterator != data.end(); + xf_next_iterator != data.end(); ++xf_iterator, ++xf_next_iterator) { - double absfDiff = fabs((double)(*xf_next_iterator).second + double absfDiff = fabs((double)(*xf_next_iterator).second - (double)(*xf_iterator).second); if (absfDiff > maxfDiffValue) { maxfDiffPair_iterator = xf_iterator; maxfDiffValue = absfDiff; } } - + double newXvalue = ((*maxfDiffPair_iterator).first + ((*(++maxfDiffPair_iterator)).first))/2; return make_pair(newXvalue, maxfDiffValue); - + } @@ -382,33 +382,33 @@ getMinimumF() const throw(const char*) { } -void +void MonotCubicInterpolator:: -computeInternalFunctionData() const { - +computeInternalFunctionData() const { + /* The contents of this function is meaningless if there is only one datapoint */ if (data.size() <= 1) { return; } - + /* We do not check the caching flag if we are instructed to do this computation */ - + /* We compute monotoneness and directions by assuming monotoneness, and setting to false if the function is not for some value */ - + map::const_iterator xf_iterator; map::const_iterator xf_next_iterator; - - + + strictlyMonotone = true; // We assume this is true, and will set to false if not monotone = true; strictlyDecreasing = true; decreasing = true; strictlyIncreasing = true; increasing = true; - + // Increasing or decreasing?? xf_iterator = data.begin(); xf_next_iterator = ++(data.begin()); @@ -419,12 +419,12 @@ computeInternalFunctionData() const { strictlyMonotone = false; strictlyIncreasing = false; strictlyDecreasing = false; - + ++xf_iterator; ++xf_next_iterator; } - - + + if (xf_next_iterator != data.end()) { if ( xf_iterator->second > xf_next_iterator->second) { @@ -465,27 +465,27 @@ computeInternalFunctionData() const { } } } - else { - // first two values must be equal if we get + else { + // first two values must be equal if we get // here, but that should have been taken care // of by the while loop above. throw("Programming logic error.") ; } - } + } computeSimpleDerivatives(); - + // If our input data is monotone, we can do monotone cubic // interpolation, so adjust the derivatives if so. // - // If input data is not monotone, we should not touch + // If input data is not monotone, we should not touch // the derivatives, as this code should reduce to a // standard cubic interpolation algorithm. if (monotone) { adjustDerivativesForMonotoneness(); } - + strictlyMonotoneCached = true; monotoneCached = true; } @@ -495,7 +495,7 @@ computeInternalFunctionData() const { // // The notion of "flat" is determined by the input parameter "epsilon" // Values whose difference are less than epsilon are regarded as equal. -// +// // This is implemented to be able to obtain a strictly monotone // curve from a data set that is strictly monotone except at the // endpoints. @@ -505,7 +505,7 @@ computeInternalFunctionData() const { // (1,3), (2,3), (3,4), (4,5), (5,5), (6,5) // will become // (2,3), (3,4), (4,5) -// +// // Assumes at least 3 datapoints. If less than three, this function is a noop. void MonotCubicInterpolator:: @@ -514,26 +514,26 @@ chopFlatEndpoints(const double epsilon) { if (getSize() < 3) { return; } - + map::iterator xf_iterator; map::iterator xf_next_iterator; // Clear flags: strictlyMonotoneCached = false; monotoneCached = false; - + // Chop left end: xf_iterator = data.begin(); xf_next_iterator = ++(data.begin()); // Erase data points that are similar to its right value from the left end. - while ((xf_next_iterator != data.end()) && + while ((xf_next_iterator != data.end()) && (fabs(xf_iterator->second - xf_next_iterator->second) < epsilon )) { xf_next_iterator++; data.erase(xf_iterator); xf_iterator++; } - xf_iterator = data.end(); + xf_iterator = data.end(); xf_iterator--; // (data.end() points beyond the last element) xf_next_iterator = xf_iterator; xf_next_iterator--; @@ -544,15 +544,15 @@ chopFlatEndpoints(const double epsilon) { data.erase(xf_iterator); xf_iterator--; } - + // Finished chopping, so recompute function data: computeInternalFunctionData(); } -// +// // If function is monotone, but not strictly monotone, -// this function will remove datapoints from intervals +// this function will remove datapoints from intervals // with zero derivative so that the curves become // strictly monotone. // @@ -561,44 +561,44 @@ chopFlatEndpoints(const double epsilon) { // (1,2), (2,3), (3,4), (4,4), (5,5), (6,6) // will become // (1,2), (2,3), (3,4), (5,5), (6,6) -// +// // Assumes at least two datapoints, if one or zero datapoint, this is a noop. -// +// // void MonotCubicInterpolator:: shrinkFlatAreas(const double epsilon) { - + if (getSize() < 2) { return; } - + map::iterator xf_iterator; map::iterator xf_next_iterator; - - + + // Nothing to do if we already are strictly monotone if (isStrictlyMonotone()) { return; } - + // Refuse to change a curve that is not monotone. if (!isMonotone()) { return; } - + // Clear flags, they are not to be trusted after we modify the // data strictlyMonotoneCached = false; monotoneCached = false; - + // Iterate through data values, if two data pairs // have equal values, delete one of the data pair. // Do not trust the source code on which data point is being // removed (x-values of equal y-points might be averaged in the future) xf_iterator = data.begin(); xf_next_iterator = ++(data.begin()); - + while (xf_next_iterator != data.end()) { //cout << xf_iterator->first << "," << xf_iterator->second << " " << xf_next_iterator->first << "," << xf_next_iterator->second << "\n"; if (fabs(xf_iterator->second - xf_next_iterator->second) < epsilon ) { @@ -612,71 +612,71 @@ shrinkFlatAreas(const double epsilon) { xf_next_iterator++; } } - + } -void +void MonotCubicInterpolator:: computeSimpleDerivatives() const { - + ddata.clear(); - + // Do endpoints first: map::const_iterator xf_prev_iterator; map::const_iterator xf_iterator; map::const_iterator xf_next_iterator; double diff; - + // Leftmost interval: xf_iterator = data.begin(); xf_next_iterator = ++(data.begin()); - diff = + diff = (xf_next_iterator->second - xf_iterator->second) / (xf_next_iterator->first - xf_iterator->first); ddata[xf_iterator->first] = diff ; - + // Rightmost interval: xf_iterator = --(--(data.end())); xf_next_iterator = --(data.end()); - diff = + diff = (xf_next_iterator->second - xf_iterator->second) / (xf_next_iterator->first - xf_iterator->first); ddata[xf_next_iterator->first] = diff ; - + // If we have more than two intervals, loop over internal points: if (data.size() > 2) { - + map::const_iterator intpoint; for (intpoint = ++data.begin(); intpoint != --data.end(); ++intpoint) { /* - diff = (f2 - f1)/(x2-x1)/w + (f3-f1)/(x3-x2)/2 - + diff = (f2 - f1)/(x2-x1)/w + (f3-f1)/(x3-x2)/2 + average of the forward and backward difference. Weights are equal, should we weigh with h_i? */ - + map::const_iterator lastpoint = intpoint; --lastpoint; map::const_iterator nextpoint = intpoint; ++nextpoint; - + diff = (nextpoint->second - intpoint->second)/ - (2*(nextpoint->first - intpoint->first)) + (2*(nextpoint->first - intpoint->first)) + (intpoint->second - lastpoint->second) / (2*(intpoint->first - lastpoint->first)); - ddata[intpoint->first] = diff ; + ddata[intpoint->first] = diff ; } } } -void +void MonotCubicInterpolator:: adjustDerivativesForMonotoneness() const { map::const_iterator point, dpoint; - + /* Loop over all intervals, ie. loop over all points and look at the interval to the right of the point */ for (point = data.begin(), dpoint = ddata.begin(); @@ -685,8 +685,8 @@ adjustDerivativesForMonotoneness() const { map::const_iterator nextpoint, nextdpoint; nextpoint = point; ++nextpoint; nextdpoint = dpoint; ++nextdpoint; - - double delta = + + double delta = (nextpoint->second - point->second) / (nextpoint->first - point->first); if (fabs(delta) < 1e-14) { @@ -695,25 +695,25 @@ adjustDerivativesForMonotoneness() const { } else { double alpha = ddata[point->first] / delta; double beta = ddata[nextpoint->first] / delta; - + if (! isMonotoneCoeff(alpha, beta)) { double tau = 3/sqrt(alpha*alpha + beta*beta); - + ddata[point->first] = tau*alpha*delta; ddata[nextpoint->first] = tau*beta*delta; } } - - + + } - - + + } -void +void MonotCubicInterpolator:: scaleData(double factor) { map::iterator it , itd ; @@ -725,8 +725,8 @@ scaleData(double factor) { } else { for (it = data.begin() ; it != data.end() ; ++it ) { it->second *= factor ; - } - } + } + } } diff --git a/opm/core/utility/MonotCubicInterpolator.hpp b/opm/core/utility/MonotCubicInterpolator.hpp index 71ff7d2d..668b14fa 100644 --- a/opm/core/utility/MonotCubicInterpolator.hpp +++ b/opm/core/utility/MonotCubicInterpolator.hpp @@ -10,17 +10,17 @@ /* MonotCubicInterpolator Copyright (C) 2006 Statoil ASA - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. @@ -32,21 +32,21 @@ namespace Opm /** Class to represent a one-dimensional function f with single-valued argument x. The function is represented by a table of function - values. Interpolation between table values is cubic and monotonicity + values. Interpolation between table values is cubic and monotonicity preserving if input values are monotonous. Outside x_min and x_max, the class will extrapolate using the constant f(x_min) or f(x_max). - + Extra functionality: - - Can return (x_1+x_2)/2 where x_1 and x_2 are such that - abs(f(x_1) - f(x_2)) is maximized. This is used to determine where + - Can return (x_1+x_2)/2 where x_1 and x_2 are such that + abs(f(x_1) - f(x_2)) is maximized. This is used to determine where one should calculate a new value for increased accuracy in the current function - Monotonicity preserving cubic interpolation algorithm is taken - from Fritsch and Carlson, "Monotone piecewise cubic interpolation", - SIAM J. Numer. Anal. 17, 238--246, no. 2, + Monotonicity preserving cubic interpolation algorithm is taken + from Fritsch and Carlson, "Monotone piecewise cubic interpolation", + SIAM J. Numer. Anal. 17, 238--246, no. 2, $Id$ @@ -61,9 +61,9 @@ namespace Opm class MonotCubicInterpolator { public: - + /** - @param datafilename A datafile with the x values and the corresponding f(x) values + @param datafilename A datafile with the x values and the corresponding f(x) values Accepts a filename as input and parses this file for two-column floating point data, interpreting the data as @@ -71,36 +71,36 @@ class MonotCubicInterpolator { Ignores all lines not conforming to \\\\\\ */ - MonotCubicInterpolator(const std::string & datafilename) throw (const char*) + MonotCubicInterpolator(const std::string & datafilename) throw (const char*) { - if (!read(datafilename)) { - throw("Unable to constuct MonotCubicInterpolator from file.") ; + if (!read(datafilename)) { + throw("Unable to constuct MonotCubicInterpolator from file.") ; } ; } /** - @param datafilename A datafile with the x values and the corresponding f(x) values + @param datafilename A datafile with the x values and the corresponding f(x) values Accepts a filename as input and parses this file for two-column floating point data, interpreting the data as representing function values x and f(x). Ignores all lines not conforming to \\\\\\ - + All commas in the file will be treated as spaces when parsing. */ - - MonotCubicInterpolator(const char* datafilename) throw (const char*) + + MonotCubicInterpolator(const char* datafilename) throw (const char*) { - if (!read(std::string(datafilename))) { - throw("Unable to constuct MonotCubicInterpolator from file.") ; + if (!read(std::string(datafilename))) { + throw("Unable to constuct MonotCubicInterpolator from file.") ; } ; } - /** + /** @param datafilename data file @param XColumn x values @param fColumn f values @@ -108,14 +108,14 @@ class MonotCubicInterpolator { Accepts a filename as input, and parses the chosen columns in that file. */ - MonotCubicInterpolator(const char* datafilename, int xColumn, int fColumn) throw (const char*) + MonotCubicInterpolator(const char* datafilename, int xColumn, int fColumn) throw (const char*) { - if (!read(std::string(datafilename),xColumn,fColumn)) { - throw("Unable to constuct MonotCubicInterpolator from file.") ; + if (!read(std::string(datafilename),xColumn,fColumn)) { + throw("Unable to constuct MonotCubicInterpolator from file.") ; } ; } - - /** + + /** @param datafilename data file @param XColumn x values @param fColumn f values @@ -123,13 +123,13 @@ class MonotCubicInterpolator { Accepts a filename as input, and parses the chosen columns in that file. */ - MonotCubicInterpolator(const std::string & datafilename, int xColumn, int fColumn) throw (const char*) + MonotCubicInterpolator(const std::string & datafilename, int xColumn, int fColumn) throw (const char*) { - if (!read(datafilename,xColumn,fColumn)) { - throw("Unable to constuct MonotCubicInterpolator from file.") ; + if (!read(datafilename,xColumn,fColumn)) { + throw("Unable to constuct MonotCubicInterpolator from file.") ; } ; } - + /** @param x vector of x values @param f vector of corresponding f values @@ -138,12 +138,12 @@ class MonotCubicInterpolator { the interpolation object. First vector is the x-values, the second vector is the function values */ - MonotCubicInterpolator(const std::vector & x , + MonotCubicInterpolator(const std::vector & x , const std::vector & f); - + /** No input, an empty function object is created. - + This object must be treated with care until populated. */ @@ -152,7 +152,7 @@ class MonotCubicInterpolator { /** - @param datafilename A datafile with the x values and the corresponding f(x) values + @param datafilename A datafile with the x values and the corresponding f(x) values Accepts a filename as input and parses this file for two-column floating point data, interpreting the data as @@ -167,8 +167,8 @@ class MonotCubicInterpolator { bool read(const std::string & datafilename) { return read(datafilename,1,2) ; } - - /** + + /** @param datafilename data file @param XColumn x values @param fColumn f values @@ -176,60 +176,60 @@ class MonotCubicInterpolator { Accepts a filename as input, and parses the chosen columns in that file. */ - bool read(const std::string & datafilename, int xColumn, int fColumn) ; + bool read(const std::string & datafilename, int xColumn, int fColumn) ; /** @param x x value - Returns f(x) for given x (input). Interpolates (monotone cubic + Returns f(x) for given x (input). Interpolates (monotone cubic or linearly) if necessary. - + Extrapolates using the constants f(x_min) or f(x_max) if input x is outside (x_min, x_max) @return f(x) for a given x */ double operator () (double x) const { return evaluate(x) ; } - + /** @param x x value - Returns f(x) for given x (input). Interpolates (monotone cubic + Returns f(x) for given x (input). Interpolates (monotone cubic or linearly) if necessary. - + Extrapolates using the constants f(x_min) or f(x_max) if input x is outside (x_min, x_max) @return f(x) for a given x */ double evaluate(double x) const throw(const char*); - + /** @param x x value - @param errorestimate_output + @param errorestimate_output Returns f(x) and an error estimate for given x (input). - + Interpolates (linearly) if necessary. - + Throws an exception if extrapolation would be necessary for evaluation. We do not want to do extrapolation (yet). - + The error estimate for x1 < x < x2 is (x2 - x1)^2/8 * f''(x) where f''(x) is evaluated using the stencil (1 -2 1) using either (x0, x1, x2) or (x1, x2, x3); - + Throws an exception if the table contains only two x-values. - + NOT IMPLEMENTED YET! */ - double evaluate(double x, double & errorestimate_output ) const ; - + double evaluate(double x, double & errorestimate_output ) const ; + /** Minimum x-value, returns both x and f in a pair. - + @return minimum x value @return f(minimum x value) */ @@ -237,10 +237,10 @@ class MonotCubicInterpolator { // Easy since the data is sorted on x: return *data.begin(); } - + /** Maximum x-value, returns both x and f in a pair. - + @return maximum x value @return f(maximum x value) */ @@ -248,10 +248,10 @@ class MonotCubicInterpolator { // Easy since the data is sorted on x: return *data.rbegin(); } - + /** Maximum f-value, returns both x and f in a pair. - + @return x value corresponding to maximum f value @return maximum f value */ @@ -259,39 +259,39 @@ class MonotCubicInterpolator { /** Minimum f-value, returns both x and f in a pair - + @return x value corresponding to minimal f value @return minimum f value */ std::pair getMinimumF() const throw(const char*) ; - + /** Provide a copy of the x-data as a vector - + Unspecified order, but corresponds to get_fVector. - + @return x values as a vector */ std::vector get_xVector() const ; - + /** Provide a copy of tghe function data as a vector - + Unspecified order, but corresponds to get_xVector @return f values as a vector - + */ std::vector get_fVector() const ; - + /** @param factor Scaling constant Scale all the function value data by a constant */ void scaleData(double factor); - + /** Determines if the current function-value-data is strictly monotone. This is a utility function for outsiders if they want @@ -300,7 +300,7 @@ class MonotCubicInterpolator { @return True if f(x) is strictly monotone, else False */ bool isStrictlyMonotone() { - + /* Use cached value if it can be trusted */ if (strictlyMonotoneCached) { return strictlyMonotone; @@ -313,7 +313,7 @@ class MonotCubicInterpolator { /** Determines if the current function-value-data is monotone. - + @return True if f(x) is monotone, else False */ bool isMonotone() const { @@ -333,7 +333,7 @@ class MonotCubicInterpolator { @return True if f(x) is strictly increasing, else False */ bool isStrictlyIncreasing() { - + /* Use cached value if it can be trusted */ if (strictlyMonotoneCached) { return (strictlyMonotone && strictlyIncreasing); @@ -346,7 +346,7 @@ class MonotCubicInterpolator { /** Determines if the current function-value-data is monotone and increasing. - + @return True if f(x) is monotone and increasing, else False */ bool isMonotoneIncreasing() const { @@ -366,7 +366,7 @@ class MonotCubicInterpolator { @return True if f(x) is strictly decreasing, else False */ bool isStrictlyDecreasing() { - + /* Use cached value if it can be trusted */ if (strictlyMonotoneCached) { return (strictlyMonotone && strictlyDecreasing); @@ -379,7 +379,7 @@ class MonotCubicInterpolator { /** Determines if the current function-value-data is monotone and decreasing - + @return True if f(x) is monotone and decreasing, else False */ bool isMonotoneDecreasing() const { @@ -391,9 +391,9 @@ class MonotCubicInterpolator { return (monotone && decreasing); } } - - + + /** @param newx New x point @param newf New f(x) point @@ -408,12 +408,12 @@ class MonotCubicInterpolator { */ void addPair(double newx, double newf) throw(const char*); - + /** Returns an x-value that is believed to yield the best improvement in global accuracy for the interpolation if computed. - + Searches for the largest jump in f-values, and returns a x value being the average of the two x-values representing the f-value-jump. @@ -422,14 +422,14 @@ class MonotCubicInterpolator { @return Maximal difference */ std::pair getMissingX() const throw(const char*) ; - + /** - Constructs a string containing the data in a table + Constructs a string containing the data in a table @return a string containing the data in a table */ std::string toString() const; - + /** @return Number of datapoint pairs in this object */ @@ -440,7 +440,7 @@ class MonotCubicInterpolator { /** Checks if the function curve is flat at the endpoints, chop off endpoint data points if that is the case. - + The notion of "flat" is determined by the input parameter "epsilon" Values whose difference are less than epsilon are regarded as equal. @@ -460,7 +460,7 @@ class MonotCubicInterpolator { /** Wrapper function for chopFlatEndpoints(const double) - providing a default epsilon parameter + providing a default epsilon parameter */ void chopFlatEndpoints() { chopFlatEndpoints(1e-14); @@ -468,7 +468,7 @@ class MonotCubicInterpolator { /** If function is monotone, but not strictly monotone, - this function will remove datapoints from intervals + this function will remove datapoints from intervals with zero derivative so that the curve become strictly monotone. @@ -477,14 +477,14 @@ class MonotCubicInterpolator { (1,2), (2,3), (3,4), (4,4), (5,5), (6,6) will become (1,2), (2,3), (3,4), (5,5), (6,6) - + Assumes at least two datapoints, if one or zero datapoint, this is a noop. */ void shrinkFlatAreas(const double); /** Wrapper function for shrinkFlatAreas(const double) - providing a default epsilon parameter + providing a default epsilon parameter */ void shrinkFlatAreas() { shrinkFlatAreas(1e-14); @@ -493,17 +493,17 @@ class MonotCubicInterpolator { private: - + // Data structure to store x- and f-values std::map data; - + // Data structure to store x- and d-values - mutable std::map ddata; - - + mutable std::map ddata; + + // Storage containers for precomputed interpolation data // std::vector dvalues; // derivatives in Hermite interpolation. - + // Flag to determine whether the boolean strictlyMonotone can be // trusted. mutable bool strictlyMonotoneCached; @@ -517,13 +517,13 @@ private: mutable bool strictlyIncreasing; mutable bool decreasing; mutable bool increasing; - + /* Hermite basis functions, t \in [0,1] , notation from: http://en.wikipedia.org/w/index.php?title=Cubic_Hermite_spline&oldid=84495502 */ - + double H00(double t) const { return 2*t*t*t - 3*t*t + 1; } @@ -536,35 +536,35 @@ private: double H11(double t) const { return t*t*t - t*t; } - - + + void computeInternalFunctionData() const ; - - /** + + /** Computes initial derivative values using centered (second order) difference for internal datapoints, and one-sided derivative for endpoints - + The internal datastructure map ddata is populated by this method. */ - + void computeSimpleDerivatives() const ; - + /** Adjusts the derivative values (ddata) so that we can guarantee that the resulting piecewise Hermite polymial is monotone. This is - done according to the algorithm of Fritsch and Carlsson 1980, + done according to the algorithm of Fritsch and Carlsson 1980, see Section 4, especially the two last lines. */ void adjustDerivativesForMonotoneness() const ; - /** - Checks if the coefficient alpha and beta is in - the region that guarantees monotoneness of the - derivative values they represent - - See Fritsch and Carlson 1980, Lemma 2, - alternatively Step 5 in Wikipedia's article + /** + Checks if the coefficient alpha and beta is in + the region that guarantees monotoneness of the + derivative values they represent + + See Fritsch and Carlson 1980, Lemma 2, + alternatively Step 5 in Wikipedia's article on Monotone cubic interpolation. */ bool isMonotoneCoeff(double alpha, double beta) const { @@ -574,8 +574,8 @@ private: return false; } } - -}; + +}; } // namespace Opm diff --git a/opm/core/utility/linearInterpolation.hpp b/opm/core/utility/linearInterpolation.hpp index 424bc10f..81ed98fd 100644 --- a/opm/core/utility/linearInterpolation.hpp +++ b/opm/core/utility/linearInterpolation.hpp @@ -69,7 +69,7 @@ namespace Opm int ix2 = ix1 + 1; return (yv[ix2] - yv[ix1])/(xv[ix2] - xv[ix1])*(x - xv[ix1]) + yv[ix1]; } - + inline double linearInterpolation(const std::vector& xv, const std::vector& yv, double x, int& ix1) diff --git a/opm/core/utility/miscUtilities.hpp b/opm/core/utility/miscUtilities.hpp index 2def319a..c71a7085 100644 --- a/opm/core/utility/miscUtilities.hpp +++ b/opm/core/utility/miscUtilities.hpp @@ -141,7 +141,7 @@ namespace Opm const std::vector& cells, const std::vector& s , std::vector& pmobc); - + /// Computes the fractional flow for each cell in the cells argument /// @param[in] props rock and fluid properties @@ -202,42 +202,42 @@ namespace Opm /// For this to be valid, the wells must be all rate-controlled and /// single-perforation. void wellsToSrc(const Wells& wells, const int num_cells, std::vector& src); - + /// Computes the WDP for each well. /// \param[in] wells Wells that need their wdp calculated. /// \param[in] grid The associated grid to make cell lookups. - /// \param[in] saturations A vector of weights for each cell for each phase - /// in the grid (or well, see per_grid_cell parameter). So for cell i, + /// \param[in] saturations A vector of weights for each cell for each phase + /// in the grid (or well, see per_grid_cell parameter). So for cell i, /// saturations[i*densities.size() + p] should give the weight /// of phase p in cell i. /// \param[in] densities Density for each phase. /// \param[out] wdp Will contain, for each well, the wdp of the well. - /// \param[in] per_grid_cell Whether or not the saturations are per grid cell or per + /// \param[in] per_grid_cell Whether or not the saturations are per grid cell or per /// well cell. void computeWDP(const Wells& wells, const UnstructuredGrid& grid, const std::vector& saturations, const double* densities, const double gravity, const bool per_grid_cell, std::vector& wdp); - - /// Computes (sums) the flow rate for each well. + + /// Computes (sums) the flow rate for each well. /// \param[in] wells The wells for which the flow rate should be computed. - /// \param[in] flow_rates_per_cell Flow rates per well cells. Should ordered the same way as + /// \param[in] flow_rates_per_cell Flow rates per well cells. Should ordered the same way as /// wells. /// \param[out] flow_rates_per_well Will contain the summed up flow_rates for each well. void computeFlowRatePerWell(const Wells& wells, const std::vector& flow_rates_per_cell, std::vector& flow_rates_per_well); - + /// Computes the phase flow rate per well /// \param[in] wells The wells for which the flow rate should be computed /// \param[in] flow_rates_per_well_cell The total flow rate for each cell (ordered the same /// way as the wells struct /// \param[in] fractional_flows the fractional flow for each cell in each well /// \param[out] phase_flow_per_well Will contain the phase flow per well - void computePhaseFlowRatesPerWell(const Wells& wells, + void computePhaseFlowRatesPerWell(const Wells& wells, const std::vector& flow_rates_per_well_cell, const std::vector& fractional_flows, std::vector& phase_flow_per_well); - - + + /// Encapsulates the watercut curves. class Watercut { diff --git a/opm/core/utility/parameters/Parameter.hpp b/opm/core/utility/parameters/Parameter.hpp index c96a9819..93b83497 100644 --- a/opm/core/utility/parameters/Parameter.hpp +++ b/opm/core/utility/parameters/Parameter.hpp @@ -50,7 +50,7 @@ namespace Opm { class Parameter : public ParameterMapItem { public: /// @brief - /// @todo Doc me! + /// @todo Doc me! virtual ~Parameter() {} /// @brief /// @todo Doc me! diff --git a/opm/core/utility/parameters/tinyxml/tinystr.h b/opm/core/utility/parameters/tinyxml/tinystr.h index 89cca334..e13477b7 100644 --- a/opm/core/utility/parameters/tinyxml/tinystr.h +++ b/opm/core/utility/parameters/tinyxml/tinystr.h @@ -224,7 +224,7 @@ class TiXmlString // to the normal allocation, although use an 'int' for systems // that are overly picky about structure alignment. const size_type bytesNeeded = sizeof(Rep) + cap; - const size_type intsNeeded = ( bytesNeeded + sizeof(int) - 1 ) / sizeof( int ); + const size_type intsNeeded = ( bytesNeeded + sizeof(int) - 1 ) / sizeof( int ); rep_ = reinterpret_cast( new int[ intsNeeded ] ); rep_->str[ rep_->size = sz ] = '\0'; diff --git a/opm/core/utility/parameters/tinyxml/tinyxml.cpp b/opm/core/utility/parameters/tinyxml/tinyxml.cpp index 9eb4f8db..8375970b 100644 --- a/opm/core/utility/parameters/tinyxml/tinyxml.cpp +++ b/opm/core/utility/parameters/tinyxml/tinyxml.cpp @@ -58,7 +58,7 @@ void TiXmlBase::EncodeString( const TIXML_STRING& str, TIXML_STRING* outString ) { unsigned char c = (unsigned char) str[i]; - if ( c == '&' + if ( c == '&' && i < ( (int)str.length() - 2 ) && str[i+1] == '#' && str[i+2] == 'x' ) @@ -111,12 +111,12 @@ void TiXmlBase::EncodeString( const TIXML_STRING& str, TIXML_STRING* outString ) // Easy pass at non-alpha/numeric/symbol // Below 32 is symbolic. char buf[ 32 ]; - - #if defined(TIXML_SNPRINTF) + + #if defined(TIXML_SNPRINTF) TIXML_SNPRINTF( buf, sizeof(buf), "&#x%02X;", (unsigned) ( c & 0xff ) ); #else sprintf( buf, "&#x%02X;", (unsigned) ( c & 0xff ) ); - #endif + #endif //*ME: warning C4267: convert 'size_t' to 'int' //*ME: Int-Cast to make compiler happy ... @@ -155,14 +155,14 @@ TiXmlNode::~TiXmlNode() temp = node; node = node->next; delete temp; - } + } } void TiXmlNode::CopyTo( TiXmlNode* target ) const { target->SetValue (value.c_str() ); - target->userData = userData; + target->userData = userData; target->location = location; } @@ -177,7 +177,7 @@ void TiXmlNode::Clear() temp = node; node = node->next; delete temp; - } + } firstChild = 0; lastChild = 0; @@ -192,7 +192,7 @@ TiXmlNode* TiXmlNode::LinkEndChild( TiXmlNode* node ) if ( node->Type() == TiXmlNode::TINYXML_DOCUMENT ) { delete node; - if ( GetDocument() ) + if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } @@ -216,7 +216,7 @@ TiXmlNode* TiXmlNode::InsertEndChild( const TiXmlNode& addThis ) { if ( addThis.Type() == TiXmlNode::TINYXML_DOCUMENT ) { - if ( GetDocument() ) + if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } @@ -229,13 +229,13 @@ TiXmlNode* TiXmlNode::InsertEndChild( const TiXmlNode& addThis ) TiXmlNode* TiXmlNode::InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis ) -{ +{ if ( !beforeThis || beforeThis->parent != this ) { return 0; } if ( addThis.Type() == TiXmlNode::TINYXML_DOCUMENT ) { - if ( GetDocument() ) + if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } @@ -268,7 +268,7 @@ TiXmlNode* TiXmlNode::InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& a } if ( addThis.Type() == TiXmlNode::TINYXML_DOCUMENT ) { - if ( GetDocument() ) + if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } @@ -305,7 +305,7 @@ TiXmlNode* TiXmlNode::ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& wit if ( withThis.ToDocument() ) { // A document can never be a child. Thanks to Noam. TiXmlDocument* document = GetDocument(); - if ( document ) + if ( document ) document->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } @@ -340,7 +340,7 @@ bool TiXmlNode::RemoveChild( TiXmlNode* removeThis ) } if ( removeThis->parent != this ) - { + { assert( 0 ); return false; } @@ -411,7 +411,7 @@ const TiXmlNode* TiXmlNode::IterateChildren( const char * val, const TiXmlNode* } -const TiXmlNode* TiXmlNode::NextSibling( const char * _value ) const +const TiXmlNode* TiXmlNode::NextSibling( const char * _value ) const { const TiXmlNode* node; for ( node = next; node; node = node->next ) @@ -532,7 +532,7 @@ TiXmlElement::TiXmlElement (const char * _value) #ifdef TIXML_USE_STL -TiXmlElement::TiXmlElement( const std::string& _value ) +TiXmlElement::TiXmlElement( const std::string& _value ) : TiXmlNode( TiXmlNode::TINYXML_ELEMENT ) { firstChild = lastChild = 0; @@ -545,7 +545,7 @@ TiXmlElement::TiXmlElement( const TiXmlElement& copy) : TiXmlNode( TiXmlNode::TINYXML_ELEMENT ) { firstChild = lastChild = 0; - copy.CopyTo( this ); + copy.CopyTo( this ); } @@ -686,18 +686,18 @@ int TiXmlElement::QueryBoolAttribute( const char* name, bool* bval ) const const TiXmlAttribute* node = attributeSet.Find( name ); if ( !node ) return TIXML_NO_ATTRIBUTE; - + int result = TIXML_WRONG_TYPE; - if ( StringEqual( node->Value(), "true", true, TIXML_ENCODING_UNKNOWN ) - || StringEqual( node->Value(), "yes", true, TIXML_ENCODING_UNKNOWN ) - || StringEqual( node->Value(), "1", true, TIXML_ENCODING_UNKNOWN ) ) + if ( StringEqual( node->Value(), "true", true, TIXML_ENCODING_UNKNOWN ) + || StringEqual( node->Value(), "yes", true, TIXML_ENCODING_UNKNOWN ) + || StringEqual( node->Value(), "1", true, TIXML_ENCODING_UNKNOWN ) ) { *bval = true; result = TIXML_SUCCESS; } - else if ( StringEqual( node->Value(), "false", true, TIXML_ENCODING_UNKNOWN ) - || StringEqual( node->Value(), "no", true, TIXML_ENCODING_UNKNOWN ) - || StringEqual( node->Value(), "0", true, TIXML_ENCODING_UNKNOWN ) ) + else if ( StringEqual( node->Value(), "false", true, TIXML_ENCODING_UNKNOWN ) + || StringEqual( node->Value(), "no", true, TIXML_ENCODING_UNKNOWN ) + || StringEqual( node->Value(), "0", true, TIXML_ENCODING_UNKNOWN ) ) { *bval = false; result = TIXML_SUCCESS; @@ -739,7 +739,7 @@ int TiXmlElement::QueryDoubleAttribute( const std::string& name, double* dval ) void TiXmlElement::SetAttribute( const char * name, int val ) -{ +{ TiXmlAttribute* attrib = attributeSet.FindOrCreate( name ); if ( attrib ) { attrib->SetIntValue( val ); @@ -749,7 +749,7 @@ void TiXmlElement::SetAttribute( const char * name, int val ) #ifdef TIXML_USE_STL void TiXmlElement::SetAttribute( const std::string& name, int val ) -{ +{ TiXmlAttribute* attrib = attributeSet.FindOrCreate( name ); if ( attrib ) { attrib->SetIntValue( val ); @@ -759,7 +759,7 @@ void TiXmlElement::SetAttribute( const std::string& name, int val ) void TiXmlElement::SetDoubleAttribute( const char * name, double val ) -{ +{ TiXmlAttribute* attrib = attributeSet.FindOrCreate( name ); if ( attrib ) { attrib->SetDoubleValue( val ); @@ -769,13 +769,13 @@ void TiXmlElement::SetDoubleAttribute( const char * name, double val ) #ifdef TIXML_USE_STL void TiXmlElement::SetDoubleAttribute( const std::string& name, double val ) -{ +{ TiXmlAttribute* attrib = attributeSet.FindOrCreate( name ); if ( attrib ) { attrib->SetDoubleValue( val ); } } -#endif +#endif void TiXmlElement::SetAttribute( const char * cname, const char * cvalue ) @@ -856,7 +856,7 @@ void TiXmlElement::CopyTo( TiXmlElement* target ) const // superclass: TiXmlNode::CopyTo( target ); - // Element class: + // Element class: // Clone the attributes, then clone the children. const TiXmlAttribute* attribute = 0; for( attribute = attributeSet.First(); @@ -875,7 +875,7 @@ void TiXmlElement::CopyTo( TiXmlElement* target ) const bool TiXmlElement::Accept( TiXmlVisitor* visitor ) const { - if ( visitor->VisitEnter( *this, attributeSet.First() ) ) + if ( visitor->VisitEnter( *this, attributeSet.First() ) ) { for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) { @@ -969,7 +969,7 @@ bool TiXmlDocument::LoadFile( const char* _filename, TiXmlEncoding encoding ) value = filename; // reading in binary mode so that tinyxml can normalize the EOL - FILE* file = TiXmlFOpen( value.c_str (), "rb" ); + FILE* file = TiXmlFOpen( value.c_str (), "rb" ); if ( file ) { @@ -986,7 +986,7 @@ bool TiXmlDocument::LoadFile( const char* _filename, TiXmlEncoding encoding ) bool TiXmlDocument::LoadFile( FILE* file, TiXmlEncoding encoding ) { - if ( !file ) + if ( !file ) { SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN ); return false; @@ -1013,13 +1013,13 @@ bool TiXmlDocument::LoadFile( FILE* file, TiXmlEncoding encoding ) // 2.11 End-of-Line Handling // // - // ...the XML processor MUST behave as if it normalized all line breaks in external - // parsed entities (including the document entity) on input, before parsing, by translating - // both the two-character sequence #xD #xA and any #xD that is not followed by #xA to + // ...the XML processor MUST behave as if it normalized all line breaks in external + // parsed entities (including the document entity) on input, before parsing, by translating + // both the two-character sequence #xD #xA and any #xD that is not followed by #xA to // a single #xA character. // // - // It is not clear fgets does that, and certainly isn't clear it works cross platform. + // It is not clear fgets does that, and certainly isn't clear it works cross platform. // Generally, you expect fgets to translate from the convention of the OS to the c/unix // convention, and not work generally. @@ -1044,7 +1044,7 @@ bool TiXmlDocument::LoadFile( FILE* file, TiXmlEncoding encoding ) // a newline-carriage return is hit. // // Wikipedia: - // Systems based on ASCII or a compatible character set use either LF (Line feed, '\n', 0x0A, 10 in decimal) or + // Systems based on ASCII or a compatible character set use either LF (Line feed, '\n', 0x0A, 10 in decimal) or // CR (Carriage return, '\r', 0x0D, 13 in decimal) individually, or CR followed by LF (CR+LF, 0x0D 0x0A)... // * LF: Multics, Unix and Unix-like systems (GNU/Linux, AIX, Xenix, Mac OS X, FreeBSD, etc.), BeOS, Amiga, RISC OS, and others // * CR+LF: DEC RT-11 and most other early non-Unix, non-IBM OSes, CP/M, MP/M, DOS, OS/2, Microsoft Windows, Symbian OS @@ -1098,7 +1098,7 @@ bool TiXmlDocument::SaveFile( const char * filename ) const bool TiXmlDocument::SaveFile( FILE* fp ) const { - if ( useMicrosoftBOM ) + if ( useMicrosoftBOM ) { const unsigned char TIXML_UTF_LEAD_0 = 0xefU; const unsigned char TIXML_UTF_LEAD_1 = 0xbbU; @@ -1128,7 +1128,7 @@ void TiXmlDocument::CopyTo( TiXmlDocument* target ) const for ( node = firstChild; node; node = node->NextSibling() ) { target->LinkEndChild( node->Clone() ); - } + } } @@ -1251,7 +1251,7 @@ int TiXmlAttribute::QueryDoubleValue( double* dval ) const void TiXmlAttribute::SetIntValue( int _value ) { char buf [64]; - #if defined(TIXML_SNPRINTF) + #if defined(TIXML_SNPRINTF) TIXML_SNPRINTF(buf, sizeof(buf), "%d", _value); #else sprintf (buf, "%d", _value); @@ -1262,7 +1262,7 @@ void TiXmlAttribute::SetIntValue( int _value ) void TiXmlAttribute::SetDoubleValue( double _value ) { char buf [256]; - #if defined(TIXML_SNPRINTF) + #if defined(TIXML_SNPRINTF) TIXML_SNPRINTF( buf, sizeof(buf), "%g", _value); #else sprintf (buf, "%g", _value); @@ -1365,7 +1365,7 @@ bool TiXmlText::Accept( TiXmlVisitor* visitor ) const TiXmlNode* TiXmlText::Clone() const -{ +{ TiXmlText* clone = 0; clone = new TiXmlText( "" ); @@ -1404,7 +1404,7 @@ TiXmlDeclaration::TiXmlDeclaration( const std::string& _version, TiXmlDeclaration::TiXmlDeclaration( const TiXmlDeclaration& copy ) : TiXmlNode( TiXmlNode::TINYXML_DECLARATION ) { - copy.CopyTo( this ); + copy.CopyTo( this ); } @@ -1455,7 +1455,7 @@ bool TiXmlDeclaration::Accept( TiXmlVisitor* visitor ) const TiXmlNode* TiXmlDeclaration::Clone() const -{ +{ TiXmlDeclaration* clone = new TiXmlDeclaration(); if ( !clone ) @@ -1593,7 +1593,7 @@ TiXmlAttribute* TiXmlAttributeSet::FindOrCreate( const char* _name ) } -#ifdef TIXML_USE_STL +#ifdef TIXML_USE_STL std::istream& operator>> (std::istream & in, TiXmlNode & base) { TIXML_STRING tag; @@ -1606,7 +1606,7 @@ std::istream& operator>> (std::istream & in, TiXmlNode & base) #endif -#ifdef TIXML_USE_STL +#ifdef TIXML_USE_STL std::ostream& operator<< (std::ostream & out, const TiXmlNode & base) { TiXmlPrinter printer; @@ -1776,12 +1776,12 @@ bool TiXmlPrinter::VisitEnter( const TiXmlElement& element, const TiXmlAttribute attrib->Print( 0, 0, &buffer ); } - if ( !element.FirstChild() ) + if ( !element.FirstChild() ) { buffer += " />"; DoLineBreak(); } - else + else { buffer += ">"; if ( element.FirstChild()->ToText() @@ -1796,7 +1796,7 @@ bool TiXmlPrinter::VisitEnter( const TiXmlElement& element, const TiXmlAttribute DoLineBreak(); } } - ++depth; + ++depth; return true; } @@ -1804,11 +1804,11 @@ bool TiXmlPrinter::VisitEnter( const TiXmlElement& element, const TiXmlAttribute bool TiXmlPrinter::VisitExit( const TiXmlElement& element ) { --depth; - if ( !element.FirstChild() ) + if ( !element.FirstChild() ) { // nothing. } - else + else { if ( simpleTextPrint ) { diff --git a/opm/core/utility/parameters/tinyxml/tinyxml.h b/opm/core/utility/parameters/tinyxml/tinyxml.h index c13ba392..c8c610ee 100644 --- a/opm/core/utility/parameters/tinyxml/tinyxml.h +++ b/opm/core/utility/parameters/tinyxml/tinyxml.h @@ -80,7 +80,7 @@ distribution. #define TIXML_SNPRINTF snprintf #define TIXML_SSCANF sscanf #endif -#endif +#endif class TiXmlDocument; class TiXmlElement; @@ -95,7 +95,7 @@ const int TIXML_MAJOR_VERSION = 2; const int TIXML_MINOR_VERSION = 6; const int TIXML_PATCH_VERSION = 2; -/* Internal structure for tracking location of items +/* Internal structure for tracking location of items in the XML file. */ struct TiXmlCursor @@ -118,7 +118,7 @@ struct TiXmlCursor If you return 'true' from a Visit method, recursive parsing will continue. If you return false, no children of this node or its sibilings will be Visited. - All flavors of Visit methods have a default implementation that returns 'true' (continue + All flavors of Visit methods have a default implementation that returns 'true' (continue visiting). You need to only override methods that are interesting to you. Generally Accept() is called on the TiXmlDocument, although all nodes suppert Visiting. @@ -153,8 +153,8 @@ public: }; // Only used by Attribute::Query functions -enum -{ +enum +{ TIXML_SUCCESS, TIXML_NO_ATTRIBUTE, TIXML_WRONG_TYPE @@ -206,10 +206,10 @@ public: /** All TinyXml classes can print themselves to a filestream or the string class (TiXmlString in non-STL mode, std::string in STL mode.) Either or both cfile and str can be null. - - This is a formatted print, and will insert + + This is a formatted print, and will insert tabs and newlines. - + (For an unformatted stream, use the << operator.) */ virtual void Print( FILE* cfile, int depth ) const = 0; @@ -254,11 +254,11 @@ public: // in the UTF-8 sequence. static const int utf8ByteTable[256]; - virtual const char* Parse( const char* p, - TiXmlParsingData* data, + virtual const char* Parse( const char* p, + TiXmlParsingData* data, TiXmlEncoding encoding /*= TIXML_ENCODING_UNKNOWN */ ) = 0; - /** Expands entities in a string. Note this should not contian the tag's '<', '>', etc, + /** Expands entities in a string. Note this should not contian the tag's '<', '>', etc, or they will be transformed into entities! */ static void EncodeString( const TIXML_STRING& str, TIXML_STRING* out ); @@ -289,9 +289,9 @@ protected: static const char* SkipWhiteSpace( const char*, TiXmlEncoding encoding ); - inline static bool IsWhiteSpace( char c ) - { - return ( isspace( (unsigned char) c ) || c == '\n' || c == '\r' ); + inline static bool IsWhiteSpace( char c ) + { + return ( isspace( (unsigned char) c ) || c == '\n' || c == '\r' ); } inline static bool IsWhiteSpace( int c ) { @@ -376,7 +376,7 @@ protected: /// Field containing a generic user pointer void* userData; - + // None of these methods are reliable for any language except English. // Good for approximation, not great for accuracy. static int IsAlpha( unsigned char anyByte, TiXmlEncoding encoding ); @@ -428,7 +428,7 @@ class TiXmlNode : public TiXmlBase friend class TiXmlElement; public: - #ifdef TIXML_USE_STL + #ifdef TIXML_USE_STL /** An input stream operator, for every class. Tolerant of newlines and formatting, but doesn't expect them. @@ -442,7 +442,7 @@ public: The operator<< and operator>> are not completely symmetric. Writing a node to a stream is very well defined. You'll get a nice stream of output, without any extra whitespace or newlines. - + But reading is not as well defined. (As it always is.) If you create a TiXmlElement (for example) and read that from an input stream, the text needs to define an element or junk will result. This is @@ -450,7 +450,7 @@ public: A TiXmlDocument will read nodes until it reads a root element, and all the children of that root element. - */ + */ friend std::ostream& operator<< (std::ostream& out, const TiXmlNode& base); /// Appends the XML node or attribute to a std::string. @@ -532,7 +532,7 @@ public: } const TiXmlNode* LastChild() const { return lastChild; } /// The last child of this node. Will be null if there are no children. TiXmlNode* LastChild() { return lastChild; } - + const TiXmlNode* LastChild( const char * value ) const; /// The last child of this node matching 'value'. Will be null if there are no children. TiXmlNode* LastChild( const char * _value ) { return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->LastChild( _value )); @@ -711,11 +711,11 @@ public: virtual TiXmlDeclaration* ToDeclaration() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. /** Create an exact duplicate of this node and return it. The memory must be deleted - by the caller. + by the caller. */ virtual TiXmlNode* Clone() const = 0; - /** Accept a hierchical visit the nodes in the TinyXML DOM. Every node in the + /** Accept a hierchical visit the nodes in the TinyXML DOM. Every node in the XML tree will be conditionally visited and the host will be called back via the TiXmlVisitor interface. @@ -726,7 +726,7 @@ public: The interface has been based on ideas from: - http://www.saxproject.org/ - - http://c2.com/cgi/wiki?HierarchicalVisitorPattern + - http://c2.com/cgi/wiki?HierarchicalVisitorPattern Which are both good references for "visiting". @@ -823,7 +823,7 @@ public: /** QueryIntValue examines the value string. It is an alternative to the IntValue() method with richer error checking. - If the value is an integer, it is stored in 'value' and + If the value is an integer, it is stored in 'value' and the call returns TIXML_SUCCESS. If it is not an integer, it returns TIXML_WRONG_TYPE. @@ -842,21 +842,21 @@ public: #ifdef TIXML_USE_STL /// STL std::string form. - void SetName( const std::string& _name ) { name = _name; } - /// STL std::string form. + void SetName( const std::string& _name ) { name = _name; } + /// STL std::string form. void SetValue( const std::string& _value ) { value = _value; } #endif /// Get the next sibling attribute in the DOM. Returns null at end. const TiXmlAttribute* Next() const; TiXmlAttribute* Next() { - return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Next() ); + return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Next() ); } /// Get the previous sibling attribute in the DOM. Returns null at beginning. const TiXmlAttribute* Previous() const; TiXmlAttribute* Previous() { - return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Previous() ); + return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Previous() ); } bool operator==( const TiXmlAttribute& rhs ) const { return rhs.name == name; } @@ -892,7 +892,7 @@ private: /* A class used to manage a group of attributes. It is only used internally, both by the ELEMENT and the DECLARATION. - + The set can be changed transparent to the Element and Declaration classes that use it, but NOT transparent to the Attribute which has to implement a next() and previous() method. Which makes @@ -979,15 +979,15 @@ public: /** QueryIntAttribute examines the attribute - it is an alternative to the Attribute() method with richer error checking. - If the attribute is an integer, it is stored in 'value' and + If the attribute is an integer, it is stored in 'value' and the call returns TIXML_SUCCESS. If it is not an integer, it returns TIXML_WRONG_TYPE. If the attribute does not exist, then TIXML_NO_ATTRIBUTE is returned. - */ + */ int QueryIntAttribute( const char* name, int* _value ) const; /// QueryUnsignedAttribute examines the attribute - see QueryIntAttribute(). int QueryUnsignedAttribute( const char* name, unsigned* _value ) const; - /** QueryBoolAttribute examines the attribute - see QueryIntAttribute(). + /** QueryBoolAttribute examines the attribute - see QueryIntAttribute(). Note that '1', 'true', or 'yes' are considered true, while '0', 'false' and 'no' are considered false. */ @@ -1018,7 +1018,7 @@ public: /** Template form of the attribute query which will try to read the attribute into the specified type. Very easy, very powerful, but be careful to make sure to call this with the correct type. - + NOTE: This method doesn't work correctly for 'string' types that contain spaces. @return TIXML_SUCCESS, TIXML_WRONG_TYPE, or TIXML_NO_ATTRIBUTE @@ -1091,7 +1091,7 @@ public: /** Convenience function for easy access to the text inside an element. Although easy and concise, GetText() is limited compared to getting the TiXmlText child and accessing it directly. - + If the first child of 'this' is a TiXmlText, the GetText() returns the character string of the Text node, else null is returned. @@ -1101,23 +1101,23 @@ public: const char* str = fooElement->GetText(); @endverbatim - 'str' will be a pointer to "This is text". - + 'str' will be a pointer to "This is text". + Note that this function can be misleading. If the element foo was created from this XML: @verbatim - This is text + This is text @endverbatim then the value of str would be null. The first child node isn't a text node, it is another element. From this XML: @verbatim - This is text + This is text @endverbatim GetText() will return "This is ". - WARNING: GetText() accesses a child node - don't become confused with the - similarly named TiXmlHandle::Text() and TiXmlNode::ToText() which are + WARNING: GetText() accesses a child node - don't become confused with the + similarly named TiXmlHandle::Text() and TiXmlNode::ToText() which are safe type casts on the referenced node. */ const char* GetText() const; @@ -1135,7 +1135,7 @@ public: virtual const TiXmlElement* ToElement() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlElement* ToElement() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - /** Walk the XML tree visiting this node and all of its children. + /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* visitor ) const; @@ -1188,7 +1188,7 @@ public: virtual const TiXmlComment* ToComment() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlComment* ToComment() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - /** Walk the XML tree visiting this node and all of its children. + /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* visitor ) const; @@ -1206,16 +1206,16 @@ private: }; -/** XML text. A text node can have 2 ways to output the next. "normal" output +/** XML text. A text node can have 2 ways to output the next. "normal" output and CDATA. It will default to the mode it was parsed from the XML file and - you generally want to leave it alone, but you can change the output mode with + you generally want to leave it alone, but you can change the output mode with SetCDATA() and query it with CDATA(). */ class TiXmlText : public TiXmlNode { friend class TiXmlElement; public: - /** Constructor for text element. By default, it is treated as + /** Constructor for text element. By default, it is treated as normal, encoded text. If you want it be output as a CDATA text element, set the parameter _cdata to 'true' */ @@ -1251,7 +1251,7 @@ public: virtual const TiXmlText* ToText() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlText* ToText() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - /** Walk the XML tree visiting this node and all of its children. + /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* content ) const; @@ -1327,7 +1327,7 @@ public: virtual const TiXmlDeclaration* ToDeclaration() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlDeclaration* ToDeclaration() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - /** Walk the XML tree visiting this node and all of its children. + /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* visitor ) const; @@ -1372,7 +1372,7 @@ public: virtual const TiXmlUnknown* ToUnknown() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlUnknown* ToUnknown() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - /** Walk the XML tree visiting this node and all of its children. + /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* content ) const; @@ -1458,7 +1458,7 @@ public: - The ErrorId() will contain the integer identifier of the error (not generally useful) - The ErrorDesc() method will return the name of the error. (very useful) - The ErrorRow() and ErrorCol() will return the location of the error (if known) - */ + */ bool Error() const { return error; } /// Contains a textual (english) description of the error if one occurs. @@ -1469,7 +1469,7 @@ public: */ int ErrorId() const { return errorId; } - /** Returns the location (if known) of the error. The first column is column 1, + /** Returns the location (if known) of the error. The first column is column 1, and the first row is row 1. A value of 0 means the row and column wasn't applicable (memory errors, for example, have no row/column) or the parser lost the error. (An error in the error reporting, in that case.) @@ -1482,7 +1482,7 @@ public: /** SetTabSize() allows the error reporting functions (ErrorRow() and ErrorCol()) to report the correct values for row and column. It does not change the output or input in any way. - + By calling this method, with a tab size greater than 0, the row and column of each node and attribute is stored when the file is loaded. Very useful for tracking the DOM back in to @@ -1510,11 +1510,11 @@ public: /** If you have handled the error, it can be reset with this call. The error state is automatically cleared if you Parse a new XML block. */ - void ClearError() { error = false; - errorId = 0; - errorDesc = ""; - errorLocation.row = errorLocation.col = 0; - //errorLocation.last = 0; + void ClearError() { error = false; + errorId = 0; + errorDesc = ""; + errorLocation.row = errorLocation.col = 0; + //errorLocation.last = 0; } /** Write the document to standard out using formatted printing ("pretty print"). */ @@ -1524,7 +1524,7 @@ public: will allocate a character array (new char[]) and return it as a pointer. The calling code pust call delete[] on the return char* to avoid a memory leak. */ - //char* PrintToMemory() const; + //char* PrintToMemory() const; /// Print this Document to a FILE stream. virtual void Print( FILE* cfile, int depth = 0 ) const; @@ -1534,7 +1534,7 @@ public: virtual const TiXmlDocument* ToDocument() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlDocument* ToDocument() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - /** Walk the XML tree visiting this node and all of its children. + /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* content ) const; @@ -1572,7 +1572,7 @@ private: @endverbatim - Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very + Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very easy to write a *lot* of code that looks like: @verbatim @@ -1592,7 +1592,7 @@ private: @endverbatim And that doesn't even cover "else" cases. TiXmlHandle addresses the verbosity - of such code. A TiXmlHandle checks for null pointers so it is perfectly safe + of such code. A TiXmlHandle checks for null pointers so it is perfectly safe and correct to use: @verbatim @@ -1613,7 +1613,7 @@ private: What they should not be used for is iteration: @verbatim - int i=0; + int i=0; while ( true ) { TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", i ).ToElement(); @@ -1624,8 +1624,8 @@ private: } @endverbatim - It seems reasonable, but it is in fact two embedded while loops. The Child method is - a linear walk to find the element, so this code would iterate much more than it needs + It seems reasonable, but it is in fact two embedded while loops. The Child method is + a linear walk to find the element, so this code would iterate much more than it needs to. Instead, prefer: @verbatim @@ -1655,20 +1655,20 @@ public: /// Return a handle to the first child element with the given name. TiXmlHandle FirstChildElement( const char * value ) const; - /** Return a handle to the "index" child with the given name. + /** Return a handle to the "index" child with the given name. The first child is 0, the second 1, etc. */ TiXmlHandle Child( const char* value, int index ) const; - /** Return a handle to the "index" child. + /** Return a handle to the "index" child. The first child is 0, the second 1, etc. */ TiXmlHandle Child( int index ) const; - /** Return a handle to the "index" child element with the given name. + /** Return a handle to the "index" child element with the given name. The first child element is 0, the second 1, etc. Note that only TiXmlElements are indexed: other types are not counted. */ TiXmlHandle ChildElement( const char* value, int index ) const; - /** Return a handle to the "index" child element. + /** Return a handle to the "index" child element. The first child element is 0, the second 1, etc. Note that only TiXmlElements are indexed: other types are not counted. */ @@ -1684,7 +1684,7 @@ public: /** Return the handle as a TiXmlNode. This may return null. */ - TiXmlNode* ToNode() const { return node; } + TiXmlNode* ToNode() const { return node; } /** Return the handle as a TiXmlElement. This may return null. */ TiXmlElement* ToElement() const { return ( ( node && node->ToElement() ) ? node->ToElement() : 0 ); } @@ -1695,11 +1695,11 @@ public: */ TiXmlUnknown* ToUnknown() const { return ( ( node && node->ToUnknown() ) ? node->ToUnknown() : 0 ); } - /** @deprecated use ToNode. + /** @deprecated use ToNode. Return the handle as a TiXmlNode. This may return null. */ - TiXmlNode* Node() const { return ToNode(); } - /** @deprecated use ToElement. + TiXmlNode* Node() const { return ToNode(); } + /** @deprecated use ToElement. Return the handle as a TiXmlElement. This may return null. */ TiXmlElement* Element() const { return ToElement(); } @@ -1759,7 +1759,7 @@ public: void SetIndent( const char* _indent ) { indent = _indent ? _indent : "" ; } /// Query the indention string. const char* Indent() { return indent.c_str(); } - /** Set the line breaking string. By default set to newline (\n). + /** Set the line breaking string. By default set to newline (\n). Some operating systems prefer other characters, or can be set to the null/empty string for no indenation. */ @@ -1767,12 +1767,12 @@ public: /// Query the current line breaking string. const char* LineBreak() { return lineBreak.c_str(); } - /** Switch over to "stream printing" which is the most dense formatting without + /** Switch over to "stream printing" which is the most dense formatting without linebreaks. Common when the XML is needed for network transmission. */ void SetStreamPrinting() { indent = ""; lineBreak = ""; - } + } /// Return the result. const char* CStr() { return buffer.c_str(); } /// Return the length of the result string. diff --git a/opm/core/utility/parameters/tinyxml/tinyxmlerror.cpp b/opm/core/utility/parameters/tinyxml/tinyxmlerror.cpp index c7cb0521..54e7ec50 100644 --- a/opm/core/utility/parameters/tinyxml/tinyxmlerror.cpp +++ b/opm/core/utility/parameters/tinyxml/tinyxmlerror.cpp @@ -2,12 +2,12 @@ www.sourceforge.net/projects/tinyxml Original code (2.0 and earlier )copyright (c) 2000-2006 Lee Thomason (www.grinninglizard.com) -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any -purpose, including commercial applications, and to alter it and +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must diff --git a/opm/core/utility/parameters/tinyxml/tinyxmlparser.cpp b/opm/core/utility/parameters/tinyxml/tinyxmlparser.cpp index 75df34ec..1eb54c3e 100644 --- a/opm/core/utility/parameters/tinyxml/tinyxmlparser.cpp +++ b/opm/core/utility/parameters/tinyxml/tinyxmlparser.cpp @@ -2,23 +2,23 @@ www.sourceforge.net/projects/tinyxml Original code by Lee Thomason (www.grinninglizard.com) -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any -purpose, including commercial applications, and to alter it and +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: -1. The origin of this software must not be misrepresented; you must +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source +3. This notice may not be removed or altered from any source distribution. */ @@ -40,8 +40,8 @@ distribution. // Note tha "PutString" hardcodes the same list. This // is less flexible than it appears. Changing the entries -// or order will break putstring. -TiXmlBase::Entity TiXmlBase::entity[ TiXmlBase::NUM_ENTITY ] = +// or order will break putstring. +TiXmlBase::Entity TiXmlBase::entity[ TiXmlBase::NUM_ENTITY ] = { { "&", 5, '&' }, { "<", 4, '<' }, @@ -55,16 +55,16 @@ TiXmlBase::Entity TiXmlBase::entity[ TiXmlBase::NUM_ENTITY ] = // Including the basic of this table, which determines the #bytes in the // sequence from the lead byte. 1 placed for invalid sequences -- // although the result will be junk, pass it through as much as possible. -// Beware of the non-characters in UTF-8: +// Beware of the non-characters in UTF-8: // ef bb bf (Microsoft "lead bytes") // ef bf be -// ef bf bf +// ef bf bf const unsigned char TIXML_UTF_LEAD_0 = 0xefU; const unsigned char TIXML_UTF_LEAD_1 = 0xbbU; const unsigned char TIXML_UTF_LEAD_2 = 0xbfU; -const int TiXmlBase::utf8ByteTable[256] = +const int TiXmlBase::utf8ByteTable[256] = { // 0 1 2 3 4 5 6 7 8 9 a b c d e f 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x00 @@ -76,9 +76,9 @@ const int TiXmlBase::utf8ByteTable[256] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x60 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x70 End of ASCII range 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x80 0x80 to 0xc1 invalid - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x90 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xa0 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xb0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x90 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xa0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xb0 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xc0 0xc2 to 0xdf 2 byte 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xd0 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 0xe0 0xe0 to 0xef 3 byte @@ -92,7 +92,7 @@ void TiXmlBase::ConvertUTF32ToUTF8( unsigned long input, char* output, int* leng const unsigned long BYTE_MARK = 0x80; const unsigned long FIRST_BYTE_MARK[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; - if (input < 0x80) + if (input < 0x80) *length = 1; else if ( input < 0x800 ) *length = 2; @@ -106,22 +106,22 @@ void TiXmlBase::ConvertUTF32ToUTF8( unsigned long input, char* output, int* leng output += *length; // Scary scary fall throughs. - switch (*length) + switch (*length) { case 4: - --output; - *output = (char)((input | BYTE_MARK) & BYTE_MASK); + --output; + *output = (char)((input | BYTE_MARK) & BYTE_MASK); input >>= 6; case 3: - --output; - *output = (char)((input | BYTE_MARK) & BYTE_MASK); + --output; + *output = (char)((input | BYTE_MARK) & BYTE_MASK); input >>= 6; case 2: - --output; - *output = (char)((input | BYTE_MARK) & BYTE_MASK); + --output; + *output = (char)((input | BYTE_MARK) & BYTE_MASK); input >>= 6; case 1: - --output; + --output; *output = (char)(input | FIRST_BYTE_MARK[*length]); } } @@ -131,7 +131,7 @@ void TiXmlBase::ConvertUTF32ToUTF8( unsigned long input, char* output, int* leng { // This will only work for low-ascii, everything else is assumed to be a valid // letter. I'm not sure this is the best approach, but it is quite tricky trying - // to figure out alhabetical vs. not across encoding. So take a very + // to figure out alhabetical vs. not across encoding. So take a very // conservative approach. // if ( encoding == TIXML_ENCODING_UTF8 ) @@ -152,7 +152,7 @@ void TiXmlBase::ConvertUTF32ToUTF8( unsigned long input, char* output, int* leng { // This will only work for low-ascii, everything else is assumed to be a valid // letter. I'm not sure this is the best approach, but it is quite tricky trying - // to figure out alhabetical vs. not across encoding. So take a very + // to figure out alhabetical vs. not across encoding. So take a very // conservative approach. // if ( encoding == TIXML_ENCODING_UTF8 ) @@ -225,7 +225,7 @@ void TiXmlParsingData::Stamp( const char* now, TiXmlEncoding encoding ) case '\r': // bump down to the next line ++row; - col = 0; + col = 0; // Eat the character ++p; @@ -267,11 +267,11 @@ void TiXmlParsingData::Stamp( const char* now, TiXmlEncoding encoding ) // In these cases, don't advance the column. These are // 0-width spaces. if ( *(pU+1)==TIXML_UTF_LEAD_1 && *(pU+2)==TIXML_UTF_LEAD_2 ) - p += 3; + p += 3; else if ( *(pU+1)==0xbfU && *(pU+2)==0xbeU ) - p += 3; + p += 3; else if ( *(pU+1)==0xbfU && *(pU+2)==0xbfU ) - p += 3; + p += 3; else { p +=3; ++col; } // A normal character. } @@ -323,10 +323,10 @@ const char* TiXmlBase::SkipWhiteSpace( const char* p, TiXmlEncoding encoding ) while ( *p ) { const unsigned char* pU = (const unsigned char*)p; - + // Skip the stupid Microsoft UTF-8 Byte order marks if ( *(pU+0)==TIXML_UTF_LEAD_0 - && *(pU+1)==TIXML_UTF_LEAD_1 + && *(pU+1)==TIXML_UTF_LEAD_1 && *(pU+2)==TIXML_UTF_LEAD_2 ) { p += 3; @@ -414,12 +414,12 @@ const char* TiXmlBase::ReadName( const char* p, TIXML_STRING * name, TiXmlEncodi // After that, they can be letters, underscores, numbers, // hyphens, or colons. (Colons are valid ony for namespaces, // but tinyxml can't tell namespaces from names.) - if ( p && *p + if ( p && *p && ( IsAlpha( (unsigned char) *p, encoding ) || *p == '_' ) ) { const char* start = p; while( p && *p - && ( IsAlphaNum( (unsigned char ) *p, encoding ) + && ( IsAlphaNum( (unsigned char ) *p, encoding ) || *p == '_' || *p == '-' || *p == '.' @@ -470,7 +470,7 @@ const char* TiXmlBase::GetEntity( const char* p, char* value, int* length, TiXml ucs += mult * (*q - 'a' + 10); else if ( *q >= 'A' && *q <= 'F' ) ucs += mult * (*q - 'A' + 10 ); - else + else return 0; mult *= 16; --q; @@ -493,7 +493,7 @@ const char* TiXmlBase::GetEntity( const char* p, char* value, int* length, TiXml { if ( *q >= '0' && *q <= '9' ) ucs += mult * (*q - '0'); - else + else return 0; mult *= 10; --q; @@ -572,10 +572,10 @@ bool TiXmlBase::StringEqual( const char* p, return false; } -const char* TiXmlBase::ReadText( const char* p, - TIXML_STRING * text, - bool trimWhiteSpace, - const char* endTag, +const char* TiXmlBase::ReadText( const char* p, + TIXML_STRING * text, + bool trimWhiteSpace, + const char* endTag, bool caseInsensitive, TiXmlEncoding encoding ) { @@ -648,7 +648,7 @@ void TiXmlDocument::StreamIn( std::istream * in, TIXML_STRING * tag ) // This "pre-streaming" will never read the closing ">" so the // sub-tag can orient itself. - if ( !StreamTo( in, '<', tag ) ) + if ( !StreamTo( in, '<', tag ) ) { SetError( TIXML_ERROR_PARSING_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); return; @@ -670,7 +670,7 @@ void TiXmlDocument::StreamIn( std::istream * in, TIXML_STRING * tag ) if ( in->good() ) { - // We now have something we presume to be a node of + // We now have something we presume to be a node of // some sort. Identify it, and call the node to // continue streaming. TiXmlNode* node = Identify( tag->c_str() + tagIndex, TIXML_DEFAULT_ENCODING ); @@ -779,7 +779,7 @@ const char* TiXmlDocument::Parse( const char* p, TiXmlParsingData* prevData, TiX encoding = TIXML_ENCODING_UTF8; else if ( StringEqual( enc, "UTF8", true, TIXML_ENCODING_UNKNOWN ) ) encoding = TIXML_ENCODING_UTF8; // incorrect, but be nice - else + else encoding = TIXML_ENCODING_LEGACY; } @@ -797,7 +797,7 @@ const char* TiXmlDocument::Parse( const char* p, TiXmlParsingData* prevData, TiX } void TiXmlDocument::SetError( int err, const char* pError, TiXmlParsingData* data, TiXmlEncoding encoding ) -{ +{ // The first error in a chain is more accurate - don't set again! if ( error ) return; @@ -833,7 +833,7 @@ TiXmlNode* TiXmlNode::Identify( const char* p, TiXmlEncoding encoding ) return 0; } - // What is this thing? + // What is this thing? // - Elements start with a letter or underscore, but xml is reserved. // - Comments: \n" @@ -535,7 +535,7 @@ int main() XmlTest( "Location tracking: doors col", doors->Column(), 51 ); XmlTest( "Location tracking: Comment row", comment->Row(), 2 ); XmlTest( "Location tracking: Comment col", comment->Column(), 3 ); - XmlTest( "Location tracking: text row", text->Row(), 3 ); + XmlTest( "Location tracking: text row", text->Row(), 3 ); XmlTest( "Location tracking: text col", text->Column(), 24 ); XmlTest( "Location tracking: door0 row", door0->Row(), 3 ); XmlTest( "Location tracking: door0 col", door0->Column(), 5 ); @@ -564,7 +564,7 @@ int main() TiXmlHandle docH( &doc ); // Get the attribute "value" from the "Russian" element and check it. TiXmlElement* element = docH.FirstChildElement( "document" ).FirstChildElement( "Russian" ).Element(); - const unsigned char correctValue[] = { 0xd1U, 0x86U, 0xd0U, 0xb5U, 0xd0U, 0xbdU, 0xd0U, 0xbdU, + const unsigned char correctValue[] = { 0xd1U, 0x86U, 0xd0U, 0xb5U, 0xd0U, 0xbdU, 0xd0U, 0xbdU, 0xd0U, 0xbeU, 0xd1U, 0x81U, 0xd1U, 0x82U, 0xd1U, 0x8cU, 0 }; XmlTest( "UTF-8: Russian value.", (const char*)correctValue, element->Attribute( "value" ), true ); @@ -637,7 +637,7 @@ int main() text = latinDoc.FirstChildElement()->FirstChild()->ToText(); XmlTest( "Legacy encoding: Verify text element.", "r\x82sum\x82", text->Value() ); } - } + } ////////////////////// // Copy and assignment @@ -674,7 +674,7 @@ int main() unknownAssign = unknownCopy; XmlTest( "Copy/Assign: unknown copy.", "[unknown]", unknownCopy.Value() ); XmlTest( "Copy/Assign: unknown assign.", "[unknown]", unknownAssign.Value() ); - + TiXmlText text( "TextNode" ); TiXmlText textCopy( text ); TiXmlText textAssign( "incorrect" ); @@ -710,7 +710,7 @@ int main() XmlTest( "Copy/Assign: document assign.", original.c_str(), assign.c_str(), true ); #endif - } + } ////////////////////////////////////////////////////// #ifdef TIXML_USE_STL @@ -769,7 +769,7 @@ int main() doc.Parse( str ); doc.Print(); - XmlTest( "CDATA parse.", doc.FirstChildElement()->FirstChild()->Value(), + XmlTest( "CDATA parse.", doc.FirstChildElement()->FirstChild()->Value(), "I am > the rules!\n...since I make symbolic puns", true ); @@ -782,7 +782,7 @@ int main() parse0 >> doc; //cout << doc << '\n'; - XmlTest( "CDATA stream.", doc.FirstChildElement()->FirstChild()->Value(), + XmlTest( "CDATA stream.", doc.FirstChildElement()->FirstChild()->Value(), "I am > the rules!\n...since I make symbolic puns", true ); #endif @@ -790,7 +790,7 @@ int main() TiXmlDocument doc1 = doc; //doc.Print(); - XmlTest( "CDATA copy.", doc1.FirstChildElement()->FirstChild()->Value(), + XmlTest( "CDATA copy.", doc1.FirstChildElement()->FirstChild()->Value(), "I am > the rules!\n...since I make symbolic puns", true ); } @@ -836,7 +836,7 @@ int main() doc.Parse( str ); doc.Print(); - XmlTest( "CDATA parse. [ 1480107 ]", doc.FirstChildElement()->FirstChild()->Value(), + XmlTest( "CDATA parse. [ 1480107 ]", doc.FirstChildElement()->FirstChild()->Value(), "I am > the rules!\n...since I make symbolic puns", true ); @@ -847,7 +847,7 @@ int main() istringstream parse0( str ); parse0 >> doc; - XmlTest( "CDATA stream. [ 1480107 ]", doc.FirstChildElement()->FirstChild()->Value(), + XmlTest( "CDATA stream. [ 1480107 ]", doc.FirstChildElement()->FirstChild()->Value(), "I am > the rules!\n...since I make symbolic puns", true ); #endif @@ -855,7 +855,7 @@ int main() TiXmlDocument doc1 = doc; //doc.Print(); - XmlTest( "CDATA copy. [ 1480107 ]", doc1.FirstChildElement()->FirstChild()->Value(), + XmlTest( "CDATA copy. [ 1480107 ]", doc1.FirstChildElement()->FirstChild()->Value(), "I am > the rules!\n...since I make symbolic puns", true ); } @@ -871,7 +871,7 @@ int main() // The only goal is not to crash on bad input. int len = (int) strlen( demoStart ); - for( int i=0; i" "" @@ -1033,7 +1033,7 @@ int main() doc.SaveFile( "test7.xml" ); doc.Clear(); doc.LoadFile( "test7.xml" ); - + TiXmlHandle docH( &doc ); TiXmlUnknown* unknown = docH.Child( 1 ).Unknown(); XmlTest( "Correct value of unknown.", "!DOCTYPE PLAY SYSTEM 'play.dtd'", unknown->Value() ); @@ -1048,7 +1048,7 @@ int main() { // [ 791411 ] Formatting bug // Comments do not stream out correctly. - const char* doctype = + const char* doctype = ""; TiXmlDocument doc; doc.Parse( doctype ); @@ -1069,7 +1069,7 @@ int main() TiXmlDocument doc; TiXmlText* text; TiXmlHandle docH( &doc ); - + const char* doctype0 = " This has leading and trailing space "; const char* doctype1 = "This has internal space"; const char* doctype2 = " This has leading, trailing, and internal space "; @@ -1113,7 +1113,7 @@ int main() TiXmlDocument doc; doc.Parse( doctype ); - + XmlTest( "Parsing repeated attributes.", true, doc.Error() ); // is an error to tinyxml (didn't use to be, but caused issues) //XmlTest( "Parsing repeated attributes.", "blue", doc.FirstChildElement( "element" )->Attribute( "attr" ) ); } @@ -1175,9 +1175,9 @@ int main() #endif { // Bug [ 1195696 ] from marlonism - TiXmlBase::SetCondenseWhiteSpace(false); - TiXmlDocument xml; - xml.Parse("This hangs"); + TiXmlBase::SetCondenseWhiteSpace(false); + TiXmlDocument xml; + xml.Parse("This hangs"); XmlTest( "Test safe error return.", xml.Error(), false ); } @@ -1186,7 +1186,7 @@ int main() TiXmlDocument doc; doc.SetCondenseWhiteSpace(false); doc.Parse("

test

"); - } + } { // Low entities TiXmlDocument xml; @@ -1264,7 +1264,7 @@ int main() XmlTest("Missing end tag at end of input", xml.Error(), true); xml.Parse(" "); XmlTest("Missing end tag with trailing whitespace", xml.Error(), true); - } + } { // [ 1635701 ] fail to parse files with a tag separated into two lines @@ -1332,7 +1332,7 @@ int main() TiXmlDocument doc; doc.Parse( (const char*)buf); - } + } { diff --git a/opm/core/wells/ProductionSpecification.cpp b/opm/core/wells/ProductionSpecification.cpp index 898bbf68..1c6d443a 100644 --- a/opm/core/wells/ProductionSpecification.cpp +++ b/opm/core/wells/ProductionSpecification.cpp @@ -5,7 +5,7 @@ namespace Opm { ProductionSpecification::ProductionSpecification() - : + : control_mode_(NONE), procedure_(NONE_P), oil_max_rate_(-1e100), @@ -15,7 +15,7 @@ namespace Opm reservoir_flow_max_rate_(-1e100), BHP_limit_(-1e100), guide_rate_(1.0), - guide_rate_type_(NONE_GRT) + guide_rate_type_(NONE_GRT) { } diff --git a/opm/core/wells/ProductionSpecification.hpp b/opm/core/wells/ProductionSpecification.hpp index d91145b6..5818cbe5 100644 --- a/opm/core/wells/ProductionSpecification.hpp +++ b/opm/core/wells/ProductionSpecification.hpp @@ -18,14 +18,14 @@ namespace Opm { NONE_P, RATE, WELL }; - + enum GuideRateType { OIL, NONE_GRT }; ProductionSpecification(); - + ControlMode control_mode_; Procedure procedure_; diff --git a/opm/core/wells/WellCollection.cpp b/opm/core/wells/WellCollection.cpp index 6107542a..92f6a995 100644 --- a/opm/core/wells/WellCollection.cpp +++ b/opm/core/wells/WellCollection.cpp @@ -27,7 +27,7 @@ namespace Opm void WellCollection::addChild(const std::string& child_name, const std::string& parent_name, const EclipseGridParser& deck) - { + { WellsGroupInterface* parent = findNode(parent_name); if (!parent) { roots_.push_back(createWellsGroup(parent_name, deck)); @@ -42,7 +42,7 @@ namespace Opm for(size_t j = i; j < roots_.size() - 1; ++j) { roots_[j] = roots_[j+1]; } - + roots_.resize(roots_.size()-1); break; } @@ -50,7 +50,7 @@ namespace Opm if (!child.get()) { child = createWellsGroup(child_name, deck); } - + WellsGroup* parent_as_group = static_cast (parent); if (!parent_as_group) { THROW("Trying to add child to group named " << parent_name << ", but it's not a group."); @@ -60,12 +60,12 @@ namespace Opm if(child->isLeafNode()) { leaf_nodes_.push_back(static_cast(child.get())); } - + child->setParent(parent); } - - - + + + const std::vector& WellCollection::getLeafNodes() const { return leaf_nodes_; } @@ -81,7 +81,7 @@ namespace Opm } return NULL; } - + const WellsGroupInterface* WellCollection::findNode(const std::string& name) const { @@ -123,7 +123,7 @@ namespace Opm leaf_nodes_.push_back(static_cast (child_node.get())); } } - + bool WellCollection::conditionsMet(const std::vector& well_bhp, const std::vector& well_reservoirrates_phase, const std::vector& well_surfacerates_phase) @@ -139,13 +139,13 @@ namespace Opm } return true; } - + void WellCollection::setWellsPointer(Wells* wells) { for(size_t i = 0; i < leaf_nodes_.size(); i++) { leaf_nodes_[i]->setWellsPointer(wells, i); } } - + void WellCollection::applyGroupControls() { for (size_t i = 0; i < roots_.size(); ++i) { diff --git a/opm/core/wells/WellCollection.hpp b/opm/core/wells/WellCollection.hpp index b1ee743d..b317973f 100644 --- a/opm/core/wells/WellCollection.hpp +++ b/opm/core/wells/WellCollection.hpp @@ -43,14 +43,14 @@ namespace Opm void addChild(const std::string& child, const std::string& parent, const EclipseGridParser& deck); - + /// Adds the child to the collection /// and appends it to parent's children. /// \param[in] child the child node /// \param[in] parent name of parent node void addChild(boost::shared_ptr& child_node, const std::string& parent); - + /// Adds the node to the collection (as a root node) void addChild(boost::shared_ptr& child_node); @@ -65,7 +65,7 @@ namespace Opm /// \endcode /// /// \note It's highly recommended to use the conditionsMet found in WellsManager. - /// \param[in] well_bhp A vector containing the bhp for each well. Is assumed + /// \param[in] well_bhp A vector containing the bhp for each well. Is assumed /// to be ordered the same way as the related Wells-struct. /// \param[in] well_reservoirrates_phase /// A vector containing reservoir rates by phase for each well. @@ -79,26 +79,26 @@ namespace Opm bool conditionsMet(const std::vector& well_bhp, const std::vector& well_reservoirrates_phase, const std::vector& well_surfacerates_phase); - + /// Adds the well pointer to each leaf node (does not take ownership). void setWellsPointer(Wells* wells); - + /// \return A set of pointers to every well in the collection const std::vector& getLeafNodes() const; - + /// Finds the group with the given name. /// \param[in] the name of the group /// \return the pointer to the group if found, NULL otherwise WellsGroupInterface* findNode(const std::string& name); - + /// Finds the group with the given name. /// \param[in] the name of the group /// \return the pointer to the group if found, NULL otherwise const WellsGroupInterface* findNode(const std::string& name) const; - + /// Applies all group controls (injection and production) void applyGroupControls(); - + /// Applies explicit reinjection controls. This must be called at each timestep to be correct. /// \param[in] well_reservoirrates_phase /// A vector containing reservoir rates by phase for each well. @@ -110,15 +110,15 @@ namespace Opm /// with all phase rates of a single well adjacent in the array. void applyExplicitReinjectionControls(const std::vector& well_reservoirrates_phase, const std::vector& well_surfacerates_phase); - + private: // To account for the possibility of a forest std::vector > roots_; - + // This will be used to traverse the bottom nodes. std::vector leaf_nodes_; - - + + }; } // namespace Opm diff --git a/opm/core/wells/WellsGroup.cpp b/opm/core/wells/WellsGroup.cpp index 7e1089d0..a1068387 100644 --- a/opm/core/wells/WellsGroup.cpp +++ b/opm/core/wells/WellsGroup.cpp @@ -28,7 +28,7 @@ namespace Opm // ========== WellPhasesSummed methods =========== - WellPhasesSummed::WellPhasesSummed() + WellPhasesSummed::WellPhasesSummed() { for (int i = 0; i < 3; ++i) { res_inj_rates[i] = 0.0; @@ -38,7 +38,7 @@ namespace Opm } } - void WellPhasesSummed::operator+=(const WellPhasesSummed& other) + void WellPhasesSummed::operator+=(const WellPhasesSummed& other) { for (int i = 0; i < 3; ++i) { res_inj_rates[i] += other.res_inj_rates[i]; @@ -75,8 +75,8 @@ namespace Opm { return name_; } - - const PhaseUsage& WellsGroupInterface::phaseUsage() const + + const PhaseUsage& WellsGroupInterface::phaseUsage() const { return phase_usage_; } @@ -118,7 +118,7 @@ namespace Opm } /// Calculates the correct rate for the given ProductionSpecification::ControlMode - double WellsGroupInterface::rateByMode(const double* res_rates, + double WellsGroupInterface::rateByMode(const double* res_rates, const double* surf_rates, const ProductionSpecification::ControlMode mode) { @@ -130,7 +130,7 @@ namespace Opm case ProductionSpecification::GRAT: return surf_rates[phaseUsage().phase_pos[BlackoilPhases::Vapour]]; case ProductionSpecification::LRAT: - return surf_rates[phaseUsage().phase_pos[BlackoilPhases::Liquid]] + return surf_rates[phaseUsage().phase_pos[BlackoilPhases::Liquid]] + surf_rates[phaseUsage().phase_pos[BlackoilPhases::Aqua]]; case ProductionSpecification::RESV: { @@ -146,7 +146,7 @@ namespace Opm } /// Calculates the correct rate for the given InjectionSpecification::ControlMode - double WellsGroupInterface::rateByMode(const double* res_rates, + double WellsGroupInterface::rateByMode(const double* res_rates, const double* surf_rates, const InjectionSpecification::ControlMode mode) { @@ -167,7 +167,7 @@ namespace Opm } return tot_rate; } - + double WellsGroupInterface::getTarget(ProductionSpecification::ControlMode mode) { double target = -1.0; @@ -194,10 +194,10 @@ namespace Opm THROW("Unsupported control mode to query target " << mode); break; } - + return target; } - + double WellsGroupInterface::getTarget(InjectionSpecification::ControlMode mode) { double target = -1.0; @@ -215,13 +215,13 @@ namespace Opm THROW("Unsupported control mode to query target " << mode); break; } - + return target; } - - - + + + // ============== WellsGroup members ============= @@ -257,10 +257,10 @@ namespace Opm /// \param[in] forced if true, all children will be set under group control, otherwise /// only children that are under group control will be changed. void WellsGroup::applyInjGroupControl(const InjectionSpecification::ControlMode control_mode, - const double target, + const double target, const bool forced) { - if (forced || injSpec().control_mode_ == InjectionSpecification::FLD + if (forced || injSpec().control_mode_ == InjectionSpecification::FLD || injSpec().control_mode_ == InjectionSpecification::NONE) { const double my_guide_rate = injectionGuideRate(!forced); if (my_guide_rate == 0.0) { @@ -284,7 +284,7 @@ namespace Opm const double target, const bool forced) { - if (forced || (prodSpec().control_mode_ == ProductionSpecification::FLD + if (forced || (prodSpec().control_mode_ == ProductionSpecification::FLD || prodSpec().control_mode_ == ProductionSpecification::NONE)) { const double my_guide_rate = productionGuideRate(!forced); if (my_guide_rate == 0.0) { @@ -334,7 +334,7 @@ namespace Opm double my_rate = rateByMode(child_phases_summed.res_inj_rates, child_phases_summed.surf_inj_rates, mode); - + if (my_rate > target_rate) { std::cout << "Group " << mode<<" target not met for group " << name() << std::endl; std::cout << "target = " << target_rate << '\n' @@ -345,7 +345,7 @@ namespace Opm } } } - + // REIN // \TODO: Add support for REIN controls. @@ -364,7 +364,7 @@ namespace Opm } const double target_rate = getTarget(mode); if (target_rate >= 0.0) { - const double my_rate = rateByMode(child_phases_summed.res_prod_rates, + const double my_rate = rateByMode(child_phases_summed.res_prod_rates, child_phases_summed.surf_prod_rates, mode); if (std::fabs(my_rate) > target_rate) { @@ -377,7 +377,7 @@ namespace Opm } } } - + if (production_violated) { switch (prodSpec().procedure_) { case ProductionSpecification::WELL: @@ -387,7 +387,7 @@ namespace Opm return false; case ProductionSpecification::RATE: std::cout << "Applying group control" << std::endl; - applyProdGroupControl(production_mode_violated, + applyProdGroupControl(production_mode_violated, getTarget(production_mode_violated), true); return false; @@ -396,7 +396,7 @@ namespace Opm return false; } } - + summed_phases += child_phases_summed; return true; } @@ -406,19 +406,19 @@ namespace Opm children_.push_back(child); } - + int WellsGroup::numberOfLeafNodes() { - // This could probably use some caching, but seeing as how the number of + // This could probably use some caching, but seeing as how the number of // wells is relatively small, we'll do without for now. int sum = 0; - + for(size_t i = 0; i < children_.size(); i++) { sum += children_[i]->numberOfLeafNodes(); } - + return sum; } - + std::pair WellsGroup::getWorstOffending(const std::vector& well_reservoirrates_phase, const std::vector& well_surfacerates_phase, ProductionSpecification::ControlMode mode) @@ -434,7 +434,7 @@ namespace Opm } return max; } - + void WellsGroup::applyProdGroupControls() { ProductionSpecification::ControlMode prod_mode = prodSpec().control_mode_; @@ -449,12 +449,12 @@ namespace Opm THROW("Can't apply group control for group " << name() << " as the sum of guide rates for all group controlled wells is zero."); } for (size_t i = 0; i < children_.size(); ++i ) { - // Apply for all children. + // Apply for all children. // Note, we do _not_ want to call the applyProdGroupControl in this object, // as that would check if we're under group control, something we're not. const double children_guide_rate = children_[i]->productionGuideRate(true); - children_[i]->applyProdGroupControl(prod_mode, - (children_guide_rate / my_guide_rate) * getTarget(prod_mode), + children_[i]->applyProdGroupControl(prod_mode, + (children_guide_rate / my_guide_rate) * getTarget(prod_mode), false); } break; @@ -470,7 +470,7 @@ namespace Opm THROW("Unhandled group production control type " << prod_mode); } } - + void WellsGroup::applyInjGroupControls() { InjectionSpecification::ControlMode inj_mode = injSpec().control_mode_; @@ -480,7 +480,7 @@ namespace Opm { const double my_guide_rate = injectionGuideRate(true); for (size_t i = 0; i < children_.size(); ++i) { - // Apply for all children. + // Apply for all children. // Note, we do _not_ want to call the applyProdGroupControl in this object, // as that would check if we're under group control, something we're not. const double children_guide_rate = children_[i]->injectionGuideRate(true); @@ -505,11 +505,11 @@ namespace Opm THROW("Unhandled group injection control mode " << inj_mode); } } - + /// Calculates the production guide rate for the group. - /// \param[in] only_group If true, will only accumelate guide rates for + /// \param[in] only_group If true, will only accumelate guide rates for /// wells under group control - double WellsGroup::productionGuideRate(bool only_group) + double WellsGroup::productionGuideRate(bool only_group) { double sum = 0.0; for (size_t i = 0; i < children_.size(); ++i) { @@ -519,7 +519,7 @@ namespace Opm } /// Calculates the injection guide rate for the group. - /// \param[in] only_group If true, will only accumelate guide rates for + /// \param[in] only_group If true, will only accumelate guide rates for /// wells under group control double WellsGroup::injectionGuideRate(bool only_group) { @@ -530,7 +530,7 @@ namespace Opm return sum; } - /// Gets the total production flow of the given phase. + /// Gets the total production flow of the given phase. /// \param[in] phase_flows A vector containing rates by phase for each well. /// Is assumed to be ordered the same way as the related Wells-struct, /// with all phase rates of a single well adjacent in the array. @@ -576,7 +576,7 @@ namespace Opm const double total_reinjected = - total_produced; // Production negative, injection positive const double my_guide_rate = injectionGuideRate(true); for (size_t i = 0; i < children_.size(); ++i) { - // Apply for all children. + // Apply for all children. // Note, we do _not_ want to call the applyProdGroupControl in this object, // as that would check if we're under group control, something we're not. const double children_guide_rate = children_[i]->injectionGuideRate(true); @@ -605,7 +605,7 @@ namespace Opm const double total_reinjected = - total_produced; // Production negative, injection positive const double my_guide_rate = injectionGuideRate(true); for (size_t i = 0; i < children_.size(); ++i) { - // Apply for all children. + // Apply for all children. // Note, we do _not_ want to call the applyProdGroupControl in this object, // as that would check if we're under group control, something we're not. const double children_guide_rate = children_[i]->injectionGuideRate(true); @@ -613,14 +613,14 @@ namespace Opm (children_guide_rate / my_guide_rate) * total_reinjected * injSpec().voidage_replacment_fraction_, false); } - + } } // ============== WellNode members ============ - + WellNode::WellNode(const std::string& myname, const ProductionSpecification& prod_spec, const InjectionSpecification& inj_spec, @@ -730,13 +730,13 @@ namespace Opm wells_ = wells; self_index_ = self_index; } - - int WellNode::numberOfLeafNodes() + + int WellNode::numberOfLeafNodes() { return 1; } - - void WellNode::shutWell() + + void WellNode::shutWell() { if (shut_well_) { // We set the tilde of the current control @@ -774,13 +774,13 @@ namespace Opm &well_surfacerates_phase[index], mode)); } - + void WellNode::applyInjGroupControl(const InjectionSpecification::ControlMode control_mode, const double target, const bool forced) { // Not changing if we're not forced to change - if (!forced + if (!forced && (injSpec().control_mode_ != InjectionSpecification::GRUP && injSpec().control_mode_ != InjectionSpecification::NONE)) { return; } @@ -818,7 +818,7 @@ namespace Opm } - /// Gets the total production flow of the given phase. + /// Gets the total production flow of the given phase. /// \param[in] phase_flows A vector containing rates by phase for each well. /// Is assumed to be ordered the same way as the related Wells-struct, /// with all phase rates of a single well adjacent in the array. @@ -832,7 +832,7 @@ namespace Opm } return phase_flows[self_index_*phaseUsage().num_phases + phaseUsage().phase_pos[phase]]; } - + WellType WellNode::type() const { return wells_->type[self_index_]; } @@ -867,7 +867,7 @@ namespace Opm } // We're a producer, so we need to negate the input double ntarget = -target; - + double distr[3] = { 0.0, 0.0, 0.0 }; const int* phase_pos = phaseUsage().phase_pos; const int* phase_used = phaseUsage().phase_used; @@ -895,7 +895,7 @@ namespace Opm distr[phase_pos[BlackoilPhases::Vapour]] = 1.0; break; case ProductionSpecification::LRAT: - std::cout << "applying rate" << std::endl; + std::cout << "applying rate" << std::endl; wct = SURFACE_RATE; if (!phase_used[BlackoilPhases::Liquid]) { THROW("Oil phase not active and LRAT control specified."); @@ -929,21 +929,21 @@ namespace Opm set_current_control(self_index_, group_control_index_, wells_); } - + void WellNode::applyProdGroupControls() { // Empty } - + void WellNode::applyInjGroupControls() { // Empty } - + /// Calculates the production guide rate for the group. - /// \param[in] only_group If true, will only accumelate guide rates for + /// \param[in] only_group If true, will only accumelate guide rates for /// wells under group control - double WellNode::productionGuideRate(bool only_group) + double WellNode::productionGuideRate(bool only_group) { if (!only_group || prodSpec().control_mode_ == ProductionSpecification::GRUP) { return prodSpec().guide_rate_; @@ -952,7 +952,7 @@ namespace Opm } /// Calculates the injection guide rate for the group. - /// \param[in] only_group If true, will only accumelate guide rates for + /// \param[in] only_group If true, will only accumelate guide rates for /// wells under group control double WellNode::injectionGuideRate(bool only_group) { @@ -961,8 +961,8 @@ namespace Opm } return 0.0; } - - + + namespace { diff --git a/opm/core/wells/WellsGroup.hpp b/opm/core/wells/WellsGroup.hpp index 75ab08b1..2d9a57c5 100644 --- a/opm/core/wells/WellsGroup.hpp +++ b/opm/core/wells/WellsGroup.hpp @@ -30,10 +30,10 @@ namespace Opm { - // Need to forward declare this one, some of the methods in the base + // Need to forward declare this one, some of the methods in the base // class returns pointers to it. class WellNode; - + /// Basic information needed for group control (each group should typically /// not exceed the sum of its leaf nodes) struct WellPhasesSummed @@ -59,37 +59,37 @@ namespace Opm /// The unique identifier for the well or well group. const std::string& name(); - + /// Production specifications for the well or well group. const ProductionSpecification& prodSpec() const; - + /// Injection specifications for the well or well group. const InjectionSpecification& injSpec() const; - + /// Production specifications for the well or well group. ProductionSpecification& prodSpec(); - + /// Injection specifications for the well or well group. InjectionSpecification& injSpec(); /// Phase usage information. const PhaseUsage& phaseUsage() const; - + /// \returns true if the object is a leaf node (WellNode), false otherwise. virtual bool isLeafNode() const; - - /// \returns the pointer to the WellsGroupInterface with the given name. NULL if + + /// \returns the pointer to the WellsGroupInterface with the given name. NULL if /// the name is not found.a virtual WellsGroupInterface* findGroup(const std::string& name_of_node) = 0; /// Sets the parent /// \param[in] parent the pointer to the parent void setParent(WellsGroupInterface* parent); - + /// Gets the parent of the group, NULL if no parent. const WellsGroupInterface* getParent() const; - - /// Calculates the number of leaf nodes in the given group. + + /// Calculates the number of leaf nodes in the given group. /// A leaf node is defined to have one leaf node in its group. virtual int numberOfLeafNodes() = 0; @@ -104,7 +104,7 @@ namespace Opm /// \endcode /// /// \note It's highly recommended to use the conditionsMet found in WellsManager. - /// \param[in] well_bhp A vector containing the bhp for each well. Is assumed + /// \param[in] well_bhp A vector containing the bhp for each well. Is assumed /// to be ordered the same way as the related Wells-struct. /// \param[in] well_reservoirrates_phase /// A vector containing reservoir rates by phase for each well. @@ -121,7 +121,7 @@ namespace Opm const std::vector& well_reservoirrates_phase, const std::vector& well_surfacerates_phase, WellPhasesSummed& summed_phases) = 0; - + /// Sets the current active control to the provided one for all injectors within the group. /// After this call, the combined rate (which rate depending on control_mode) of the group /// shall be equal to target. @@ -154,39 +154,39 @@ namespace Opm virtual std::pair getWorstOffending(const std::vector& well_reservoirrates_phase, const std::vector& well_surfacerates_phase, ProductionSpecification::ControlMode mode) = 0; - + /// Gets the target rate for the given mode. double getTarget(ProductionSpecification::ControlMode mode); - + /// Gets the target rate for the given mode. double getTarget(InjectionSpecification::ControlMode mode); - + /// Applies any production group control relevant to all children nodes. /// If no group control is set, this is called recursively to the children. virtual void applyProdGroupControls() = 0; - + /// Applies any injection group control relevant to all children nodes. /// If no group control is set, this is called recursively to the children. virtual void applyInjGroupControls() = 0; - + /// Calculates the production guide rate for the group. - /// \param[in] only_group If true, will only accumelate guide rates for + /// \param[in] only_group If true, will only accumelate guide rates for /// wells under group control virtual double productionGuideRate(bool only_group) = 0; - + /// Calculates the injection guide rate for the group. - /// \param[in] only_group If true, will only accumelate guide rates for + /// \param[in] only_group If true, will only accumelate guide rates for /// wells under group control virtual double injectionGuideRate(bool only_group) = 0; - - /// Gets the total production flow of the given phase. + + /// Gets the total production flow of the given phase. /// \param[in] phase_flows A vector containing rates by phase for each well. /// Is assumed to be ordered the same way as the related Wells-struct, /// with all phase rates of a single well adjacent in the array. /// \param[in] phase The phase for which to sum up. virtual double getTotalProductionFlow(const std::vector& phase_flows, const BlackoilPhases::PhaseIndex phase) = 0; - + /// Applies explicit reinjection controls. This must be called at each timestep to be correct. /// \param[in] well_reservoirrates_phase /// A vector containing reservoir rates by phase for each well. @@ -198,16 +198,16 @@ namespace Opm /// with all phase rates of a single well adjacent in the array. virtual void applyExplicitReinjectionControls(const std::vector& well_reservoirrates_phase, const std::vector& well_surfacerates_phase) = 0; - - + + protected: /// Calculates the correct rate for the given ProductionSpecification::ControlMode - double rateByMode(const double* res_rates, + double rateByMode(const double* res_rates, const double* surf_rates, const ProductionSpecification::ControlMode mode); /// Calculates the correct rate for the given InjectionSpecification::ControlMode - double rateByMode(const double* res_rates, + double rateByMode(const double* res_rates, const double* surf_rates, const InjectionSpecification::ControlMode mode); @@ -233,12 +233,12 @@ namespace Opm virtual WellsGroupInterface* findGroup(const std::string& name_of_node); void addChild(boost::shared_ptr child); - + virtual bool conditionsMet(const std::vector& well_bhp, const std::vector& well_reservoirrates_phase, const std::vector& well_surfacerates_phase, WellPhasesSummed& summed_phases); - + virtual int numberOfLeafNodes(); virtual std::pair getWorstOffending(const std::vector& well_reservoirrates_phase, const std::vector& well_surfacerates_phase, @@ -261,33 +261,33 @@ namespace Opm virtual void applyProdGroupControl(const ProductionSpecification::ControlMode control_mode, const double target, bool forced); - + /// Applies any production group control relevant to all children nodes. /// If no group control is set, this is called recursively to the children. virtual void applyProdGroupControls(); - + /// Applies any injection group control relevant to all children nodes. /// If no group control is set, this is called recursively to the children. virtual void applyInjGroupControls(); - + /// Calculates the production guide rate for the group. - /// \param[in] only_group If true, will only accumelate guide rates for + /// \param[in] only_group If true, will only accumelate guide rates for /// wells under group control virtual double productionGuideRate(bool only_group); - + /// Calculates the injection guide rate for the group. - /// \param[in] only_group If true, will only accumelate guide rates for + /// \param[in] only_group If true, will only accumelate guide rates for /// wells under group control virtual double injectionGuideRate(bool only_group); - - /// Gets the total production flow of the given phase. + + /// Gets the total production flow of the given phase. /// \param[in] phase_flows A vector containing rates by phase for each well. /// Is assumed to be ordered the same way as the related Wells-struct, /// with all phase rates of a single well adjacent in the array. /// \param[in] phase The phase for which to sum up. virtual double getTotalProductionFlow(const std::vector& phase_flows, const BlackoilPhases::PhaseIndex phase); - + /// Applies explicit reinjection controls. This must be called at each timestep to be correct. /// \param[in] well_reservoirrates_phase /// A vector containing reservoir rates by phase for each well. @@ -319,16 +319,16 @@ namespace Opm const std::vector& well_reservoirrates_phase, const std::vector& well_surfacerates_phase, WellPhasesSummed& summed_phases); - + virtual bool isLeafNode() const; - + void setWellsPointer(Wells* wells, int self_index); - + virtual int numberOfLeafNodes(); - + // Shuts the well (in the well struct) void shutWell(); - + virtual std::pair getWorstOffending(const std::vector& well_reservoirrates_phase, const std::vector& well_surfacerates_phase, ProductionSpecification::ControlMode mode); @@ -350,26 +350,26 @@ namespace Opm virtual void applyProdGroupControl(const ProductionSpecification::ControlMode control_mode, const double target, bool forced); - + /// Applies any production group control relevant to all children nodes. /// If no group control is set, this is called recursively to the children. virtual void applyProdGroupControls(); - + /// Applies any injection group control relevant to all children nodes. /// If no group control is set, this is called recursively to the children. virtual void applyInjGroupControls(); - + /// Calculates the production guide rate for the group. - /// \param[in] only_group If true, will only accumelate guide rates for + /// \param[in] only_group If true, will only accumelate guide rates for /// wells under group control virtual double productionGuideRate(bool only_group); - + /// Calculates the injection guide rate for the group. - /// \param[in] only_group If true, will only accumelate guide rates for + /// \param[in] only_group If true, will only accumelate guide rates for /// wells under group control virtual double injectionGuideRate(bool only_group); - - /// Gets the total production flow of the given phase. + + /// Gets the total production flow of the given phase. /// \param[in] phase_flows A vector containing rates by phase for each well. /// Is assumed to be ordered the same way as the related Wells-struct, /// with all phase rates of a single well adjacent in the array. @@ -379,7 +379,7 @@ namespace Opm /// Returns the type of the well. WellType type() const; - + /// Applies explicit reinjection controls. This must be called at each timestep to be correct. /// \param[in] well_reservoirrates_phase /// A vector containing reservoir rates by phase for each well. @@ -402,7 +402,7 @@ namespace Opm /// Creates the WellsGroupInterface for the given name /// \param[in] name the name of the wells group. /// \param[in] deck the deck from which to fetch information. - boost::shared_ptr createWellsGroup(const std::string& name, + boost::shared_ptr createWellsGroup(const std::string& name, const EclipseGridParser& deck); diff --git a/opm/core/wells/WellsManager.cpp b/opm/core/wells/WellsManager.cpp index 74f26cc7..5ed9d111 100644 --- a/opm/core/wells/WellsManager.cpp +++ b/opm/core/wells/WellsManager.cpp @@ -223,7 +223,7 @@ namespace Opm : w_(0) { } - + /// Construct from existing wells object. WellsManager::WellsManager(struct Wells* W) diff --git a/opm/core/wells/WellsManager.hpp b/opm/core/wells/WellsManager.hpp index 19289c5d..35f7f471 100644 --- a/opm/core/wells/WellsManager.hpp +++ b/opm/core/wells/WellsManager.hpp @@ -63,7 +63,7 @@ namespace Opm /// Does the "deck" define any wells? bool empty() const; - + /// Access the managed Wells. /// The method is named similarly to c_str() in std::string, /// to make it clear that we are returning a C-compatible struct. @@ -71,7 +71,7 @@ namespace Opm /// Access the well group hierarchy. const WellCollection& wellCollection() const; - + /// Checks if each condition is met, applies well controls where needed /// (that is, it either changes the active control of violating wells, or shuts /// down wells). Only one change is applied per invocation. Typical use will be @@ -81,7 +81,7 @@ namespace Opm /// solve_pressure(); /// } /// \endcode - /// \param[in] well_bhp A vector containing the bhp for each well. Is assumed + /// \param[in] well_bhp A vector containing the bhp for each well. Is assumed /// to be ordered the same way as the related Wells-struct. /// \param[in] well_reservoirrates_phase /// A vector containing reservoir rates by phase for each well. @@ -95,7 +95,7 @@ namespace Opm bool conditionsMet(const std::vector& well_bhp, const std::vector& well_reservoirrates_phase, const std::vector& well_surfacerates_phase); - + /// Applies explicit reinjection controls. This must be called at each timestep to be correct. /// \param[in] well_reservoirrates_phase /// A vector containing reservoir rates by phase for each well. @@ -117,7 +117,7 @@ namespace Opm Wells* w_; WellCollection well_collection_; - + }; diff --git a/tests/not-unit/pvt_test.cpp b/tests/not-unit/pvt_test.cpp index c1720c7e..1f41de5d 100644 --- a/tests/not-unit/pvt_test.cpp +++ b/tests/not-unit/pvt_test.cpp @@ -60,8 +60,8 @@ int main(int argc, char** argv) Opm::BlackoilPvtProperties pvt; int samples = param.getDefault("dead_tab_size", 1025); pvt.init(deck, samples); - - + + const int n = 1; std::fstream inos(input_file.c_str()); if(!inos.good()){ @@ -103,7 +103,7 @@ int main(int argc, char** argv) double p[n]; double z[max_np*n]; int cells[n] = { 0 }; - inos >> p[0]; + inos >> p[0]; for(int i=0; i < np; ++i){ inos >> z[i]; } diff --git a/tests/not-unit/relperm_test.cpp b/tests/not-unit/relperm_test.cpp index 36a1720a..ed6aeb8e 100644 --- a/tests/not-unit/relperm_test.cpp +++ b/tests/not-unit/relperm_test.cpp @@ -54,7 +54,7 @@ int main(int argc, char** argv) grid.cartdims[1] = 1; grid.cartdims[2] = 1; Opm::BlackoilPropertiesFromDeck props(deck, grid, param); - + std::fstream inos(input_file.c_str());//, std::fstream::in); if(!inos.good()){ std::cout << "Could not open :" << input_file << std::endl; diff --git a/tests/not-unit/test_ert.cpp b/tests/not-unit/test_ert.cpp index 474faf30..019639ce 100644 --- a/tests/not-unit/test_ert.cpp +++ b/tests/not-unit/test_ert.cpp @@ -38,13 +38,13 @@ static void cell_nodes(const UnstructuredGrid * c_grid , int cell , std::vector& nodes) { int face_offset = c_grid->cell_facepos[cell]; int num_faces = c_grid->cell_facepos[cell + 1] - face_offset; - + nodes.clear(); //printf("cell: %d \n",cell); for (int iface = 0; iface < num_faces; iface++) { int face = c_grid->cell_faces[ face_offset + iface]; //printf("face[%d] = %d \n",iface , face ); - + { int node_offset = c_grid->face_nodepos[ face ]; int num_nodes = c_grid->face_nodepos[ face + 1] - node_offset; @@ -84,22 +84,22 @@ void cell_nodes(const UnstructuredGrid * c_grid , int cell , std::vector& n static void eclExport(Opm::GridManager& grid) { const UnstructuredGrid * c_grid = grid.c_grid(); - + printf("dimensions : %d \n",c_grid->dimensions); printf("number of cells : %d \n",c_grid->number_of_cells); printf("number of nodes : %d \n",c_grid->number_of_nodes); printf("number of faces : %d \n",c_grid->number_of_faces); printf("length(face_nodes) : %d \n",c_grid->face_nodepos[ c_grid->number_of_faces ]); printf("cartdims : %d %d %d \n", - c_grid->cartdims[0] , - c_grid->cartdims[1] , - c_grid->cartdims[2]); + c_grid->cartdims[0] , + c_grid->cartdims[1] , + c_grid->cartdims[2]); printf("global_cell : %d %d %d %d %d\n", - c_grid->global_cell[0] , - c_grid->global_cell[1] , - c_grid->global_cell[2] , - c_grid->global_cell[3] , + c_grid->global_cell[0] , + c_grid->global_cell[1] , + c_grid->global_cell[2] , + c_grid->global_cell[3] , c_grid->global_cell[4]); { @@ -109,20 +109,20 @@ void eclExport(Opm::GridManager& grid) { cell_nodes( c_grid , 20 , nodes ); cell_nodes( c_grid , 25 , nodes ); } - + { ecl_grid_type * ecl_grid; int num_coords = c_grid->number_of_cells; int coords_size = 4; int nx = c_grid->cartdims[0]; int ny = c_grid->cartdims[1]; - int nz = c_grid->cartdims[2]; - + int nz = c_grid->cartdims[2]; + int ** coords; float ** corners; // float * mapaxes = NULL; std::vector nodes; - + corners = (float **) malloc( num_coords * sizeof * corners ); coords = (int **) malloc( num_coords * sizeof * coords ); @@ -132,12 +132,12 @@ void eclExport(Opm::GridManager& grid) { corners[c] = (float *) malloc( 24 * sizeof * corners[c] ); coords[c] = (int *) malloc( coords_size * sizeof * coords[c] ); } - + for (c=0; c < num_coords; c++) { cell_nodes( c_grid , c , nodes ); for (int p=0; p < 8; p++) { int n = nodes[p]; - for (int d=0; d < c_grid->dimensions; d++) + for (int d=0; d < c_grid->dimensions; d++) corners[c][3*p + d] = c_grid->node_coordinates[ c_grid->dimensions * n + d ]; } @@ -146,7 +146,7 @@ void eclExport(Opm::GridManager& grid) { { int g = c_grid->global_cell[ c ]; k = g / nx*ny; g -= k * nx*ny; - j = g / nx; g -= j * nx; + j = g / nx; g -= j * nx; i = g; } @@ -161,7 +161,7 @@ void eclExport(Opm::GridManager& grid) { ecl_grid = ecl_grid_alloc( "/private/joaho/ERT/NR/libenkf/src/Gurbat/EXAMPLE_01_BASE.EGRID" ); printf("Grid loaded ... \n"); ecl_grid_free( ecl_grid ); - + printf("Grid discarded ... \n"); ecl_grid = ecl_grid_alloc_GRID_data( num_coords , nx , ny , nz , coords_size , coords , corners , NULL ); @@ -174,7 +174,7 @@ void eclExport(Opm::GridManager& grid) { } ecl_grid_free( ecl_grid ); - + { for (int c=0; c < num_coords; c++) { free(corners[c]); @@ -189,7 +189,7 @@ void eclExport(Opm::GridManager& grid) { /* - + #ifdef HAVE_ERT ecl_grid_type * create_ecl_grid( const struct UnstructuredGrid * g) { int num_coords = g->number_of_cells; @@ -200,7 +200,7 @@ ecl_grid_type * create_ecl_grid( const struct UnstructuredGrid * g) { int ** coords; float ** corners; float * mapaxes = NULL; - + corners = malloc( num_coords * sizeof * corners ); coords = malloc( num_coords * sizeof * coords ); @@ -221,7 +221,7 @@ ecl_grid_type * create_ecl_grid( const struct UnstructuredGrid * g) { coords[global_index][1] = j; coords[global_index][2] = k; coords[global_index][3] = 1; - + } } } @@ -255,6 +255,6 @@ int main(int /*argc*/ , char **argv) //eclParser.saveEGRID_INIT("/tmp" , "OPM" ); grid.reset(new Opm::GridManager(eclParser)); - + props.reset(new Opm::IncompPropertiesFromDeck(eclParser , *grid->c_grid())); } diff --git a/tests/not-unit/test_lapack.cpp b/tests/not-unit/test_lapack.cpp index ad48a5cf..75fc2198 100644 --- a/tests/not-unit/test_lapack.cpp +++ b/tests/not-unit/test_lapack.cpp @@ -96,7 +96,7 @@ int main() std::vector AB(nrowAB*N, 0.); BandMatrixCoeff bmc(N, ku, kl); - // Rewrite AA matrix in band format AB + // Rewrite AA matrix in band format AB for (MAT_SIZE_T i = 0; i < N; ++i) { for (MAT_SIZE_T j = -1; j < 2; ++j) { if (i + j > -1 && i + j < N) diff --git a/tests/not-unit/test_read_vag.cpp b/tests/not-unit/test_read_vag.cpp index 7c1fba01..0149c107 100644 --- a/tests/not-unit/test_read_vag.cpp +++ b/tests/not-unit/test_read_vag.cpp @@ -61,7 +61,7 @@ int main(int argc, char** argv) // Size of mappings found std::cout << " faces_to_vertices " << vag_grid.faces_to_vertices.value.size() << endl; std::cout << " volumes_to_faces " << vag_grid.volumes_to_vertices.value.size() << endl; - + grid = allocate_grid(3, vag_grid.number_of_volumes, vag_grid.number_of_faces, @@ -70,15 +70,15 @@ int main(int argc, char** argv) vag_grid.number_of_vertices); vagToUnstructuredGrid(vag_grid,*grid); - - + + //} // { std::cout << "*************************************************************\n"; VAG vag_grid_new; unstructuredGridToVag(*grid,vag_grid_new); - writeVagFormat(std::cout,vag_grid_new); + writeVagFormat(std::cout,vag_grid_new); // } destroy_grid(grid); - + } diff --git a/tests/not-unit/test_readpolymer.cpp b/tests/not-unit/test_readpolymer.cpp index 1841e3d6..b58b848f 100644 --- a/tests/not-unit/test_readpolymer.cpp +++ b/tests/not-unit/test_readpolymer.cpp @@ -1,13 +1,13 @@ //=========================================================================== -// -// File: test_readpolymer.cpp -// -// Created: Thu Jan 12 15:18:46 2012 -// +// +// File: test_readpolymer.cpp +// +// Created: Thu Jan 12 15:18:46 2012 +// // Author: Bjørn Spjelkavik -// +// // Revision: $Id$ -// +// //=========================================================================== #ifdef HAVE_CONFIG_H @@ -42,13 +42,13 @@ int main(int argc, char** argv) if (parser.hasField("PLYROCK")) { parser.getPLYROCK().write(std::cout); } - if (parser.hasField("PLYADS")) { + if (parser.hasField("PLYADS")) { parser.getPLYADS().write(std::cout); } if (parser.hasField("TLMIXPAR")) { parser.getTLMIXPAR().write(std::cout); } - if (parser.hasField("PLYMAX")) { + if (parser.hasField("PLYMAX")) { parser.getPLYMAX().write(std::cout); } if (parser.hasField("WPOLYMER")) { diff --git a/tests/test_sparsetable.cpp b/tests/test_sparsetable.cpp index 6d88e783..c835920d 100644 --- a/tests/test_sparsetable.cpp +++ b/tests/test_sparsetable.cpp @@ -109,7 +109,7 @@ BOOST_AUTO_TEST_CASE(construction_and_queries) row[j] = elem[s]; } BOOST_CHECK(st2 == st2_allocate); - + // One element too few. BOOST_CHECK_THROW(const SparseTable st3(elem, elem + num_elem - 1, rowsizes, rowsizes + num_rows), std::exception); diff --git a/tutorials/tutorial1.cpp b/tutorials/tutorial1.cpp index d4465a2c..878c0c69 100644 --- a/tutorials/tutorial1.cpp +++ b/tutorials/tutorial1.cpp @@ -30,7 +30,7 @@ /// in subdirectories. /// \snippet tutorial1.cpp including headers -/// \internal [including headers] +/// \internal [including headers] #include "config.h" #include @@ -53,7 +53,7 @@ int main() int nx = 4; int ny = 3; int nz = 2; - /// \internal [num blocks] + /// \internal [num blocks] /// \endinternal /// The size of each block is 1m x 1m x 1m. The default units are always the /// standard units (SI). But other units can easily be dealt with, see Opm::unit. @@ -113,6 +113,6 @@ int main() /// \page tutorial1 /// \details -/// \section pythonscript1 Python script to generate figures: +/// \section pythonscript1 Python script to generate figures: /// \snippet generate_doc_figures.py tutorial1 diff --git a/tutorials/tutorial2.cpp b/tutorials/tutorial2.cpp index b8c5be5f..ac8845bc 100644 --- a/tutorials/tutorial2.cpp +++ b/tutorials/tutorial2.cpp @@ -47,11 +47,11 @@ /// \page tutorial2 /// \section commentedcode2 Program walk-through. -/// +/// int main() { - + /// \page tutorial2 /// We construct a Cartesian grid /// \snippet tutorial2.cpp cartesian grid @@ -117,9 +117,9 @@ int main() /// We take UMFPACK as the linear solver for the pressure solver /// (this library has therefore to be installed). /// \snippet tutorial2.cpp linsolver - /// \internal [linsolver] + /// \internal [linsolver] Opm::LinearSolverUmfpack linsolver; - /// \internal [linsolver] + /// \internal [linsolver] /// \endinternal /// \page tutorial2 @@ -131,7 +131,7 @@ int main() src[num_cells-1] = -src[0]; /// \internal [source] /// \endinternal - + /// \page tutorial2 /// \details We set up the boundary conditions. /// By default, we obtain no-flow boundary conditions. @@ -151,7 +151,7 @@ int main() Opm::IncompTpfa psolver(*grid.c_grid(), props, linsolver, NULL, NULL, src, NULL); /// \internal [tpfa] /// \endinternal - + /// \page tutorial2 /// We declare the state object, that will contain the pressure and face /// flux vectors we are going to compute. The well state @@ -207,5 +207,5 @@ int main() /// \page tutorial2 /// \details -/// \section pythonscript2 python script to generate figures: +/// \section pythonscript2 python script to generate figures: /// \snippet generate_doc_figures.py tutorial2 diff --git a/tutorials/tutorial3.cpp b/tutorials/tutorial3.cpp index a79cb067..9a24d2d8 100644 --- a/tutorials/tutorial3.cpp +++ b/tutorials/tutorial3.cpp @@ -43,12 +43,12 @@ #include /// \page tutorial3 Multiphase flow -/// The Darcy law gives +/// The Darcy law gives /// \f[u_\alpha= -\frac1{\mu_\alpha} K_\alpha\nabla p_\alpha\f] /// where \f$\mu_\alpha\f$ and \f$K_\alpha\f$ represent the viscosity /// and the permeability tensor for each phase \f$\alpha\f$. In the two phase -/// case, we have either \f$\alpha=w\f$ or \f$\alpha=o\f$. -/// In this tutorial, we do not take into account capillary pressure so that +/// case, we have either \f$\alpha=w\f$ or \f$\alpha=o\f$. +/// In this tutorial, we do not take into account capillary pressure so that /// \f$p=p_w=p_o\f$ and gravity /// effects. We denote by \f$K\f$ the absolute permeability tensor and each phase /// permeability is defined through its relative permeability by the expression @@ -67,21 +67,21 @@ /// \f[u=u_w+u_o.\f] /// Let the total mobility be equal to /// \f[\lambda=\lambda_w+\lambda_o\f] -/// Then, we have +/// Then, we have /// \f[u=-\lambda K\nabla p.\f] /// The set of equations /// \f[\nabla\cdot u=\frac{q_w}{\rho_w}+\frac{q_o}{\rho_o},\quad u=-\lambda K\nabla p.\f] -/// is referred to as the pressure equation. We introduce +/// is referred to as the pressure equation. We introduce /// the fractional flow \f$f_w\f$ /// as /// \f[f_w=\frac{\lambda_w}{\lambda_w+\lambda_o}\f] /// and obtain /// \f[\phi\frac{\partial s_w}{\partial t}+\nabla\cdot(f_w u)=\frac{q_w}{\rho_w}\f] -/// which is referred to as the transport equation. The pressure and -/// transport equation are coupled. In this tutorial, we implement a splitting scheme, +/// which is referred to as the transport equation. The pressure and +/// transport equation are coupled. In this tutorial, we implement a splitting scheme, /// where, at each time step, we decouple the two equations. We solve first /// the pressure equation and then update the water saturation by solving -/// the transport equation assuming that \f$u\f$ is constant in time in the time step +/// the transport equation assuming that \f$u\f$ is constant in time in the time step /// interval we are considering. @@ -95,8 +95,8 @@ int main () { /// \internal [main] - /// \endinternal - + /// \endinternal + /// \page tutorial3 /// \details /// We define the grid. A Cartesian grid with 400 cells, @@ -120,11 +120,11 @@ int main () const UnstructuredGrid& grid = *grid_manager.c_grid(); int num_cells = grid.number_of_cells; /// \internal [grid] - /// \endinternal + /// \endinternal /// \page tutorial3 /// \details - /// We define the properties of the fluid.\n + /// We define the properties of the fluid.\n /// Number of phases, phase densities, phase viscosities, /// rock porosity and permeability. /// @@ -142,37 +142,37 @@ int main () double porosity = 0.5; double permeability = 10.0*milli*darcy; /// \internal [set properties] - /// \endinternal + /// \endinternal /// \page tutorial3 /// \details We define the relative permeability function. We use a basic fluid - /// description and set this function to be linear. For more realistic fluid, the + /// description and set this function to be linear. For more realistic fluid, the /// saturation function may be interpolated from experimental data. /// \snippet tutorial3.cpp relperm /// \internal [relperm] SaturationPropsBasic::RelPermFunc rel_perm_func = SaturationPropsBasic::Linear; /// \internal [relperm] - /// \endinternal + /// \endinternal /// \page tutorial3 /// \details We construct a basic fluid and rock property object /// with the properties we have defined above. Each property is /// constant and hold for all cells. /// \snippet tutorial3.cpp properties - /// \internal [properties] + /// \internal [properties] IncompPropertiesBasic props(num_phases, rel_perm_func, density, viscosity, porosity, permeability, grid.dimensions, num_cells); /// \internal [properties] - /// \endinternal + /// \endinternal /// \page tutorial3 /// \details Gravity parameters. Here, we set zero gravity. /// \snippet tutorial3.cpp gravity /// \internal [gravity] const double *grav = 0; - std::vector omega; + std::vector omega; /// \internal [gravity] - /// \endinternal + /// \endinternal /// \page tutorial3 /// \details We set up the source term. Positive numbers indicate that the cell is a source, @@ -183,16 +183,16 @@ int main () src[0] = 1.; src[num_cells-1] = -1.; /// \internal [source] - /// \endinternal + /// \endinternal /// \page tutorial3 - /// \details We set up the boundary conditions. Letting bcs be empty is equivalent + /// \details We set up the boundary conditions. Letting bcs be empty is equivalent /// to no-flow boundary conditions. /// \snippet tutorial3.cpp boundary - /// \internal [boundary] + /// \internal [boundary] FlowBCManager bcs; /// \internal [boundary] - /// \endinternal + /// \endinternal /// \page tutorial3 /// \details We may now set up the pressure solver. At this point, @@ -204,7 +204,7 @@ int main () LinearSolverUmfpack linsolver; IncompTpfa psolver(grid, props, linsolver, grav, NULL, src, bcs.c_bcs()); /// \internal [pressure solver] - /// \endinternal + /// \endinternal /// \page tutorial3 /// \details We set up a state object for the wells. Here, there are @@ -245,7 +245,7 @@ int main () /// \page tutorial3 - /// \details We define a vector which contains all cell indexes. We use this + /// \details We define a vector which contains all cell indexes. We use this /// vector to set up parameters on the whole domain. /// \snippet tutorial3.cpp cell indexes /// \internal [cell indexes] @@ -257,7 +257,7 @@ int main () /// \endinternal /// \page tutorial3 - /// \details + /// \details /// We set up a two-phase state object, and /// initialize water saturation to minimum everywhere. /// \snippet tutorial3.cpp two-phase state @@ -280,12 +280,12 @@ int main () /// \page tutorial3 /// \details Loop over the time steps. - /// \snippet tutorial3.cpp time loop + /// \snippet tutorial3.cpp time loop /// \internal [time loop] for (int i = 0; i < num_time_steps; ++i) { /// \internal [time loop] /// \endinternal - + /// \page tutorial3 /// \details Solve the pressure equation @@ -294,7 +294,7 @@ int main () psolver.solve(dt, state, well_state); /// \internal [solve pressure] /// \endinternal - + /// \page tutorial3 /// \details Solve the transport equation. /// \snippet tutorial3.cpp transport solve @@ -307,7 +307,7 @@ int main () /// \details Write the output to file. /// \snippet tutorial3.cpp write output /// \internal [write output] - vtkfilename.str(""); + vtkfilename.str(""); vtkfilename << "tutorial3-" << std::setw(3) << std::setfill('0') << i << ".vtu"; std::ofstream vtkfile(vtkfilename.str().c_str()); Opm::DataMap dm; @@ -342,9 +342,9 @@ int main () /// \page tutorial3 /// \details /// \section completecode3 Complete source code: -/// \include tutorial3.cpp +/// \include tutorial3.cpp /// \page tutorial3 /// \details -/// \section pythonscript3 python script to generate figures: +/// \section pythonscript3 python script to generate figures: /// \snippet generate_doc_figures.py tutorial3 diff --git a/tutorials/tutorial4.cpp b/tutorials/tutorial4.cpp index 810b92ef..93b4a837 100644 --- a/tutorials/tutorial4.cpp +++ b/tutorials/tutorial4.cpp @@ -137,6 +137,7 @@ int main () /// \snippet tutorial4.cpp Gravity /// \internal[Gravity] const double *grav = 0; + std::vector omega; /// \internal[Gravity] /// \endinternal