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