VASP package: Zen4 Support (#36800)
* zen4 support for vasp * encourage openmp support in fftw/blas when +openmp * enable gamma and non-collinear builds
This commit is contained in:
parent
590d3ba6cf
commit
77817a0f05
@ -21,6 +21,7 @@ class Vasp(MakefilePackage):
|
|||||||
manual_download = True
|
manual_download = True
|
||||||
|
|
||||||
version("6.3.2", sha256="f7595221b0f9236a324ea8afe170637a578cdd5a837cc7679e7f7812f6edf25a")
|
version("6.3.2", sha256="f7595221b0f9236a324ea8afe170637a578cdd5a837cc7679e7f7812f6edf25a")
|
||||||
|
version("6.3.0", sha256="adcf83bdfd98061016baae31616b54329563aa2739573f069dd9df19c2071ad3")
|
||||||
version("6.2.0", sha256="49e7ba351bd634bc5f5f67a8ef1e38e64e772857a1c02f602828898a84197e25")
|
version("6.2.0", sha256="49e7ba351bd634bc5f5f67a8ef1e38e64e772857a1c02f602828898a84197e25")
|
||||||
version("6.1.1", sha256="e37a4dfad09d3ad0410833bcd55af6b599179a085299026992c2d8e319bf6927")
|
version("6.1.1", sha256="e37a4dfad09d3ad0410833bcd55af6b599179a085299026992c2d8e319bf6927")
|
||||||
version("5.4.4.pl2", sha256="98f75fd75399a23d76d060a6155f4416b340a1704f256a00146f89024035bc8e")
|
version("5.4.4.pl2", sha256="98f75fd75399a23d76d060a6155f4416b340a1704f256a00146f89024035bc8e")
|
||||||
@ -34,10 +35,21 @@ class Vasp(MakefilePackage):
|
|||||||
)
|
)
|
||||||
|
|
||||||
variant("openmp", default=False, description="Enable openmp build")
|
variant("openmp", default=False, description="Enable openmp build")
|
||||||
|
with when("+openmp"):
|
||||||
|
conflicts("^fftw~openmp")
|
||||||
|
conflicts("^amdfftw~openmp")
|
||||||
|
conflicts("^amdblis threads=none")
|
||||||
|
conflicts("^amdblis threads=pthreads")
|
||||||
|
conflicts("^openblas threads=none")
|
||||||
|
conflicts("^openblas threads=pthreads")
|
||||||
|
|
||||||
variant("scalapack", default=False, description="Enables build with SCALAPACK")
|
variant("scalapack", default=False, description="Enables build with SCALAPACK")
|
||||||
|
|
||||||
variant("cuda", default=False, description="Enables running on Nvidia GPUs")
|
variant("cuda", default=False, description="Enables running on Nvidia GPUs")
|
||||||
|
variant("fftlib", default=False, description="Enables fftlib build")
|
||||||
|
with when("+fftlib"):
|
||||||
|
conflicts("@:6.1.1", msg="fftlib support started from 6.2.0")
|
||||||
|
conflicts("~openmp", msg="fftlib is intended to be used with openmp")
|
||||||
|
|
||||||
variant(
|
variant(
|
||||||
"vaspsol",
|
"vaspsol",
|
||||||
@ -45,7 +57,6 @@ class Vasp(MakefilePackage):
|
|||||||
description="Enable VASPsol implicit solvation model\n"
|
description="Enable VASPsol implicit solvation model\n"
|
||||||
"https://github.com/henniggroup/VASPsol",
|
"https://github.com/henniggroup/VASPsol",
|
||||||
)
|
)
|
||||||
|
|
||||||
variant("shmem", default=True, description="Enable use_shmem build flag")
|
variant("shmem", default=True, description="Enable use_shmem build flag")
|
||||||
|
|
||||||
depends_on("rsync", type="build")
|
depends_on("rsync", type="build")
|
||||||
@ -83,28 +94,61 @@ def edit(self, spec, prefix):
|
|||||||
filter_file("/opt/pgi/qd-2.3.17/install/lib", spec["qd"].prefix.lib, make_include)
|
filter_file("/opt/pgi/qd-2.3.17/install/lib", spec["qd"].prefix.lib, make_include)
|
||||||
elif "%aocc" in spec:
|
elif "%aocc" in spec:
|
||||||
if "+openmp" in spec:
|
if "+openmp" in spec:
|
||||||
|
if "@6.3.0" in spec:
|
||||||
|
copy(
|
||||||
|
join_path("arch", "makefile.include.gnu_ompi_aocl_omp"),
|
||||||
|
join_path("arch", "makefile.include.linux_aocc_omp"),
|
||||||
|
)
|
||||||
|
make_include = join_path("arch", "makefile.include.linux_aocc_omp")
|
||||||
|
|
||||||
|
elif "@6.3.2:" in spec:
|
||||||
|
make_include = join_path("arch", "makefile.include.aocc_ompi_aocl_omp")
|
||||||
|
else:
|
||||||
copy(
|
copy(
|
||||||
join_path("arch", "makefile.include.linux_gnu_omp"),
|
join_path("arch", "makefile.include.linux_gnu_omp"),
|
||||||
join_path("arch", "makefile.include.linux_aocc_omp"),
|
join_path("arch", "makefile.include.linux_aocc_omp"),
|
||||||
)
|
)
|
||||||
make_include = join_path("arch", "makefile.include.linux_aocc_omp")
|
make_include = join_path("arch", "makefile.include.linux_aocc_omp")
|
||||||
|
else:
|
||||||
|
if "@6.3.0:" in spec:
|
||||||
|
copy(
|
||||||
|
join_path("arch", "makefile.include.gnu_ompi_aocl"),
|
||||||
|
join_path("arch", "makefile.include.linux_aocc"),
|
||||||
|
)
|
||||||
|
make_include = join_path("arch", "makefile.include.linux_aocc")
|
||||||
|
if "@6.3.2:" in spec:
|
||||||
|
make_include = join_path("arch", "makefile.include.aocc_ompi_aocl")
|
||||||
else:
|
else:
|
||||||
copy(
|
copy(
|
||||||
join_path("arch", "makefile.include.linux_gnu"),
|
join_path("arch", "makefile.include.linux_gnu"),
|
||||||
join_path("arch", "makefile.include.linux_aocc"),
|
join_path("arch", "makefile.include.linux_aocc"),
|
||||||
)
|
)
|
||||||
make_include = join_path("arch", "makefile.include.linux_aocc")
|
make_include = join_path("arch", "makefile.include.linux_aocc_omp")
|
||||||
filter_file("gcc", "{0} {1}".format(spack_cc, "-Mfree"), make_include, string=True)
|
filter_file("^CC_LIB[ ]{0,}=.*$", "CC_LIB={0}".format(spack_cc), make_include)
|
||||||
|
if "@6.3.0:" in spec:
|
||||||
|
filter_file("gcc", "{0} {1}".format(spack_fc, "-Mfree"), make_include, string=True)
|
||||||
|
else:
|
||||||
|
filter_file("gcc", "{0}".format(spack_fc), make_include, string=True)
|
||||||
filter_file("g++", spack_cxx, make_include, string=True)
|
filter_file("g++", spack_cxx, make_include, string=True)
|
||||||
|
|
||||||
filter_file("^CFLAGS_LIB[ ]{0,}=.*$", "CFLAGS_LIB = -O3", make_include)
|
filter_file("^CFLAGS_LIB[ ]{0,}=.*$", "CFLAGS_LIB = -O3", make_include)
|
||||||
filter_file("^FFLAGS_LIB[ ]{0,}=.*$", "FFLAGS_LIB = -O2", make_include)
|
filter_file("^FFLAGS_LIB[ ]{0,}=.*$", "FFLAGS_LIB = -O3", make_include)
|
||||||
filter_file("^OFLAG[ ]{0,}=.*$", "OFLAG = -O3", make_include)
|
filter_file("^OFLAG[ ]{0,}=.*$", "OFLAG = -O3", make_include)
|
||||||
filter_file(
|
filter_file(
|
||||||
"^FC[ ]{0,}=.*$", "FC = {0}".format(spec["mpi"].mpifc), make_include, string=True
|
"^FC[ ]{0,}=.*$", "FC = {0}".format(spec["mpi"].mpifc), make_include, string=True
|
||||||
)
|
)
|
||||||
filter_file(
|
filter_file(
|
||||||
"^FCL[ ]{0,}=.*$", "FCL = {0}".format(spec["mpi"].mpifc), make_include, string=True
|
"^FCL[ ]{0,}=.*$",
|
||||||
|
'"FCL = {0}".format(spec["mpi"].mpifc)',
|
||||||
|
make_include,
|
||||||
|
string=True,
|
||||||
)
|
)
|
||||||
|
filter_file(
|
||||||
|
"-fallow-argument-mismatch", " -fno-fortran-main", make_include, string=True
|
||||||
|
)
|
||||||
|
|
||||||
|
filter_file("^OBJECTS_LIB[ ]{0,}=.*$", "OBJECTS_LIB ?=", make_include)
|
||||||
|
filter_file("-march=native", " ", make_include)
|
||||||
else:
|
else:
|
||||||
if "+openmp" in spec:
|
if "+openmp" in spec:
|
||||||
make_include = join_path(
|
make_include = join_path(
|
||||||
@ -139,6 +183,14 @@ def edit(self, spec, prefix):
|
|||||||
|
|
||||||
filter_file("^CFLAGS[ ]{0,}=.*$", "CFLAGS ?=", "makefile.include")
|
filter_file("^CFLAGS[ ]{0,}=.*$", "CFLAGS ?=", "makefile.include")
|
||||||
|
|
||||||
|
if "+fftlib" in spec:
|
||||||
|
filter_file("^#FCL[ ]{0,}=fftlib.o", "FCL += fftlib/fftlib.o", "makefile.include")
|
||||||
|
filter_file("^#CXX_FFTLIB", "CXX_FFTLIB", "makefile.include")
|
||||||
|
filter_file("^#INCS_FFTLIB", "INCS_FFTLIB", "makefile.include")
|
||||||
|
filter_file("^#LIBS", "LIBS", "makefile.include")
|
||||||
|
filter_file(
|
||||||
|
"LIBS[ ]{0,}=.*$", "LIBS=-lstdc++ fftlib/fftlib.o -ldl", "makefile.include"
|
||||||
|
)
|
||||||
if "+vaspsol" in spec:
|
if "+vaspsol" in spec:
|
||||||
copy("VASPsol/src/solvation.F", "src/")
|
copy("VASPsol/src/solvation.F", "src/")
|
||||||
|
|
||||||
@ -160,9 +212,20 @@ def setup_build_environment(self, spack_env):
|
|||||||
if "%nvhpc" in self.spec:
|
if "%nvhpc" in self.spec:
|
||||||
cpp_options.extend(['-DHOST=\\"LinuxPGI\\"', "-DPGI16", "-Dqd_emulate"])
|
cpp_options.extend(['-DHOST=\\"LinuxPGI\\"', "-DPGI16", "-Dqd_emulate"])
|
||||||
elif "%aocc" in self.spec:
|
elif "%aocc" in self.spec:
|
||||||
cpp_options.extend(['-DHOST=\\"LinuxGNU\\"', "-Dfock_dblbuf"])
|
cpp_options.extend(
|
||||||
|
[
|
||||||
|
'-DHOST=\\"LinuxAMD\\"',
|
||||||
|
"-Dfock_dblbuf",
|
||||||
|
"-Dsysv",
|
||||||
|
"-Dshmem_bcast_buffer",
|
||||||
|
"-DNGZhalf",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
if "@6.3.0:" and "^amdfftw@4.0:" in self.spec:
|
||||||
|
cpp_options.extend(["-Dfftw_cache_plans", "-Duse_fftw_plan_effort"])
|
||||||
if "+openmp" in self.spec:
|
if "+openmp" in self.spec:
|
||||||
cpp_options.extend(["-D_OPENMP"])
|
cpp_options.extend(["-D_OPENMP"])
|
||||||
|
cpp_options.extend(["-Mfree "])
|
||||||
else:
|
else:
|
||||||
cpp_options.append('-DHOST=\\"LinuxGNU\\"')
|
cpp_options.append('-DHOST=\\"LinuxGNU\\"')
|
||||||
|
|
||||||
@ -176,11 +239,16 @@ def setup_build_environment(self, spack_env):
|
|||||||
elif "%nvhpc" in spec:
|
elif "%nvhpc" in spec:
|
||||||
fflags.extend(["-Mnoupcase", "-Mbackslash", "-Mlarge_arrays"])
|
fflags.extend(["-Mnoupcase", "-Mbackslash", "-Mlarge_arrays"])
|
||||||
elif "%aocc" in spec:
|
elif "%aocc" in spec:
|
||||||
fflags.extend(["-fno-fortran-main", "-Mbackslash", "-ffast-math"])
|
fflags.extend(["-fno-fortran-main", "-Mbackslash"])
|
||||||
|
objects_lib = ["linpack_double.o", "getshmem.o"]
|
||||||
|
spack_env.set("OBJECTS_LIB", " ".join(objects_lib))
|
||||||
|
|
||||||
spack_env.set("BLAS", spec["blas"].libs.ld_flags)
|
spack_env.set("BLAS", spec["blas"].libs.ld_flags)
|
||||||
spack_env.set("LAPACK", spec["lapack"].libs.ld_flags)
|
spack_env.set("LAPACK", spec["lapack"].libs.ld_flags)
|
||||||
spack_env.set("FFTW", spec["fftw-api"].prefix)
|
if "^amdfftw" in spec:
|
||||||
|
spack_env.set("AMDFFTW_ROOT", spec["fftw-api"].prefix)
|
||||||
|
else:
|
||||||
|
spack_env.set("FFTW", spec["fftw-api"].libs.ld_flags)
|
||||||
spack_env.set("MPI_INC", spec["mpi"].prefix.include)
|
spack_env.set("MPI_INC", spec["mpi"].prefix.include)
|
||||||
|
|
||||||
if "%nvhpc" in spec:
|
if "%nvhpc" in spec:
|
||||||
@ -217,6 +285,8 @@ def setup_build_environment(self, spack_env):
|
|||||||
|
|
||||||
if spec.satisfies("%gcc@10:"):
|
if spec.satisfies("%gcc@10:"):
|
||||||
fflags.append("-fallow-argument-mismatch")
|
fflags.append("-fallow-argument-mismatch")
|
||||||
|
if spec.satisfies("%aocc"):
|
||||||
|
fflags.append("-fno-fortran-main -Mbackslash -ffunc-args-alias")
|
||||||
|
|
||||||
# Finally
|
# Finally
|
||||||
spack_env.set("CPP_OPTIONS", " ".join(cpp_options))
|
spack_env.set("CPP_OPTIONS", " ".join(cpp_options))
|
||||||
|
Loading…
Reference in New Issue
Block a user