LCOV - code coverage report
Current view: top level - src - cp2k_info.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:9ccafda) Lines: 76.9 % 91 70
Test Date: 2026-10-15 00:55:44 Functions: 75.0 % 4 3

            Line data    Source code
       1              : !--------------------------------------------------------------------------------------------------!
       2              : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3              : !   Copyright 2000-2026 CP2K developers group <https://cp2k.org>                                   !
       4              : !                                                                                                  !
       5              : !   SPDX-License-Identifier: GPL-2.0-or-later                                                      !
       6              : !--------------------------------------------------------------------------------------------------!
       7              : 
       8              : #ifdef __GAUXC
       9              : #include "gauxc/gauxc_config.f"
      10              : #endif
      11              : 
      12              : #include "cp2k_build_info.h"
      13              : 
      14              : ! **************************************************************************************************
      15              : !> \brief some minimal info about CP2K, including its version and license
      16              : !> \par History
      17              : !>      - created (2007-09, Joost VandeVondele)
      18              : !>      - moved into this module information related to runtime:pid, user_name,
      19              : !>        host_name, cwd, timestamp (2009-06, Teodoro Laino, 2025-08 MK)
      20              : !> \author Joost VandeVondele
      21              : ! **************************************************************************************************
      22              : MODULE cp2k_info
      23              : 
      24              :    USE iso_fortran_env,                 ONLY: compiler_options,&
      25              :                                               compiler_version
      26              :    USE kinds,                           ONLY: default_path_length,&
      27              :                                               default_string_length
      28              :    USE machine,                         ONLY: m_getcwd,&
      29              :                                               m_getlog,&
      30              :                                               m_getpid,&
      31              :                                               m_hostnm,&
      32              :                                               m_timestamp,&
      33              :                                               timestamp_length
      34              :    USE string_utilities,                ONLY: integer_to_string
      35              : 
      36              :    IMPLICIT NONE
      37              :    PRIVATE
      38              : 
      39              :    PUBLIC :: cp2k_version, cp2k_year, cp2k_home, cp2k_flags
      40              :    PUBLIC :: compile_arch, compile_date, compile_host, compile_revision, compile_with
      41              :    PUBLIC :: print_cp2k_license, get_runtime_info, write_restart_header
      42              : 
      43              : #if defined(__COMPILE_REVISION)
      44              :    CHARACTER(LEN=*), PARAMETER :: compile_revision = __COMPILE_REVISION
      45              : #else
      46              :    CHARACTER(LEN=*), PARAMETER :: compile_revision = "unknown"
      47              : #endif
      48              : 
      49              :    !!! Keep version in sync with CMakeLists.txt !!!
      50              :    CHARACTER(LEN=*), PARAMETER :: cp2k_version = "CP2K version 2026.2 (Development Version)"
      51              :    CHARACTER(LEN=*), PARAMETER :: cp2k_year = "2026"
      52              :    CHARACTER(LEN=*), PARAMETER :: cp2k_home = "https://www.cp2k.org/"
      53              : 
      54              :    ! compile time information
      55              :    CHARACTER(LEN=*), PARAMETER :: compile_with = compiler_version()
      56              : #if defined(__COMPILE_ARCH)
      57              :    CHARACTER(LEN=*), PARAMETER :: compile_arch = __COMPILE_ARCH
      58              : #else
      59              :    CHARACTER(LEN=*), PARAMETER :: compile_arch = "unknown: -D__COMPILE_ARCH=?"
      60              : #endif
      61              : 
      62              : #if defined(__COMPILE_DATE)
      63              :    CHARACTER(LEN=default_string_length), SAVE :: compile_date = __COMPILE_DATE
      64              : #else
      65              :    CHARACTER(LEN=default_string_length), SAVE :: compile_date = "unknown: -D__COMPILE_DATE=?"
      66              : #endif
      67              : 
      68              : #if defined(__COMPILE_HOST)
      69              :    CHARACTER(LEN=*), PARAMETER :: compile_host = __COMPILE_HOST
      70              : #else
      71              :    CHARACTER(LEN=*), PARAMETER :: compile_host = "unknown: -D__COMPILE_HOST=?"
      72              : #endif
      73              : 
      74              :    ! Local runtime informations
      75              :    CHARACTER(LEN=default_path_length), PUBLIC       :: r_cwd
      76              :    CHARACTER(LEN=default_string_length), PUBLIC     :: r_host_name, r_user_name
      77              :    CHARACTER(LEN=timestamp_length), PUBLIC          :: r_timestamp
      78              :    INTEGER, PUBLIC                                  :: r_pid
      79              : 
      80              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'cp2k_info'
      81              : CONTAINS
      82              : 
      83              : ! **************************************************************************************************
      84              : !> \brief list all compile time options that influence the capabilities of cp2k.
      85              : !>        All new flags should be added here (and be unique grep-able)
      86              : !> \return ...
      87              : ! **************************************************************************************************
      88         5965 :    FUNCTION cp2k_flags() RESULT(flags)
      89              :       CHARACTER(len=10*default_string_length)            :: flags
      90              : 
      91              :       CHARACTER(len=default_string_length)               :: tmp_str
      92              : 
      93         5965 :       flags = "cp2kflags:"
      94              : 
      95              :       ! Ensure that tmp_str is used to silence compiler warnings
      96         5965 :       tmp_str = ""
      97         5965 :       flags = TRIM(flags)//TRIM(tmp_str)
      98              : 
      99              :       IF (INDEX(COMPILER_OPTIONS(), "-fsanitize=leak") > 0) THEN
     100              :          flags = TRIM(flags)//" lsan"
     101              :       END IF
     102              : 
     103         5965 : !$    flags = TRIM(flags)//" omp"
     104              : 
     105              :       ! TODO: remove __INTEL_LLVM_COMPILER conditions (regtests)
     106              : #if defined(__INTEL_LLVM_COMPILER)
     107              :       flags = TRIM(flags)//" ifx"
     108              : #endif
     109              : #if defined(__LIBINT)
     110         5965 :       flags = TRIM(flags)//" libint"
     111              : #endif
     112              : #if defined(__FFTW3)
     113         5965 :       flags = TRIM(flags)//" fftw3"
     114              : #endif
     115              : #if defined(__LIBXC)
     116         5965 :       flags = TRIM(flags)//" libxc"
     117              : #endif
     118              : #if defined(__LIBXC) && !defined(__NO_OFFLOAD_LIBXC)
     119         5965 :       flags = TRIM(flags)//" libxc_gpu"
     120              : #endif
     121              : #if defined(__NO_OFFLOAD_LIBXC)
     122              :       flags = TRIM(flags)//" no_offload_libxc"
     123              : #endif
     124              : #if defined(__GAUXC)
     125         5965 :       flags = TRIM(flags)//" gauxc"
     126              : #endif
     127              : #if defined(GAUXC_HAS_MPI)
     128         5965 :       flags = TRIM(flags)//" gauxc_mpi"
     129              : #endif
     130              : #if defined(GAUXC_HAS_ONEDFT)
     131         5965 :       flags = TRIM(flags)//" gauxc_onedft"
     132              : #endif
     133              : #if defined(__GAUXC) && defined(__GAUXC_ONEDFT_GRADIENT_FIX)
     134         5965 :       flags = TRIM(flags)//" gauxc_onedft_gradients"
     135              : #endif
     136              : #if defined(GAUXC_HAS_HOST)
     137         5965 :       flags = TRIM(flags)//" gauxc_host"
     138              : #endif
     139              : #if defined(GAUXC_HAS_DEVICE)
     140              :       flags = TRIM(flags)//" gauxc_device"
     141              : #endif
     142              : #if defined(GAUXC_HAS_CUDA)
     143              :       flags = TRIM(flags)//" gauxc_cuda"
     144              : #endif
     145              : #if defined(GAUXC_HAS_CUTLASS)
     146              :       flags = TRIM(flags)//" gauxc_cutlass"
     147              : #endif
     148              : #if defined(GAUXC_HAS_HDF5)
     149              :       flags = TRIM(flags)//" gauxc_hdf5"
     150              : #endif
     151              : #if defined(__SKALA)
     152         5965 :       flags = TRIM(flags)//" skala"
     153              : #endif
     154              : #if defined(__PEXSI)
     155              :       flags = TRIM(flags)//" pexsi"
     156              : #endif
     157              : #if defined(__ELPA)
     158         5965 :       flags = TRIM(flags)//" elpa"
     159              : #endif
     160              : #if defined(__parallel)
     161              : #if defined(__SCALAPACK_NO_WA)
     162              :       flags = TRIM(flags)//" parallel scalapack"
     163              : #else
     164         5965 :       flags = TRIM(flags)//" parallel scalapack"
     165              : #endif
     166              : #endif
     167              : #if defined(__MPI_F08)
     168         5965 :       flags = TRIM(flags)//" mpi_f08"
     169              : #endif
     170              : #if defined(__COSMA)
     171         5965 :       flags = TRIM(flags)//" cosma"
     172              : #endif
     173              : #if defined(__ACE)
     174         5965 :       flags = TRIM(flags)//" ace"
     175              : #endif
     176              : #if defined(__DEEPMD)
     177         5965 :       flags = TRIM(flags)//" deepmd"
     178              : #endif
     179              : #if defined(__PW_FPGA)
     180              :       flags = TRIM(flags)//" pw_fpga"
     181              : #endif
     182              : #if defined(__PW_FPGA_SP)
     183              :       flags = TRIM(flags)//" pw_fpga_sp"
     184              : #endif
     185              : #if defined(__LIBXS)
     186         5965 :       flags = TRIM(flags)//" libxs"
     187              : #endif
     188              : #if defined(__LIBXSMM)
     189         5965 :       flags = TRIM(flags)//" libxsmm"
     190              : #endif
     191              : #if defined(__LIBXSTREAM)
     192              :       flags = TRIM(flags)//" libxstream"
     193              : #endif
     194              : #if defined(__CRAY_PM_ACCEL_ENERGY)
     195              :       flags = TRIM(flags)//" cray_pm_accel_energy"
     196              : #endif
     197              : #if defined(__CRAY_PM_ENERGY)
     198              :       flags = TRIM(flags)//" cray_pm_energy"
     199              : #endif
     200              : #if defined(__CRAY_PM_FAKE_ENERGY)
     201              :       flags = TRIM(flags)//" cray_pm_fake_energy"
     202              : #endif
     203              : #if defined(__DBCSR_ACC)
     204              :       flags = TRIM(flags)//" dbcsr_acc"
     205              : #endif
     206              : #if defined(__MAX_CONTR)
     207              :       CALL integer_to_string(__MAX_CONTR, tmp_str)
     208              :       flags = TRIM(flags)//" max_contr="//TRIM(tmp_str)
     209              : #endif
     210              : #if defined(__NO_SOCKETS)
     211              :       flags = TRIM(flags)//" no_sockets"
     212              : #endif
     213              : #if defined(__NO_STATM_ACCESS)
     214              :       flags = TRIM(flags)//" no_statm_access"
     215              : #endif
     216              : #if defined(__PW_CUDA_NO_HOSTALLOC)
     217              :       flags = TRIM(flags)//" pw_cuda_no_hostalloc"
     218              : #endif
     219              : #if defined(__STATM_RESIDENT)
     220              :       flags = TRIM(flags)//" statm_resident"
     221              : #endif
     222              : #if defined(__STATM_TOTAL)
     223              :       flags = TRIM(flags)//" statm_total"
     224              : #endif
     225              : #if defined(__PLUMED2)
     226         5965 :       flags = TRIM(flags)//" plumed2"
     227              : #endif
     228              : #if defined(__HAS_IEEE_EXCEPTIONS)
     229              :       flags = TRIM(flags)//" has_ieee_exceptions"
     230              : #endif
     231              : #if defined(__NO_ABORT)
     232         5965 :       flags = TRIM(flags)//" no_abort"
     233              : #endif
     234              : #if defined(__SPGLIB)
     235         5965 :       flags = TRIM(flags)//" spglib"
     236              : #endif
     237              : #if defined(__ACCELERATE)
     238              :       flags = TRIM(flags)//" accelerate"
     239              : #endif
     240              : #if defined(__MKL)
     241              :       flags = TRIM(flags)//" mkl"
     242              : #endif
     243              : #if defined(__OPENBLAS)
     244         5965 :       flags = TRIM(flags)//" openblas"
     245              : #endif
     246              : #if defined(__DFTD4)
     247         5965 :       flags = TRIM(flags)//" libdftd4"
     248              : #endif
     249              : #if defined(__S_DFTD3)
     250         5965 :       flags = TRIM(flags)//" s_dftd3"
     251              : #endif
     252              : #if defined(__TBLITE)
     253         5965 :       flags = TRIM(flags)//" mctc-lib"
     254         5965 :       flags = TRIM(flags)//" tblite"
     255              : #endif
     256              : #if defined(__SIRIUS)
     257         5965 :       flags = TRIM(flags)//" sirius"
     258              : #endif
     259              : #if defined(__SIRIUS_NLCG)
     260              :       flags = TRIM(flags)//" sirius_nlcg"
     261              : #endif
     262              : #if defined(__SIRIUS_DFTD3)
     263              :       flags = TRIM(flags)//" sirius_dftd3"
     264              : #endif
     265              : #if defined(__SIRIUS_DFTD4)
     266              :       flags = TRIM(flags)//" sirius_dftd4"
     267              : #endif
     268              : #if defined(__SIRIUS_VCSQNM)
     269              :       flags = TRIM(flags)//" sirius_vcsqnm"
     270              : #endif
     271              : #if defined(__CHECK_DIAG)
     272              :       flags = TRIM(flags)//" check_diag"
     273              : #endif
     274              : #if defined(__LIBVORI)
     275         5965 :       flags = TRIM(flags)//" libvori"
     276         5965 :       flags = TRIM(flags)//" libbqb"
     277              : #endif
     278              : #if defined(__LIBMAXWELL)
     279              :       flags = TRIM(flags)//" libmaxwell"
     280              : #endif
     281              : #if defined(__LIBTORCH)
     282         5965 :       flags = TRIM(flags)//" libtorch"
     283              : #endif
     284              : #if defined(__LIBTORCH_CUDA)
     285              :       flags = TRIM(flags)//" libtorch_cuda"
     286              : #endif
     287              : #if defined(__SKALA_FTORCH)
     288              :       flags = TRIM(flags)//" skala_ftorch"
     289              : #endif
     290              : #if defined(__MIMIC)
     291         5965 :       flags = TRIM(flags)//" mimic"
     292              : #endif
     293              : #if defined(__OFFLOAD_CUDA)
     294              :       flags = TRIM(flags)//" offload_cuda"
     295              : #endif
     296              : #if defined(__OFFLOAD_HIP)
     297              :       flags = TRIM(flags)//" offload_hip"
     298              : #endif
     299              : #if defined(__OFFLOAD_OPENCL)
     300              :       flags = TRIM(flags)//" offload_opencl"
     301              : #endif
     302              : #if defined(__NO_OFFLOAD_ELPA)
     303              :       flags = TRIM(flags)//" no_offload_elpa"
     304              : #endif
     305              : #if defined(__NO_OFFLOAD_GRID)
     306              :       flags = TRIM(flags)//" no_offload_grid"
     307              : #endif
     308              : #if defined(__NO_OFFLOAD_DBM)
     309              :       flags = TRIM(flags)//" no_offload_dbm"
     310              : #endif
     311              : #if defined(__NO_OFFLOAD_PW)
     312              :       flags = TRIM(flags)//" no_offload_pw"
     313              : #endif
     314              : #if defined(__OFFLOAD_PROFILING)
     315              :       flags = TRIM(flags)//" offload_profiling"
     316              : #endif
     317              : #if defined(__SPLA) && defined(__OFFLOAD_GEMM)
     318              :       flags = TRIM(flags)//" spla_gemm_offloading"
     319              : #endif
     320              : #if defined(__CUSOLVERMP)
     321              :       flags = TRIM(flags)//" cusolvermp"
     322              : #endif
     323              : #if defined(__CUSOLVERMP_NCCL)
     324              :       flags = TRIM(flags)//" cusolvermp_nccl"
     325              : #endif
     326              : #if defined(__DLAF)
     327              :       flags = TRIM(flags)//" dlaf"
     328              : #endif
     329              : #if defined(__LIBVDWXC)
     330         5965 :       flags = TRIM(flags)//" libvdwxc"
     331              : #endif
     332              : #if defined(__HDF5)
     333         5965 :       flags = TRIM(flags)//" hdf5"
     334              : #endif
     335              : #if defined(__TREXIO)
     336         5965 :       flags = TRIM(flags)//" trexio"
     337              : #endif
     338              : #if defined(__LIBFCI)
     339         5965 :       flags = TRIM(flags)//" libfci"
     340              : #endif
     341              : #if defined(__OFFLOAD_UNIFIED_MEMORY)
     342              :       flags = TRIM(flags)//" offload_unified_memory"
     343              : #endif
     344              : #if defined(__SMEAGOL)
     345         5965 :       flags = TRIM(flags)//" libsmeagol"
     346              : #endif
     347              : #if defined(__GREENX)
     348         5965 :       flags = TRIM(flags)//" greenx"
     349              : #endif
     350              : 
     351              : #if defined(__OPENPMD)
     352              :       flags = TRIM(flags)//" openpmd"
     353              : #endif
     354              : 
     355              : #if defined(__LIBGINT)
     356              :       flags = TRIM(flags)//" libGint"
     357              : #endif
     358              : 
     359         5965 :       flags = TRIM(flags)//" libwignernj"
     360         5965 :    END FUNCTION cp2k_flags
     361              : 
     362              : ! **************************************************************************************************
     363              : !> \brief ...
     364              : !> \param iunit ...
     365              : ! **************************************************************************************************
     366            0 :    SUBROUTINE print_cp2k_license(iunit)
     367              : 
     368              :       INTEGER                                            :: iunit
     369              : 
     370              :       WRITE (UNIT=iunit, FMT="(T2,A)") &
     371            0 :          "******************************************************************************", &
     372            0 :          "*                                                                            *", &
     373            0 :          "*   CP2K: A general program to perform molecular dynamics simulations        *", &
     374            0 :          "*   Copyright (C) 2000-2026  CP2K developer group <https://www.cp2k.org/>    *", &
     375            0 :          "*                                                                            *", &
     376            0 :          "*   This program is free software: you can redistribute it and/or modify     *", &
     377            0 :          "*   it under the terms of the GNU General Public License as published by     *", &
     378            0 :          "*   the Free Software Foundation, either version 2 of the License, or        *", &
     379            0 :          "*   (at your option) any later version.                                      *", &
     380            0 :          "*                                                                            *", &
     381            0 :          "*   This program is distributed in the hope that it will be useful,          *", &
     382            0 :          "*   but WITHOUT ANY WARRANTY; without even the implied warranty of           *", &
     383            0 :          "*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            *", &
     384            0 :          "*   GNU General Public License for more details.                             *", &
     385            0 :          "*                                                                            *", &
     386            0 :          "*   You should have received a copy of the GNU General Public License        *", &
     387            0 :          "*   along with this program.  If not, see <https://www.gnu.org/licenses/>.   *", &
     388            0 :          "*                                                                            *", &
     389            0 :          "******************************************************************************"
     390              : 
     391            0 :    END SUBROUTINE print_cp2k_license
     392              : 
     393              : ! **************************************************************************************************
     394              : !> \brief ...
     395              : ! **************************************************************************************************
     396         7462 :    SUBROUTINE get_runtime_info()
     397              : 
     398         7462 :       r_cwd = ""
     399         7462 :       r_host_name = ""
     400         7462 :       r_timestamp = ""
     401         7462 :       r_user_name = ""
     402              :       r_pid = -1
     403              : 
     404         7462 :       CALL m_getpid(r_pid)
     405         7462 :       CALL m_getlog(r_user_name)
     406         7462 :       CALL m_hostnm(r_host_name)
     407         7462 :       CALL m_timestamp(r_timestamp)
     408         7462 :       CALL m_getcwd(r_cwd)
     409              : 
     410         7462 :    END SUBROUTINE get_runtime_info
     411              : 
     412              : ! **************************************************************************************************
     413              : !> \brief Writes the header for the restart file
     414              : !> \param iunit ...
     415              : !> \par History
     416              : !>      01.2008 [created] - Split from write_restart
     417              : !> \author Teodoro Laino - University of Zurich - 01.2008
     418              : ! **************************************************************************************************
     419         8268 :    SUBROUTINE write_restart_header(iunit)
     420              :       INTEGER, INTENT(IN)                                :: iunit
     421              : 
     422              :       CHARACTER(LEN=256)                                 :: cwd
     423              :       CHARACTER(LEN=timestamp_length)                    :: timestamp
     424              : 
     425         8268 :       CALL m_timestamp(timestamp)
     426         8268 :       CALL m_getcwd(cwd)
     427              : 
     428         8268 :       WRITE (UNIT=iunit, FMT="(T2,A)") "# Version information for this restart file "
     429         8268 :       WRITE (UNIT=iunit, FMT="(T2,A)") "# current date "//timestamp
     430         8268 :       WRITE (UNIT=iunit, FMT="(T2,A)") "# current working dir "//TRIM(cwd)
     431              : 
     432              :       WRITE (UNIT=iunit, FMT="(T2,A,T31,A50)") &
     433         8268 :          "# Program compiled at", &
     434        16536 :          ADJUSTR(compile_date(1:MIN(50, LEN(compile_date))))
     435              :       WRITE (UNIT=iunit, FMT="(T2,A,T31,A50)") &
     436         8268 :          "# Program compiled on", &
     437        16536 :          ADJUSTR(compile_host(1:MIN(50, LEN(compile_host))))
     438              :       WRITE (UNIT=iunit, FMT="(T2,A,T31,A50)") &
     439         8268 :          "# Program compiled for", &
     440        16536 :          ADJUSTR(compile_arch(1:MIN(50, LEN(compile_arch))))
     441              :       WRITE (UNIT=iunit, FMT="(T2,A,T31,A50)") &
     442         8268 :          "# Source code revision number", &
     443        16536 :          ADJUSTR(compile_revision)
     444              : 
     445         8268 :    END SUBROUTINE write_restart_header
     446              : 
     447              : END MODULE cp2k_info
        

Generated by: LCOV version 2.0-1