From 1498d076c32ae67f412d7e8a129f691d5f43dd4b Mon Sep 17 00:00:00 2001
From: Rao Garimella <rao@lanl.gov>
Date: Mon, 17 Aug 2020 12:00:43 -0600
Subject: [PATCH] New package Tangram (#17944)

* New interface reconstruction package

* forgot to put in CMake option for Jali

* cleanup whitespace

* fix lines with more than 79 chars

* more long line cleanup

Co-authored-by: Rao Garimella <rao@abyzou.lanl.gov>
---
 .../repos/builtin/packages/tangram/package.py | 89 +++++++++++++++++++
 1 file changed, 89 insertions(+)
 create mode 100644 var/spack/repos/builtin/packages/tangram/package.py

diff --git a/var/spack/repos/builtin/packages/tangram/package.py b/var/spack/repos/builtin/packages/tangram/package.py
new file mode 100644
index 0000000000..eeaf5afdce
--- /dev/null
+++ b/var/spack/repos/builtin/packages/tangram/package.py
@@ -0,0 +1,89 @@
+# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other
+# Spack Project Developers. See the top-level COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+from spack import *
+
+
+class Tangram(CMakePackage):
+    """Tangram is an material interface reconstruction package used in
+    multimaterial ALE codes and multi-material remapping
+    (https://github.com/laristra/portage)
+    """
+
+    homepage = "https://portage.lanl.gov"
+    git      = "https://github.com/laristra/tangram.git"
+    url      = "https://github.com/laristra/tangram/releases/download/1.0.1/tangram-1.0.1.tar.gz"
+
+    maintainers = ['raovgarimella']
+
+    version('1.0.1', sha256='8f2f8c01bb2d726b0f64e5a5bc3aa2bd8057ccaee7a29c68f1439d16e39aaa90')
+    version('master', branch='master', submodules=True)
+
+    variant('mpi', default=True,
+            description='Enable interface reconstruction with MPI')
+    variant('thrust', default=False,
+            description='Enable on-node parallelism with NVidia Thrust')
+    variant('kokkos', default=False,
+            description='Enable on-node or device parallelism with Kokkos')
+    variant('openmp', default=False,
+            description="Enable on-node parallelism using OpenMP")
+    variant('cuda', default=False,
+            description="Enable GPU parallelism using CUDA")
+
+    # wrappers to enable external mesh/state libraries (only for testing)
+    variant('jali', default=False,
+            description='Build with Jali mesh infrastructure (for testing)')
+
+    # Don't enable Kokkos and Thrust simultaneously
+    conflicts('+jali~mpi')    # Jali needs MPI
+    conflicts('+thrust +cuda')  # We don't have Thrust with CUDA working yet
+    conflicts('+thrust +kokkos')  # Don't enable Kokkos, Thrust simultaneously
+
+    # dependencies
+    depends_on('cmake@3.13:', type='build')
+
+    depends_on('mpi', when='+mpi')
+
+    depends_on('wonton')
+    depends_on('wonton+jali', when='+jali')
+    depends_on('wonton~mpi', when='~mpi')
+    depends_on('wonton+mpi', when='+mpi')
+    depends_on('wonton+thrust', when='+thrust')
+    depends_on('wonton+kokkos', when='+kokkos')
+    depends_on('wonton+cuda', when='+cuda')
+    depends_on('wonton+openmp', when='+openmp')
+    depends_on('wonton+cuda', when='+cuda')
+
+    def cmake_args(self):
+        options = []
+        if '+mpi' in self.spec:
+            options.append('-DTANGRAM_ENABLE_MPI=ON')
+        else:
+            options.append('-DTANGRAM_ENABLE_MPI=OFF')
+
+        if '+jali' in self.spec:
+            options.append('-DTANGRAM_ENABLE_Jali=ON')
+        else:
+            options.append('-DTANGRAM_ENABLE_Jali=OFF')
+
+        if '+thrust' in self.spec:
+            options.append('-DTANGRAM_ENABLE_THRUST=ON')
+        else:
+            options.append('-DTANGRAM_ENABLE_THRUST=OFF')
+
+        if '+kokkos' in self.spec:
+            options.append('-DWONTON_ENABLE_Kokkos=ON')
+        else:
+            options.append('-DWONTON_ENABLE_Kokkos=OFF')
+
+        # Unit test variant
+        if self.run_tests:
+            options.append('-DENABLE_UNIT_TESTS=ON')
+            options.append('-DENABLE_APP_TESTS=ON')
+        else:
+            options.append('-DENABLE_UNIT_TESTS=OFF')
+            options.append('-DENABLE_APP_TESTS=OFF')
+
+        return options
-- 
GitLab