LCOV - code coverage report
Current view: top level - src - cp2k_info.F (source / functions) Hit Total Coverage
Test: CP2K Regtests (git:4c33f95) Lines: 52 73 71.2 %
Date: 2025-01-30 06:53:08 Functions: 3 4 75.0 %

          Line data    Source code
       1             : !--------------------------------------------------------------------------------------------------!
       2             : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3             : !   Copyright 2000-2025 CP2K developers group <https://cp2k.org>                                   !
       4             : !                                                                                                  !
       5             : !   SPDX-License-Identifier: GPL-2.0-or-later                                                      !
       6             : !--------------------------------------------------------------------------------------------------!
       7             : 
       8             : ! **************************************************************************************************
       9             : !> \brief some minimal info about CP2K, including its version and license
      10             : !> \par History
      11             : !>      - created (2007-09, Joost VandeVondele)
      12             : !>      - moved into this module information related to runtime:pid, user_name,
      13             : !>        host_name, cwd, datx  (2009-06, Teodoro Laino)
      14             : !> \author Joost VandeVondele
      15             : ! **************************************************************************************************
      16             : MODULE cp2k_info
      17             : 
      18             :    USE iso_fortran_env,                 ONLY: compiler_options
      19             :    USE kinds,                           ONLY: default_path_length,&
      20             :                                               default_string_length
      21             :    USE machine,                         ONLY: m_datum,&
      22             :                                               m_getcwd,&
      23             :                                               m_getlog,&
      24             :                                               m_getpid,&
      25             :                                               m_hostnm
      26             :    USE string_utilities,                ONLY: integer_to_string
      27             : 
      28             :    IMPLICIT NONE
      29             :    PRIVATE
      30             : 
      31             :    PUBLIC :: cp2k_version, cp2k_year, cp2k_home, cp2k_flags
      32             :    PUBLIC :: compile_arch, compile_date, compile_host, compile_revision
      33             :    PUBLIC :: print_cp2k_license, get_runtime_info, write_restart_header
      34             : 
      35             : #if defined(__COMPILE_REVISION)
      36             :    CHARACTER(LEN=*), PARAMETER :: compile_revision = __COMPILE_REVISION
      37             : #else
      38             :    CHARACTER(LEN=*), PARAMETER :: compile_revision = "unknown"
      39             : #endif
      40             : 
      41             :    !!! Keep version in sync with CMakeLists.txt !!!
      42             :    CHARACTER(LEN=*), PARAMETER :: cp2k_version = "CP2K version 2025.1 (Development Version)"
      43             :    CHARACTER(LEN=*), PARAMETER :: cp2k_year = "2025"
      44             :    CHARACTER(LEN=*), PARAMETER :: cp2k_home = "https://www.cp2k.org/"
      45             : 
      46             :    ! compile time information
      47             : #if defined(__COMPILE_ARCH)
      48             :    CHARACTER(LEN=*), PARAMETER :: compile_arch = __COMPILE_ARCH
      49             : #else
      50             :    CHARACTER(LEN=*), PARAMETER :: compile_arch = "unknown: -D__COMPILE_ARCH=?"
      51             : #endif
      52             : 
      53             : #if defined(__COMPILE_DATE)
      54             :    CHARACTER(LEN=*), PARAMETER :: compile_date = __COMPILE_DATE
      55             : #else
      56             :    CHARACTER(LEN=*), PARAMETER :: compile_date = "unknown: -D__COMPILE_DATE=?"
      57             : #endif
      58             : 
      59             : #if defined(__COMPILE_HOST)
      60             :    CHARACTER(LEN=*), PARAMETER :: compile_host = __COMPILE_HOST
      61             : #else
      62             :    CHARACTER(LEN=*), PARAMETER :: compile_host = "unknown: -D__COMPILE_HOST=?"
      63             : #endif
      64             : 
      65             :    ! Local runtime informations
      66             :    CHARACTER(LEN=26), PUBLIC                        :: r_datx
      67             :    CHARACTER(LEN=default_path_length), PUBLIC       :: r_cwd
      68             :    CHARACTER(LEN=default_string_length), PUBLIC     :: r_host_name, r_user_name
      69             :    INTEGER, PUBLIC                                  :: r_pid
      70             : 
      71             :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'cp2k_info'
      72             : CONTAINS
      73             : 
      74             : ! **************************************************************************************************
      75             : !> \brief list all compile time options that influence the capabilities of cp2k.
      76             : !>        All new flags should be added here (and be unique grep-able)
      77             : !> \return ...
      78             : ! **************************************************************************************************
      79        5005 :    FUNCTION cp2k_flags() RESULT(flags)
      80             :       CHARACTER(len=10*default_string_length)            :: flags
      81             : 
      82             :       CHARACTER(len=default_string_length)               :: tmp_str
      83             : 
      84        5005 :       flags = "cp2kflags:"
      85             : 
      86             :       ! Ensure that tmp_str is used to silence compiler warnings
      87        5005 :       tmp_str = ""
      88        5005 :       flags = TRIM(flags)//TRIM(tmp_str)
      89             : 
      90             :       IF (INDEX(COMPILER_OPTIONS(), "-fsanitize=leak") > 0) THEN
      91             :          flags = TRIM(flags)//" lsan"
      92             :       END IF
      93             : 
      94        5005 : !$    flags = TRIM(flags)//" omp"
      95             : #if defined(__LIBINT)
      96        5005 :       flags = TRIM(flags)//" libint"
      97             : #endif
      98             : #if defined(__FFTW3)
      99        5005 :       flags = TRIM(flags)//" fftw3"
     100             : #endif
     101             : #if defined(__FFTW3_MKL)
     102             :       flags = TRIM(flags)//" fftw3_mkl"
     103             : #endif
     104             : #if defined(__LIBXC)
     105        5005 :       flags = TRIM(flags)//" libxc"
     106             : #endif
     107             : #if defined(__LIBGRPP)
     108        5005 :       flags = TRIM(flags)//" libgrpp"
     109             : #endif
     110             : #if defined(__LIBPEXSI)
     111             :       flags = TRIM(flags)//" pexsi"
     112             : #endif
     113             : #if defined(__ELPA)
     114        5005 :       flags = TRIM(flags)//" elpa"
     115             : #endif
     116             : #if defined(__ELPA_NVIDIA_GPU)
     117             :       flags = TRIM(flags)//" elpa_nvidia_gpu"
     118             : #endif
     119             : #if defined(__ELPA_AMD_GPU)
     120             :       flags = TRIM(flags)//" elpa_amd_gpu"
     121             : #endif
     122             : #if defined(__ELPA_INTEL_GPU)
     123             :       flags = TRIM(flags)//" elpa_intel_gpu"
     124             : #endif
     125             : #if defined(__parallel)
     126        5005 :       flags = TRIM(flags)//" parallel scalapack"
     127             : #endif
     128             : #if defined(__MPI_F08)
     129             :       flags = TRIM(flags)//" mpi_f08"
     130             : #endif
     131             : #if defined(__COSMA)
     132        5005 :       flags = TRIM(flags)//" cosma"
     133             : #endif
     134             : 
     135             : #if defined(__QUIP)
     136             :       flags = TRIM(flags)//" quip"
     137             : #endif
     138             : 
     139             : #if defined(__HAS_PATCHED_CUFFT_70)
     140             :       flags = TRIM(flags)//" patched_cufft_70"
     141             : #endif
     142             : 
     143             : #if defined(__DEEPMD)
     144        5005 :       flags = TRIM(flags)//" deepmd"
     145             : #endif
     146             : 
     147             : #if defined(__PW_FPGA)
     148             :       flags = TRIM(flags)//" pw_fpga"
     149             : #endif
     150             : 
     151             : #if defined(__PW_FPGA_SP)
     152             :       flags = TRIM(flags)//" pw_fpga_sp"
     153             : #endif
     154             : 
     155             : #if defined(__LIBXSMM)
     156        5005 :       flags = TRIM(flags)//" xsmm"
     157             : #endif
     158             : 
     159             : #if defined(__CRAY_PM_ACCEL_ENERGY)
     160             :       flags = TRIM(flags)//" cray_pm_accel_energy"
     161             : #endif
     162             : #if defined(__CRAY_PM_ENERGY)
     163             :       flags = TRIM(flags)//" cray_pm_energy"
     164             : #endif
     165             : #if defined(__CRAY_PM_FAKE_ENERGY)
     166             :       flags = TRIM(flags)//" cray_pm_fake_energy"
     167             : #endif
     168             : #if defined(__DBCSR_ACC)
     169             :       flags = TRIM(flags)//" dbcsr_acc"
     170             : #endif
     171             : #if defined(__MAX_CONTR)
     172             :       CALL integer_to_string(__MAX_CONTR, tmp_str)
     173             :       flags = TRIM(flags)//" max_contr="//TRIM(tmp_str)
     174             : #endif
     175             : #if defined(__NO_SOCKETS)
     176             :       flags = TRIM(flags)//" no_sockets"
     177             : #endif
     178             : #if defined(__NO_MPI_THREAD_SUPPORT_CHECK)
     179             :       flags = TRIM(flags)//" no_mpi_thread_support_check"
     180             : #endif
     181             : #if defined(__NO_STATM_ACCESS)
     182             :       flags = TRIM(flags)//" no_statm_access"
     183             : #endif
     184             : #if defined(__MINGW)
     185             :       flags = TRIM(flags)//" mingw"
     186             : #endif
     187             : #if defined(__PW_CUDA_NO_HOSTALLOC)
     188             :       flags = TRIM(flags)//" pw_cuda_no_hostalloc"
     189             : #endif
     190             : #if defined(__STATM_RESIDENT)
     191             :       flags = TRIM(flags)//" statm_resident"
     192             : #endif
     193             : #if defined(__STATM_TOTAL)
     194             :       flags = TRIM(flags)//" statm_total"
     195             : #endif
     196             : #if defined(__PLUMED2)
     197        5005 :       flags = TRIM(flags)//" plumed2"
     198             : #endif
     199             : #if defined(__HAS_IEEE_EXCEPTIONS)
     200             :       flags = TRIM(flags)//" has_ieee_exceptions"
     201             : #endif
     202             : #if defined(__NO_ABORT)
     203        5005 :       flags = TRIM(flags)//" no_abort"
     204             : #endif
     205             : #if defined(__SPGLIB)
     206        5005 :       flags = TRIM(flags)//" spglib"
     207             : #endif
     208             : #if defined(__ACCELERATE)
     209             :       flags = TRIM(flags)//" accelerate"
     210             : #endif
     211             : #if defined(__MKL)
     212             :       flags = TRIM(flags)//" mkl"
     213             : #endif
     214             : #if defined(__DFTD4)
     215        5005 :       flags = TRIM(flags)//" libdftd4"
     216             : #endif
     217             : #if defined(__SIRIUS)
     218        5005 :       flags = TRIM(flags)//" sirius"
     219             : #endif
     220             : #if defined(__CHECK_DIAG)
     221             :       flags = TRIM(flags)//" check_diag"
     222             : #endif
     223             : #if defined(__LIBVORI)
     224        5005 :       flags = TRIM(flags)//" libvori"
     225        5005 :       flags = TRIM(flags)//" libbqb"
     226             : #endif
     227             : #if defined(__LIBMAXWELL)
     228             :       flags = TRIM(flags)//" libmaxwell"
     229             : #endif
     230             : #if defined(__LIBTORCH)
     231        5005 :       flags = TRIM(flags)//" libtorch"
     232             : #endif
     233             : #if defined(__OFFLOAD_CUDA)
     234             :       flags = TRIM(flags)//" offload_cuda"
     235             : #endif
     236             : #if defined(__OFFLOAD_HIP)
     237             :       flags = TRIM(flags)//" offload_hip"
     238             : #endif
     239             : #if defined(__OFFLOAD_OPENCL)
     240             :       flags = TRIM(flags)//" offload_opencl"
     241             : #endif
     242             : #if defined(__NO_OFFLOAD_GRID)
     243             :       flags = TRIM(flags)//" no_offload_grid"
     244             : #endif
     245             : #if defined(__NO_OFFLOAD_DBM)
     246             :       flags = TRIM(flags)//" no_offload_dbm"
     247             : #endif
     248             : #if defined(__NO_OFFLOAD_PW)
     249             :       flags = TRIM(flags)//" no_offload_pw"
     250             : #endif
     251             : #if defined(__OFFLOAD_PROFILING)
     252             :       flags = TRIM(flags)//" offload_profiling"
     253             : #endif
     254             : 
     255             : #if defined(__SPLA) && defined(__OFFLOAD_GEMM)
     256             :       flags = TRIM(flags)//" spla_gemm_offloading"
     257             : #endif
     258             : 
     259             : #if defined(__CUSOLVERMP)
     260             :       flags = TRIM(flags)//" cusolvermp"
     261             : #endif
     262             : 
     263             : #if defined(__DLAF)
     264             :       flags = TRIM(flags)//" dlaf"
     265             : #endif
     266             : 
     267             : #if defined(__LIBVDWXC)
     268        5005 :       flags = TRIM(flags)//" libvdwxc"
     269             : #endif
     270             : 
     271             : #if defined(__HDF5)
     272        5005 :       flags = TRIM(flags)//" hdf5"
     273             : #endif
     274             : 
     275             : #if defined(__TREXIO)
     276        5005 :       flags = TRIM(flags)//" trexio"
     277             : #endif
     278             : 
     279             : #if defined(__OFFLOAD_UNIFIED_MEMORY)
     280             :       flags = TRIM(flags)//" offload_unified_memory"
     281             : #endif
     282             : 
     283             : #if defined(__SMEAGOL)
     284             :       flags = TRIM(flags)//" libsmeagol"
     285             : #endif
     286             : 
     287        5005 :    END FUNCTION cp2k_flags
     288             : 
     289             : ! **************************************************************************************************
     290             : !> \brief ...
     291             : !> \param iunit ...
     292             : ! **************************************************************************************************
     293           0 :    SUBROUTINE print_cp2k_license(iunit)
     294             : 
     295             :       INTEGER                                            :: iunit
     296             : 
     297             :       WRITE (UNIT=iunit, FMT="(T2,A)") &
     298           0 :          "******************************************************************************", &
     299           0 :          "*                                                                            *", &
     300           0 :          "*   CP2K: A general program to perform molecular dynamics simulations        *", &
     301           0 :          "*   Copyright (C) 2000-2025  CP2K developer group <https://www.cp2k.org/>    *", &
     302           0 :          "*                                                                            *", &
     303           0 :          "*   This program is free software: you can redistribute it and/or modify     *", &
     304           0 :          "*   it under the terms of the GNU General Public License as published by     *", &
     305           0 :          "*   the Free Software Foundation, either version 2 of the License, or        *", &
     306           0 :          "*   (at your option) any later version.                                      *", &
     307           0 :          "*                                                                            *", &
     308           0 :          "*   This program is distributed in the hope that it will be useful,          *", &
     309           0 :          "*   but WITHOUT ANY WARRANTY; without even the implied warranty of           *", &
     310           0 :          "*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            *", &
     311           0 :          "*   GNU General Public License for more details.                             *", &
     312           0 :          "*                                                                            *", &
     313           0 :          "*   You should have received a copy of the GNU General Public License        *", &
     314           0 :          "*   along with this program.  If not, see <https://www.gnu.org/licenses/>.   *", &
     315           0 :          "*                                                                            *", &
     316           0 :          "******************************************************************************"
     317             : 
     318           0 :    END SUBROUTINE print_cp2k_license
     319             : 
     320             : ! **************************************************************************************************
     321             : !> \brief ...
     322             : ! **************************************************************************************************
     323       14242 :    SUBROUTINE get_runtime_info()
     324             : 
     325       14242 :       r_datx = ""
     326       14242 :       r_cwd = ""
     327       14242 :       r_host_name = ""
     328       14242 :       r_user_name = ""
     329             :       r_pid = -1
     330             : 
     331       14242 :       CALL m_getpid(r_pid)
     332       14242 :       CALL m_getlog(r_user_name)
     333       14242 :       CALL m_hostnm(r_host_name)
     334       14242 :       CALL m_datum(r_datx)
     335       14242 :       CALL m_getcwd(r_cwd)
     336             : 
     337       14242 :    END SUBROUTINE
     338             : 
     339             : ! **************************************************************************************************
     340             : !> \brief Writes the header for the restart file
     341             : !> \param iunit ...
     342             : !> \par History
     343             : !>      01.2008 [created] - Split from write_restart
     344             : !> \author Teodoro Laino - University of Zurich - 01.2008
     345             : ! **************************************************************************************************
     346        8336 :    SUBROUTINE write_restart_header(iunit)
     347             :       INTEGER, INTENT(IN)                                :: iunit
     348             : 
     349             :       CHARACTER(LEN=256)                                 :: cwd, datx
     350             : 
     351        8336 :       CALL m_datum(datx)
     352        8336 :       CALL m_getcwd(cwd)
     353             : 
     354        8336 :       WRITE (UNIT=iunit, FMT="(T2,A)") "# Version information for this restart file "
     355        8336 :       WRITE (UNIT=iunit, FMT="(T2,A)") "# current date "//TRIM(datx)
     356        8336 :       WRITE (UNIT=iunit, FMT="(T2,A)") "# current working dir "//TRIM(cwd)
     357             : 
     358             :       WRITE (UNIT=iunit, FMT="(T2,A,T31,A50)") &
     359        8336 :          "# Program compiled at", &
     360       16672 :          ADJUSTR(compile_date(1:MIN(50, LEN(compile_date))))
     361             :       WRITE (UNIT=iunit, FMT="(T2,A,T31,A50)") &
     362        8336 :          "# Program compiled on", &
     363       16672 :          ADJUSTR(compile_host(1:MIN(50, LEN(compile_host))))
     364             :       WRITE (UNIT=iunit, FMT="(T2,A,T31,A50)") &
     365        8336 :          "# Program compiled for", &
     366       16672 :          ADJUSTR(compile_arch(1:MIN(50, LEN(compile_arch))))
     367             :       WRITE (UNIT=iunit, FMT="(T2,A,T31,A50)") &
     368        8336 :          "# Source code revision number", &
     369       16672 :          ADJUSTR(compile_revision)
     370             : 
     371        8336 :    END SUBROUTINE write_restart_header
     372             : 
     373             : END MODULE cp2k_info

Generated by: LCOV version 1.15