Skip to content
Snippets Groups Projects
Commit 6d47a6bd authored by Jakub Klinkovský's avatar Jakub Klinkovský
Browse files

MeshTest for CUDA

parent 51ea61b0
No related branches found
No related tags found
No related merge requests found
...@@ -3,10 +3,22 @@ SET_TARGET_PROPERTIES( BoundaryTagsTest${mpiExt}${debugExt} PROPERTIES COMPILE_F ...@@ -3,10 +3,22 @@ SET_TARGET_PROPERTIES( BoundaryTagsTest${mpiExt}${debugExt} PROPERTIES COMPILE_F
TARGET_LINK_LIBRARIES( BoundaryTagsTest${mpiExt}${debugExt} ${GTEST_BOTH_LIBRARIES} TARGET_LINK_LIBRARIES( BoundaryTagsTest${mpiExt}${debugExt} ${GTEST_BOTH_LIBRARIES}
tnl${mpiExt}${debugExt}-${tnlVersion} ) tnl${mpiExt}${debugExt}-${tnlVersion} )
ADD_EXECUTABLE( MeshTest${mpiExt}${debugExt} ${headers} MeshTest.cpp ) IF( BUILD_CUDA )
SET_TARGET_PROPERTIES( MeshTest${mpiExt}${debugExt} PROPERTIES COMPILE_FLAGS "${CXX_TESTS_FLAGS}" ) # FIXME: nvcc fails with "Invalid memory reference" error, so we assume that ${CXX} is clang
TARGET_LINK_LIBRARIES( MeshTest${mpiExt}${debugExt} ${GTEST_BOTH_LIBRARIES} #CUDA_ADD_EXECUTABLE( MeshTest${mpiExt}${debugExt} ${headers} MeshTest.cu OPTIONS "${CXX_TESTS_FLAGS}" )
tnl${mpiExt}${debugExt}-${tnlVersion} ) #TARGET_LINK_LIBRARIES( MeshTest${mpiExt}${debugExt} ${GTEST_BOTH_LIBRARIES}
# tnl${mpiExt}${debugExt}-${tnlVersion} )
ADD_EXECUTABLE( MeshTest${mpiExt}${debugExt} ${headers} MeshTest.cpp )
SET_TARGET_PROPERTIES( MeshTest${mpiExt}${debugExt} PROPERTIES COMPILE_FLAGS "${CXX_TESTS_FLAGS} -DHAVE_CUDA -x cuda --cuda-path=${CUDA_TOOLKIT_ROOT_DIR} --cuda-gpu-arch=sm_21" )
TARGET_LINK_LIBRARIES( MeshTest${mpiExt}${debugExt} ${GTEST_BOTH_LIBRARIES}
tnl${mpiExt}${debugExt}-${tnlVersion}
cudart dl rt "-L ${CUDA_TOOLKIT_ROOT_DIR}/lib64/" )
ELSE( BUILD_CUDA )
ADD_EXECUTABLE( MeshTest${mpiExt}${debugExt} ${headers} MeshTest.cpp )
SET_TARGET_PROPERTIES( MeshTest${mpiExt}${debugExt} PROPERTIES COMPILE_FLAGS "${CXX_TESTS_FLAGS}" )
TARGET_LINK_LIBRARIES( MeshTest${mpiExt}${debugExt} ${GTEST_BOTH_LIBRARIES}
tnl${mpiExt}${debugExt}-${tnlVersion} )
ENDIF( BUILD_CUDA )
ADD_EXECUTABLE( MeshEntityTest${mpiExt}${debugExt} ${headers} MeshEntityTest.cpp ) ADD_EXECUTABLE( MeshEntityTest${mpiExt}${debugExt} ${headers} MeshEntityTest.cpp )
SET_TARGET_PROPERTIES( MeshEntityTest${mpiExt}${debugExt} PROPERTIES COMPILE_FLAGS "${CXX_TESTS_FLAGS}" ) SET_TARGET_PROPERTIES( MeshEntityTest${mpiExt}${debugExt} PROPERTIES COMPILE_FLAGS "${CXX_TESTS_FLAGS}" )
......
...@@ -67,6 +67,51 @@ void compareStringRepresentation( const Object1& obj1, const Object2& obj2 ) ...@@ -67,6 +67,51 @@ void compareStringRepresentation( const Object1& obj1, const Object2& obj2 )
EXPECT_EQ( str1.str(), str2.str() ); EXPECT_EQ( str1.str(), str2.str() );
} }
template< typename Object >
void testCopyAssignment( const Object& obj )
{
static_assert( std::is_copy_constructible< Object >::value, "" );
static_assert( std::is_copy_assignable< Object >::value, "" );
Object new_obj_1( obj );
EXPECT_EQ( new_obj_1, obj );
Object new_obj_2;
new_obj_2 = obj;
EXPECT_EQ( new_obj_2, obj );
}
template< typename Mesh >
void testCopyToCuda( const Mesh& mesh )
{
#ifdef HAVE_CUDA
using DeviceMesh = Meshes::Mesh< typename Mesh::Config, Devices::Cuda >;
DeviceMesh dmesh1( mesh );
EXPECT_EQ( dmesh1, mesh );
DeviceMesh dmesh2;
dmesh2 = mesh;
EXPECT_EQ( dmesh2, mesh );
// copy back to host
Mesh mesh2( dmesh1 );
EXPECT_EQ( mesh2, mesh );
Mesh mesh3;
mesh3 = dmesh1;
EXPECT_EQ( mesh2, mesh );
#endif
}
template< typename Mesh >
void testFinishedMesh( const Mesh& mesh )
{
Mesh mesh2;
ASSERT_TRUE( mesh.save( "mesh.tnl" ) );
ASSERT_TRUE( mesh2.load( "mesh.tnl" ) );
ASSERT_EQ( mesh, mesh2 );
compareStringRepresentation( mesh, mesh2 );
testCopyAssignment( mesh );
testCopyToCuda( mesh );
}
TEST( MeshTest, TwoTrianglesTest ) TEST( MeshTest, TwoTrianglesTest )
{ {
using TriangleMeshEntityType = MeshEntity< TestTriangleMeshConfig, Devices::Host, MeshTriangleTopology >; using TriangleMeshEntityType = MeshEntity< TestTriangleMeshConfig, Devices::Host, MeshTriangleTopology >;
...@@ -108,7 +153,7 @@ TEST( MeshTest, TwoTrianglesTest ) ...@@ -108,7 +153,7 @@ TEST( MeshTest, TwoTrianglesTest )
point3( 1.0, 1.0 ); point3( 1.0, 1.0 );
typedef Mesh< TestTriangleMeshConfig > TriangleTestMesh; typedef Mesh< TestTriangleMeshConfig > TriangleTestMesh;
TriangleTestMesh mesh, mesh2; TriangleTestMesh mesh;
MeshBuilder< TriangleTestMesh > meshBuilder; MeshBuilder< TriangleTestMesh > meshBuilder;
meshBuilder.setPointsCount( 4 ); meshBuilder.setPointsCount( 4 );
meshBuilder.setPoint( 0, point0 ); meshBuilder.setPoint( 0, point0 );
...@@ -179,10 +224,7 @@ TEST( MeshTest, TwoTrianglesTest ) ...@@ -179,10 +224,7 @@ TEST( MeshTest, TwoTrianglesTest )
EXPECT_EQ( mesh.template getEntity< 1 >( 0 ).template getSuperentityIndex< 2 >( 1 ), 1 ); EXPECT_EQ( mesh.template getEntity< 1 >( 0 ).template getSuperentityIndex< 2 >( 1 ), 1 );
ASSERT_TRUE( mesh.save( "mesh.tnl" ) ); testFinishedMesh( mesh );
ASSERT_TRUE( mesh2.load( "mesh.tnl" ) );
ASSERT_EQ( mesh, mesh2 );
compareStringRepresentation( mesh, mesh2 );
}; };
TEST( MeshTest, TetrahedronsTest ) TEST( MeshTest, TetrahedronsTest )
...@@ -196,7 +238,7 @@ TEST( MeshTest, TetrahedronsTest ) ...@@ -196,7 +238,7 @@ TEST( MeshTest, TetrahedronsTest )
ASSERT_TRUE( PointType::getType() == ( Containers::StaticVector< 3, RealType >::getType() ) ); ASSERT_TRUE( PointType::getType() == ( Containers::StaticVector< 3, RealType >::getType() ) );
typedef Mesh< TestTetrahedronMeshConfig > TestTetrahedronMesh; typedef Mesh< TestTetrahedronMeshConfig > TestTetrahedronMesh;
TestTetrahedronMesh mesh, mesh2; TestTetrahedronMesh mesh;
MeshBuilder< TestTetrahedronMesh > meshBuilder; MeshBuilder< TestTetrahedronMesh > meshBuilder;
meshBuilder.setPointsCount( 13 ); meshBuilder.setPointsCount( 13 );
meshBuilder.setPoint( 0, PointType( 0.000000, 0.000000, 0.000000 ) ); meshBuilder.setPoint( 0, PointType( 0.000000, 0.000000, 0.000000 ) );
...@@ -348,10 +390,7 @@ TEST( MeshTest, TetrahedronsTest ) ...@@ -348,10 +390,7 @@ TEST( MeshTest, TetrahedronsTest )
ASSERT_TRUE( meshBuilder.build( mesh ) ); ASSERT_TRUE( meshBuilder.build( mesh ) );
ASSERT_TRUE( mesh.save( "mesh.tnl" ) ); testFinishedMesh( mesh );
ASSERT_TRUE( mesh2.load( "mesh.tnl" ) );
ASSERT_EQ( mesh, mesh2 );
compareStringRepresentation( mesh, mesh2 );
} }
TEST( MeshTest, RegularMeshOfTrianglesTest ) TEST( MeshTest, RegularMeshOfTrianglesTest )
...@@ -371,7 +410,7 @@ TEST( MeshTest, RegularMeshOfTrianglesTest ) ...@@ -371,7 +410,7 @@ TEST( MeshTest, RegularMeshOfTrianglesTest )
const IndexType numberOfVertices = ( xSize + 1 ) * ( ySize + 1 ); const IndexType numberOfVertices = ( xSize + 1 ) * ( ySize + 1 );
typedef Mesh< TestTriangleMeshConfig > TestTriangleMesh; typedef Mesh< TestTriangleMeshConfig > TestTriangleMesh;
Mesh< TestTriangleMeshConfig > mesh, mesh2; Mesh< TestTriangleMeshConfig > mesh;
MeshBuilder< TestTriangleMesh > meshBuilder; MeshBuilder< TestTriangleMesh > meshBuilder;
meshBuilder.setPointsCount( numberOfVertices ); meshBuilder.setPointsCount( numberOfVertices );
meshBuilder.setCellsCount( numberOfCells ); meshBuilder.setCellsCount( numberOfCells );
...@@ -451,10 +490,7 @@ TEST( MeshTest, RegularMeshOfTrianglesTest ) ...@@ -451,10 +490,7 @@ TEST( MeshTest, RegularMeshOfTrianglesTest )
} }
} }
ASSERT_TRUE( mesh.save( "mesh.tnl" ) ); testFinishedMesh( mesh );
ASSERT_TRUE( mesh2.load( "mesh.tnl" ) );
ASSERT_EQ( mesh, mesh2 );
compareStringRepresentation( mesh, mesh2 );
} }
TEST( MeshTest, RegularMeshOfQuadrilateralsTest ) TEST( MeshTest, RegularMeshOfQuadrilateralsTest )
...@@ -474,7 +510,7 @@ TEST( MeshTest, RegularMeshOfQuadrilateralsTest ) ...@@ -474,7 +510,7 @@ TEST( MeshTest, RegularMeshOfQuadrilateralsTest )
const IndexType numberOfVertices = ( xSize + 1 ) * ( ySize + 1 ); const IndexType numberOfVertices = ( xSize + 1 ) * ( ySize + 1 );
typedef Mesh< TestQuadrilateralMeshConfig > TestQuadrilateralMesh; typedef Mesh< TestQuadrilateralMeshConfig > TestQuadrilateralMesh;
TestQuadrilateralMesh mesh, mesh2; TestQuadrilateralMesh mesh;
MeshBuilder< TestQuadrilateralMesh > meshBuilder; MeshBuilder< TestQuadrilateralMesh > meshBuilder;
meshBuilder.setPointsCount( numberOfVertices ); meshBuilder.setPointsCount( numberOfVertices );
meshBuilder.setCellsCount( numberOfCells ); meshBuilder.setCellsCount( numberOfCells );
...@@ -551,10 +587,7 @@ TEST( MeshTest, RegularMeshOfQuadrilateralsTest ) ...@@ -551,10 +587,7 @@ TEST( MeshTest, RegularMeshOfQuadrilateralsTest )
} }
} }
ASSERT_TRUE( mesh.save( "mesh.tnl" ) ); testFinishedMesh( mesh );
ASSERT_TRUE( mesh2.load( "mesh.tnl" ) );
ASSERT_EQ( mesh, mesh2 );
compareStringRepresentation( mesh, mesh2 );
} }
TEST( MeshTest, RegularMeshOfHexahedronsTest ) TEST( MeshTest, RegularMeshOfHexahedronsTest )
...@@ -576,7 +609,7 @@ TEST( MeshTest, RegularMeshOfHexahedronsTest ) ...@@ -576,7 +609,7 @@ TEST( MeshTest, RegularMeshOfHexahedronsTest )
const IndexType numberOfVertices = ( xSize + 1 ) * ( ySize + 1 ) * ( zSize + 1 ); const IndexType numberOfVertices = ( xSize + 1 ) * ( ySize + 1 ) * ( zSize + 1 );
typedef Mesh< TestHexahedronMeshConfig > TestHexahedronMesh; typedef Mesh< TestHexahedronMeshConfig > TestHexahedronMesh;
TestHexahedronMesh mesh, mesh2; TestHexahedronMesh mesh;
MeshBuilder< TestHexahedronMesh > meshBuilder; MeshBuilder< TestHexahedronMesh > meshBuilder;
meshBuilder.setPointsCount( numberOfVertices ); meshBuilder.setPointsCount( numberOfVertices );
meshBuilder.setCellsCount( numberOfCells ); meshBuilder.setCellsCount( numberOfCells );
...@@ -718,10 +751,7 @@ TEST( MeshTest, RegularMeshOfHexahedronsTest ) ...@@ -718,10 +751,7 @@ TEST( MeshTest, RegularMeshOfHexahedronsTest )
} }
} }
ASSERT_TRUE( mesh.save( "mesh.tnl" ) ); testFinishedMesh( mesh );
ASSERT_TRUE( mesh2.load( "mesh.tnl" ) );
ASSERT_EQ( mesh, mesh2 );
compareStringRepresentation( mesh, mesh2 );
} }
#endif #endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment