summaryrefslogblamecommitdiff
path: root/var/spack/repos/builtin/packages/akantu/package.py
blob: 2952f9bb4a1688698e2f62867b4e30f7ba36e2e6 (plain) (tree)
1
2
3
4
5
6
7
                                                                         



                                                                         
                           
                                         








                                                                            
 
                                  

                                                                                  
 
                           
 

                                                                                               
 






                                                                               
 
                                           
                                           





                                                                         
 




                                                                      
 

                                     
 
                                     
 


                                             




                         








                                                                                           

         






                                                                       
             
                                                                          

                    




                                                                             

                            





                                                                                    
             
                                                     

                   
# 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 *
from spack.pkg.builtin.boost import Boost


class Akantu(CMakePackage):
    """
    Akantu means a little element in Kinyarwanda, a Bantu language. From now
    on it is also an opensource object-oriented Finite Element library which
    has the ambition to be generic and efficient.

    """

    homepage = "https://akantu.ch"
    url = "https://gitlab.com/akantu/akantu/-/archive/v3.0.0/akantu-v3.0.0.tar.gz"
    git = "https://gitlab.com/akantu/akantu.git"

    maintainers("nrichart")

    version("master", branch="master")
    version("3.0.0", sha256="7e8f64e25956eba44def1b2d891f6db8ba824e4a82ff0d51d6b585b60ab465db")

    variant(
        "external_solvers",
        values=any_combination_of("mumps", "petsc"),
        description="Activates the implicit solver",
    )
    variant("mpi", default=True, description="Activates parallel capabilities")
    variant("python", default=False, description="Activates python bindings")

    depends_on("boost@:1.66", when="@:3.0")
    depends_on(Boost.with_default_variants)
    depends_on("lapack")
    depends_on("cmake@3.5.1:", type="build")
    depends_on("python", when="+python", type=("build", "run"))
    depends_on("py-numpy", when="+python", type=("build", "run"))
    depends_on("py-scipy", when="+python", type=("build", "run"))
    depends_on("py-pybind11", when="@3.1:+python", type=("build", "run"))

    depends_on("mumps", when="~mpi external_solvers=mumps")
    depends_on("mumps+mpi", when="+mpi external_solvers=mumps")
    depends_on("netlib-scalapack", when="+mpi external_solvers=mumps")
    depends_on("petsc+double", when="~mpi external_solvers=petsc")
    depends_on("petsc+double+mpi", when="+mpi external_solvers=petsc")

    depends_on("mpi", when="+mpi")
    depends_on("scotch", when="+mpi")

    extends("python", when="+python")

    conflicts("%gcc@:5.3")
    conflicts("@:3.0 external_solvers=petsc")
    conflicts("@:3.0 +python")

    def cmake_args(self):
        spec = self.spec

        args = [
            "-DAKANTU_COHESIVE_ELEMENT:BOOL=ON",
            "-DAKANTU_DAMAGE_NON_LOCAL:BOOL=ON",
            "-DAKANTU_HEAT_TRANSFER:BOOL=ON",
            "-DAKANTU_SOLID_MECHANICS:BOOL=ON",
            "-DAKANTU_STRUCTURAL_MECHANICS:BOOL=OFF",
            "-DAKANTU_PARALLEL:BOOL={0}".format("ON" if spec.satisfies("+mpi") else "OFF"),
            "-DAKANTU_PYTHON_INTERFACE:BOOL={0}".format(
                "ON" if spec.satisfies("+python") else "OFF"
            ),
        ]

        if spec.satisfies("@:3.0"):
            args.extend(
                [
                    "-DCMAKE_CXX_FLAGS=-Wno-class-memaccess",
                    "-DAKANTU_TRACTION_AT_SPLIT_NODE_CONTACT:BOOL=OFF",
                ]
            )
        else:
            args.append("-DAKANTU_TRACTION_AT_SPLIT_NODE_CONTACT:BOOL=ON")

        solvers = []
        if spec.satisfies("external_solvers=mumps"):
            solvers.append("Mumps")
            args.append("-DMUMPS_DIR:PATH=${0}".format(spec["mumps"].prefix))
        if spec.satisfies("external_solvers=petsc"):
            solvers.append("PETSc")

        if len(solvers) > 0:
            args.extend(
                [
                    "-DAKANTU_IMPLICIT_SOLVER:STRING={0}".format("+".join(solvers)),
                    "-DAKANTU_IMPLICIT:BOOL=ON",
                ]
            )
        else:
            args.append("-DAKANTU_IMPLICIT:BOOL=OFF")

        return args