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
|