mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Fixed issue #6034 - Improve INP import : Add support for columns spanning more than one line.
This commit is contained in:
parent
523cdc2b7d
commit
3a5ef7fb86
1
.gitignore
vendored
1
.gitignore
vendored
@ -60,6 +60,7 @@ ipch/
|
|||||||
Ankh.NoLoad
|
Ankh.NoLoad
|
||||||
.vs
|
.vs
|
||||||
out
|
out
|
||||||
|
build
|
||||||
CMakeSettings.json
|
CMakeSettings.json
|
||||||
enc_temp_folder
|
enc_temp_folder
|
||||||
|
|
||||||
|
@ -66,17 +66,20 @@ RifElementPropertyMetadata RifElementPropertyTableReader::readMetadata( const QS
|
|||||||
metadataBlockFound = true;
|
metadataBlockFound = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
else if ( line.toUpper().startsWith( "*DISTRIBUTION" ) )
|
||||||
|
{
|
||||||
|
metadata.fileName = fileName;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if ( !metadataBlockFound ) continue;
|
if ( !metadataBlockFound || line.startsWith( "*" ) ) continue;
|
||||||
|
|
||||||
QStringList cols = RifFileParseTools::splitLineAndTrim( line, "," );
|
QStringList cols = RifFileParseTools::splitLineAndTrim( line, ",", true );
|
||||||
|
|
||||||
metadata.fileName = fileName;
|
|
||||||
for ( QString s : cols )
|
for ( QString s : cols )
|
||||||
{
|
{
|
||||||
metadata.dataColumns.push_back( s );
|
metadata.dataColumns.push_back( s );
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
closeFile( file );
|
closeFile( file );
|
||||||
@ -110,6 +113,7 @@ void RifElementPropertyTableReader::readData( const RifElementPropertyMetadata*
|
|||||||
QTextStream stream( file );
|
QTextStream stream( file );
|
||||||
bool dataBlockFound = false;
|
bool dataBlockFound = false;
|
||||||
int lineNo = 0;
|
int lineNo = 0;
|
||||||
|
QStringList collectedCols;
|
||||||
|
|
||||||
// Init data vectors
|
// Init data vectors
|
||||||
table->elementIds.clear();
|
table->elementIds.clear();
|
||||||
@ -118,22 +122,39 @@ void RifElementPropertyTableReader::readData( const RifElementPropertyMetadata*
|
|||||||
while ( !stream.atEnd() )
|
while ( !stream.atEnd() )
|
||||||
{
|
{
|
||||||
QString line = stream.readLine();
|
QString line = stream.readLine();
|
||||||
QStringList cols = RifFileParseTools::splitLineAndTrim( line, "," );
|
if ( !line.startsWith( "*" ) )
|
||||||
|
{
|
||||||
|
if ( collectedCols.size() > 0 && collectedCols.size() != 8 )
|
||||||
|
{
|
||||||
|
collectedCols.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
collectedCols << RifFileParseTools::splitLineAndTrim( line, ",", true );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
collectedCols.clear();
|
||||||
|
}
|
||||||
lineNo++;
|
lineNo++;
|
||||||
|
|
||||||
if ( !dataBlockFound )
|
if ( !dataBlockFound )
|
||||||
{
|
{
|
||||||
if ( !line.startsWith( "*" ) && !line.startsWith( "," ) && cols.size() == expectedColumnCount )
|
if ( !line.startsWith( "*" ) && !line.startsWith( "," ) && collectedCols.size() == expectedColumnCount )
|
||||||
|
{
|
||||||
dataBlockFound = true;
|
dataBlockFound = true;
|
||||||
|
}
|
||||||
|
else if ( collectedCols.size() > expectedColumnCount )
|
||||||
|
{
|
||||||
|
throw FileParseException(
|
||||||
|
QString( "Number of columns mismatch at %1:%2" ).arg( metadata->fileName ).arg( lineNo ) );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( cols.size() != expectedColumnCount )
|
QStringList cols = collectedCols;
|
||||||
{
|
|
||||||
throw FileParseException(
|
|
||||||
QString( "Number of columns mismatch at %1:%2" ).arg( metadata->fileName ).arg( lineNo ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
for ( int c = 0; c < expectedColumnCount; c++ )
|
for ( int c = 0; c < expectedColumnCount; c++ )
|
||||||
{
|
{
|
||||||
@ -163,6 +184,8 @@ void RifElementPropertyTableReader::readData( const RifElementPropertyMetadata*
|
|||||||
table->data[c - 1].push_back( value );
|
table->data[c - 1].push_back( value );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
collectedCols.clear();
|
||||||
|
dataBlockFound = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
table->hasData = true;
|
table->hasData = true;
|
||||||
|
@ -53,3 +53,41 @@ TEST( RicElementPropertyTableReaderTest, ParseFailed )
|
|||||||
EXPECT_TRUE( e.message.startsWith( "Number of columns mismatch" ) );
|
EXPECT_TRUE( e.message.startsWith( "Number of columns mismatch" ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
TEST( RicElementPropertyTableReaderTest, MoreThanEightColumns )
|
||||||
|
{
|
||||||
|
RifElementPropertyMetadata metadata = RifElementPropertyTableReader::readMetadata(
|
||||||
|
ELEM_PROP_TEST_DATA_DIRECTORY + "ELASTIC_TABLE_morethan8columns.inp" );
|
||||||
|
|
||||||
|
RifElementPropertyTable table;
|
||||||
|
RifElementPropertyTableReader::readData( &metadata, &table );
|
||||||
|
|
||||||
|
EXPECT_TRUE( table.hasData );
|
||||||
|
|
||||||
|
EXPECT_EQ( 9u, metadata.dataColumns.size() );
|
||||||
|
EXPECT_STREQ( "MODULUS", metadata.dataColumns[0].toStdString().c_str() );
|
||||||
|
EXPECT_STREQ( "MODULUS", metadata.dataColumns[1].toStdString().c_str() );
|
||||||
|
EXPECT_STREQ( "MODULUS", metadata.dataColumns[2].toStdString().c_str() );
|
||||||
|
EXPECT_STREQ( "RATIO", metadata.dataColumns[3].toStdString().c_str() );
|
||||||
|
EXPECT_STREQ( "RATIO", metadata.dataColumns[4].toStdString().c_str() );
|
||||||
|
EXPECT_STREQ( "RATIO", metadata.dataColumns[5].toStdString().c_str() );
|
||||||
|
EXPECT_STREQ( "MODULUS", metadata.dataColumns[6].toStdString().c_str() );
|
||||||
|
EXPECT_STREQ( "MODULUS", metadata.dataColumns[7].toStdString().c_str() );
|
||||||
|
EXPECT_STREQ( "MODULUS", metadata.dataColumns[8].toStdString().c_str() );
|
||||||
|
|
||||||
|
|
||||||
|
EXPECT_EQ( 9u, table.data.size() );
|
||||||
|
EXPECT_EQ( 8u, table.elementIds.size() );
|
||||||
|
EXPECT_EQ( 8u, table.data[0].size() );
|
||||||
|
EXPECT_EQ( 8u, table.data[1].size() );
|
||||||
|
EXPECT_EQ( 8u, table.data[2].size() );
|
||||||
|
EXPECT_EQ( 8u, table.data[3].size() );
|
||||||
|
EXPECT_EQ( 8u, table.data[4].size() );
|
||||||
|
EXPECT_EQ( 8u, table.data[5].size() );
|
||||||
|
EXPECT_EQ( 8u, table.data[6].size() );
|
||||||
|
EXPECT_EQ( 8u, table.data[7].size() );
|
||||||
|
EXPECT_EQ( 8u, table.data[8].size() );
|
||||||
|
}
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
** ELASTIC SETTING FOR EACH ELEMENT
|
||||||
|
*Distribution Table, name=RSV_Res-1_Elastic_Table
|
||||||
|
MODULUS, MODULUS, MODULUS, RATIO, RATIO, RATIO, MODULUS,
|
||||||
|
MODULUS, MODULUS
|
||||||
|
*Distribution, name=RSV_Res-1_ELASTICS, location=ELEMENT, Table=RSV_Res-1_Elastic_Table
|
||||||
|
** Description: Element-by-Element Elastic properties
|
||||||
|
, 5000000000.0, 5000000000.0, 5000000000.0, 0.20, 0.20, 0.20, 2083333333.3,
|
||||||
|
2083333333.3, 2083333333.3,
|
||||||
|
Res-1.9764, 4998669605.36, 4998515013.81, 4985819146.89, 0.20, 0.20, 0.20, 2082985108.55
|
||||||
|
2083070114.11, 2083195609.10
|
||||||
|
Res-1.9763, 4998378764.10, 4996164940.36, 4967298321.58, 0.20, 0.20, 0.20, 2081274342.77
|
||||||
|
2083260687.92, 2083208458.19
|
||||||
|
Res-1.9762, 4998328556.97, 4995561505.50, 4964174759.06, 0.20, 0.20, 0.20, 2080763818.91
|
||||||
|
2083292591.66, 2083261000.75
|
||||||
|
Res-1.9761, 4998322867.69, 4994775664.48, 4958309492.44, 0.20, 0.20, 0.20, 2079995008.83
|
||||||
|
2083319853.08, 2083286460.02
|
||||||
|
Res-1.9760, 4998346381.04, 4994364077.05, 4955669201.25, 0.20, 0.20, 0.20, 2079617885.94
|
||||||
|
2083326454.00, 2083303403.23
|
||||||
|
Res-1.9759, 4998383500.18, 4994047179.49, 4953310980.82, 0.20, 0.20, 0.20, 2079279656.11
|
||||||
|
2083330439.00, 2083313410.86
|
||||||
|
Res-1.9758, 4998414899.36, 4993818845.60, 4951718769.13, 0.20, 0.20, 0.20, 2079052099.57
|
||||||
|
2083331777.84, 2083319849.17
|
||||||
|
Res-1.9757, 4998444377.89, 4993643343.12, 4950414224.86, 0.20, 0.20, 0.20, 2078864720.70
|
||||||
|
2083332526.54, 2083323962.41
|
Loading…
Reference in New Issue
Block a user