summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/mstk/package.py
blob: 7ab5eda14148d524da2dfc2e20f4cbf3d47086f4 (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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# Copyright 2013-2023 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.package import *


class Mstk(CMakePackage):
    """MSTK is a mesh framework that allows users to represent,
    manipulate and query unstructured 3D arbitrary topology meshes
    in a general manner without the need to code their own data
    structures. MSTK is a flexible framework in that it allows a
    variety of underlying representations for the mesh while
    maintaining a common interface. It allows users to choose from
    different mesh representations either at initialization (implemented)
    or during the program execution (not yet implemented) so that the
    optimal data structures are used for the particular algorithm.
    The interaction of users and applications with MSTK is through a
    functional interface that acts as though the mesh always contains
    vertices, edges, faces and regions and maintains connectivity between
    all these entities."""

    homepage = "https://github.com/MeshToolkit/MSTK"
    git = "https://github.com/MeshToolkit/MSTK"
    url = "https://github.com/MeshToolkit/MSTK/archive/3.3.6.tar.gz"

    maintainers("raovgarimella", "julienloiseau")

    license("BSD-3-Clause")

    version("master", branch="master")
    version("3.3.6", sha256="30041ee6f32d754e5d9b46db8f62609bb66d2686f8e6e16ad254f552849cb0f1")
    version("3.3.5", sha256="64c976e12d1393aafd086ef941b176add6cfb963f463c33259596e7ef641cdd8")
    version("3.3.4", sha256="bd34d31fc1fc468147a51e8d837d6bf9902ca8d38c7c0615e7f20968d4659da2")
    version("3.3.3", sha256="54ea7929c9046915472f38367c83f75af634a6989ce0b89aad17fb9f4a25023e")
    version("3.3.2", sha256="fb4ffa97af4d0a0d4771c8585d0b27538b013d8b1cfaff992e5e054fef62af0b")
    version("3.3.1", sha256="9fdb0c33c1b68714d708b355d963547cf41332812658d4560d4db43904fc78de")
    version("3.3.0", sha256="205c48fb5619937b5dd83788da739b7c2060155b7c41793e29ce05422b8f7dfb")
    version("3.2.1", sha256="09bc6684abb576e34c324322db6f71f8987c6ec436a54256b85ef4db40185470")
    version("3.2.0", sha256="57e58c5a7a456dbc608ce9f834a06c212a1aa64ac3ebc880ea0b8a19b000dab0")
    version("3.1.3", sha256="03f6901cd6d563e1705a173c1a2fbbef10ab9a43f533f6ba758e357c03bdfa16")
    version("3.1.2", sha256="1eb44c29554f45695f875fc60ab81554a2c46a041ef58a7224f3767d30e2846e")
    version("3.1.1", sha256="5a03873c69fb38acd7ce27f2a5fa0643dd1cfcc3e214cff4aa26ee717651cc0b")
    version("3.1.0", sha256="70e68d8a90cd2367015e0ab3459ed230a7995ad2297671742d9be6e28bc03dcf")
    version("3.0.4", sha256="99e4c996bf22fd325335ed1391dfe735b0a338e8e4d733204d56dde7ef4eedf3")
    version("3.0.3", sha256="618e371a48077f2b4ccfafd4d174c05f007b2ea7a51e0399df67442639409518")
    version("3.0.2", sha256="b0172cd68e5137b8585d82c37b8a4af4b7e884f04d1b7d006a399d39447fe89e")
    version("3.0.1", sha256="d44e4bf01b118b1d19710aa839b3f5f0c1a8391264a435f641ba4bd23bcf45ec")
    version("3.0.0", sha256="d993ff5fc6c431067eb97e4089835c7790397d9c1ad88a56523c0591d451df19")

    variant("exodusii", default=False, description="Enable ExodusII")
    variant("use_markers", default=True, description="Enable use of markers")
    variant("parallel", default=False, description="Enable Parallel Support")
    variant(
        "partitioner",
        default="none",
        values=("none", "metis", "zoltan", "all"),
        multi=False,
        description="Choose partitioner",
    )
    conflicts("partitioner=none", when="+parallel")
    conflicts("partitioner=all", when="-parallel")
    conflicts("partitioner=zoltan", when="-parallel")

    # MSTK turns on METIS only for parallel builds
    conflicts("partitioner=metis", when="-parallel")

    # dependencies
    depends_on("cmake@3.11:", type="build")

    #
    depends_on("mpi", when="+parallel")

    depends_on("zoltan -fortran", when="partitioner=zoltan")
    depends_on("zoltan -fortran", when="partitioner=all")
    depends_on("metis", when="partitioner=metis")
    depends_on("metis", when="partitioner=all")

    # Exodusii variant
    # The default exodusii build with mpi support
    depends_on("exodusii", when="+exodusii")

    # Unit testing variant
    depends_on("unittest-cpp", type="test")

    def cmake_args(self):
        options = []
        if "+use_markers" in self.spec:
            options.append("-DMSTK_USE_MARKERS=ON")
        else:
            options.append("-DMSTK_USE_MARKERS=OFF")

        # Parallel variant
        if "+parallel" in self.spec:
            options.append("-DENABLE_PARALLEL=ON")
        else:
            options.append("-DENABLE_PARALLEL=OFF")

        if "partitioner=none" in self.spec:
            options.append("-DENABLE_METIS=OFF")
            options.append("-DENABLE_ZOLTAN=OFF")
        else:
            if "zoltan" in self.spec:
                options.append("-DENABLE_ZOLTAN=ON")
            else:
                options.append("-DENABLE_ZOLTAN=OFF")
            if "metis" in self.spec:
                options.append("-DENABLE_METIS=ON")
            else:
                options.append("-DENABLE_METIS=OFF")

        # ExodusII variant
        if "+exodusii" in self.spec:
            options.append("-DENABLE_ExodusII=ON")
        else:
            options.append("-DENABLE_ExodusII=OFF")

        # Unit test variant
        if self.run_tests:
            options.append("-DENABLE_Tests=ON")
        else:
            options.append("-DENABLE_Tests=OFF")

        return options