(git:97501a3)
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-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, timestamp (2009-06, Teodoro Laino, 2025-08 MK)
14!> \author Joost VandeVondele
15! **************************************************************************************************
17
18 USE iso_fortran_env, ONLY: compiler_options
19 USE kinds, ONLY: default_path_length,&
21 USE machine, ONLY: m_getcwd,&
22 m_getlog,&
23 m_getpid,&
24 m_hostnm,&
28
29 IMPLICIT NONE
30 PRIVATE
31
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 2025.2 (Development Version)"
44 CHARACTER(LEN=*), PARAMETER :: cp2k_year = "2025"
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'
73CONTAINS
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 FUNCTION cp2k_flags() RESULT(flags)
81 CHARACTER(len=10*default_string_length) :: flags
82
83 CHARACTER(len=default_string_length) :: tmp_str
84
85 flags = "cp2kflags:"
86
87 ! Ensure that tmp_str is used to silence compiler warnings
88 tmp_str = ""
89 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!$ flags = TRIM(flags)//" omp"
96#if defined(__LIBINT)
97 flags = trim(flags)//" libint"
98#endif
99#if defined(__FFTW3)
100 flags = trim(flags)//" fftw3"
101#endif
102#if defined(__LIBXC)
103 flags = trim(flags)//" libxc"
104#endif
105#if defined(__LIBGRPP)
106 flags = trim(flags)//" libgrpp"
107#endif
108#if defined(__PEXSI)
109 flags = trim(flags)//" pexsi"
110#endif
111#if defined(__ELPA)
112 flags = trim(flags)//" elpa"
113#endif
114#if defined(__ELPA_NVIDIA_GPU)
115 flags = trim(flags)//" elpa_nvidia_gpu"
116#endif
117#if defined(__ELPA_AMD_GPU)
118 flags = trim(flags)//" elpa_amd_gpu"
119#endif
120#if defined(__ELPA_INTEL_GPU)
121 flags = trim(flags)//" elpa_intel_gpu"
122#endif
123#if defined(__parallel)
124 flags = trim(flags)//" parallel scalapack"
125#endif
126#if defined(__MPI_F08)
127 flags = trim(flags)//" mpi_f08"
128#endif
129#if defined(__COSMA)
130 flags = trim(flags)//" cosma"
131#endif
132
133#if defined(__QUIP)
134 flags = trim(flags)//" quip"
135#endif
136
137#if defined(__HAS_PATCHED_CUFFT_70)
138 flags = trim(flags)//" patched_cufft_70"
139#endif
140
141#if defined(__ACE)
142 flags = trim(flags)//" ace"
143#endif
144
145#if defined(__DEEPMD)
146 flags = trim(flags)//" deepmd"
147#endif
148
149#if defined(__PW_FPGA)
150 flags = trim(flags)//" pw_fpga"
151#endif
152
153#if defined(__PW_FPGA_SP)
154 flags = trim(flags)//" pw_fpga_sp"
155#endif
156
157#if defined(__LIBXSMM)
158 flags = trim(flags)//" xsmm"
159#endif
160
161#if defined(__CRAY_PM_ACCEL_ENERGY)
162 flags = trim(flags)//" cray_pm_accel_energy"
163#endif
164#if defined(__CRAY_PM_ENERGY)
165 flags = trim(flags)//" cray_pm_energy"
166#endif
167#if defined(__CRAY_PM_FAKE_ENERGY)
168 flags = trim(flags)//" cray_pm_fake_energy"
169#endif
170#if defined(__DBCSR_ACC)
171 flags = trim(flags)//" dbcsr_acc"
172#endif
173#if defined(__MAX_CONTR)
174 CALL integer_to_string(__max_contr, tmp_str)
175 flags = trim(flags)//" max_contr="//trim(tmp_str)
176#endif
177#if defined(__NO_SOCKETS)
178 flags = trim(flags)//" no_sockets"
179#endif
180#if defined(__NO_MPI_THREAD_SUPPORT_CHECK)
181 flags = trim(flags)//" no_mpi_thread_support_check"
182#endif
183#if defined(__NO_STATM_ACCESS)
184 flags = trim(flags)//" no_statm_access"
185#endif
186#if defined(__MINGW)
187 flags = trim(flags)//" mingw"
188#endif
189#if defined(__PW_CUDA_NO_HOSTALLOC)
190 flags = trim(flags)//" pw_cuda_no_hostalloc"
191#endif
192#if defined(__STATM_RESIDENT)
193 flags = trim(flags)//" statm_resident"
194#endif
195#if defined(__STATM_TOTAL)
196 flags = trim(flags)//" statm_total"
197#endif
198#if defined(__PLUMED2)
199 flags = trim(flags)//" plumed2"
200#endif
201#if defined(__HAS_IEEE_EXCEPTIONS)
202 flags = trim(flags)//" has_ieee_exceptions"
203#endif
204#if defined(__NO_ABORT)
205 flags = trim(flags)//" no_abort"
206#endif
207#if defined(__SPGLIB)
208 flags = trim(flags)//" spglib"
209#endif
210#if defined(__ACCELERATE)
211 flags = trim(flags)//" accelerate"
212#endif
213#if defined(__MKL)
214 flags = trim(flags)//" mkl"
215#endif
216#if defined(__DFTD4)
217 flags = trim(flags)//" libdftd4"
218#endif
219#if defined(__TBLITE)
220 flags = trim(flags)//" mctc-lib"
221 flags = trim(flags)//" tblite"
222#endif
223#if defined(__SIRIUS)
224 flags = trim(flags)//" sirius"
225#endif
226#if defined(__SIRIUS_NLCG)
227 flags = trim(flags)//" sirius_nlcg"
228#endif
229#if defined(__SIRIUS_DFTD4)
230 flags = trim(flags)//" sirius_dftd4"
231#endif
232#if defined(__SIRIUS_VCSQNM)
233 flags = trim(flags)//" sirius_vcsqnm"
234#endif
235#if defined(__CHECK_DIAG)
236 flags = trim(flags)//" check_diag"
237#endif
238#if defined(__LIBVORI)
239 flags = trim(flags)//" libvori"
240 flags = trim(flags)//" libbqb"
241#endif
242#if defined(__LIBMAXWELL)
243 flags = trim(flags)//" libmaxwell"
244#endif
245#if defined(__LIBTORCH)
246 flags = trim(flags)//" libtorch"
247#endif
248#if defined(__OFFLOAD_CUDA)
249 flags = trim(flags)//" offload_cuda"
250#endif
251#if defined(__OFFLOAD_HIP)
252 flags = trim(flags)//" offload_hip"
253#endif
254#if defined(__OFFLOAD_OPENCL)
255 flags = trim(flags)//" offload_opencl"
256#endif
257#if defined(__NO_OFFLOAD_GRID)
258 flags = trim(flags)//" no_offload_grid"
259#endif
260#if defined(__NO_OFFLOAD_DBM)
261 flags = trim(flags)//" no_offload_dbm"
262#endif
263#if defined(__NO_OFFLOAD_PW)
264 flags = trim(flags)//" no_offload_pw"
265#endif
266#if defined(__OFFLOAD_PROFILING)
267 flags = trim(flags)//" offload_profiling"
268#endif
269
270#if defined(__SPLA) && defined(__OFFLOAD_GEMM)
271 flags = trim(flags)//" spla_gemm_offloading"
272#endif
273
274#if defined(__CUSOLVERMP)
275 flags = trim(flags)//" cusolvermp"
276#endif
277
278#if defined(__DLAF)
279 flags = trim(flags)//" dlaf"
280#endif
281
282#if defined(__LIBVDWXC)
283 flags = trim(flags)//" libvdwxc"
284#endif
285
286#if defined(__HDF5)
287 flags = trim(flags)//" hdf5"
288#endif
289
290#if defined(__TREXIO)
291 flags = trim(flags)//" trexio"
292#endif
293
294#if defined(__OFFLOAD_UNIFIED_MEMORY)
295 flags = trim(flags)//" offload_unified_memory"
296#endif
297
298#if defined(__SMEAGOL)
299 flags = trim(flags)//" libsmeagol"
300#endif
301
302#if defined(__GREENX)
303 flags = trim(flags)//" greenx"
304#endif
305
306 END FUNCTION cp2k_flags
307
308! **************************************************************************************************
309!> \brief ...
310!> \param iunit ...
311! **************************************************************************************************
312 SUBROUTINE print_cp2k_license(iunit)
313
314 INTEGER :: iunit
315
316 WRITE (unit=iunit, fmt="(T2,A)") &
317 "******************************************************************************", &
318 "* *", &
319 "* CP2K: A general program to perform molecular dynamics simulations *", &
320 "* Copyright (C) 2000-2025 CP2K developer group <https://www.cp2k.org/> *", &
321 "* *", &
322 "* This program is free software: you can redistribute it and/or modify *", &
323 "* it under the terms of the GNU General Public License as published by *", &
324 "* the Free Software Foundation, either version 2 of the License, or *", &
325 "* (at your option) any later version. *", &
326 "* *", &
327 "* This program is distributed in the hope that it will be useful, *", &
328 "* but WITHOUT ANY WARRANTY; without even the implied warranty of *", &
329 "* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *", &
330 "* GNU General Public License for more details. *", &
331 "* *", &
332 "* You should have received a copy of the GNU General Public License *", &
333 "* along with this program. If not, see <https://www.gnu.org/licenses/>. *", &
334 "* *", &
335 "******************************************************************************"
336
337 END SUBROUTINE print_cp2k_license
338
339! **************************************************************************************************
340!> \brief ...
341! **************************************************************************************************
342 SUBROUTINE get_runtime_info()
343
344 r_cwd = ""
345 r_host_name = ""
346 r_timestamp = ""
347 r_user_name = ""
348 r_pid = -1
349
350 CALL m_getpid(r_pid)
354 CALL m_getcwd(r_cwd)
355
356 END SUBROUTINE
357
358! **************************************************************************************************
359!> \brief Writes the header for the restart file
360!> \param iunit ...
361!> \par History
362!> 01.2008 [created] - Split from write_restart
363!> \author Teodoro Laino - University of Zurich - 01.2008
364! **************************************************************************************************
365 SUBROUTINE write_restart_header(iunit)
366 INTEGER, INTENT(IN) :: iunit
367
368 CHARACTER(LEN=256) :: cwd
369 CHARACTER(LEN=timestamp_length) :: timestamp
370
371 CALL m_timestamp(timestamp)
372 CALL m_getcwd(cwd)
373
374 WRITE (unit=iunit, fmt="(T2,A)") "# Version information for this restart file "
375 WRITE (unit=iunit, fmt="(T2,A)") "# current date "//timestamp
376 WRITE (unit=iunit, fmt="(T2,A)") "# current working dir "//trim(cwd)
377
378 WRITE (unit=iunit, fmt="(T2,A,T31,A50)") &
379 "# Program compiled at", &
380 adjustr(compile_date(1:min(50, len(compile_date))))
381 WRITE (unit=iunit, fmt="(T2,A,T31,A50)") &
382 "# Program compiled on", &
383 adjustr(compile_host(1:min(50, len(compile_host))))
384 WRITE (unit=iunit, fmt="(T2,A,T31,A50)") &
385 "# Program compiled for", &
386 adjustr(compile_arch(1:min(50, len(compile_arch))))
387 WRITE (unit=iunit, fmt="(T2,A,T31,A50)") &
388 "# Source code revision number", &
389 adjustr(compile_revision)
390
391 END SUBROUTINE write_restart_header
392
393END MODULE cp2k_info
some minimal info about CP2K, including its version and license
Definition cp2k_info.F:16
character(len=default_string_length), public r_host_name
Definition cp2k_info.F:68
character(len= *), parameter, public cp2k_home
Definition cp2k_info.F:45
character(len= *), parameter, public compile_host
Definition cp2k_info.F:63
character(len= *), parameter, public compile_arch
Definition cp2k_info.F:51
integer, public r_pid
Definition cp2k_info.F:70
subroutine, public print_cp2k_license(iunit)
...
Definition cp2k_info.F:313
subroutine, public write_restart_header(iunit)
Writes the header for the restart file.
Definition cp2k_info.F:366
character(len= *), parameter, public compile_revision
Definition cp2k_info.F:39
character(len= *), parameter, public compile_date
Definition cp2k_info.F:57
character(len=timestamp_length), public r_timestamp
Definition cp2k_info.F:69
character(len= *), parameter, public cp2k_year
Definition cp2k_info.F:44
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:81
character(len= *), parameter, public cp2k_version
Definition cp2k_info.F:43
character(len=default_path_length), public r_cwd
Definition cp2k_info.F:67
subroutine, public get_runtime_info()
...
Definition cp2k_info.F:343
character(len=default_string_length), public r_user_name
Definition cp2k_info.F:68
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:664
integer, parameter, public timestamp_length
Definition machine.F:53
subroutine, public m_timestamp(timestamp)
Returns a human readable timestamp.
Definition machine.F:380
subroutine, public m_getcwd(curdir)
...
Definition machine.F:616
subroutine, public m_getlog(user)
...
Definition machine.F:741
subroutine, public m_hostnm(hname)
...
Definition machine.F:583
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,...