X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDLoader%2FTest%2FSauvLoaderTest.cxx;h=b6195f6df1abfefeea187b429a92e2c50e308779;hb=3c911ce36f5caa779ea60042e738fa57671a44b1;hp=f1c8f8d0d80b377f8986485207675ecf15b559ff;hpb=f67dc0817fad8a24d547e09fdab9c36e280cd378;p=tools%2Fmedcoupling.git diff --git a/src/MEDLoader/Test/SauvLoaderTest.cxx b/src/MEDLoader/Test/SauvLoaderTest.cxx index f1c8f8d0d..b6195f6df 100644 --- a/src/MEDLoader/Test/SauvLoaderTest.cxx +++ b/src/MEDLoader/Test/SauvLoaderTest.cxx @@ -1,9 +1,9 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D +// Copyright (C) 2007-2015 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -58,24 +58,23 @@ void SauvLoaderTest::testMed2SauvOnAMeshWithVoidFamily() const int nbOfNodes = 6; double coords[nbOfNodes*spaceDim] = {0,0, 1,0, 1,1, 0,1, 2,0, 2,1}; int conn[8]={0,1,2,3, 1,4,5,2}; - MEDCouplingUMesh *mesh2d=MEDCouplingUMesh::New("Mesh",spaceDim); + MEDCouplingAutoRefCountObjectPtr mesh2d=MEDCouplingUMesh::New("Mesh",spaceDim); mesh2d->allocateCells(2); mesh2d->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,conn); mesh2d->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,conn+4); mesh2d->finishInsertingCells(); - DataArrayDouble *myCoords=DataArrayDouble::New(); + MEDCouplingAutoRefCountObjectPtr myCoords=DataArrayDouble::New(); myCoords->alloc(nbOfNodes,spaceDim); std::copy(coords,coords+nbOfNodes*spaceDim,myCoords->getPointer()); mesh2d->setCoords(myCoords); - myCoords->decrRef(); // create a MedFileUMesh - MEDFileUMesh* m= MEDFileUMesh::New(); + MEDCouplingAutoRefCountObjectPtr m= MEDFileUMesh::New(); m->setMeshAtLevel(0,mesh2d); // Create families and groups - DataArrayInt *fam = DataArrayInt::New(); + MEDCouplingAutoRefCountObjectPtr fam = DataArrayInt::New(); fam->alloc(2,1); int elemsFams[2] = {-2,-3}; std::copy(elemsFams,elemsFams+2,fam->getPointer()); @@ -102,9 +101,9 @@ void SauvLoaderTest::testMed2SauvOnAMeshWithVoidFamily() // write to SAUV const char* sauvFile = "mesh_with_void_family.sauv"; - MEDFileData* medData = MEDFileData::New(); - MEDFileMeshes* medMeshes = MEDFileMeshes::New(); - SauvWriter* sw=SauvWriter::New(); + MEDCouplingAutoRefCountObjectPtr medData = MEDFileData::New(); + MEDCouplingAutoRefCountObjectPtr medMeshes = MEDFileMeshes::New(); + MEDCouplingAutoRefCountObjectPtr sw=SauvWriter::New(); medMeshes->setMeshAtPos(0, m); medData->setMeshes(medMeshes); sw->setMEDFileDS(medData); @@ -113,27 +112,57 @@ void SauvLoaderTest::testMed2SauvOnAMeshWithVoidFamily() // read SAUV and check groups MEDCouplingAutoRefCountObjectPtr sr=SauvReader::New(sauvFile); MEDCouplingAutoRefCountObjectPtr d2=sr->loadInMEDFileDS(); - MEDFileUMesh * m2 = static_cast( d2->getMeshes()->getMeshAtPos(0) ); - std::vector groups = m->getGroupsNames(); - std::cout << "Number of groups: " << groups.size() << std::endl; - CPPUNIT_ASSERT_EQUAL(3,(int)groups.size()); - MEDCouplingUMesh * grp1 = m2->getGroup(0, "Group1"); - CPPUNIT_ASSERT_EQUAL(1,(int)grp1->getNumberOfCells()); - MEDCouplingUMesh * grp2 = m2->getGroup(0, "Group2"); - CPPUNIT_ASSERT_EQUAL(1,(int)grp2->getNumberOfCells()); - MEDCouplingUMesh * grptot = m2->getGroup(0, "Grouptot"); + MEDFileUMesh* m2 = static_cast( d2->getMeshes()->getMeshAtPos(0) ); + MEDCouplingAutoRefCountObjectPtr group1 = m2->getGroup(0, "Group1"); + CPPUNIT_ASSERT_EQUAL(1,(int)group1->getNumberOfCells()); + MEDCouplingAutoRefCountObjectPtr group2 = m2->getGroup(0, "Group2"); + CPPUNIT_ASSERT_EQUAL(1,(int)group2->getNumberOfCells()); + MEDCouplingAutoRefCountObjectPtr grptot = m2->getGroup(0, "Grouptot"); CPPUNIT_ASSERT_EQUAL(2,(int)grptot->getNumberOfCells()); +} - // clean - mesh2d->decrRef(); - medData->decrRef(); - medMeshes->decrRef(); - fam->decrRef(); - m->decrRef(); - sw->decrRef(); - grp1->decrRef(); - grp2->decrRef(); - grptot->decrRef(); +void SauvLoaderTest::testSauv2MedOnA3SubsField() +{ + // read SAUV + std::string sauvFile = getResourceFile("portico_3subs.sauv"); + MEDCouplingAutoRefCountObjectPtr sr=SauvReader::New(sauvFile.c_str()); + MEDCouplingAutoRefCountObjectPtr d2=sr->loadInMEDFileDS(); + // check mesh + MEDFileUMesh* m2 = static_cast(d2->getMeshes()->getMeshAtPos(0)); + MEDCouplingAutoRefCountObjectPtr mesh1d = m2->getMeshAtLevel(0); + MEDCouplingAutoRefCountObjectPtr length1dField = mesh1d->getMeasureField(0); + std::cout << "Length of 1d elements: " << length1dField->accumulate(0) << std::endl; + CPPUNIT_ASSERT_DOUBLES_EQUAL(3, length1dField->accumulate(0), 1e-12); + // check field + MEDCouplingAutoRefCountObjectPtr field = + dynamic_cast(d2->getFields()->getFieldWithName("CHAM1D")); + std::cout << "Number of components in field: " << field->getInfo().size() << std::endl; + CPPUNIT_ASSERT_EQUAL(6,(int)field->getInfo().size()); + std::vector< std::pair > timesteps = field->getIterations(); + + MEDCouplingAutoRefCountObjectPtr field1d = + field->getFieldOnMeshAtLevel(ON_GAUSS_NE, timesteps[0].first, timesteps[0].second, 0, m2); + + // Check first component of the field + // 2 gauss points per element => 12 values + double values[12] = { + -7.687500000000e-03, + -7.687500000000e-03, + -4.562500000000e-03, + -4.562500000000e-03, + -8.208333333333e-03, + -8.208333333333e-03, + -6.125000000000e-03, + -6.125000000000e-03, + -4.041666666666e-03, + -4.041666666666e-03, + -6.111413346910e-07, + -6.111413346910e-07}; + + for (int i=0; i < field1d->getNumberOfTuples(); i++) + { + CPPUNIT_ASSERT_DOUBLES_EQUAL( values[i], field1d->getIJ(i, 0), 1e-12 ); + } } void SauvLoaderTest::testMed2Sauv() @@ -190,7 +219,7 @@ void SauvLoaderTest::testMed2Sauv() MEDFileFields* pointeFields = pointeMed->getFields(); for ( int i = 0; i < pointeFields->getNumberOfFields(); ++i ) { - MEDCouplingAutoRefCountObjectPtr ts = pointeFields->getFieldAtPos(i); + MEDCouplingAutoRefCountObjectPtr ts = pointeFields->getFieldAtPos(i); if ( std::string("fieldnodeint") == ts->getName()) { pointeFields->destroyFieldAtPos( i ); @@ -237,9 +266,9 @@ void SauvLoaderTest::testMed2Sauv() // check fields // fieldnodedouble MEDCouplingAutoRefCountObjectPtr fieldnodedoubleTS1 = - pointeMed->getFields()->getFieldWithName("fieldnodedouble"); + dynamic_cast(pointeMed->getFields()->getFieldWithName("fieldnodedouble")); MEDCouplingAutoRefCountObjectPtr fieldnodedoubleTS2 = - d2->getFields()->getFieldWithName("fieldnodedouble"); + dynamic_cast(d2->getFields()->getFieldWithName("fieldnodedouble")); CPPUNIT_ASSERT_EQUAL( fieldnodedoubleTS1->getInfo().size(), fieldnodedoubleTS2->getInfo().size()); for ( size_t i = 0; i < fieldnodedoubleTS1->getInfo().size(); ++i ) CPPUNIT_ASSERT_EQUAL( fieldnodedoubleTS1->getInfo()[i], fieldnodedoubleTS2->getInfo()[i]); @@ -256,9 +285,9 @@ void SauvLoaderTest::testMed2Sauv() } // fieldcelldoublevector MEDCouplingAutoRefCountObjectPtr fieldcelldoublevectorTS1 = - pointeMed->getFields()->getFieldWithName("fieldcelldoublevector"); + dynamic_cast(pointeMed->getFields()->getFieldWithName("fieldcelldoublevector")); MEDCouplingAutoRefCountObjectPtr fieldcelldoublevectorTS2 = - d2->getFields()->getFieldWithName("fieldcelldoublevector"); + dynamic_cast(d2->getFields()->getFieldWithName("fieldcelldoublevector")); CPPUNIT_ASSERT_EQUAL( fieldcelldoublevectorTS1->getInfo().size(), fieldcelldoublevectorTS2->getInfo().size()); for ( size_t i = 0; i < fieldcelldoublevectorTS1->getInfo().size(); ++i ) CPPUNIT_ASSERT_EQUAL( fieldcelldoublevectorTS1->getInfo()[i], fieldcelldoublevectorTS2->getInfo()[i]); @@ -277,7 +306,7 @@ void SauvLoaderTest::testMed2Sauv() } // "Field on 2 faces" MEDCouplingAutoRefCountObjectPtr fieldOnFaces = - d2->getFields()->getFieldWithName(f1->getName()); + dynamic_cast(d2->getFields()->getFieldWithName(f1->getName().c_str())); io1 = fieldOnFaces->getIterations(); MEDCouplingAutoRefCountObjectPtr fof = fieldOnFaces->getFieldOnMeshAtLevel(f1->getTypeOfField(),io1[0].first,io1[0].second,um1); @@ -304,7 +333,7 @@ std::string SauvLoaderTest::getResourceFile( const std::string& filename ) std::string resourceFile = ""; if ( getenv("top_srcdir") ) { - // we are in 'make check' step + // we are in 'make test' step resourceFile = getenv("top_srcdir"); resourceFile += "/resources/"; }