Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 25 additions & 33 deletions ApplicationLibCode/FileInterface/RifElementPropertyReader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
/////////////////////////////////////////////////////////////////////////////////

#include "RifElementPropertyReader.h"
#include "RiaEclipseUnitTools.h"
#include "RiaLogging.h"

#include "cvfAssert.h"
Expand Down Expand Up @@ -85,6 +86,21 @@ std::vector<std::string> RifElementPropertyReader::scalarElementFields() const
return fields;
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
static void scaleColumnIfModulus( const std::string& fieldName, std::vector<float>& data )
{
if ( fieldName == "MODULUS" )
{
const float paToGPa = static_cast<float>( 1.0 / RiaEclipseUnitTools::gigaPascalToPascal( 1.0 ) );
for ( float& v : data )
{
v *= paToGPa;
}
}
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
Expand Down Expand Up @@ -114,23 +130,9 @@ std::map<std::string, std::vector<float>> RifElementPropertyReader::readAllEleme
for ( size_t i = 0; i < table.data.size(); i++ )
{
const std::string& currentFieldFromFile = m_fieldsMetaData[fieldName].dataColumns[i].toStdString();

if ( currentFieldFromFile == "MODULUS" )
{
const std::vector<float>& currentColumn = table.data[i];
std::vector<float> tempResult( currentColumn.size(), 0 );

for ( float resultItem : currentColumn )
{
tempResult[i] = resultItem * 0.000000001;
}

fieldAndData[currentFieldFromFile].swap( tempResult );
}
else
{
fieldAndData[currentFieldFromFile] = table.data[i];
}
std::vector<float> columnData = table.data[i];
scaleColumnIfModulus( currentFieldFromFile, columnData );
fieldAndData[currentFieldFromFile] = std::move( columnData );
}
}
else if ( elementIdsFromFile.size() > m_elementIdxToId.size() && elementIdsFromFile.size() > m_elementIdToIdx.size() )
Expand All @@ -150,7 +152,7 @@ std::map<std::string, std::vector<float>> RifElementPropertyReader::readAllEleme

for ( int elementId : elementIdsFromFile )
{
std::unordered_map<int /*elm ID*/, int /*elm idx*/>::const_iterator it = m_elementIdToIdx.find( elementId );
auto it = m_elementIdToIdx.find( elementId );
if ( it == m_elementIdToIdx.end() )
{
RifElementPropertyReader::outputWarningAboutWrongFileData();
Expand All @@ -162,27 +164,17 @@ std::map<std::string, std::vector<float>> RifElementPropertyReader::readAllEleme

for ( size_t i = 0; i < table.data.size(); i++ )
{
std::string currentFieldFromFile = m_fieldsMetaData[fieldName].dataColumns[i].toStdString();

const std::vector<float>& currentColumn = table.data[i];
std::string currentFieldFromFile = m_fieldsMetaData[fieldName].dataColumns[i].toStdString();
const std::vector<float>& currentColumn = table.data[i];

std::vector<float> tempResult( m_elementIdToIdx.size(), HUGE_VAL );

if ( currentFieldFromFile == "MODULUS" )
{
for ( size_t j = 0; j < currentColumn.size(); j++ )
{
tempResult[fileIdxToElementIdx[j]] = currentColumn[j] * 0.000000001;
}
}
else
for ( size_t j = 0; j < currentColumn.size(); j++ )
{
for ( size_t j = 0; j < currentColumn.size(); j++ )
{
tempResult[fileIdxToElementIdx[j]] = currentColumn[j];
}
tempResult[fileIdxToElementIdx[j]] = currentColumn[j];
}

scaleColumnIfModulus( currentFieldFromFile, tempResult );
fieldAndData[currentFieldFromFile].swap( tempResult );
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

#include "RiaTestDataDirectory.h"

#include "RifElementPropertyReader.h"
#include "RifElementPropertyTableReader.h"
#include "RifFileParseTools.h"

Expand Down Expand Up @@ -117,3 +118,36 @@ TEST( RicElementPropertyTableReaderTest, MoreThanEightColumns )
EXPECT_FLOAT_EQ( 4998669605.36f, table.data[0].front() );
EXPECT_FLOAT_EQ( 4998444377.89f, table.data[0].back() );
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST( RicElementPropertyTableReaderTest, ReadAllElementPropertiesInFileContainingField )
{
RifElementPropertyMetadata metadata =
RifElementPropertyTableReader::readMetadata( ELEM_PROP_TEST_DATA_DIRECTORY + "ELASTIC_TABLE.inp" );

RifElementPropertyTable table;
RifElementPropertyTableReader::readData( &metadata, &table );

RifElementPropertyReader reader( table.elementIds );
reader.addFile( ( ELEM_PROP_TEST_DATA_DIRECTORY + "ELASTIC_TABLE.inp" ).toStdString() );

auto result = reader.readAllElementPropertiesInFileContainingField( "MODULUS" );

EXPECT_EQ( 2u, result.size() );
EXPECT_EQ( 1u, result.count( "MODULUS" ) );
EXPECT_EQ( 1u, result.count( "RATIO" ) );

const auto& modulusData = result.at( "MODULUS" );
EXPECT_EQ( 4320u, modulusData.size() );

const float paToGPa = 0.000000001f;
EXPECT_FLOAT_EQ( 11198814808.2538f * paToGPa, modulusData.front() );
EXPECT_FLOAT_EQ( 13250853676.3636f * paToGPa, modulusData.back() );

const auto& ratioData = result.at( "RATIO" );
EXPECT_EQ( 4320u, ratioData.size() );
EXPECT_FLOAT_EQ( 0.19041f, ratioData.front() );
EXPECT_FLOAT_EQ( 0.25f, ratioData.back() );
}
Loading