mirror of
https://github.com/cp2k/cp2k.git
synced 2026-07-21 14:35:15 -04:00
Diagonalization: add opt-in direct generalized eigensolvers (#5108)
Co-authored-by: DCM-Uni-Paderborn <DCM-Uni-Paderborn@users.noreply.github.com> Co-authored-by: Thomas D. Kuehne <tkuehne@cp2k.org>
This commit is contained in:
parent
4a77a3b84e
commit
c7270bbdb5
34 changed files with 1667 additions and 85 deletions
|
|
@ -5,8 +5,9 @@
|
|||
#! SPDX-License-Identifier: GPL-2.0-or-later !
|
||||
#!-------------------------------------------------------------------------------------------------!
|
||||
|
||||
set(CP2K_C_COMPILER_LIST "GNU;Intel;IntelLLVM;NAG;Cray;PGI;Clang;AppleClang")
|
||||
set(CP2K_Fortran_COMPILER_LIST "GNU;Intel;IntelLLVM;NAG;Cray;PGI")
|
||||
set(CP2K_C_COMPILER_LIST
|
||||
"GNU;Intel;IntelLLVM;NAG;Cray;PGI;NVHPC;Clang;AppleClang")
|
||||
set(CP2K_Fortran_COMPILER_LIST "GNU;Intel;IntelLLVM;NAG;Cray;PGI;NVHPC")
|
||||
|
||||
if(NOT CMAKE_C_COMPILER_ID IN_LIST CP2K_C_COMPILER_LIST)
|
||||
message(
|
||||
|
|
@ -157,7 +158,7 @@ add_compile_options(
|
|||
|
||||
# Baseline
|
||||
add_compile_options(
|
||||
"$<$<COMPILE_LANG_AND_ID:Fortran,PGI>:-Mfreeform;-Mextend;-Mallocatable=03>"
|
||||
"$<$<COMPILE_LANG_AND_ID:Fortran,PGI,NVHPC>:-Mfreeform;-Mextend;-Mallocatable=03>"
|
||||
"$<$<COMPILE_LANG_AND_ID:Fortran,NAG>:-f2008;-free;-Warn=reallocation;-Warn=subnormal>"
|
||||
"$<$<COMPILE_LANG_AND_ID:Fortran,Cray>:-f;free;-M3105;-ME7212;-hnoacc;-M1234>"
|
||||
)
|
||||
|
|
@ -166,11 +167,11 @@ add_compile_options(
|
|||
|
||||
# Release
|
||||
add_compile_options(
|
||||
"$<$<AND:$<CONFIG:RELEASE>,$<COMPILE_LANG_AND_ID:Fortran,PGI>>:-fast>"
|
||||
"$<$<AND:$<CONFIG:RELEASE>,$<COMPILE_LANG_AND_ID:Fortran,PGI,NVHPC>>:-fast>"
|
||||
"$<$<AND:$<CONFIG:RELEASE>,$<COMPILE_LANG_AND_ID:Fortran,Cray>>:-O2;-G2>"
|
||||
"$<$<AND:$<CONFIG:RELEASE>,$<COMPILE_LANG_AND_ID:Fortran,NAG>>:-gline>")
|
||||
add_compile_options(
|
||||
"$<$<AND:$<CONFIG:RELEASE>,$<COMPILE_LANG_AND_ID:C,PGI>>:-fast>"
|
||||
"$<$<AND:$<CONFIG:RELEASE>,$<COMPILE_LANG_AND_ID:C,PGI,NVHPC>>:-fast>"
|
||||
"$<$<AND:$<CONFIG:RELEASE>,$<COMPILE_LANG_AND_ID:C,Intel>>:-O3;-g>"
|
||||
"$<$<AND:$<CONFIG:RELEASE>,$<COMPILE_LANG_AND_ID:C,Cray>>:-O3>"
|
||||
"$<$<AND:$<CONFIG:RELEASE>,$<COMPILE_LANG_AND_ID:C,NAG>>:-gline>"
|
||||
|
|
@ -181,10 +182,10 @@ add_compile_options(
|
|||
|
||||
# Debug
|
||||
add_compile_options(
|
||||
"$<$<AND:$<CONFIG:DEBUG>,$<COMPILE_LANG_AND_ID:Fortran,PGI>>:-g>"
|
||||
"$<$<AND:$<CONFIG:DEBUG>,$<COMPILE_LANG_AND_ID:Fortran,PGI,NVHPC>>:-g>"
|
||||
"$<$<AND:$<CONFIG:DEBUG>,$<COMPILE_LANG_AND_ID:Fortran,Cray>>:-G2>")
|
||||
add_compile_options(
|
||||
"$<$<AND:$<CONFIG:DEBUG>,$<COMPILE_LANG_AND_ID:C,PGI>>:-fast>"
|
||||
"$<$<AND:$<CONFIG:DEBUG>,$<COMPILE_LANG_AND_ID:C,PGI,NVHPC>>:-fast>"
|
||||
"$<$<AND:$<CONFIG:DEBUG>,$<COMPILE_LANG_AND_ID:C,Intel>>:-O2;-g>"
|
||||
"$<$<AND:$<CONFIG:DEBUG>,$<COMPILE_LANG_AND_ID:C,Cray>>:-G2>"
|
||||
"$<$<AND:$<CONFIG:DEBUG>,$<COMPILE_LANG_AND_ID:C,NAG>>:-g;-C>"
|
||||
|
|
|
|||
|
|
@ -30,6 +30,41 @@ if(NOT CP2K_CONFIG_PACKAGE)
|
|||
CP2K_SCALAPACK_LINK_LIBRARIES cp2k::BLAS::SCI::scalapack_link
|
||||
INTERFACE_LINK_LIBRARIES)
|
||||
set(CP2K_SCALAPACK_FOUND yes)
|
||||
elseif(CP2K_SCALAPACK_VENDOR MATCHES "NVPL")
|
||||
if(CP2K_BLAS_INTERFACE MATCHES "64bits")
|
||||
set(_nvpl_int_type "ilp64")
|
||||
else()
|
||||
set(_nvpl_int_type "lp64")
|
||||
endif()
|
||||
|
||||
set(_nvpl_mpi_type "${CP2K_NVPL_SCALAPACK_MPI}")
|
||||
if(_nvpl_mpi_type STREQUAL "auto")
|
||||
if(MPI_Fortran_LIBRARY_VERSION_STRING MATCHES "Open MPI[^0-9]*([0-9]+)")
|
||||
set(_nvpl_mpi_type "openmpi${CMAKE_MATCH_1}")
|
||||
elseif(MPI_Fortran_LIBRARY_VERSION_STRING MATCHES "MPICH|HYDRA")
|
||||
set(_nvpl_mpi_type "mpich")
|
||||
else()
|
||||
message(
|
||||
FATAL_ERROR
|
||||
"Could not determine the NVPL BLACS MPI interface. Set "
|
||||
"CP2K_NVPL_SCALAPACK_MPI to mpich, openmpi3, openmpi4, or openmpi5."
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
find_package(nvpl REQUIRED COMPONENTS scalapack)
|
||||
set(_nvpl_scalapack_target "nvpl::scalapack_${_nvpl_int_type}")
|
||||
set(_nvpl_blacs_target "nvpl::blacs_${_nvpl_int_type}_${_nvpl_mpi_type}")
|
||||
if(NOT TARGET "${_nvpl_scalapack_target}")
|
||||
message(
|
||||
FATAL_ERROR "NVPL ScaLAPACK target ${_nvpl_scalapack_target} not found")
|
||||
endif()
|
||||
if(NOT TARGET "${_nvpl_blacs_target}")
|
||||
message(FATAL_ERROR "NVPL BLACS target ${_nvpl_blacs_target} not found")
|
||||
endif()
|
||||
set(CP2K_SCALAPACK_LINK_LIBRARIES
|
||||
"${_nvpl_scalapack_target};${_nvpl_blacs_target}")
|
||||
set(CP2K_SCALAPACK_FOUND yes)
|
||||
else() # if(CP2K_SCALAPACK_VENDOR MATCHES "GENERIC|auto")
|
||||
if(TARGET cp2k::BLAS::MKL::scalapack_link)
|
||||
message(
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ include(FindPackageHandleStandardArgs)
|
|||
include(cp2k_utils)
|
||||
|
||||
cp2k_set_default_paths(UCC "ucc")
|
||||
cp2k_set_default_paths(UCX "ucx")
|
||||
|
||||
cp2k_find_libraries(UCC "ucc")
|
||||
cp2k_find_libraries(UCX "ucs")
|
||||
|
|
|
|||
|
|
@ -13,8 +13,12 @@ function(cp2k_set_default_paths _varname _package_name)
|
|||
# find_library should work when ${PACKAGE_ROOT} is given to cmake
|
||||
# (-DPACKAGE_ROOT=bla) but I use only one variable syntax CP2K_PACKAGE_PREFIX
|
||||
set(CP2K_${_varname}_PREFIX_TMP "")
|
||||
if(DEFINED ${_package_name}_ROOT)
|
||||
set(CP2K_${_varname}_PREFIX_TMP "${${_varname}_ROOT}")
|
||||
set(_cp2k_root_var "CP2K_${_varname}_ROOT")
|
||||
set(_package_root_var "${_package_name}_ROOT")
|
||||
if(DEFINED ${_cp2k_root_var})
|
||||
set(CP2K_${_varname}_PREFIX_TMP "${${_cp2k_root_var}}")
|
||||
elseif(DEFINED ${_package_root_var})
|
||||
set(CP2K_${_varname}_PREFIX_TMP "${${_package_root_var}}")
|
||||
endif()
|
||||
|
||||
# search common environment variables names
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue