# 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