summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/nwchem/package.py
diff options
context:
space:
mode:
Diffstat (limited to 'var/spack/repos/builtin/packages/nwchem/package.py')
-rw-r--r--var/spack/repos/builtin/packages/nwchem/package.py96
1 files changed, 86 insertions, 10 deletions
diff --git a/var/spack/repos/builtin/packages/nwchem/package.py b/var/spack/repos/builtin/packages/nwchem/package.py
index 9be28311fe..b7d075b8c5 100644
--- a/var/spack/repos/builtin/packages/nwchem/package.py
+++ b/var/spack/repos/builtin/packages/nwchem/package.py
@@ -17,6 +17,19 @@ class Nwchem(Package):
tags = ["ecp", "ecp-apps"]
+ maintainers("jeffhammond")
+
+ version(
+ "7.2.3",
+ sha256="8cb4ec065215bc0316d8e01f67f1674a572f7d0f565c52e4a327975c04ddb6eb",
+ url="https://github.com/nwchemgit/nwchem/releases/download/v7.2.3-release/nwchem-7.2.3-release.revision-d690e065-srconly.2024-08-27.tar.bz2",
+ )
+
+ version(
+ "7.2.2",
+ sha256="6b68e9c12eec38c09d92472bdd1ff130b93c1b5e1f65e4702aa7ee36c80e4af7",
+ url="https://github.com/nwchemgit/nwchem/releases/download/v7.2.2-release/nwchem-7.2.2-release.revision-74936fb9-srconly.2023-11-03.tar.bz2",
+ )
version(
"7.2.0",
sha256="28ea70947e77886337c84e6fae3bdf88f25f0acfdeaf95e722615779c19f7a7e",
@@ -28,8 +41,29 @@ class Nwchem(Package):
url="https://github.com/nwchemgit/nwchem/releases/download/v7.0.2-release/nwchem-7.0.2-release.revision-b9985dfa-srconly.2020-10-12.tar.bz2",
)
+ resource(
+ name="dftd3.tgz",
+ url="https://www.chemie.uni-bonn.de/grimme/de/software/dft-d3/dftd3.tgz",
+ destination="",
+ placement="dft-d3",
+ sha256="d97cf9758f61aa81fd85425448fbf4a6e8ce07c12e9236739831a3af32880f59",
+ expand=False,
+ )
+
variant("openmp", default=False, description="Enables OpenMP support")
- variant("mpipr", default=False, description="Enables ARMCI with progress rank")
+ variant("f90allocatable", default=False, description="Use F90 allocatable instead of MA")
+ variant(
+ "armci",
+ values=("mpi-ts", "mpi-pr", "armcimpi", "mpi3", "openib", "ofi"),
+ default="mpi-ts",
+ description="ARMCI runtime",
+ )
+ variant(
+ "extratce",
+ default=False,
+ description="Enables rarely-used TCE features (CCSDTQ, CCSDTLR, EACCSD, IPCCSD, MRCC)",
+ )
+ variant("tcecuda", default=False, description="Enable TCE CCSD(T) CUDA support")
variant("fftw3", default=False, description="Link against the FFTW library")
variant("libxc", default=False, description="Support additional functionals via libxc")
variant(
@@ -50,19 +84,35 @@ class Nwchem(Package):
# https://github.com/nwchemgit/nwchem/commit/376f86f96eb982e83f10514e9dcd994564f973b4
# https://github.com/nwchemgit/nwchem/commit/c89fc9d1eca6689bce12564a63fdea95d962a123
# Prior versions of NWChem, including 7.0.2, were not able to link with FFTW
- patch("fftw_splans.patch", when="@7.2.0 +fftw3")
+ patch("fftw_splans.patch", when="@7.2.0:7.2.3 +fftw3")
+
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+ depends_on("fortran", type="build")
depends_on("blas")
depends_on("lapack")
depends_on("mpi")
+ depends_on("cuda", when="+tcecuda")
+ depends_on("armcimpi", when="armci=armcimpi")
+ depends_on("libfabric", when="armci=ofi")
+ depends_on("rdma-core", when="armci=openib")
depends_on("scalapack")
depends_on("fftw-api@3", when="+fftw3")
depends_on("libxc", when="+libxc")
depends_on("elpa", when="+elpa")
- depends_on("python@3:3.9", type=("build", "link", "run"), when="@:7.0.2")
+ depends_on("python@:3.9", type=("build", "link", "run"), when="@:7.0.2")
depends_on("python@3", type=("build", "link", "run"), when="@7.2.0:")
+ depends_on("gmake", type="build")
+ # for the dftd3 resource (bash is also required, not listed here)
+ depends_on("tar", type="build")
+ depends_on("patch", type="build")
+
def install(self, spec, prefix):
+ # move the dft-d3/dftd3.tgz resource
+ os.rename("dft-d3/dftd3.tgz", "src/nwpw/nwpwlib/nwpwxc/dftd3.tgz")
+
scalapack = spec["scalapack"].libs
lapack = spec["lapack"].libs
blas = spec["blas"].libs
@@ -83,10 +133,6 @@ class Nwchem(Package):
f"LAPACK_LIB={lapack.ld_flags}",
f"SCALAPACK_LIB={scalapack.ld_flags}",
"USE_NOIO=Y", # skip I/O algorithms
- "MRCC_METHODS=y", # TCE extra module
- "IPCCSD=y", # TCE extra module
- "EACCSD=y", # TCE extra module
- "CCSDTQ=y", # TCE extra module
"V=1", # verbose build
]
)
@@ -116,11 +162,41 @@ class Nwchem(Package):
args.extend([f"NWCHEM_TARGET={target}"])
+ # These optional components of TCE are rarely used and in some cases
+ # increase the compilation time significantly (CCSDTLR and CCSDTQ).
+ if spec.satisfies("+extratce"):
+ args.extend(["MRCC_METHODS=y"])
+ args.extend(["IPCCSD=y"])
+ args.extend(["EACCSD=y"])
+ args.extend(["CCSDTLR=y"])
+ args.extend(["CCSDTQ=y"])
+
+ if spec.satisfies("+tcecuda"):
+ args.extend(["TCE_CUDA=y"])
+ args.extend(["CUDA_INCLUDE=-I{0}".format(self.spec["cuda"].headers.directories[0])])
+ # args.extend(["CUDA_LIBS={0}".format(self.spec["cuda"].libs)])
+ args.extend(["CUDA_LIBS=-L{0} -lcudart".format(self.spec["cuda"].libs.directories[0])])
+
if spec.satisfies("+openmp"):
args.extend(["USE_OPENMP=y"])
- if spec.satisfies("+mpipr"):
+ if spec.satisfies("+f90allocatable"):
+ args.extend(["USE_F90_ALLOCATABLE=1"])
+
+ if self.spec.variants["armci"].value == "armcimpi":
+ armcimpi = spec["armci"]
+ args.extend(["ARMCI_NETWORK=ARMCI"])
+ args.extend([f"EXTERNAL_ARMCI_PATH={armcimpi.prefix}"])
+ elif self.spec.variants["armci"].value == "mpi-pr":
args.extend(["ARMCI_NETWORK=MPI-PR"])
+ elif self.spec.variants["armci"].value == "mpi-ts":
+ args.extend(["ARMCI_NETWORK=MPI-TS"])
+ elif self.spec.variants["armci"].value == "mpi3":
+ args.extend(["ARMCI_NETWORK=MPI3"])
+ elif self.spec.variants["armci"].value == "openib":
+ args.extend(["ARMCI_NETWORK=OPENIB"])
+ elif self.spec.variants["armci"].value == "ofi":
+ args.extend(["ARMCI_NETWORK=OFI"])
if spec.satisfies("+fftw3"):
args.extend(["USE_FFTW3=y"])
@@ -128,8 +204,8 @@ class Nwchem(Package):
args.extend(["FFTW3_INCLUDE={0}".format(spec["fftw-api"].prefix.include)])
if spec.satisfies("+libxc"):
- args.extend([f"LIBXC_LIB={0}".format(spec["libxc"].libs.ld_flags)])
- args.extend([f"LIBXC_INCLUDE={0}".format(spec["libxc"].prefix.include)])
+ args.extend(["LIBXC_LIB={0}".format(spec["libxc"].libs.ld_flags)])
+ args.extend(["LIBXC_INCLUDE={0}".format(spec["libxc"].prefix.include)])
if spec.satisfies("+elpa"):
elpa = spec["elpa"]