summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/tangram/package.py
blob: 0eecbcdbf1643ef1c46b84d2e3426b61aa232b54 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# Copyright 2013-2022 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.5/tangram-1.0.5.tar.gz"

    maintainers = ['raovgarimella']

    version('1.0.5', sha256='4fa61d5fecd67215237ab3df8fe64bc6c4d018b22313f2174923486026e93e53')
    version('1.0.1', sha256='8f2f8c01bb2d726b0f64e5a5bc3aa2bd8057ccaee7a29c68f1439d16e39aaa90')
    version('master', branch='master', submodules=True)

    variant('mpi', default=False,
            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')
#   Wonton depends array
    wonton_depends = ['mpi', 'jali', 'openmp', 'thrust', 'kokkos', 'cuda']

    for _variant in wonton_depends:
        depends_on('wonton+' + _variant, when='+' + _variant)
        depends_on('wonton~' + _variant, when='~' + _variant)

    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('-DTANGRAM_ENABLE_Kokkos=ON')
        else:
            options.append('-DTANGRAM_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

    def check(self):
        if self.run_tests:
            with working_dir(self.build_directory):
                make("test")