(git:ed6f26b)
Loading...
Searching...
No Matches
input_cp2k_global.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 builds the global input section for cp2k
10!> \par History
11!> 06.2004 created [fawzi]
12!> 03.2014 moved to separate file [Ole Schuett]
13!> 10.2016 update seed input [Matthias Krack]
14!> \author fawzi
15! **************************************************************************************************
17 USE bibliography, ONLY: ceriotti2014,&
18 frigo2005,&
20 USE cp_blacs_env, ONLY: blacs_grid_col,&
41 USE grid_api, ONLY: grid_backend_auto,&
47 USE input_constants, ONLY: &
63 USE input_val_types, ONLY: char_t,&
64 integer_t,&
66 USE kinds, ONLY: dp
67 USE string_utilities, ONLY: s2a
69#include "./base/base_uses.f90"
70
71 IMPLICIT NONE
72 PRIVATE
73
74 LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .true.
75 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'input_cp2k_global'
76
77 PUBLIC :: create_global_section
78
79CONTAINS
80
81! **************************************************************************************************
82!> \brief section to hold global settings for the whole program
83!> \param section the section to be created
84!> \author fawzi
85! **************************************************************************************************
86 SUBROUTINE create_global_section(section)
87 TYPE(section_type), POINTER :: section
88
89 INTEGER :: default_dgemm
90 TYPE(keyword_type), POINTER :: keyword
91 TYPE(section_type), POINTER :: print_key, sub_section
92
93 NULLIFY (print_key)
94 cpassert(.NOT. ASSOCIATED(section))
95 CALL section_create(section, __location__, name="GLOBAL", &
96 description="Section with general information regarding which kind "// &
97 "of simulation to perform an parameters for the whole PROGRAM", &
98 n_keywords=7, n_subsections=0, repeats=.false.)
99
100 NULLIFY (keyword)
101 CALL keyword_create(keyword, __location__, name="BLACS_GRID", &
102 description="how to distribute the processors on the 2d grid needed "// &
103 "by BLACS (and thus SCALAPACK)", usage="BLACS_GRID SQUARE", &
104 default_i_val=blacs_grid_square, enum_c_vals=s2a("SQUARE", "ROW", "COLUMN"), &
105 enum_desc=s2a("Distribution by matrix blocks", "Distribution by matrix rows", &
106 "Distribution by matrix columns"), &
108 CALL section_add_keyword(section, keyword)
109 CALL keyword_release(keyword)
110
111 CALL keyword_create(keyword, __location__, name="BLACS_REPEATABLE", &
112 description="Use a topology for BLACS collectives that is guaranteed to be repeatable "// &
113 "on homogeneous architectures", &
114 usage="BLACS_REPEATABLE", &
115 default_l_val=.false., lone_keyword_l_val=.true.)
116 CALL section_add_keyword(section, keyword)
117 CALL keyword_release(keyword)
118
119 CALL keyword_create(keyword, __location__, name="PREFERRED_DIAG_LIBRARY", &
120 description="Specifies the diagonalization library to be used. If not available, "// &
121 "the ScaLAPACK library is used", &
122 usage="PREFERRED_DIAG_LIBRARY ELPA", &
123 enum_i_vals=(/fm_diag_type_elpa, &
128 enum_c_vals=s2a("ELPA", "ScaLAPACK", "SL", "CUSOLVER", "DLAF"), &
129 enum_desc=s2a("ELPA library", &
130 "ScaLAPACK library", &
131 "ScaLAPACK library (shorthand)", &
132 "cuSOLVER (CUDA GPU library)", &
133 "DLA-Future (CUDA/HIP GPU library)"), &
134 default_i_val=fm_diag_type_default)
135 CALL section_add_keyword(section, keyword)
136 CALL keyword_release(keyword)
137
138#if defined(__SPLA) && defined(__OFFLOAD_GEMM)
139 default_dgemm = do_dgemm_spla
140#else
141 default_dgemm = do_dgemm_blas
142#endif
143 CALL keyword_create(keyword, __location__, name="PREFERRED_DGEMM_LIBRARY", &
144 description="Specifies the DGEMM library to be used. If not available, "// &
145 "the BLAS routine is used. This keyword affects some DGEMM calls in the WFC code and turns on their "// &
146 "acceleration with SpLA. This keyword affects only local DGEMM calls, not the calls to PDGEMM "// &
147 "(see keyword FM%TYPE_OF_MATRIX_MULTIPLICATION).", &
148 usage="PREFERRED_DGEMM_LIBRARY SPLA", &
149 default_i_val=default_dgemm, &
150 enum_i_vals=(/do_dgemm_spla, do_dgemm_blas/), &
151 enum_c_vals=s2a("SPLA", "BLAS"), &
152 enum_desc=s2a("SPLA library", "BLAS library"))
153 CALL section_add_keyword(section, keyword)
154 CALL keyword_release(keyword)
155
156 CALL keyword_create(keyword, __location__, name="EPS_CHECK_DIAG", &
157 description="Check that the orthonormality of the eigenvectors after a diagonalization "// &
158 "fulfills the specified numerical accuracy. A negative threshold value disables the check.", &
159 usage="EPS_CHECK_DIAG 1.0E-14", &
160 default_r_val=-1.0_dp)
161 CALL section_add_keyword(section, keyword)
162 CALL keyword_release(keyword)
163
164 CALL keyword_create(keyword, __location__, name="ELPA_KERNEL", &
165 description="Specifies the kernel to be used when ELPA is in use", &
166 default_i_val=elpa_kernel_ids(1), &
167 enum_i_vals=elpa_kernel_ids, &
168 enum_c_vals=elpa_kernel_names, &
169 enum_desc=elpa_kernel_descriptions)
170 CALL section_add_keyword(section, keyword)
171 CALL keyword_release(keyword)
172
173 CALL keyword_create(keyword, __location__, name="ELPA_NEIGVEC_MIN", &
174 description="Minimum number of eigenvectors for the use of the eigensolver from "// &
175 "the ELPA library. The eigensolver from the ScaLAPACK library is used as fallback "// &
176 "for all smaller cases", &
177 usage="ELPA_NEIGVEC_MIN 32", &
178 default_i_val=16)
179 CALL section_add_keyword(section, keyword)
180 CALL keyword_release(keyword)
181
182 CALL keyword_create(keyword, __location__, name="ELPA_QR", &
183 description="For ELPA, enable a blocked QR step when reducing the input matrix "// &
184 "to banded form in preparation for the actual diagonalization step. "// &
185 "See implementation paper for more details. Requires ELPA version 201505 or newer, "// &
186 "automatically deactivated otherwise. If true, QR is activated only when the "// &
187 "the size of the diagonalized matrix is suitable. Print key PRINT_ELPA is "// &
188 "useful in determining which matrices are suitable for QR. Might accelerate the "// &
189 "diagonalization of suitable matrices.", &
190 usage="ELPA_QR", &
191 default_l_val=.false., lone_keyword_l_val=.true.)
192 CALL section_add_keyword(section, keyword)
193 CALL keyword_release(keyword)
194
195 CALL keyword_create(keyword, __location__, name="ELPA_QR_UNSAFE", &
196 description="For ELPA, disable block size limitations when used together with ELPA_QR. "// &
197 "Keyword relevant only with ELPA versions 201605 or newer. Use keyword with caution, "// &
198 "as it might result in wrong eigenvalues with some matrix orders/block sizes "// &
199 "when the number of MPI processes is varied. If the print key PRINT_ELPA is "// &
200 "active the validity of the eigenvalues is checked against values calculated without "// &
201 "ELPA QR.", &
202 usage="ELPA_QR_UNSAFE", &
203 default_l_val=.false., lone_keyword_l_val=.true.)
204 CALL section_add_keyword(section, keyword)
205 CALL keyword_release(keyword)
206
207 CALL cp_print_key_section_create(print_key, __location__, "PRINT_ELPA", &
208 description="Controls the printing of ELPA diagonalization information. "// &
209 "Useful for testing purposes, especially together with keyword ELPA_QR.", &
210 filename="__STD_OUT__")
211 CALL section_add_subsection(section, print_key)
212 CALL section_release(print_key)
213
214 CALL keyword_create(keyword, __location__, name="DLAF_NEIGVEC_MIN", &
215 description="Minimum number of eigenvectors for the use of the eigensolver from "// &
216 "the DLA-Future library. The eigensolver from the ScaLAPACK library is used as fallback "// &
217 "for all smaller cases", &
218 usage="DLAF_NEIGVEC_MIN 512", &
219 default_i_val=1024)
220 CALL section_add_keyword(section, keyword)
221 CALL keyword_release(keyword)
222
223 CALL keyword_create( &
224 keyword, __location__, name="PREFERRED_FFT_LIBRARY", &
225 description="Specifies the FFT library which should be preferred. "// &
226 "If it is not available, use FFTW3 if this is linked in, if FFTW3 is not available use FFTSG. "// &
227 "Improved performance with FFTW3 can be obtained specifying a proper value for FFTW_PLAN_TYPE. "// &
228 "Contrary to earlier CP2K versions, all libraries will result in the same grids, "// &
229 "i.e. the subset of grids which all FFT libraries can transform. "// &
230 "See EXTENDED_FFT_LENGTHS if larger FFTs or grids that more precisely match a given cutoff are needed, "// &
231 "or older results need to be reproduced. "// &
232 "FFTW3 is often (close to) optimal, and well tested with CP2K.", &
233 usage="PREFERRED_FFT_LIBRARY FFTW3", &
234 citations=(/frigo2005/), &
235 default_i_val=do_fft_fftw3, &
236 enum_i_vals=(/do_fft_sg, do_fft_fftw3, do_fft_fftw3/), &
237 enum_c_vals=s2a("FFTSG", "FFTW3", "FFTW"), &
238 enum_desc=s2a("Stefan Goedecker's FFT (FFTSG), always available, "// &
239 "will be used in case a FFT library is specified and not available.", &
240 "a fast portable FFT library. Recommended. "// &
241 "See also the FFTW_PLAN_TYPE, and FFTW_WISDOM_FILE_NAME keywords.", &
242 "Same as FFTW3 (for compatibility with CP2K 2.3)"))
243 CALL section_add_keyword(section, keyword)
244 CALL keyword_release(keyword)
245
246 CALL keyword_create(keyword, __location__, name="FFTW_WISDOM_FILE_NAME", &
247 description="The name of the file that contains wisdom (pre-planned FFTs) for use with FFTW3. "// &
248 "Using wisdom can significantly speed up the FFTs (see the FFTW homepage for details). "// &
249 "Note that wisdom is not transferable between different computer (architectures). "// &
250 "Wisdom can be generated using the fftw-wisdom tool that is part of the fftw installation. "// &
251 "cp2k/tools/cp2k-wisdom is a script that contains some additional info, and can help "// &
252 "to generate a useful default for /etc/fftw/wisdom or particular values for a given simulation.", &
253 usage="FFTW_WISDOM_FILE_NAME wisdom.dat", default_lc_val="/etc/fftw/wisdom")
254 CALL section_add_keyword(section, keyword)
255 CALL keyword_release(keyword)
256
257 CALL keyword_create(keyword, __location__, name="FFTW_PLAN_TYPE", &
258 description="FFTW can have improved performance if it is allowed to plan with "// &
259 "explicit measurements which strategy is best for a given FFT. "// &
260 "While a plan based on measurements is generally faster, "// &
261 "differences in machine load will lead to different plans for the same input file, "// &
262 "and thus numerics for the FFTs will be slightly different from run to run. "// &
263 "PATIENT planning is recommended for long ab initio MD runs.", &
264 usage="FFTW_PLAN_TYPE PATIENT", &
265 citations=(/frigo2005/), &
266 default_i_val=fftw_plan_estimate, &
268 enum_c_vals=s2a("ESTIMATE", &
269 "MEASURE", &
270 "PATIENT", &
271 "EXHAUSTIVE"), &
272 enum_desc=s2a("Quick estimate, no runtime measurements.", &
273 "Quick measurement, somewhat faster FFTs.", &
274 "Measurements trying a wider range of possibilities.", &
275 "Measurements trying all possibilities - use with caution."))
276 CALL section_add_keyword(section, keyword)
277 CALL keyword_release(keyword)
278
279 CALL keyword_create(keyword, __location__, name="EXTENDED_FFT_LENGTHS", &
280 description="Use fft library specific values for the allows number of points in FFTs. "// &
281 "The default is to use the internal FFT lengths. For external fft libraries this may "// &
282 "create an error at the external library level, because the length provided by cp2k is "// &
283 "not supported by the external library. In this case switch on this keyword "// &
284 "to obtain, with certain fft libraries, lengths matching the external fft library lengths, or "// &
285 "larger allowed grids, or grids that more precisely match a given cutoff. "// &
286 "IMPORTANT NOTE: in this case, the actual grids used in CP2K depends on the FFT library. "// &
287 "A change of FFT library must therefore be considered equivalent to a change of basis, "// &
288 "which implies a change of total energy.", &
289 usage="EXTENDED_FFT_LENGTHS", &
290 default_l_val=.false., lone_keyword_l_val=.true.)
291 CALL section_add_keyword(section, keyword)
292 CALL keyword_release(keyword)
293
294 CALL keyword_create(keyword, __location__, name="FFT_POOL_SCRATCH_LIMIT", &
295 description="Limits the memory usage of the FFT scratch pool, potentially reducing efficiency a bit", &
296 usage="FFT_POOL_SCRATCH_LIMIT {INTEGER}", default_i_val=15)
297 CALL section_add_keyword(section, keyword)
298 CALL keyword_release(keyword)
299
300 CALL keyword_create(keyword, __location__, name="ALLTOALL_SGL", &
301 description="All-to-all communication (FFT) should use single precision", &
302 usage="ALLTOALL_SGL YES", &
303 default_l_val=.false., lone_keyword_l_val=.true.)
304 CALL section_add_keyword(section, keyword)
305 CALL keyword_release(keyword)
306
307 CALL keyword_create(keyword, __location__, name="PRINT_LEVEL", &
308 variants=(/"IOLEVEL"/), &
309 description="How much output is written out.", &
310 usage="PRINT_LEVEL HIGH", &
311 default_i_val=medium_print_level, enum_c_vals= &
312 s2a("SILENT", "LOW", "MEDIUM", "HIGH", "DEBUG"), &
313 enum_desc=s2a("Almost no output", &
314 "Little output", "Quite some output", "Lots of output", &
315 "Everything is written out, useful for debugging purposes only"), &
318 CALL section_add_keyword(section, keyword)
319 CALL keyword_release(keyword)
320
321 CALL keyword_create( &
322 keyword, __location__, name="PROGRAM_NAME", &
323 variants=(/"PROGRAM"/), &
324 description="Which program should be run", &
325 usage="PROGRAM_NAME {STRING}", &
326 enum_c_vals=s2a("ATOM", "FARMING", "TEST", "CP2K", "OPTIMIZE_INPUT", "OPTIMIZE_BASIS", "TMC", "MC_ANALYSIS", "SWARM"), &
327 enum_desc=s2a("Runs single atom calculations", &
328 "Runs N independent jobs in a single run", &
329 "Do some benchmarking and testing", &
330 "Runs one of the CP2K package", &
331 "A tool to optimize parameters in a CP2K input", &
332 "A tool to create a MOLOPT or ADMM basis for a given set"// &
333 " of training structures", &
334 "Runs Tree Monte Carlo algorithm using additional input file(s)", &
335 "Runs (Tree) Monte Carlo trajectory file analysis", &
336 "Runs swarm based calculation"), &
339 default_i_val=do_cp2k)
340 CALL section_add_keyword(section, keyword)
341 CALL keyword_release(keyword)
342
343 CALL keyword_create(keyword, __location__, name="PROJECT_NAME", &
344 variants=(/"PROJECT"/), &
345 description="Name of the project (used to build the name of the "// &
346 "trajectory, and other files generated by the program)", &
347 usage="PROJECT_NAME {STRING}", &
348 default_c_val="PROJECT")
349 CALL section_add_keyword(section, keyword)
350 CALL keyword_release(keyword)
351
352 CALL keyword_create(keyword, __location__, name="OUTPUT_FILE_NAME", &
353 description="Name of the output file. "// &
354 "Relevant only if automatically started (through farming for example). "// &
355 "If empty uses the project name as basis for it.", &
356 usage="OUTPUT_FILE_NAME {filename}", default_lc_val="")
357 CALL section_add_keyword(section, keyword)
358 CALL keyword_release(keyword)
359
360 CALL keyword_create( &
361 keyword, __location__, name="RUN_TYPE", &
362 description="Type of run that you want to perform Geometry "// &
363 "optimization, md, montecarlo,...", &
364 usage="RUN_TYPE MD", &
365 default_i_val=energy_force_run, &
366 citations=(/ceriotti2014, schonherr2014/), &
367 enum_c_vals=s2a("NONE", "ENERGY", "ENERGY_FORCE", "MD", "GEO_OPT", &
368 "MC", "DEBUG", "BSSE", "LR", "PINT", "VIBRATIONAL_ANALYSIS", &
369 "BAND", "CELL_OPT", "WFN_OPT", "WAVEFUNCTION_OPTIMIZATION", &
370 "MOLECULAR_DYNAMICS", "GEOMETRY_OPTIMIZATION", "MONTECARLO", &
371 "LINEAR_RESPONSE", "NORMAL_MODES", "RT_PROPAGATION", &
372 "EHRENFEST_DYN", "TAMC", "TMC", "DRIVER", "NEGF"), &
379 enum_desc=s2a("Perform no tasks", "Computes energy", "Computes energy and forces", &
380 "Molecular Dynamics", "Geometry Optimization", "Monte Carlo", &
381 "Performs a Debug analysis", "Basis set superposition error", "Linear Response", &
382 "Path integral", "Vibrational analysis", "Band methods", &
383 "Cell optimization. Both cell vectors and atomic positions are optimised.", &
384 "Alias for ENERGY", "Alias for ENERGY", "Alias for MD", "Alias for GEO_OPT", &
385 "Alias for MC", "Alias for LR", "Alias for VIBRATIONAL_ANALYSIS", &
386 "Real Time propagation run (fixed ionic positions)", &
387 "Ehrenfest dynamics (using real time propagation of the wavefunction)", &
388 "Temperature Accelerated Monte Carlo (TAMC)", &
389 "Tree Monte Carlo (TMC), a pre-sampling MC algorithm", &
390 "i-PI driver mode", &
391 "Non-equilibrium Green's function method"))
392 CALL section_add_keyword(section, keyword)
393 CALL keyword_release(keyword)
394
395 CALL keyword_create(keyword, __location__, name="WALLTIME", &
396 variants=(/"WALLTI"/), &
397 description="Maximum execution time for this run. Time in seconds or in HH:MM:SS.", &
398 usage="WALLTIME {real} or {HH:MM:SS}", default_lc_val="")
399 CALL section_add_keyword(section, keyword)
400 CALL keyword_release(keyword)
401
402 CALL keyword_create(keyword, __location__, name="ECHO_INPUT", &
403 description="If the input should be echoed to the output with all the "// &
404 "defaults made explicit", &
405 usage="ECHO_INPUT NO", default_l_val=.false., lone_keyword_l_val=.true.)
406 CALL section_add_keyword(section, keyword)
407 CALL keyword_release(keyword)
408
409 CALL keyword_create(keyword, __location__, name="ECHO_ALL_HOSTS", &
410 description="Echo a list of hostname and pid for all MPI processes.", &
411 usage="ECHO_ALL_HOSTS NO", default_l_val=.false., lone_keyword_l_val=.true.)
412 CALL section_add_keyword(section, keyword)
413 CALL keyword_release(keyword)
414
415 CALL keyword_create(keyword, __location__, name="ENABLE_MPI_IO", &
416 description="Enable MPI parallelization for all supported I/O routines "// &
417 "Currently, only cube file writer/reader routines use MPI I/O. Disabling "// &
418 "this flag might speed up calculations dominated by I/O.", &
419 usage="ENABLE_MPI_IO FALSE", default_l_val=.true., lone_keyword_l_val=.true.)
420 CALL section_add_keyword(section, keyword)
421 CALL keyword_release(keyword)
422
423 CALL keyword_create(keyword, __location__, name="TRACE", &
424 description="If a debug trace of the execution of the program should be written", &
425 usage="TRACE", &
426 default_l_val=.false., lone_keyword_l_val=.true.)
427 CALL section_add_keyword(section, keyword)
428 CALL keyword_release(keyword)
429
430 CALL keyword_create(keyword, __location__, name="TRACE_MASTER", &
431 description="For parallel TRACEd runs: only the master node writes output.", &
432 usage="TRACE_MASTER", &
433 default_l_val=.true., lone_keyword_l_val=.true.)
434 CALL section_add_keyword(section, keyword)
435 CALL keyword_release(keyword)
436
437 CALL keyword_create( &
438 keyword, __location__, name="TRACE_MAX", &
439 description="Limit the total number a given subroutine is printed in the trace. Accounting is not influenced.", &
440 usage="TRACE_MAX 100", default_i_val=huge(0))
441 CALL section_add_keyword(section, keyword)
442 CALL keyword_release(keyword)
443
444 CALL keyword_create( &
445 keyword, __location__, name="TRACE_ROUTINES", &
446 description="A list of routines to trace. If left empty all routines are traced. Accounting is not influenced.", &
447 usage="TRACE_ROUTINES {routine_name1} {routine_name2} ...", type_of_var=char_t, &
448 n_var=-1)
449 CALL section_add_keyword(section, keyword)
450 CALL keyword_release(keyword)
451
452 CALL keyword_create( &
453 keyword, __location__, name="FLUSH_SHOULD_FLUSH", &
454 description="Flush output regularly, enabling this option might degrade performance significantly on certain machines.", &
455 usage="FLUSH_SHOULD_FLUSH", &
456 default_l_val=.true., lone_keyword_l_val=.true.)
457 CALL section_add_keyword(section, keyword)
458 CALL keyword_release(keyword)
459
460 CALL keyword_create(keyword, __location__, name="CALLGRAPH", &
461 description="At the end of the run write a callgraph to file, "// &
462 "which contains detailed timing informations. "// &
463 "This callgraph can be viewed e.g. with the open-source program kcachegrind.", &
464 usage="CALLGRAPH {NONE|MASTER|ALL}", &
465 default_i_val=callgraph_none, lone_keyword_i_val=callgraph_master, &
466 enum_c_vals=s2a("NONE", "MASTER", "ALL"), &
467 enum_desc=s2a("No callgraph gets written", &
468 "Only the master process writes his callgraph", &
469 "All processes write their callgraph (into a separate files)."), &
471 CALL section_add_keyword(section, keyword)
472 CALL keyword_release(keyword)
473
474 CALL keyword_create(keyword, __location__, name="CALLGRAPH_FILE_NAME", &
475 description="Name of the callgraph file, which is written at the end of the run. "// &
476 "If not specified the project name will be used as filename.", &
477 usage="CALLGRAPH_FILE_NAME {filename}", default_lc_val="")
478 CALL section_add_keyword(section, keyword)
479 CALL keyword_release(keyword)
480
481 CALL keyword_create(keyword, __location__, name="SEED", &
482 description="Initial seed for the global (pseudo)random number generator "// &
483 "to create a stream of normally Gaussian distributed random numbers. "// &
484 "Exactly 1 or 6 positive integer values are expected. A single value is "// &
485 "replicated to fill up the full seed array with 6 numbers.", &
486 n_var=-1, &
487 type_of_var=integer_t, &
488 usage="SEED {INTEGER} .. {INTEGER}", &
489 default_i_vals=(/2000/))
490 CALL section_add_keyword(section, keyword)
491 CALL keyword_release(keyword)
492
493 CALL keyword_create(keyword, __location__, name="SAVE_MEM", &
494 description="Some sections of the input structure are deallocated when not needed,"// &
495 " and reallocated only when used. This reduces the required maximum memory.", &
496 usage="SAVE_MEM", &
497 default_l_val=.false., lone_keyword_l_val=.true.)
498 CALL section_add_keyword(section, keyword)
499 CALL keyword_release(keyword)
500
501 CALL cp_print_key_section_create(print_key, __location__, "TIMINGS", description= &
502 "Controls the printing of the timing report at the end of CP2K execution", &
503 print_level=silent_print_level, filename="__STD_OUT__")
504
505 CALL keyword_create(keyword, __location__, name="THRESHOLD", &
506 description="Specify % of CPUTIME above which the contribution will be inserted in the"// &
507 " final timing report (e.g. 0.02 = 2%)", &
508 usage="THRESHOLD {REAL}", &
509 default_r_val=0.02_dp)
510 CALL section_add_keyword(print_key, keyword)
511 CALL keyword_release(keyword)
512
513 CALL keyword_create(keyword, __location__, name="SORT_BY_SELF_TIME", &
514 description="Sort the final timing report by the average self (exclusive) time instead of the "// &
515 "total (inclusive) time of a routine", &
516 usage="SORT_BY_SELF_TIME on", &
517 default_l_val=.false., lone_keyword_l_val=.true.)
518 CALL section_add_keyword(print_key, keyword)
519 CALL keyword_release(keyword)
520
521 CALL keyword_create(keyword, __location__, name="REPORT_MAXLOC", &
522 description="Report the rank with the slowest maximum self timing."// &
523 " Can be used to debug hard- or software."// &
524 " Also enables ECHO_ALL_HOSTS to link rank to hostname.", &
525 usage="REPORT_MAXLOC on", &
526 default_l_val=.false., lone_keyword_l_val=.true.)
527 CALL section_add_keyword(print_key, keyword)
528 CALL keyword_release(keyword)
529
530 CALL keyword_create(keyword, __location__, name="TIME_MPI", &
531 description="Include message_passing calls in the timing report (useful with CALLGRAPH).", &
532 usage="TIME_MPI .FALSE.", &
533 default_l_val=.true., lone_keyword_l_val=.true.)
534 CALL section_add_keyword(print_key, keyword)
535 CALL keyword_release(keyword)
536
537 CALL keyword_create(keyword, __location__, name="TIMINGS_LEVEL", &
538 description="Specify the level of timings report. "// &
539 "Possible values are: 0 (report only CP2K root timer), 1 (all timers).", &
540 usage="TIMINGS_LEVEL 1", &
541 default_i_val=default_timings_level, lone_keyword_i_val=default_timings_level)
542 CALL section_add_keyword(print_key, keyword)
543 CALL keyword_release(keyword)
544
545 CALL section_add_subsection(section, print_key)
546 CALL section_release(print_key)
547
548 CALL cp_print_key_section_create(print_key, __location__, "REFERENCES", description= &
549 "Controls the printing of the references relevant to the calculations performed", &
550 print_level=silent_print_level, filename="__STD_OUT__")
551 CALL section_add_subsection(section, print_key)
552 CALL section_release(print_key)
553
554 CALL cp_print_key_section_create(print_key, __location__, "PROGRAM_RUN_INFO", &
555 description="controls the printing of initialization controlled by the global section", &
556 print_level=silent_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
557 CALL section_add_subsection(section, print_key)
558 CALL section_release(print_key)
559
560 CALL cp_print_key_section_create(print_key, __location__, "PRINT", description= &
561 "controls the printing of physical and mathematical constants", &
562 print_level=medium_print_level, filename="__STD_OUT__")
563
564 CALL keyword_create(keyword, __location__, name="BASIC_DATA_TYPES", &
565 description="Controls the printing of the basic data types.", &
566 default_l_val=.false., lone_keyword_l_val=.true.)
567 CALL section_add_keyword(print_key, keyword)
568 CALL keyword_release(keyword)
569 CALL keyword_create(keyword, __location__, name="physcon", &
570 description="if the printkey is active prints the physical constants", &
571 default_l_val=.true., lone_keyword_l_val=.true.)
572 CALL section_add_keyword(print_key, keyword)
573 CALL keyword_release(keyword)
574 CALL keyword_create(keyword, __location__, name="SPHERICAL_HARMONICS", &
575 description="if the printkey is active prints the spherical harmonics", &
576 default_i_val=-1, type_of_var=integer_t)
577 CALL section_add_keyword(print_key, keyword)
578 CALL keyword_release(keyword)
579 CALL keyword_create(keyword, __location__, name="RNG_MATRICES", &
580 description="Prints the transformation matrices used by the random number generator", &
581 default_l_val=.false., &
582 lone_keyword_l_val=.true.)
583 CALL section_add_keyword(print_key, keyword)
584 CALL keyword_release(keyword)
585 CALL keyword_create(keyword, __location__, name="RNG_CHECK", &
586 description="Performs a check of the global (pseudo)random "// &
587 "number generator (RNG) and prints the result", &
588 default_l_val=.false., &
589 lone_keyword_l_val=.true.)
590 CALL section_add_keyword(print_key, keyword)
591 CALL keyword_release(keyword)
592 CALL keyword_create(keyword, __location__, name="GLOBAL_GAUSSIAN_RNG", &
593 description="Prints the initial status of the global Gaussian "// &
594 "(pseudo)random number stream which is mostly used for "// &
595 "the velocity initialization", &
596 default_l_val=.false., &
597 lone_keyword_l_val=.true.)
598 CALL section_add_keyword(print_key, keyword)
599 CALL keyword_release(keyword)
600
601 CALL section_add_subsection(section, print_key)
602 CALL section_release(print_key)
603 NULLIFY (sub_section)
604 ! FM section
605 CALL create_fm_section(sub_section)
606 CALL section_add_subsection(section, sub_section)
607 CALL section_release(sub_section)
608 ! DBCSR options
609 CALL create_dbcsr_section(sub_section)
610 CALL section_add_subsection(section, sub_section)
611 CALL section_release(sub_section)
612 ! FM diagonalization redistribution rules
613 CALL create_fm_diag_rules_section(sub_section)
614 CALL section_add_subsection(section, sub_section)
615 CALL section_release(sub_section)
616 ! Grid library
617 CALL create_grid_section(sub_section)
618 CALL section_add_subsection(section, sub_section)
619 CALL section_release(sub_section)
620
621 END SUBROUTINE create_global_section
622
623! **************************************************************************************************
624!> \brief Creates the dbcsr section for configuring FM
625!> \param section ...
626!> \date 2011-04-05
627!> \author Florian Schiffmann
628! **************************************************************************************************
629 SUBROUTINE create_fm_section(section)
630 TYPE(section_type), POINTER :: section
631
632 INTEGER :: default_matmul
633 TYPE(keyword_type), POINTER :: keyword
634
635 cpassert(.NOT. ASSOCIATED(section))
636 CALL section_create(section, __location__, name="FM", &
637 description="Configuration options for the full matrices.", &
638 n_keywords=1, n_subsections=0, repeats=.false.)
639
640 NULLIFY (keyword)
641
642 CALL keyword_create(keyword, __location__, name="NROW_BLOCKS", &
643 description="Defines the number of rows per scalapack block in "// &
644 "the creation of block cyclic dense matrices. "// &
645 "Use an internal default if zero or negative.", &
646 default_i_val=cp_fm_struct_get_nrow_block())
647 CALL section_add_keyword(section, keyword)
648 CALL keyword_release(keyword)
649
650 CALL keyword_create(keyword, __location__, name="NCOL_BLOCKS", &
651 description="Defines the number of columns per scalapack block in "// &
652 "the creation of vlock cyclic dense matrices. "// &
653 "Use an internal default if zero or negative.", &
654 default_i_val=cp_fm_struct_get_ncol_block())
655 CALL section_add_keyword(section, keyword)
656 CALL keyword_release(keyword)
657
658 CALL keyword_create(keyword, __location__, name="FORCE_BLOCK_SIZE", &
659 description="Ensure for small matrices that the layout is compatible "// &
660 "with bigger ones, i.e. no subdivision is performed (can break LAPACK).", &
661 usage="FORCE_BLOCK_SIZE", &
662 default_l_val=.false., lone_keyword_l_val=.true.)
663 CALL section_add_keyword(section, keyword)
664 CALL keyword_release(keyword)
665
666#if defined(__COSMA)
667 default_matmul = do_cosma
668#else
669 default_matmul = do_scalapack
670#endif
671
672 CALL keyword_create(keyword, __location__, name="TYPE_OF_MATRIX_MULTIPLICATION", &
673 description="Allows to switch between scalapack pxgemm and COSMA pxgemm. "// &
674 "COSMA reduces the communication costs but increases the memory demands. "// &
675 "The performance of Scalapack's pxgemm on GPU's depends "// &
676 "crucially on the BLOCK_SIZES. Make sure optimized kernels are available.", &
677 default_i_val=default_matmul, &
678 enum_i_vals=(/do_scalapack, do_scalapack, do_cosma/), &
679 enum_c_vals=s2a("SCALAPACK", "PDGEMM", "COSMA"), &
680 enum_desc=s2a("Standard ScaLAPACK pdgemm", &
681 "Alias for ScaLAPACK", &
682 "COSMA is employed. See <https://github.com/eth-cscs/COSMA>."))
683 CALL section_add_keyword(section, keyword)
684 CALL keyword_release(keyword)
685
686 !
687 END SUBROUTINE create_fm_section
688! **************************************************************************************************
689!> \brief Creates the input section used to define the heuristic rules which determine if
690!> a FM matrix should be redistributed before diagonalizing it.
691!> \param section the input section to create
692!> \author Nico Holmberg [01.2018]
693! **************************************************************************************************
694 SUBROUTINE create_fm_diag_rules_section(section)
695 TYPE(section_type), POINTER :: section
696
697 TYPE(keyword_type), POINTER :: keyword
698
699 cpassert(.NOT. ASSOCIATED(section))
700 CALL section_create(section, __location__, name="FM_DIAG_SETTINGS", &
701 description="This section defines a set of heuristic rules which are "// &
702 "used to calculate the optimal number of CPUs, M, needed to diagonalize a "// &
703 "full matrix distributed on N processors (FM type). If M &lt N, the matrix "// &
704 "is redistributed onto M processors before it is diagonalized. "// &
705 "The optimal value is calculate according to M = ((K+a*x-1)/(a*x))*a, "// &
706 "where K is the size of the matrix, and {a, x} are integers defined below. "// &
707 "The default values have been selected based on timings on a Cray XE6. "// &
708 "Supports diagonalization libraries SL and ELPA (see keyword ELPA_FORCE_REDISTRIBUTE).", &
709 n_keywords=3, n_subsections=0, repeats=.false.)
710
711 NULLIFY (keyword)
712
713 CALL keyword_create(keyword, __location__, name="PARAMETER_A", &
714 description="Parameter used for defining the rule which determines the optimal "// &
715 "number of CPUs needed to diagonalize a full distributed matrix. The optimal "// &
716 "number of CPUs will be an integer multiple of this variable.", &
717 usage="PARAMETER_A 4", type_of_var=integer_t, &
718 default_i_val=4)
719 CALL section_add_keyword(section, keyword)
720 CALL keyword_release(keyword)
721
722 CALL keyword_create(keyword, __location__, name="PARAMETER_X", &
723 description="Parameter used for defining the rule which determines the optimal "// &
724 "number of CPUs needed to diagonalize a full distributed matrix. The optimal "// &
725 "number of CPUs will be roughly proportional to this value.", &
726 usage="PARAMETER_X 60", type_of_var=integer_t, &
727 default_i_val=60)
728 CALL section_add_keyword(section, keyword)
729 CALL keyword_release(keyword)
730
731 CALL keyword_create(keyword, __location__, name="PRINT_FM_REDISTRIBUTE", &
732 description="Controls printing of information related to this section. For each "// &
733 "diagonalized matrix, prints the size of the matrix, the optimal number of CPUs, "// &
734 "as well as notifies if the matrix was redistributed. Useful for testing.", &
735 usage="PRINT_FM_REDISTRIBUTE", type_of_var=logical_t, &
736 default_l_val=.false., lone_keyword_l_val=.true.)
737 CALL section_add_keyword(section, keyword)
738 CALL keyword_release(keyword)
739
740 CALL keyword_create(keyword, __location__, name="ELPA_FORCE_REDISTRIBUTE", &
741 description="Controls how to perform redistribution when ELPA is used for diagonalization. "// &
742 "By default, redistribution is always performed using the defined rules. "// &
743 "By turning off this keyword, matrices are redistributed only to prevent crashes in the ELPA "// &
744 "library which happens when the original matrix is distributed over too many processors.", &
745 usage="ELPA_FORCE_REDISTRIBUTE", type_of_var=logical_t, &
746 default_l_val=.true., lone_keyword_l_val=.true.)
747 CALL section_add_keyword(section, keyword)
748 CALL keyword_release(keyword)
749
750 END SUBROUTINE create_fm_diag_rules_section
751
752! **************************************************************************************************
753!> \brief Creates the section for configuring the grid library
754!> \param section ...
755!> \author Ole Schuett
756! **************************************************************************************************
757 SUBROUTINE create_grid_section(section)
758 TYPE(section_type), POINTER :: section
759
760 TYPE(keyword_type), POINTER :: keyword
761
762 cpassert(.NOT. ASSOCIATED(section))
763 CALL section_create(section, __location__, name="GRID", &
764 description="Configuration options for the grid library, "// &
765 "which performs e.g. the collocate and integrate of the GPW method.", &
766 n_keywords=1, n_subsections=0, repeats=.false.)
767
768 NULLIFY (keyword)
769 CALL keyword_create(keyword, __location__, name="BACKEND", &
770 description="Selects the backed used by the grid library.", &
771 default_i_val=grid_backend_auto, &
774 enum_c_vals=s2a("AUTO", "REFERENCE", "CPU", "DGEMM", "GPU", "HIP"), &
775 enum_desc=s2a("Let the grid library pick the backend automatically", &
776 "Reference backend implementation", &
777 "Optimized CPU backend", &
778 "Alternative CPU backend based on DGEMM", &
779 "GPU backend optimized for CUDA that also supports HIP", &
780 "HIP backend optimized for ROCm"))
781 CALL section_add_keyword(section, keyword)
782 CALL keyword_release(keyword)
783
784 CALL keyword_create(keyword, __location__, name="VALIDATE", &
785 description="When enabled the reference backend is run in shadow mode "// &
786 "and its results are compared with those from the selected backend. "// &
787 "If the two results differ by too much then the calculation is aborted.", &
788 default_l_val=.false., lone_keyword_l_val=.true.)
789 CALL section_add_keyword(section, keyword)
790 CALL keyword_release(keyword)
791
792 CALL keyword_create(keyword, __location__, name="APPLY_CUTOFF", &
793 description="When enabled the cpu backend "// &
794 "apply a spherical cutoff on the top of the cube. "// &
795 "There is a performance penalty using it in "// &
796 "combination with the cpu backend but it is on by "// &
797 "default for the regtests", default_l_val=.true., &
798 lone_keyword_l_val=.true.)
799 CALL section_add_keyword(section, keyword)
800 CALL keyword_release(keyword)
801
802 END SUBROUTINE create_grid_section
803
804END MODULE input_cp2k_global
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public schonherr2014
integer, save, public frigo2005
integer, save, public ceriotti2014
methods related to the blacs parallel environment
integer, parameter, public blacs_grid_row
integer, parameter, public blacs_grid_col
integer, parameter, public blacs_grid_square
used for collecting some of the diagonalization schemes available for cp_fm_type. cp_fm_power also mo...
Definition cp_fm_diag.F:17
integer, parameter, public fm_diag_type_cusolver
Definition cp_fm_diag.F:104
integer, parameter, public fm_diag_type_dlaf
Definition cp_fm_diag.F:104
integer, parameter, public fm_diag_type_scalapack
Definition cp_fm_diag.F:104
integer, parameter, public fm_diag_type_default
Definition cp_fm_diag.F:115
integer, parameter, public fm_diag_type_elpa
Definition cp_fm_diag.F:104
Wrapper for ELPA.
Definition cp_fm_elpa.F:12
character(len=14), dimension(1), parameter, public elpa_kernel_names
Definition cp_fm_elpa.F:150
character(len=44), dimension(1), parameter, public elpa_kernel_descriptions
Definition cp_fm_elpa.F:151
integer, dimension(1), parameter, public elpa_kernel_ids
Definition cp_fm_elpa.F:149
represent the structure of a full matrix
integer function, public cp_fm_struct_get_nrow_block()
...
integer function, public cp_fm_struct_get_ncol_block()
...
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer, parameter, public debug_print_level
integer, parameter, public low_print_level
integer, parameter, public medium_print_level
integer, parameter, public high_print_level
integer, parameter, public add_last_numeric
integer, parameter, public silent_print_level
subroutine, public cp_print_key_section_create(print_key_section, location, name, description, print_level, each_iter_names, each_iter_values, add_last, filename, common_iter_levels, citations, unit_str)
creates a print_key section
Fortran API for the grid package, which is written in C.
Definition grid_api.F:12
integer, parameter, public grid_backend_auto
Definition grid_api.F:66
integer, parameter, public grid_backend_gpu
Definition grid_api.F:70
integer, parameter, public grid_backend_hip
Definition grid_api.F:71
integer, parameter, public grid_backend_dgemm
Definition grid_api.F:69
integer, parameter, public grid_backend_cpu
Definition grid_api.F:68
integer, parameter, public grid_backend_ref
Definition grid_api.F:67
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public fftw_plan_patient
integer, parameter, public driver_run
integer, parameter, public energy_run
integer, parameter, public fftw_plan_exhaustive
integer, parameter, public do_fft_sg
integer, parameter, public callgraph_all
integer, parameter, public do_farming
integer, parameter, public do_cosma
integer, parameter, public do_cp2k
integer, parameter, public do_scalapack
integer, parameter, public linear_response_run
integer, parameter, public do_tamc
integer, parameter, public ehrenfest
integer, parameter, public do_opt_basis
integer, parameter, public debug_run
integer, parameter, public do_test
integer, parameter, public fftw_plan_estimate
integer, parameter, public callgraph_master
integer, parameter, public do_dgemm_blas
integer, parameter, public do_band
integer, parameter, public do_tree_mc
integer, parameter, public bsse_run
integer, parameter, public energy_force_run
integer, parameter, public callgraph_none
integer, parameter, public do_optimize_input
integer, parameter, public do_atom
integer, parameter, public mon_car_run
integer, parameter, public do_tree_mc_ana
integer, parameter, public mol_dyn_run
integer, parameter, public do_fft_fftw3
integer, parameter, public cell_opt_run
integer, parameter, public pint_run
integer, parameter, public gaussian
integer, parameter, public vib_anal
integer, parameter, public none_run
integer, parameter, public negf_run
integer, parameter, public fftw_plan_measure
integer, parameter, public tree_mc_run
integer, parameter, public real_time_propagation
integer, parameter, public geo_opt_run
integer, parameter, public do_dgemm_spla
integer, parameter, public do_swarm
builds the global input section for cp2k
subroutine, public create_global_section(section)
section to hold global settings for the whole program
represents keywords in an input
subroutine, public keyword_release(keyword)
releases the given keyword (see doc/ReferenceCounting.html)
subroutine, public keyword_create(keyword, location, name, description, usage, type_of_var, n_var, repeats, variants, default_val, default_l_val, default_r_val, default_lc_val, default_c_val, default_i_val, default_l_vals, default_r_vals, default_c_vals, default_i_vals, lone_keyword_val, lone_keyword_l_val, lone_keyword_r_val, lone_keyword_c_val, lone_keyword_i_val, lone_keyword_l_vals, lone_keyword_r_vals, lone_keyword_c_vals, lone_keyword_i_vals, enum_c_vals, enum_i_vals, enum, enum_strict, enum_desc, unit_str, citations, deprecation_notice, removed)
creates a keyword object
objects that represent the structure of input sections and the data contained in an input section
subroutine, public section_create(section, location, name, description, n_keywords, n_subsections, repeats, citations, deprecation_notice)
creates a list of keywords
subroutine, public section_add_keyword(section, keyword)
adds a keyword to the given section
subroutine, public section_add_subsection(section, subsection)
adds a subsection to the given section
recursive subroutine, public section_release(section)
releases the given keyword list (see doc/ReferenceCounting.html)
a wrapper for basic fortran types.
integer, parameter, public logical_t
integer, parameter, public char_t
integer, parameter, public integer_t
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
Utilities for string manipulations.
Timing routines for accounting.
Definition timings.F:17
integer, parameter, public default_timings_level
Definition timings.F:67
represent a keyword in the input
represent a section of the input file