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