From d83d694399ceea31402d8947c01932ac0a58b867 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Oberhuber?= <oberhuber.tomas@gmail.com> Date: Tue, 21 Aug 2018 14:24:45 +0200 Subject: [PATCH] BoundaryMeshFunction added. --- src/TNL/Functions/BoundaryMeshFunction.h | 47 +++++++++++++++++++ src/TNL/Functions/CMakeLists.txt | 3 +- .../Functions/BoundaryMeshFunctionTest.cpp | 11 +++++ .../Functions/BoundaryMeshFunctionTest.cu | 11 +++++ .../Functions/BoundaryMeshFunctionTest.h | 37 +++++++++++++++ src/UnitTests/Functions/CMakeLists.txt | 13 +++++ 6 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 src/TNL/Functions/BoundaryMeshFunction.h create mode 100644 src/UnitTests/Functions/BoundaryMeshFunctionTest.cpp create mode 100644 src/UnitTests/Functions/BoundaryMeshFunctionTest.cu create mode 100644 src/UnitTests/Functions/BoundaryMeshFunctionTest.h diff --git a/src/TNL/Functions/BoundaryMeshFunction.h b/src/TNL/Functions/BoundaryMeshFunction.h new file mode 100644 index 0000000000..b91b87bbbe --- /dev/null +++ b/src/TNL/Functions/BoundaryMeshFunction.h @@ -0,0 +1,47 @@ +/*************************************************************************** + BoundaryMeshFunction.h - description + ------------------- + begin : Aug 21, 2018 + copyright : (C) 2018 by oberhuber + email : tomas.oberhuber@fjfi.cvut.cz + ***************************************************************************/ + +/* See Copyright Notice in tnl/Copyright */ + +#pragma once + +#include <TNL/Functions/MeshFunction.h> + +namespace TNL { +namespace Functions { + + +// BoundaryMeshFunction is supposed to store values of a mesh functions only +// at boundary mesh entities. It is just a small memory optimization. +// Currently, it is only a wrap around common MeshFunction so that we can introduce +// boundary mesh functions in the rest of the code. +// TODO: Implement it. +template< typename Mesh, + int MeshEntityDimension = Mesh::getMeshDimension(), + typename Real = typename Mesh::RealType > +class BoundaryMeshFunction : + public MeshFunction< Mesh, MeshEntityDimension, Real > +{ + public: + + using BaseType = MeshFunction< Mesh, MeshEntityDimension, Real >; + using ThisType = BoundaryMeshFunction< Mesh, MeshEntityDimension, Real >; + using typename BaseType::MeshType; + using typename BaseType::DeviceType; + using typename BaseType::IndexType; + using typename BaseType::MeshPointer; + using typename BaseType::RealType; + using typename BaseType::VectorType; + using typename BaseType::DistributedMeshType; + using typename BaseType::DistributedMeshSynchronizerType; + + +}; + +} // namespace Functions +} // namespace TNL diff --git a/src/TNL/Functions/CMakeLists.txt b/src/TNL/Functions/CMakeLists.txt index 2c51f3beb5..828720eb2e 100644 --- a/src/TNL/Functions/CMakeLists.txt +++ b/src/TNL/Functions/CMakeLists.txt @@ -1,6 +1,7 @@ ADD_SUBDIRECTORY( Analytic ) -SET( headers Domain.h +SET( headers BoundaryMeshFunction.h + Domain.h ExactOperatorFunction.h FunctionAdapter.h MeshFunction.h diff --git a/src/UnitTests/Functions/BoundaryMeshFunctionTest.cpp b/src/UnitTests/Functions/BoundaryMeshFunctionTest.cpp new file mode 100644 index 0000000000..b1b0d86338 --- /dev/null +++ b/src/UnitTests/Functions/BoundaryMeshFunctionTest.cpp @@ -0,0 +1,11 @@ +/*************************************************************************** + BoundaryMeshFunctionTest.cpp - description + ------------------- + begin : Aug 21, 2018 + copyright : (C) 2018 by oberhuber + email : tomas.oberhuber@fjfi.cvut.cz + ***************************************************************************/ + +/* See Copyright Notice in tnl/Copyright */ + +#include "BoundaryMeshFunctionTest.h" \ No newline at end of file diff --git a/src/UnitTests/Functions/BoundaryMeshFunctionTest.cu b/src/UnitTests/Functions/BoundaryMeshFunctionTest.cu new file mode 100644 index 0000000000..9558078a7a --- /dev/null +++ b/src/UnitTests/Functions/BoundaryMeshFunctionTest.cu @@ -0,0 +1,11 @@ +/*************************************************************************** + BoundaryMeshFunctionTest.cu - description + ------------------- + begin : Aug 21, 2018 + copyright : (C) 2018 by oberhuber + email : tomas.oberhuber@fjfi.cvut.cz + ***************************************************************************/ + +/* See Copyright Notice in tnl/Copyright */ + +#include "BoundaryMeshFunctionTest.h" \ No newline at end of file diff --git a/src/UnitTests/Functions/BoundaryMeshFunctionTest.h b/src/UnitTests/Functions/BoundaryMeshFunctionTest.h new file mode 100644 index 0000000000..bab8bf5afb --- /dev/null +++ b/src/UnitTests/Functions/BoundaryMeshFunctionTest.h @@ -0,0 +1,37 @@ +/*************************************************************************** + BoundaryMeshFunctionTest.h - description + ------------------- + begin : Aug 21, 2018 + copyright : (C) 2018 by oberhuber + email : tomas.oberhuber@fjfi.cvut.cz + ***************************************************************************/ + +/* See Copyright Notice in tnl/Copyright */ + +#pragma once + +#include "../GtestMissingError.h" + +#ifdef HAVE_GTEST +#include <gtest/gtest.h> +#include <TNL/Functions/BoundaryMeshFunction.h> +#include <TNL/Meshes/Grid.h> + +TEST( BoundaryMeshFunctionTest, BasicConstructor ) +{ + using Grid = TNL::Meshes::Grid< 2 >; + TNL::Functions::BoundaryMeshFunction< Grid > boundaryMesh; +} + +#endif + + +int main( int argc, char* argv[] ) +{ +#ifdef HAVE_GTEST + ::testing::InitGoogleTest( &argc, argv ); + return RUN_ALL_TESTS(); +#else + throw GtestMissingError(); +#endif +} diff --git a/src/UnitTests/Functions/CMakeLists.txt b/src/UnitTests/Functions/CMakeLists.txt index e69de29bb2..9641a5b329 100644 --- a/src/UnitTests/Functions/CMakeLists.txt +++ b/src/UnitTests/Functions/CMakeLists.txt @@ -0,0 +1,13 @@ +IF( BUILD_CUDA ) + CUDA_ADD_EXECUTABLE( BoundaryMeshFunctionTest BoundaryMeshFunctionTest.h BoundaryMeshFunctionTest.cu OPTIONS ${CXX_TESTS_FLAGS} ) + TARGET_LINK_LIBRARIES( BoundaryMeshFunctionTest ${GTEST_BOTH_LIBRARIES} + tnl ) +ELSE( BUILD_CUDA ) + ADD_EXECUTABLE( BoundaryMeshFunctionTest BoundaryMeshFunctionTest.h BoundaryMeshFunctionTest.cpp ) + TARGET_COMPILE_OPTIONS( BoundaryMeshFunctionTest PRIVATE ${CXX_TESTS_FLAGS} ) + TARGET_LINK_LIBRARIES( BoundaryMeshFunctionTest ${GTEST_BOTH_LIBRARIES} + tnl ) +ENDIF( BUILD_CUDA ) + + +ADD_TEST( BoundaryMeshFunctionTest ${EXECUTABLE_OUTPUT_PATH}/BoundaryMeshFunctionTest${CMAKE_EXECUTABLE_SUFFIX} ) \ No newline at end of file -- GitLab