(git:d5a0442)
Loading...
Searching...
No Matches
cp2k_info.F
Go to the documentation of this file.
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! **************************************************************************************************
23
24 USE iso_fortran_env, ONLY: compiler_options,&
25 compiler_version
26 USE kinds, ONLY: default_path_length,&
28 USE machine, ONLY: m_getcwd,&
29 m_getlog,&
30 m_getpid,&
31 m_hostnm,&
35
36 IMPLICIT NONE
37 PRIVATE
38
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'
81CONTAINS
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 FUNCTION cp2k_flags() RESULT(flags)
89 CHARACTER(len=10*default_string_length) :: flags
90
91 CHARACTER(len=default_string_length) :: tmp_str
92
93 flags = "cp2kflags:"
94
95 ! Ensure that tmp_str is used to silence compiler warnings
96 tmp_str = ""
97 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!$ 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 flags = trim(flags)//" libint"
111#endif
112#if defined(__FFTW3)
113 flags = trim(flags)//" fftw3"
114#endif
115#if defined(__LIBXC)
116 flags = trim(flags)//" libxc"
117#endif
118#if defined(__LIBXC) && !defined(__NO_OFFLOAD_LIBXC)
119 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 flags = trim(flags)//" gauxc"
126#endif
127#if defined(GAUXC_HAS_MPI)
128 flags = trim(flags)//" gauxc_mpi"
129#endif
130#if defined(GAUXC_HAS_ONEDFT)
131 flags = trim(flags)//" gauxc_onedft"
132#endif
133#if defined(__GAUXC) && defined(__GAUXC_ONEDFT_GRADIENT_FIX)
134 flags = trim(flags)//" gauxc_onedft_gradients"
135#endif
136#if defined(GAUXC_HAS_HOST)
137 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 flags = trim(flags)//" skala"
153#endif
154#if defined(__PEXSI)
155 flags = trim(flags)//" pexsi"
156#endif
157#if defined(__ELPA)
158 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 flags = trim(flags)//" parallel scalapack"
165#endif
166#endif
167#if defined(__MPI_F08)
168 flags = trim(flags)//" mpi_f08"
169#endif
170#if defined(__COSMA)
171 flags = trim(flags)//" cosma"
172#endif
173#if defined(__ACE)
174 flags = trim(flags)//" ace"
175#endif
176#if defined(__DEEPMD)
177 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 flags = trim(flags)//" libxs"
187#endif
188#if defined(__LIBXSMM)
189 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 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 flags = trim(flags)//" no_abort"
233#endif
234#if defined(__SPGLIB)
235 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 flags = trim(flags)//" openblas"
245#endif
246#if defined(__DFTD4)
247 flags = trim(flags)//" libdftd4"
248#endif
249#if defined(__S_DFTD3)
250 flags = trim(flags)//" s_dftd3"
251#endif
252#if defined(__TBLITE)
253 flags = trim(flags)//" mctc-lib"
254 flags = trim(flags)//" tblite"
255#endif
256#if defined(__SIRIUS)
257 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 flags = trim(flags)//" libvori"
276 flags = trim(flags)//" libbqb"
277#endif
278#if defined(__LIBMAXWELL)
279 flags = trim(flags)//" libmaxwell"
280#endif
281#if defined(__LIBTORCH)
282 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 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 flags = trim(flags)//" libvdwxc"
331#endif
332#if defined(__HDF5)
333 flags = trim(flags)//" hdf5"
334#endif
335#if defined(__TREXIO)
336 flags = trim(flags)//" trexio"
337#endif
338#if defined(__LIBFCI)
339 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 flags = trim(flags)//" libsmeagol"
346#endif
347#if defined(__GREENX)
348 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 flags = trim(flags)//" libwignernj"
360 END FUNCTION cp2k_flags
361
362! **************************************************************************************************
363!> \brief ...
364!> \param iunit ...
365! **************************************************************************************************
366 SUBROUTINE print_cp2k_license(iunit)
367
368 INTEGER :: iunit
369
370 WRITE (unit=iunit, fmt="(T2,A)") &
371 "******************************************************************************", &
372 "* *", &
373 "* CP2K: A general program to perform molecular dynamics simulations *", &
374 "* Copyright (C) 2000-2026 CP2K developer group <https://www.cp2k.org/> *", &
375 "* *", &
376 "* This program is free software: you can redistribute it and/or modify *", &
377 "* it under the terms of the GNU General Public License as published by *", &
378 "* the Free Software Foundation, either version 2 of the License, or *", &
379 "* (at your option) any later version. *", &
380 "* *", &
381 "* This program is distributed in the hope that it will be useful, *", &
382 "* but WITHOUT ANY WARRANTY; without even the implied warranty of *", &
383 "* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *", &
384 "* GNU General Public License for more details. *", &
385 "* *", &
386 "* You should have received a copy of the GNU General Public License *", &
387 "* along with this program. If not, see <https://www.gnu.org/licenses/>. *", &
388 "* *", &
389 "******************************************************************************"
390
391 END SUBROUTINE print_cp2k_license
392
393! **************************************************************************************************
394!> \brief ...
395! **************************************************************************************************
396 SUBROUTINE get_runtime_info()
397
398 r_cwd = ""
399 r_host_name = ""
400 r_timestamp = ""
401 r_user_name = ""
402 r_pid = -1
403
404 CALL m_getpid(r_pid)
408 CALL m_getcwd(r_cwd)
409
410 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 SUBROUTINE write_restart_header(iunit)
420 INTEGER, INTENT(IN) :: iunit
421
422 CHARACTER(LEN=256) :: cwd
423 CHARACTER(LEN=timestamp_length) :: timestamp
424
425 CALL m_timestamp(timestamp)
426 CALL m_getcwd(cwd)
427
428 WRITE (unit=iunit, fmt="(T2,A)") "# Version information for this restart file "
429 WRITE (unit=iunit, fmt="(T2,A)") "# current date "//timestamp
430 WRITE (unit=iunit, fmt="(T2,A)") "# current working dir "//trim(cwd)
431
432 WRITE (unit=iunit, fmt="(T2,A,T31,A50)") &
433 "# Program compiled at", &
434 adjustr(compile_date(1:min(50, len(compile_date))))
435 WRITE (unit=iunit, fmt="(T2,A,T31,A50)") &
436 "# Program compiled on", &
437 adjustr(compile_host(1:min(50, len(compile_host))))
438 WRITE (unit=iunit, fmt="(T2,A,T31,A50)") &
439 "# Program compiled for", &
440 adjustr(compile_arch(1:min(50, len(compile_arch))))
441 WRITE (unit=iunit, fmt="(T2,A,T31,A50)") &
442 "# Source code revision number", &
443 adjustr(compile_revision)
444
445 END SUBROUTINE write_restart_header
446
447END MODULE cp2k_info
some minimal info about CP2K, including its version and license
Definition cp2k_info.F:22
character(len=default_string_length), save, public compile_date
Definition cp2k_info.F:65
character(len=default_string_length), public r_host_name
Definition cp2k_info.F:76
character(len= *), parameter, public cp2k_home
Definition cp2k_info.F:52
character(len= *), parameter, public compile_host
Definition cp2k_info.F:71
character(len= *), parameter, public compile_arch
Definition cp2k_info.F:59
integer, public r_pid
Definition cp2k_info.F:78
subroutine, public print_cp2k_license(iunit)
...
Definition cp2k_info.F:367
subroutine, public write_restart_header(iunit)
Writes the header for the restart file.
Definition cp2k_info.F:420
character(len= *), parameter, public compile_with
Definition cp2k_info.F:55
character(len= *), parameter, public compile_revision
Definition cp2k_info.F:46
character(len=timestamp_length), public r_timestamp
Definition cp2k_info.F:77
character(len= *), parameter, public cp2k_year
Definition cp2k_info.F:51
character(len=10 *default_string_length) function, public cp2k_flags()
list all compile time options that influence the capabilities of cp2k. All new flags should be added ...
Definition cp2k_info.F:89
character(len= *), parameter, public cp2k_version
Definition cp2k_info.F:50
character(len=default_path_length), public r_cwd
Definition cp2k_info.F:75
subroutine, public get_runtime_info()
...
Definition cp2k_info.F:397
character(len=default_string_length), public r_user_name
Definition cp2k_info.F:76
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public default_string_length
Definition kinds.F:57
integer, parameter, public default_path_length
Definition kinds.F:58
Machine interface based on Fortran 2003 and POSIX.
Definition machine.F:17
subroutine, public m_getpid(pid)
...
Definition machine.F:657
integer, parameter, public timestamp_length
Definition machine.F:47
subroutine, public m_timestamp(timestamp)
Returns a human readable timestamp.
Definition machine.F:383
subroutine, public m_getcwd(curdir)
...
Definition machine.F:609
subroutine, public m_getlog(user)
...
Definition machine.F:738
subroutine, public m_hostnm(hname)
...
Definition machine.F:582
Utilities for string manipulations.
subroutine, public integer_to_string(inumber, string)
Converts an integer number to a string. The WRITE statement will return an error message,...