New package: FDS (#37850)
This commit is contained in:
parent
784771a008
commit
bf4fccee15
94
var/spack/repos/builtin/packages/fds/package.py
Normal file
94
var/spack/repos/builtin/packages/fds/package.py
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
# 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 Fds(MakefilePackage):
|
||||||
|
"""
|
||||||
|
Fire Dynamics Simulator (FDS) is a large-eddy simulation (LES) code for low-speed flows,
|
||||||
|
with an emphasis on smoke and heat transport from fires.
|
||||||
|
FDS and Smokeview are free and open-source software tools provided by the National Institute
|
||||||
|
of Standards and Technology (NIST) of the United States Department of Commerce. Pursuant
|
||||||
|
to Title 17, Section 105 of the United States Code, this software is not subject to copyright
|
||||||
|
protection and is in the public domain. View the full disclaimer for NIST-developed software.
|
||||||
|
"""
|
||||||
|
|
||||||
|
maintainers("kjrstory")
|
||||||
|
homepage = "https://pages.nist.gov/fds-smv"
|
||||||
|
url = "https://github.com/firemodels/fds/archive/refs/tags/FDS-6.8.0.tar.gz"
|
||||||
|
git = "https://github.com/firemodels/fds.git"
|
||||||
|
|
||||||
|
version("6.8.0", commit="886e0096535519b7358a3c4393c91da3caee5072")
|
||||||
|
|
||||||
|
depends_on("mpi")
|
||||||
|
depends_on("mkl")
|
||||||
|
|
||||||
|
build_directory = "Build"
|
||||||
|
|
||||||
|
requires(
|
||||||
|
"%gcc",
|
||||||
|
"%intel",
|
||||||
|
"%oneapi",
|
||||||
|
policy="one_of",
|
||||||
|
msg="FDS builds only with GNU Fortran or Intel Fortran",
|
||||||
|
)
|
||||||
|
|
||||||
|
requires(
|
||||||
|
"^intel-mkl",
|
||||||
|
"^intel-oneapi-mkl",
|
||||||
|
policy="one_of",
|
||||||
|
msg="FDS builds require either Intel MKL or Intel oneAPI MKL library",
|
||||||
|
)
|
||||||
|
|
||||||
|
requires(
|
||||||
|
"^openmpi",
|
||||||
|
when="%gcc platform=linux",
|
||||||
|
msg="OpenMPI can only be used with GNU Fortran on Linux platform",
|
||||||
|
)
|
||||||
|
|
||||||
|
requires(
|
||||||
|
"^intel-mpi^intel-mkl",
|
||||||
|
when="%intel platform=linux",
|
||||||
|
msg="Intel MPI and Intel MKL can only be used with Intel Fortran on Linux platform",
|
||||||
|
)
|
||||||
|
|
||||||
|
requires(
|
||||||
|
"^intel-oneapi-mpi^intel-oneapi-mkl",
|
||||||
|
when="%oneapi platform=linux",
|
||||||
|
msg="Intel oneAPI MPI and MKL can only be used with oneAPI Fortran on Linux platform",
|
||||||
|
)
|
||||||
|
|
||||||
|
requires(
|
||||||
|
"^openmpi%intel",
|
||||||
|
when="platform=darwin",
|
||||||
|
msg="OpenMPI can only be used with Intel Fortran on macOS",
|
||||||
|
)
|
||||||
|
|
||||||
|
def edit(self, spec, prefix):
|
||||||
|
env["MKL_ROOT"] = self.spec["mkl"].prefix
|
||||||
|
if spec.compiler.name == "oneapi":
|
||||||
|
env["INTEL_IFORT"] = "ifx"
|
||||||
|
makefile = FileFilter("Build/makefile")
|
||||||
|
makefile.filter(r"\.\./Scripts", "./Scripts")
|
||||||
|
makefile.filter(r"\.\.\\Scripts", ".\\Scripts")
|
||||||
|
|
||||||
|
@property
|
||||||
|
def build_targets(self):
|
||||||
|
spec = self.spec
|
||||||
|
mpi_mapping = {"openmpi": "ompi", "intel-oneapi-mpi": "impi", "intel-mpi": "impi"}
|
||||||
|
compiler_mapping = {"gcc": "gnu", "oneapi": "intel", "intel": "intel"}
|
||||||
|
platform_mapping = {"linux": "linux", "darwin": "osx"}
|
||||||
|
mpi_prefix = mpi_mapping[spec["mpi"].name]
|
||||||
|
compiler_prefix = compiler_mapping[spec.compiler.name]
|
||||||
|
platform_prefix = platform_mapping[spec.architecture.platform]
|
||||||
|
return ["{}_{}_{}".format(mpi_prefix, compiler_prefix, platform_prefix)]
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
mkdirp(prefix.bin)
|
||||||
|
with working_dir(self.build_directory):
|
||||||
|
install("*.mod", prefix.bin)
|
||||||
|
install("*.o", prefix.bin)
|
||||||
|
install("fds_" + self.build_targets[0], prefix.bin + "/fds")
|
Loading…
Reference in New Issue
Block a user