///////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2015- Statoil ASA // Copyright (C) 2015- Ceetron Solutions AS // // ResInsight 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. // // ResInsight 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 at // for more details. // ///////////////////////////////////////////////////////////////////////////////// #include "gtest/gtest.h" #include "RifOdbReader.h" #include "RigGeoMechCaseData.h" #include "RigFemPartCollection.h" #include "cvfDebugTimer.h" #include #include //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- TEST(OdbReaderTest, BasicTests) { std::cout << TEST_FILE << std::endl; std::cout << std::endl; cvf::ref reader = new RifOdbReader; cvf::ref femCase = new RigGeoMechCaseData(""); cvf::ref femData = femCase->femParts(); cvf::DebugTimer timer("DebugTimer"); timer.reportTime(); reader->openFile(TEST_FILE); reader->readFemParts(femData.p()); EXPECT_EQ(1, femData->partCount()); EXPECT_EQ(4320, femData->part(0)->elementCount()); EXPECT_EQ(HEX8, femData->part(0)->elementType(0)); EXPECT_EQ(true, reader->stepNames().size() == 1); std::vector steps = reader->stepNames(); EXPECT_EQ(true, steps.at(0).find("Date_20100930") >= 0); EXPECT_EQ(2, reader->frameTimes(0).size()); EXPECT_EQ(1.0, reader->frameTimes(0)[1]); std::map > scalarNodeFieldsMap = reader->scalarNodeFieldAndComponentNames(); EXPECT_EQ(3, scalarNodeFieldsMap.size()); std::map > scalarElementNodeFieldsMap = reader->scalarElementNodeFieldAndComponentNames(); EXPECT_EQ(0, scalarElementNodeFieldsMap.size()); std::map > scalarIntegrationPointFieldsMap = reader->scalarIntegrationPointFieldAndComponentNames(); EXPECT_EQ(6, scalarIntegrationPointFieldsMap.size()); std::vector displacementValues; reader->readScalarNodeField("U", "U2", 0, 0, 1, &displacementValues); EXPECT_EQ(5168, displacementValues.size()); std::vector integrationPointS22; timer.restart(); reader->readScalarIntegrationPointField("S", "S22", 0, 0, 1, &integrationPointS22); timer.reportLapTime("Read S/S22"); timer.restart(); reader->readScalarIntegrationPointField("S", "S22", 0, 0, 1, &integrationPointS22); timer.reportLapTime("Read S/S22 2nd time"); timer.restart(); reader->readScalarIntegrationPointField("S", "S22", 0, 0, 1, &integrationPointS22); timer.reportLapTime("Read S/S22 3rd time"); EXPECT_EQ(34560, integrationPointS22.size()); EXPECT_FLOAT_EQ(-1921117.3, integrationPointS22[0]); EXPECT_FLOAT_EQ(-1408592.5, integrationPointS22[1]); EXPECT_FLOAT_EQ(-1345666.9, integrationPointS22[2]); std::vector elementNodeS11; reader->readScalarElementNodeField("S", "S11", 0, 0, 1, &elementNodeS11); EXPECT_EQ(34560, elementNodeS11.size()); EXPECT_FLOAT_EQ(-2074357.3, elementNodeS11[0]); EXPECT_FLOAT_EQ(-1353137.5, elementNodeS11[1]); EXPECT_FLOAT_EQ(-1144559.4, elementNodeS11[2]); std::vector integrationPointE33; reader->readScalarIntegrationPointField("E", "E33", 0, 0, 1, &integrationPointE33); EXPECT_EQ(34560, integrationPointE33.size()); std::vector integrationPointTEMP; reader->readScalarIntegrationPointField("TEMP", "", 0, 0, 1, &integrationPointTEMP); EXPECT_EQ(34560, integrationPointTEMP.size()); std::vector displacements; reader->readDisplacements(0, 0, 1, &displacements); EXPECT_EQ(5168, displacements.size()); EXPECT_FLOAT_EQ(0.047638997, displacements[1].y()); EXPECT_FLOAT_EQ(-0.0036307564, displacements[6].x()); EXPECT_FLOAT_EQ(0.065709047, displacements[6].y()); EXPECT_FLOAT_EQ(-0.059760433, displacements[6].z()); std::vector porValues; reader->readScalarNodeField("POR", "", 0, 0, 1, &porValues); EXPECT_EQ(5168, porValues.size()); std::vector voidrValues; reader->readScalarIntegrationPointField("VOIDR", "", 0, 0, 0, &voidrValues); EXPECT_EQ(34560, voidrValues.size()); EXPECT_FLOAT_EQ(0.22864963, voidrValues[0]); EXPECT_FLOAT_EQ(0.23406270, voidrValues[1]); EXPECT_FLOAT_EQ(0.24549910, voidrValues[2]); timer.restart(); reader->readScalarIntegrationPointField("S", "S22", 0, 0, 1, &integrationPointS22); timer.reportLapTime("Read S/S22 final time"); }