(git:ed6f26b)
Loading...
Searching...
No Matches
environment.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 Sets up and terminates the global environment variables
10!> \par History
11!> - Merged with Quickstep MODULE start_program_run (17.01.2002,MK)
12!> - Compile information added (16.01.2002,MK)
13!> - Merged with MODULE cp2k_input, some rearrangements (30.10.2002,MK)
14!> - Update seed input (24.10.2016,MK)
15!> \author JGH,MK
16! **************************************************************************************************
18 USE bibliography, ONLY: frigo2005,&
19 marek2014,&
20 solca2024,&
21 cite_reference
22 USE cp2k_info, ONLY: &
26 USE cp_files, ONLY: close_file,&
34 diag_init,&
40 USE cp_log_handling, ONLY: &
52 USE fft_tools, ONLY: fwfft,&
53 fft3d,&
59 USE grid_api, ONLY: grid_backend_auto,&
65 USE header, ONLY: cp2k_footer,&
67 USE input_constants, ONLY: &
76 USE input_section_types, ONLY: &
80 USE kinds, ONLY: default_path_length,&
82 dp,&
83 int_8,&
86 USE machine, ONLY: &
91 USE mp_perf_env, ONLY: add_mp_perf_env,&
98 USE parallel_rng_types, ONLY: gaussian,&
99 check_rng,&
102 USE physcon, ONLY: write_physcon
108 USE timings, ONLY: add_timer_env,&
118
119!$ USE OMP_LIB, ONLY: omp_get_max_threads, omp_get_thread_num, omp_get_num_threads
120#include "./base/base_uses.f90"
121
122 IMPLICIT NONE
123
124 PRIVATE
125
126 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'environment'
127
128 ! Public subroutines
129
131
132CONTAINS
133
134! **************************************************************************************************
135!> \brief Initializes a CP2K run (setting of the global environment variables)
136!> \param para_env ...
137!> \param output_unit ...
138!> \param globenv ...
139!> \param input_file_name ...
140!> \param wdir ...
141!> \par History
142!> JGH (28.11.2001) : default for pp_library_path
143!> - print keys added (17.01.2002, MK)
144!> - merged with cp2k_input (30.10.2002,MK)
145!> \author JGH,MK
146! **************************************************************************************************
147 SUBROUTINE cp2k_init(para_env, output_unit, globenv, input_file_name, wdir)
148
149 TYPE(mp_para_env_type), POINTER :: para_env
150 INTEGER :: output_unit
151 TYPE(global_environment_type), POINTER :: globenv
152 CHARACTER(LEN=*) :: input_file_name
153 CHARACTER(LEN=*), OPTIONAL :: wdir
154
155 CHARACTER(LEN=10*default_string_length) :: cp_flags
156 INTEGER :: i, ilen, my_output_unit
157 TYPE(cp_logger_type), POINTER :: logger
158
159 ! create a timer_env
160
161 CALL add_timer_env()
162
163 ! Message passing performance
164 CALL add_mp_perf_env()
165
166 ! Init the default logger
167 IF (para_env%is_source()) THEN
168 my_output_unit = output_unit
169 ELSE
170 my_output_unit = -1
171 END IF
172 NULLIFY (logger)
173 CALL cp_logger_create(logger, para_env=para_env, &
174 default_global_unit_nr=output_unit, &
175 close_global_unit_on_dealloc=.false.)
176 CALL cp_add_default_logger(logger)
177 CALL cp_logger_release(logger)
178
179 ! Initialize timing
180 CALL timeset(root_cp2k_name, globenv%handle)
181
182 ! Print header
183 CALL cp2k_header(my_output_unit, wdir)
184
185 IF (my_output_unit > 0) THEN
186 WRITE (unit=my_output_unit, fmt="(/,T2,A,T31,A50)") &
187 "CP2K| version string: ", adjustr(trim(cp2k_version))
188 WRITE (unit=my_output_unit, fmt="(T2,A,T41,A40)") &
189 "CP2K| source code revision number:", &
190 adjustr(compile_revision)
191 cp_flags = cp2k_flags()
192 ilen = len_trim(cp_flags)
193 WRITE (unit=my_output_unit, fmt="(T2,A)") &
194 "CP2K| "//cp_flags(1:73)
195 IF (ilen > 73) THEN
196 DO i = 0, (ilen - 75)/61
197 WRITE (unit=my_output_unit, fmt="(T2,A)") &
198 "CP2K| "//trim(cp_flags(74 + i*61:min(74 + (i + 1)*61, ilen)))
199 END DO
200 END IF
201 WRITE (unit=my_output_unit, fmt="(T2,A,T41,A40)") &
202 "CP2K| is freely available from ", &
203 adjustr(trim(cp2k_home))
204 WRITE (unit=my_output_unit, fmt="(T2,A,T31,A50)") &
205 "CP2K| Program compiled at", &
206 adjustr(compile_date(1:min(50, len(compile_date))))
207 WRITE (unit=my_output_unit, fmt="(T2,A,T31,A50)") &
208 "CP2K| Program compiled on", &
209 adjustr(compile_host(1:min(50, len(compile_host))))
210 WRITE (unit=my_output_unit, fmt="(T2,A,T31,A50)") &
211 "CP2K| Program compiled for", &
212 adjustr(compile_arch(1:min(50, len(compile_arch))))
213 WRITE (unit=my_output_unit, fmt="(T2,A,T31,A50)") &
214 "CP2K| Data directory path", &
215 adjustr(trim(get_data_dir()))
216 WRITE (unit=my_output_unit, fmt="(T2,A,T31,A50)") &
217 "CP2K| Input file name", &
218 adjustr(trim(input_file_name))
219 FLUSH (my_output_unit) ! ignore &GLOBAL / FLUSH_SHOULD_FLUSH
220 END IF
221
222#if defined(__FAST_MATH__)
223 CALL cp_warn(__location__, &
224 "During compilation one of the following flags was active:"// &
225 " `-ffast-math` (GCC)"// &
226 " `-hfpN` (Cray, N > 0, default N=2)"// &
227 " This can lead to wrong results and numerical instabilities"// &
228 " and is therefore no longer supported.")
229
230#if !defined(__FORCE_USE_FAST_MATH)
231#error "-ffast-math (GCC) or -hfpN (N>0, Cray) can lead to wrong results and numerical instabilities and are therefore no longer supported"
232#endif
233#endif
234
235#if defined(NDEBUG)
236#error "Please do not build CP2K with NDEBUG. There is no performance advantage and asserts will save your neck."
237#endif
238
239 END SUBROUTINE cp2k_init
240
241! **************************************************************************************************
242!> \brief echoes the list of host names and pids
243!> \param para_env ...
244!> \param output_unit ...
245! **************************************************************************************************
246 SUBROUTINE echo_all_hosts(para_env, output_unit)
247 TYPE(mp_para_env_type), POINTER :: para_env
248 INTEGER :: output_unit
249
250 CHARACTER(LEN=default_string_length) :: string
251 INTEGER :: ipe
252 INTEGER, ALLOCATABLE, DIMENSION(:) :: all_pid
253 INTEGER, ALLOCATABLE, DIMENSION(:, :) :: all_host
254
255 ! Print a list of all started processes
256
257 ALLOCATE (all_pid(para_env%num_pe))
258 all_pid(:) = 0
259 all_pid(para_env%mepos + 1) = r_pid
260
261 CALL para_env%sum(all_pid)
262 ALLOCATE (all_host(30, para_env%num_pe))
263 all_host(:, :) = 0
264 CALL string_to_ascii(r_host_name, all_host(:, para_env%mepos + 1))
265 CALL para_env%sum(all_host)
266 IF (output_unit > 0) THEN
267
268 WRITE (unit=output_unit, fmt="(T2,A)") ""
269 DO ipe = 1, para_env%num_pe
270 CALL ascii_to_string(all_host(:, ipe), string)
271 WRITE (unit=output_unit, fmt="(T2,A,T63,I8,T71,I10)") &
272 trim(r_user_name)//"@"//trim(string)// &
273 " has created rank and process ", ipe - 1, all_pid(ipe)
274 END DO
275 WRITE (unit=output_unit, fmt="(T2,A)") ""
276 END IF
277 DEALLOCATE (all_pid)
278 DEALLOCATE (all_host)
279
280 END SUBROUTINE echo_all_hosts
281
282! **************************************************************************************************
283!> \brief echoes the list the number of process per host
284!> \param para_env ...
285!> \param output_unit ...
286! **************************************************************************************************
287 SUBROUTINE echo_all_process_host(para_env, output_unit)
288 TYPE(mp_para_env_type), POINTER :: para_env
289 INTEGER :: output_unit
290
291 CHARACTER(LEN=default_string_length) :: string, string_sec
292 INTEGER :: ipe, jpe, nr_occu
293 INTEGER, ALLOCATABLE, DIMENSION(:) :: all_pid
294 INTEGER, ALLOCATABLE, DIMENSION(:, :) :: all_host
295
296 ALLOCATE (all_host(30, para_env%num_pe))
297 all_host(:, :) = 0
298
299 IF (m_procrun(r_pid) .EQ. 1) THEN
300 CALL string_to_ascii(r_host_name, all_host(:, para_env%mepos + 1))
301 CALL para_env%sum(all_host)
302 END IF
303
304 IF (output_unit > 0) THEN
305 ALLOCATE (all_pid(para_env%num_pe))
306 all_pid(:) = 0
307
308 WRITE (unit=output_unit, fmt="(T2,A)") ""
309 DO ipe = 1, para_env%num_pe
310 nr_occu = 0
311 IF (all_pid(ipe) .NE. -1) THEN
312 CALL ascii_to_string(all_host(:, ipe), string)
313 DO jpe = 1, para_env%num_pe
314 CALL ascii_to_string(all_host(:, jpe), string_sec)
315 IF (string .EQ. string_sec) THEN
316 nr_occu = nr_occu + 1
317 all_pid(jpe) = -1
318 END IF
319 END DO
320 WRITE (unit=output_unit, fmt="(T2,A,T63,I8,A)") &
321 trim(r_user_name)//"@"//trim(string)// &
322 " is running ", nr_occu, " processes"
323 WRITE (unit=output_unit, fmt="(T2,A)") ""
324 END IF
325 END DO
326 DEALLOCATE (all_pid)
327
328 END IF
329
330 DEALLOCATE (all_host)
331
332 END SUBROUTINE echo_all_process_host
333
334! **************************************************************************************************
335!> \brief read part of cp2k_init
336!> \param root_section ...
337!> \param para_env ...
338!> \param globenv the globenv
339!> \author fawzi
340!> \note
341!> The following routines need to be synchronized wrt. adding/removing
342!> of the default environments (logging, performance,error):
343!> environment:cp2k_init, environment:cp2k_finalize,
344!> f77_interface:f_env_add_defaults, f77_interface:f_env_rm_defaults,
345!> f77_interface:create_force_env, f77_interface:destroy_force_env
346! **************************************************************************************************
347 SUBROUTINE cp2k_read(root_section, para_env, globenv)
348
349 TYPE(section_vals_type), POINTER :: root_section
350 TYPE(mp_para_env_type), POINTER :: para_env
351 TYPE(global_environment_type), POINTER :: globenv
352
353 CHARACTER(LEN=3*default_string_length) :: message
354 CHARACTER(LEN=default_string_length) :: c_val
355 INTEGER :: i, iw
356 TYPE(cp_logger_type), POINTER :: logger
357
358 ! Read the input/output section
359
360 logger => cp_get_default_logger()
361
362 ! try to use better names for the local log if it is not too late
363 CALL section_vals_val_get(root_section, "GLOBAL%OUTPUT_FILE_NAME", &
364 c_val=c_val)
365 IF (c_val /= "") THEN
366 CALL cp_logger_set(logger, &
367 local_filename=trim(c_val)//"_localLog")
368 END IF
369
370 ! Process project name
371 CALL section_vals_val_get(root_section, "GLOBAL%PROJECT", c_val=c_val)
372 IF (index(c_val(:len_trim(c_val)), " ") > 0) THEN
373 message = "Project name <"//trim(c_val)// &
374 "> contains spaces which will be replaced with underscores"
375 cpwarn(trim(message))
376 DO i = 1, len_trim(c_val)
377 ! Replace space with underscore
378 IF (c_val(i:i) == " ") c_val(i:i) = "_"
379 END DO
380 CALL section_vals_val_set(root_section, "GLOBAL%PROJECT", c_val=trim(c_val))
381 END IF
382 IF (c_val /= "") THEN
383 CALL cp_logger_set(logger, local_filename=trim(c_val)//"_localLog")
384 END IF
385 logger%iter_info%project_name = c_val
386
387 CALL section_vals_val_get(root_section, "GLOBAL%PRINT_LEVEL", i_val=logger%iter_info%print_level)
388
389 ! Read the CP2K section
390 CALL read_cp2k_section(root_section, para_env, globenv)
391
392 iw = cp_print_key_unit_nr(logger, root_section, "GLOBAL%PRINT/BASIC_DATA_TYPES", &
393 extension=".Log")
394 IF (iw > 0) CALL print_kind_info(iw)
395 CALL cp_print_key_finished_output(iw, logger, root_section, &
396 "GLOBAL%PRINT/BASIC_DATA_TYPES")
397
398 iw = cp_print_key_unit_nr(logger, root_section, "GLOBAL%PRINT/PHYSCON", &
399 extension=".Log")
400 IF (iw > 0) CALL write_physcon(iw)
401 CALL cp_print_key_finished_output(iw, logger, root_section, &
402 "GLOBAL%PRINT/PHYSCON")
403
404 END SUBROUTINE cp2k_read
405
406! **************************************************************************************************
407!> \brief globenv initializations that need the input and error
408!> \param root_section ...
409!> \param para_env ...
410!> \param globenv the global environment to initialize
411!> \author fawzi
412!> \note
413!> if possible do the initializations here as the environment
414!> (error,...) is setup, instead of cp2k_init
415! **************************************************************************************************
416 SUBROUTINE cp2k_setup(root_section, para_env, globenv)
417
418 TYPE(section_vals_type), POINTER :: root_section
419 TYPE(mp_para_env_type), POINTER :: para_env
420 TYPE(global_environment_type), POINTER :: globenv
421
422 INTEGER :: iw, maxl
423 INTEGER, DIMENSION(:), POINTER :: seed_vals
424 REAL(kind=dp), DIMENSION(3, 2) :: initial_seed
425 TYPE(cp_logger_type), POINTER :: logger
426
427 NULLIFY (logger)
428 logger => cp_get_default_logger()
429
430 ! Initialize the parallel random number generator
431
432 iw = cp_print_key_unit_nr(logger, root_section, "GLOBAL%PRINT/RNG_MATRICES", &
433 extension=".Log")
434 IF (iw > 0) THEN
435 CALL write_rng_matrices(iw)
436 END IF
437
438 CALL cp_print_key_finished_output(iw, logger, root_section, &
439 "GLOBAL%PRINT/RNG_MATRICES")
440
441 ! Initialize a global normally Gaussian distributed (pseudo)random number stream
442
443 CALL section_vals_val_get(root_section, "GLOBAL%SEED", i_vals=seed_vals)
444 IF (SIZE(seed_vals) == 1) THEN
445 initial_seed(:, :) = real(seed_vals(1), kind=dp)
446 ELSE IF (SIZE(seed_vals) == 6) THEN
447 initial_seed(1:3, 1:2) = reshape(real(seed_vals(:), kind=dp), (/3, 2/))
448 ELSE
449 cpabort("Supply exactly 1 or 6 arguments for SEED in &GLOBAL only!")
450 END IF
451
452 globenv%gaussian_rng_stream = rng_stream_type( &
453 name="Global Gaussian random numbers", &
454 distribution_type=gaussian, &
455 seed=initial_seed, &
456 extended_precision=.true.)
457
458 iw = cp_print_key_unit_nr(logger, root_section, "GLOBAL%PRINT/RNG_CHECK", &
459 extension=".Log")
460 IF (iw > 0) THEN
461 CALL check_rng(iw, para_env%is_source())
462 END IF
463
464 CALL cp_print_key_finished_output(iw, logger, root_section, &
465 "GLOBAL%PRINT/RNG_CHECK")
466
467 iw = cp_print_key_unit_nr(logger, root_section, "GLOBAL%PRINT/GLOBAL_GAUSSIAN_RNG", &
468 extension=".Log")
469 IF (iw > 0) &
470 CALL globenv%gaussian_rng_stream%write(iw, write_all=.true.)
471
472 CALL cp_print_key_finished_output(iw, logger, root_section, &
473 "GLOBAL%PRINT/GLOBAL_GAUSSIAN_RNG")
474
475 CALL section_vals_val_get(root_section, "GLOBAL%PRINT%SPHERICAL_HARMONICS", i_val=maxl)
476 IF (maxl >= 0) THEN
477 iw = cp_print_key_unit_nr(logger, root_section, "GLOBAL%PRINT", &
478 extension=".Log")
479 CALL init_orbital_pointers(maxl)
480 CALL init_spherical_harmonics(maxl, iw)
483 CALL cp_print_key_finished_output(iw, logger, root_section, &
484 "GLOBAL%PRINT")
485 END IF
486
487 END SUBROUTINE cp2k_setup
488
489! **************************************************************************************************
490!> \brief read the global section of new input
491!> \param root_section ...
492!> \param para_env ...
493!> \param globenv ...
494!> \par History
495!> 06-2005 [created]
496!> \author MI
497!> \note
498!> Should not be required anymore once everything is converted
499!> to get information directly from the input structure
500! **************************************************************************************************
501 SUBROUTINE read_global_section(root_section, para_env, globenv)
502
503 TYPE(section_vals_type), POINTER :: root_section
504 TYPE(mp_para_env_type), POINTER :: para_env
505 TYPE(global_environment_type), POINTER :: globenv
506
507 CHARACTER(LEN=6), PARAMETER :: start_section_label = "GLOBAL"
508
509 CHARACTER(LEN=13) :: omp_stacksize, tracing_string
510 CHARACTER(LEN=6) :: print_level_string
511 CHARACTER(LEN=default_path_length) :: basis_set_file_name, coord_file_name, &
512 mm_potential_file_name, &
513 potential_file_name
514 CHARACTER(LEN=default_string_length) :: env_num, model_name, project_name
515 CHARACTER(LEN=default_string_length), &
516 DIMENSION(:), POINTER :: trace_routines
517 INTEGER :: cpuid, cpuid_static, i_dgemm, i_diag, i_fft, i_grid_backend, iforce_eval, &
518 method_name_id, n_rep_val, nforce_eval, num_threads, output_unit, print_level, trace_max, &
519 unit_nr
520 INTEGER(kind=int_8) :: buffers, buffers_avr, buffers_max, buffers_min, cached, cached_avr, &
521 cached_max, cached_min, memfree, memfree_avr, memfree_max, memfree_min, memlikelyfree, &
522 memlikelyfree_avr, memlikelyfree_max, memlikelyfree_min, memtotal, memtotal_avr, &
523 memtotal_max, memtotal_min, slab, slab_avr, slab_max, slab_min, sreclaimable, &
524 sreclaimable_avr, sreclaimable_max, sreclaimable_min
525 INTEGER, DIMENSION(:), POINTER :: i_force_eval
526 LOGICAL :: ata, do_echo_all_hosts, efl, explicit, &
527 flag, report_maxloc, trace, &
528 trace_master
529 TYPE(cp_logger_type), POINTER :: logger
530 TYPE(enumeration_type), POINTER :: enum1, enum2
531 TYPE(keyword_type), POINTER :: keyword
532 TYPE(section_type), POINTER :: section
533 TYPE(section_vals_type), POINTER :: dft_section, force_env_sections, &
534 global_section, qmmm_section, &
535 subsys_section
536
537 NULLIFY (dft_section, global_section, i_force_eval)
538
539 logger => cp_get_default_logger()
540 global_section => section_vals_get_subs_vals(root_section, "GLOBAL")
541 CALL section_vals_val_get(global_section, "BLACS_GRID", i_val=globenv%blacs_grid_layout)
542 CALL section_vals_val_get(global_section, "BLACS_REPEATABLE", l_val=globenv%blacs_repeatable)
543 CALL section_vals_val_get(global_section, "PREFERRED_DIAG_LIBRARY", i_val=i_diag)
544 CALL section_vals_val_get(global_section, "PREFERRED_DGEMM_LIBRARY", i_val=i_dgemm)
545 CALL section_vals_val_get(global_section, "EPS_CHECK_DIAG", r_val=globenv%eps_check_diag)
546 CALL section_vals_val_get(global_section, "ENABLE_MPI_IO", l_val=flag)
547 CALL cp_mpi_io_set(flag)
548 CALL section_vals_val_get(global_section, "ELPA_KERNEL", i_val=globenv%k_elpa)
549 CALL section_vals_val_get(global_section, "ELPA_NEIGVEC_MIN", i_val=globenv%elpa_neigvec_min)
550 CALL section_vals_val_get(global_section, "ELPA_QR", l_val=globenv%elpa_qr)
551 CALL section_vals_val_get(global_section, "ELPA_QR_UNSAFE", l_val=globenv%elpa_qr_unsafe)
552 unit_nr = cp_print_key_unit_nr(logger, global_section, "PRINT_ELPA", extension=".Log")
553 IF (unit_nr > 0) globenv%elpa_print = .true.
554 CALL cp_print_key_finished_output(unit_nr, logger, global_section, "PRINT_ELPA")
555 CALL section_vals_val_get(global_section, "DLAF_NEIGVEC_MIN", i_val=globenv%dlaf_neigvec_min)
556 CALL section_vals_val_get(global_section, "PREFERRED_FFT_LIBRARY", i_val=i_fft)
557 CALL section_vals_val_get(global_section, "PRINT_LEVEL", i_val=print_level)
558 CALL section_vals_val_get(global_section, "PROGRAM_NAME", i_val=globenv%prog_name_id)
559 CALL section_vals_val_get(global_section, "FFT_POOL_SCRATCH_LIMIT", i_val=globenv%fft_pool_scratch_limit)
560 CALL section_vals_val_get(global_section, "FFTW_PLAN_TYPE", i_val=globenv%fftw_plan_type)
561 CALL section_vals_val_get(global_section, "PROJECT_NAME", c_val=project_name)
562 CALL section_vals_val_get(global_section, "FFTW_WISDOM_FILE_NAME", c_val=globenv%fftw_wisdom_file_name)
563 CALL section_vals_val_get(global_section, "RUN_TYPE", i_val=globenv%run_type_id)
564 CALL cp2k_get_walltime(section=global_section, keyword_name="WALLTIME", &
565 walltime=globenv%cp2k_target_time)
566 CALL section_vals_val_get(global_section, "TRACE", l_val=trace)
567 CALL section_vals_val_get(global_section, "TRACE_MASTER", l_val=trace_master)
568 CALL section_vals_val_get(global_section, "TRACE_MAX", i_val=trace_max)
569 CALL section_vals_val_get(global_section, "TRACE_ROUTINES", explicit=explicit)
570 IF (explicit) THEN
571 CALL section_vals_val_get(global_section, "TRACE_ROUTINES", c_vals=trace_routines)
572 ELSE
573 NULLIFY (trace_routines)
574 END IF
575 CALL section_vals_val_get(global_section, "FLUSH_SHOULD_FLUSH", l_val=flush_should_flush)
576 CALL section_vals_val_get(global_section, "ECHO_ALL_HOSTS", l_val=do_echo_all_hosts)
577 report_maxloc = section_get_lval(global_section, "TIMINGS%REPORT_MAXLOC")
578 global_timings_level = section_get_ival(global_section, "TIMINGS%TIMINGS_LEVEL")
579 do_echo_all_hosts = do_echo_all_hosts .OR. report_maxloc
580 force_env_sections => section_vals_get_subs_vals(root_section, "FORCE_EVAL")
581 CALL section_vals_get(force_env_sections, n_repetition=nforce_eval)
582 output_unit = cp_print_key_unit_nr(logger, global_section, "PROGRAM_RUN_INFO", &
583 extension=".log")
584
585 CALL fm_setup(global_section)
586 CALL fm_diag_rules_setup(global_section)
587 CALL dgemm_setup(global_section)
588
589 IF (trace .AND. (.NOT. trace_master .OR. para_env%mepos == 0)) THEN
590 unit_nr = -1
591 IF (logger%para_env%is_source() .OR. .NOT. trace_master) &
592 unit_nr = cp_logger_get_default_unit_nr(logger, local=.true.)
593 WRITE (tracing_string, "(I6.6,A1,I6.6)") para_env%mepos, ":", para_env%num_pe
594 IF (ASSOCIATED(trace_routines)) THEN
595 CALL timings_setup_tracing(trace_max, unit_nr, tracing_string, trace_routines)
596 ELSE
597 CALL timings_setup_tracing(trace_max, unit_nr, tracing_string)
598 END IF
599 END IF
600
601 CALL section_vals_val_get(global_section, "TIMINGS%TIME_MPI", l_val=mp_collect_timings)
602
603 SELECT CASE (i_diag)
605 globenv%diag_library = "ScaLAPACK"
606 CASE (fm_diag_type_elpa)
607 globenv%diag_library = "ELPA"
610 globenv%diag_library = "cuSOLVER"
611 CASE (fm_diag_type_dlaf)
612 globenv%diag_library = "DLAF"
614 CASE DEFAULT
615 cpabort("Unknown diagonalization library specified")
616 END SELECT
617
618 SELECT CASE (i_fft)
619 CASE (do_fft_sg)
620 globenv%default_fft_library = "FFTSG"
621 CASE (do_fft_fftw3)
622 globenv%default_fft_library = "FFTW3"
624 CASE DEFAULT
625 cpabort("Unknown FFT library specified")
626 END SELECT
627
628 SELECT CASE (i_dgemm)
629 CASE (do_dgemm_spla)
630 globenv%default_dgemm_library = "SPLA"
631 CASE (do_dgemm_blas)
632 globenv%default_dgemm_library = "BLAS"
633 CASE DEFAULT
634 cpabort("Unknown DGEMM library specified")
635 END SELECT
636
637 IF (globenv%run_type_id == 0) THEN
638 SELECT CASE (globenv%prog_name_id)
639 CASE (do_farming, do_test)
640 globenv%run_type_id = none_run
641 CASE (do_cp2k)
642 IF (nforce_eval /= 1) THEN
643 ! multiple force_eval corresponds at the moment to RESPA calculations only
644 ! default MD
645 globenv%run_type_id = mol_dyn_run
646 ELSE
647 CALL section_vals_val_get(force_env_sections, "METHOD", i_val=method_name_id)
648 SELECT CASE (method_name_id)
649 CASE (do_fist)
650 globenv%run_type_id = mol_dyn_run
651 CASE (do_eip)
652 globenv%run_type_id = mol_dyn_run
653 CASE (do_qs)
654 globenv%run_type_id = energy_run
655 CASE (do_sirius)
656 globenv%run_type_id = energy_run
657 END SELECT
658 END IF
659 END SELECT
660 END IF
661
662 IF (globenv%prog_name_id == do_farming .AND. globenv%run_type_id /= none_run) THEN
663 cpabort("FARMING program supports only NONE as run type")
664 END IF
665
666 IF (globenv%prog_name_id == do_test .AND. globenv%run_type_id /= none_run) &
667 cpabort("TEST program supports only NONE as run type")
668
669 CALL m_memory_details(memtotal, memfree, buffers, cached, slab, sreclaimable, memlikelyfree)
670 memtotal_avr = memtotal
671 memfree_avr = memfree
672 buffers_avr = buffers
673 cached_avr = cached
674 slab_avr = slab
675 sreclaimable_avr = sreclaimable
676 memlikelyfree_avr = memlikelyfree
677 CALL para_env%sum(memtotal_avr); memtotal_avr = memtotal_avr/para_env%num_pe/1024
678 CALL para_env%sum(memfree_avr); memfree_avr = memfree_avr/para_env%num_pe/1024
679 CALL para_env%sum(buffers_avr); buffers_avr = buffers_avr/para_env%num_pe/1024
680 CALL para_env%sum(cached_avr); cached_avr = cached_avr/para_env%num_pe/1024
681 CALL para_env%sum(slab_avr); slab_avr = slab_avr/para_env%num_pe/1024
682 CALL para_env%sum(sreclaimable_avr); sreclaimable_avr = sreclaimable_avr/para_env%num_pe/1024
683 CALL para_env%sum(memlikelyfree_avr); memlikelyfree_avr = memlikelyfree_avr/para_env%num_pe/1024
684
685 memtotal_min = -memtotal
686 memfree_min = -memfree
687 buffers_min = -buffers
688 cached_min = -cached
689 slab_min = -slab
690 sreclaimable_min = -sreclaimable
691 memlikelyfree_min = -memlikelyfree
692 CALL para_env%max(memtotal_min); memtotal_min = -memtotal_min/1024
693 CALL para_env%max(memfree_min); memfree_min = -memfree_min/1024
694 CALL para_env%max(buffers_min); buffers_min = -buffers_min/1024
695 CALL para_env%max(cached_min); cached_min = -cached_min/1024
696 CALL para_env%max(slab_min); slab_min = -slab_min/1024
697 CALL para_env%max(sreclaimable_min); sreclaimable_min = -sreclaimable_min/1024
698 CALL para_env%max(memlikelyfree_min); memlikelyfree_min = -memlikelyfree_min/1024
699
700 memtotal_max = memtotal
701 memfree_max = memfree
702 buffers_max = buffers
703 cached_max = cached
704 slab_max = slab
705 sreclaimable_max = sreclaimable
706 memlikelyfree_max = memlikelyfree
707 CALL para_env%max(memtotal_max); memtotal_max = memtotal_max/1024
708 CALL para_env%max(memfree_max); memfree_max = memfree_max/1024
709 CALL para_env%max(buffers_max); buffers_max = buffers_max/1024
710 CALL para_env%max(cached_max); cached_max = cached_max/1024
711 CALL para_env%max(slab_max); slab_max = slab_max/1024
712 CALL para_env%max(sreclaimable_max); sreclaimable_max = sreclaimable_max/1024
713 CALL para_env%max(memlikelyfree_max); memlikelyfree_max = memlikelyfree_max/1024
714
715 memtotal = memtotal/1024
716 memfree = memfree/1024
717 buffers = buffers/1024
718 cached = cached/1024
719 slab = slab/1024
720 sreclaimable = sreclaimable/1024
721 memlikelyfree = memlikelyfree/1024
722
723 ! Print a list of all started processes
724 IF (do_echo_all_hosts) THEN
725 CALL echo_all_hosts(para_env, output_unit)
726
727 ! Print the number of processes per host
728 CALL echo_all_process_host(para_env, output_unit)
729 END IF
730
731 num_threads = 1
732!$ num_threads = omp_get_max_threads()
733 IF (output_unit > 0) THEN
734 WRITE (unit=output_unit, fmt=*)
735 CALL multiple_fe_list(force_env_sections, root_section, i_force_eval, nforce_eval)
736 DO iforce_eval = 1, nforce_eval
737 dft_section => section_vals_get_subs_vals3(force_env_sections, "DFT", &
738 i_rep_section=i_force_eval(iforce_eval))
739 qmmm_section => section_vals_get_subs_vals3(force_env_sections, "QMMM", &
740 i_rep_section=i_force_eval(iforce_eval))
741 CALL section_vals_val_get(dft_section, "BASIS_SET_FILE_NAME", &
742 c_val=basis_set_file_name)
743 CALL section_vals_val_get(dft_section, "POTENTIAL_FILE_NAME", &
744 c_val=potential_file_name)
745
746 CALL section_vals_val_get(qmmm_section, "MM_POTENTIAL_FILE_NAME", &
747 c_val=mm_potential_file_name)
748 ! SUBSYS - If any
749 subsys_section => section_vals_get_subs_vals3(force_env_sections, "SUBSYS", &
750 i_rep_section=i_force_eval(iforce_eval))
751 CALL section_vals_get(subsys_section, explicit=explicit)
752 coord_file_name = "__STD_INPUT__"
753 IF (explicit) THEN
754 CALL section_vals_val_get(subsys_section, "TOPOLOGY%COORD_FILE_NAME", &
755 n_rep_val=n_rep_val)
756 IF (n_rep_val == 1) THEN
757 CALL section_vals_val_get(subsys_section, "TOPOLOGY%COORD_FILE_NAME", &
758 c_val=coord_file_name)
759 END IF
760 END IF
761 CALL integer_to_string(i_force_eval(iforce_eval), env_num)
762
763 WRITE (unit=output_unit, fmt="(T2,A,T41,A)") &
764 start_section_label//"| Force Environment number", &
765 adjustr(env_num(:40)), &
766 start_section_label//"| Basis set file name", &
767 adjustr(basis_set_file_name(:40)), &
768 start_section_label//"| Potential file name", &
769 adjustr(potential_file_name(:40)), &
770 start_section_label//"| MM Potential file name", &
771 adjustr(mm_potential_file_name(:40)), &
772 start_section_label//"| Coordinate file name", &
773 adjustr(coord_file_name(:40))
774 END DO
775 DEALLOCATE (i_force_eval)
776
777 NULLIFY (enum1, enum2, keyword, section)
778 CALL create_global_section(section)
779 keyword => section_get_keyword(section, "PROGRAM_NAME")
780 CALL keyword_get(keyword, enum=enum1)
781 keyword => section_get_keyword(section, "RUN_TYPE")
782 CALL keyword_get(keyword, enum=enum2)
783
784 WRITE (unit=output_unit, fmt="(T2,A,T41,A40)") &
785 start_section_label//"| Method name", &
786 adjustr(trim(enum_i2c(enum1, globenv%prog_name_id))), &
787 start_section_label//"| Project name", &
788 adjustr(project_name(:40)), &
789 start_section_label//"| Run type", &
790 adjustr(trim(enum_i2c(enum2, globenv%run_type_id))), &
791 start_section_label//"| FFT library", &
792 adjustr(globenv%default_fft_library(:40)), &
793 start_section_label//"| Diagonalization library", &
794 adjustr(globenv%diag_library(:40)), &
795 start_section_label//"| DGEMM library", &
796 adjustr(globenv%default_dgemm_library(:40))
797
798 IF (globenv%diag_library == "ELPA") THEN
799 WRITE (unit=output_unit, fmt="(T2,A,T71,I10)") &
800 start_section_label//"| Minimum number of eigenvectors for ELPA usage", &
801 globenv%elpa_neigvec_min
802 END IF
803
804 IF (globenv%diag_library == "DLAF") THEN
805 WRITE (unit=output_unit, fmt="(T2,A,T71,I10)") &
806 start_section_label//"| Minimum number of eigenvectors for DLAF usage", &
807 globenv%dlaf_neigvec_min
808 END IF
809
810#if defined(__CHECK_DIAG)
811 ! Perform default check if no threshold value has been specified explicitly
812 IF (globenv%eps_check_diag < 0.0_dp) THEN
813 WRITE (unit=output_unit, fmt="(T2,A,T71,ES10.3)") &
814 start_section_label//"| Orthonormality check for eigenvectors enabled", &
816 ELSE
817 WRITE (unit=output_unit, fmt="(T2,A,T71,ES10.3)") &
818 start_section_label//"| Orthonormality check for eigenvectors enabled", &
819 globenv%eps_check_diag
820 END IF
821#else
822 IF (globenv%eps_check_diag < 0.0_dp) THEN
823 WRITE (unit=output_unit, fmt="(T2,A,T73,A)") &
824 start_section_label//"| Orthonormality check for eigenvectors", &
825 "DISABLED"
826 ELSE
827 WRITE (unit=output_unit, fmt="(T2,A,T71,ES10.3)") &
828 start_section_label//"| Orthonormality check for eigenvectors enabled", &
829 globenv%eps_check_diag
830 END IF
831#endif
832 CALL section_release(section)
833
834 SELECT CASE (cp_fm_get_mm_type())
835 CASE (do_scalapack)
836 WRITE (unit=output_unit, fmt="(T2,A,T72,A)") &
837 start_section_label//"| Matrix multiplication library", "ScaLAPACK"
838 CASE (do_cosma)
839 WRITE (unit=output_unit, fmt="(T2,A,T76,A)") &
840 start_section_label//"| Matrix multiplication library", "COSMA"
841 END SELECT
842
843 CALL section_vals_val_get(global_section, "ALLTOALL_SGL", l_val=ata)
844 WRITE (unit=output_unit, fmt="(T2,A,T80,L1)") &
845 start_section_label//"| All-to-all communication in single precision", ata
846 CALL section_vals_val_get(global_section, "EXTENDED_FFT_LENGTHS", l_val=efl)
847 WRITE (unit=output_unit, fmt="(T2,A,T80,L1)") &
848 start_section_label//"| FFTs using library dependent lengths", efl
849
850 SELECT CASE (print_level)
851 CASE (silent_print_level)
852 print_level_string = "SILENT"
853 CASE (low_print_level)
854 print_level_string = " LOW"
855 CASE (medium_print_level)
856 print_level_string = "MEDIUM"
857 CASE (high_print_level)
858 print_level_string = " HIGH"
859 CASE (debug_print_level)
860 print_level_string = " DEBUG"
861 CASE DEFAULT
862 cpabort("Unknown print_level")
863 END SELECT
864
865 CALL section_vals_val_get(global_section, "GRID%BACKEND", i_val=i_grid_backend)
866 SELECT CASE (i_grid_backend)
867 CASE (grid_backend_auto)
868 WRITE (unit=output_unit, fmt="(T2,A,T75,A6)") &
869 start_section_label//"| Grid backend", "AUTO"
870 CASE (grid_backend_cpu)
871 WRITE (unit=output_unit, fmt="(T2,A,T75,A6)") &
872 start_section_label//"| Grid backend", "CPU"
873 CASE (grid_backend_dgemm)
874 WRITE (unit=output_unit, fmt="(T2,A,T75,A6)") &
875 start_section_label//"| Grid backend", "DGEMM"
876 CASE (grid_backend_gpu)
877 WRITE (unit=output_unit, fmt="(T2,A,T75,A6)") &
878 start_section_label//"| Grid backend", "GPU"
879 CASE (grid_backend_hip)
880 WRITE (unit=output_unit, fmt="(T2,A,T75,A6)") &
881 start_section_label//"| Grid backend", "HIP"
882 CASE (grid_backend_ref)
883 WRITE (unit=output_unit, fmt="(T2,A,T75,A6)") &
884 start_section_label//"| Grid backend", "REF"
885 END SELECT
886
887 WRITE (unit=output_unit, fmt="(T2,A,T75,A6)") &
888 start_section_label//"| Global print level", print_level_string
889 WRITE (unit=output_unit, fmt="(T2,A,T75,L6)") &
890 start_section_label//"| MPI I/O enabled", flag
891 WRITE (unit=output_unit, fmt="(T2,A,T75,I6)") &
892 start_section_label//"| Total number of message passing processes", &
893 para_env%num_pe, &
894 start_section_label//"| Number of threads for this process", &
895 num_threads, &
896 start_section_label//"| This output is from process", para_env%mepos
897
898 CALL m_omp_get_stacksize(omp_stacksize)
899 WRITE (unit=output_unit, fmt="(T2,A,T68,A13)") &
900 start_section_label//"| OpenMP stack size per thread (OMP_STACKSIZE)", &
901 adjustr(omp_stacksize)
902
903 IF (0 <= m_omp_trace_issues()) THEN ! only show in header if enabled
904 WRITE (unit=output_unit, fmt="(T2,A,T68,A13)") &
905 start_section_label//"| OpenMP issue trace (CP2K_OMP_TRACE)", &
906 "enabled"
907 END IF
908
909 CALL m_cpuinfo(model_name)
910 WRITE (unit=output_unit, fmt="(T2,A,T30,A51)") &
911 start_section_label//"| CPU model name", adjustr(trim(model_name))
912
913 cpuid = m_cpuid()
914 cpuid_static = m_cpuid_static()
915
916 IF ((cpuid > 0) .OR. (cpuid_static > 0)) THEN
917 WRITE (unit=output_unit, fmt="(T2,A,T75,I6)") &
918 start_section_label//"| CPUID", cpuid
919 IF (cpuid /= cpuid_static) THEN
920 WRITE (unit=output_unit, fmt="(T2,A,T75,I6)") &
921 start_section_label//"| Compiled for CPUID", cpuid_static
922 END IF
923 END IF
924
925 ! filter cpuids by vlen to show more relevant information
926 IF (m_cpuid_vlen(cpuid_static) < m_cpuid_vlen(cpuid)) THEN
927 ! base/machine_cpuid.c relies on the (same) target flags as the Fortran code
928 CALL cp_hint(__location__, "The compiler target flags ("// &
929 trim(m_cpuid_name(cpuid_static))//") used to build this binary cannot exploit "// &
930 "all extensions of this CPU model ("//trim(m_cpuid_name(cpuid))//"). "// &
931 "Consider compiler target flags as part of FCFLAGS and CFLAGS (ARCH file).")
932 END IF
933
934 WRITE (unit=output_unit, fmt="()")
935 WRITE (unit=output_unit, fmt="(T2,A)") "MEMORY| system memory details [Kb]"
936 WRITE (unit=output_unit, fmt="(T2,A23,4A14)") "MEMORY| ", "rank 0", "min", "max", "average"
937 WRITE (unit=output_unit, fmt="(T2,A23,4I14)") "MEMORY| MemTotal ", memtotal, memtotal_min, memtotal_max, memtotal_avr
938 WRITE (unit=output_unit, fmt="(T2,A23,4I14)") "MEMORY| MemFree ", memfree, memfree_min, memfree_max, memfree_avr
939 WRITE (unit=output_unit, fmt="(T2,A23,4I14)") "MEMORY| Buffers ", buffers, buffers_min, buffers_max, buffers_avr
940 WRITE (unit=output_unit, fmt="(T2,A23,4I14)") "MEMORY| Cached ", cached, cached_min, cached_max, cached_avr
941 WRITE (unit=output_unit, fmt="(T2,A23,4I14)") "MEMORY| Slab ", slab, slab_min, slab_max, slab_avr
942 WRITE (unit=output_unit, fmt="(T2,A23,4I14)") &
943 "MEMORY| SReclaimable ", sreclaimable, sreclaimable_min, sreclaimable_max, &
944 sreclaimable_avr
945 WRITE (unit=output_unit, fmt="(T2,A23,4I14)") &
946 "MEMORY| MemLikelyFree ", memlikelyfree, memlikelyfree_min, memlikelyfree_max, &
947 memlikelyfree_avr
948 WRITE (unit=output_unit, fmt='()')
949
950 END IF
951
952 CALL cp_print_key_finished_output(output_unit, logger, global_section, &
953 "PROGRAM_RUN_INFO")
954
955 END SUBROUTINE read_global_section
956
957! **************************************************************************************************
958!> \brief ...
959!> \param root_section ...
960!> \param para_env ...
961!> \param globenv ...
962!> \par History
963!> 2-Dec-2000 (JGH) added default fft library
964!> \author JGH,MK
965! **************************************************************************************************
966 SUBROUTINE read_cp2k_section(root_section, para_env, globenv)
967
968 TYPE(section_vals_type), POINTER :: root_section
969 TYPE(mp_para_env_type), POINTER :: para_env
970 TYPE(global_environment_type), POINTER :: globenv
971
972 INTEGER :: output_unit
973 TYPE(cp_logger_type), POINTER :: logger
974 TYPE(section_vals_type), POINTER :: global_section
975
976 global_section => section_vals_get_subs_vals(root_section, "GLOBAL")
977 CALL read_global_section(root_section, para_env, globenv)
978 logger => cp_get_default_logger()
979 output_unit = cp_print_key_unit_nr(logger, global_section, "PROGRAM_RUN_INFO", &
980 extension=".log")
981
982 CALL fft_setup_library(globenv, global_section)
983 CALL diag_setup_library(globenv)
984
985 CALL cp_print_key_finished_output(output_unit, logger, global_section, &
986 "PROGRAM_RUN_INFO")
987
988 END SUBROUTINE read_cp2k_section
989
990! **************************************************************************************************
991!> \brief check FFT preferred library availability, if not switch
992!> \param globenv ...
993!> \param global_section ...
994!> \par History
995!> 2-Dec-2000 (JGH) added default fft library
996!> Nov-2013 (MI) refactoring
997!> \author JGH,MK
998! **************************************************************************************************
999 SUBROUTINE fft_setup_library(globenv, global_section)
1000
1001 TYPE(global_environment_type), POINTER :: globenv
1002 TYPE(section_vals_type), POINTER :: global_section
1003
1004 CHARACTER(LEN=3*default_string_length) :: message
1005 COMPLEX(KIND=dp), DIMENSION(4, 4, 4) :: zz
1006 INTEGER :: stat
1007 INTEGER, DIMENSION(3) :: n
1008 LOGICAL :: try_fftw
1009
1010 n(:) = 4
1011 zz(:, :, :) = 0.0_dp
1012
1013 ! Setup the FFT library
1014 ! If the user has specified PREFERRED_FFT_LIBRARY try that first (default FFTW3)
1015 ! If that one is not available, try FFTW3 (unless it has been tried already)
1016 ! If FFTW3 is not available use FFTSG
1017
1018 IF (globenv%default_fft_library == "FFTW3") THEN
1019 try_fftw = .false.
1020 ELSE
1021 try_fftw = .true.
1022 END IF
1023
1024 ! Initialize FFT library with the user's preferred FFT library
1025 CALL init_fft(fftlib=trim(globenv%default_fft_library), &
1026 alltoall=section_get_lval(global_section, "ALLTOALL_SGL"), &
1027 fftsg_sizes=.NOT. section_get_lval(global_section, "EXTENDED_FFT_LENGTHS"), &
1028 pool_limit=globenv%fft_pool_scratch_limit, &
1029 wisdom_file=globenv%fftw_wisdom_file_name, &
1030 plan_style=globenv%fftw_plan_type)
1031
1032 ! Check for FFT library
1033 CALL fft3d(fwfft, n, zz, status=stat)
1034 IF (stat /= 0) THEN
1035 IF (try_fftw) THEN
1036 message = "FFT library "//trim(globenv%default_fft_library)// &
1037 " is not available. Trying FFT library FFTW3."
1038 cpwarn(trim(message))
1039 globenv%default_fft_library = "FFTW3"
1040 CALL init_fft(fftlib=trim(globenv%default_fft_library), &
1041 alltoall=section_get_lval(global_section, "ALLTOALL_SGL"), &
1042 fftsg_sizes=.NOT. section_get_lval(global_section, "EXTENDED_FFT_LENGTHS"), &
1043 pool_limit=globenv%fft_pool_scratch_limit, &
1044 wisdom_file=globenv%fftw_wisdom_file_name, &
1045 plan_style=globenv%fftw_plan_type)
1046
1047 CALL fft3d(fwfft, n, zz, status=stat)
1048 END IF
1049 IF (stat /= 0) THEN
1050 message = "FFT library "//trim(globenv%default_fft_library)// &
1051 " is not available. Trying FFT library FFTSG."
1052 cpwarn(trim(message))
1053 globenv%default_fft_library = "FFTSG"
1054 CALL init_fft(fftlib=trim(globenv%default_fft_library), &
1055 alltoall=section_get_lval(global_section, "ALLTOALL_SGL"), &
1056 fftsg_sizes=.NOT. section_get_lval(global_section, "EXTENDED_FFT_LENGTHS"), &
1057 pool_limit=globenv%fft_pool_scratch_limit, &
1058 wisdom_file=globenv%fftw_wisdom_file_name, &
1059 plan_style=globenv%fftw_plan_type)
1060
1061 CALL fft3d(fwfft, n, zz, status=stat)
1062 IF (stat /= 0) THEN
1063 cpabort("FFT library FFTSG does not work. No FFT library available.")
1064 END IF
1065 END IF
1066 END IF
1067
1068 END SUBROUTINE fft_setup_library
1069
1070! **************************************************************************************************
1071!> \brief availability diagonalizatioon library
1072!>
1073!> \param globenv ...
1074!> \author MI
1075! **************************************************************************************************
1076 SUBROUTINE diag_setup_library(globenv)
1077 TYPE(global_environment_type), POINTER :: globenv
1078
1079 CHARACTER(LEN=3*default_string_length) :: message
1080 LOGICAL :: fallback_applied
1081
1082 CALL diag_init(diag_lib=trim(globenv%diag_library), &
1083 fallback_applied=fallback_applied, &
1084 elpa_kernel=globenv%k_elpa, &
1085 elpa_neigvec_min_input=globenv%elpa_neigvec_min, &
1086 elpa_qr=globenv%elpa_qr, &
1087 elpa_print=globenv%elpa_print, &
1088 elpa_qr_unsafe=globenv%elpa_qr_unsafe, &
1089 dlaf_neigvec_min_input=globenv%dlaf_neigvec_min, &
1090 eps_check_diag_input=globenv%eps_check_diag)
1091
1092 IF (fallback_applied) THEN
1093 message = "Diagonalization library "//trim(globenv%diag_library)// &
1094 " is not available. The ScaLAPACK library is used as fallback."
1095 cpwarn(trim(message))
1096 END IF
1097
1098 END SUBROUTINE diag_setup_library
1099
1100! **************************************************************************************************
1101!> \brief ...
1102!> \param glob_section ...
1103! **************************************************************************************************
1104 SUBROUTINE fm_setup(glob_section)
1105 TYPE(section_vals_type), POINTER :: glob_section
1106
1107 INTEGER :: mm_type, ncb, nrb
1108 LOGICAL :: force_me
1109 TYPE(section_vals_type), POINTER :: fm_section
1110
1111 fm_section => section_vals_get_subs_vals(glob_section, "FM")
1112
1113 CALL section_vals_val_get(fm_section, "NROW_BLOCKS", i_val=nrb)
1114 CALL section_vals_val_get(fm_section, "NCOL_BLOCKS", i_val=ncb)
1115 CALL section_vals_val_get(fm_section, "FORCE_BLOCK_SIZE", l_val=force_me)
1116 CALL cp_fm_struct_config(nrow_block=nrb, ncol_block=ncb, force_block=force_me)
1117
1118 CALL section_vals_val_get(fm_section, "TYPE_OF_MATRIX_MULTIPLICATION", i_val=mm_type)
1119 CALL cp_fm_setup(mm_type)
1120
1121 END SUBROUTINE fm_setup
1122
1123! **************************************************************************************************
1124!> \brief ...
1125!> \param glob_section ...
1126! **************************************************************************************************
1127 SUBROUTINE dgemm_setup(glob_section)
1128 TYPE(section_vals_type), POINTER :: glob_section
1129
1130 INTEGER :: dgemm_type
1131
1132 CALL section_vals_val_get(glob_section, "PREFERRED_DGEMM_LIBRARY", i_val=dgemm_type)
1133
1134 CALL local_gemm_set_library(dgemm_type)
1135
1136 END SUBROUTINE dgemm_setup
1137
1138! **************************************************************************************************
1139!> \brief Parses the input section used to define the heuristic rules which determine if
1140!> a FM matrix should be redistributed before diagonalizing it.
1141!> \param glob_section the global input section
1142!> \author Nico Holmberg [01.2018]
1143! **************************************************************************************************
1144 SUBROUTINE fm_diag_rules_setup(glob_section)
1145 TYPE(section_vals_type), POINTER :: glob_section
1146
1147 INTEGER :: a, x
1148 LOGICAL :: elpa_force_redistribute, should_print
1149 TYPE(section_vals_type), POINTER :: section
1150
1151 section => section_vals_get_subs_vals(glob_section, "FM_DIAG_SETTINGS")
1152
1153 CALL section_vals_val_get(section, "PARAMETER_A", i_val=a)
1154 CALL section_vals_val_get(section, "PARAMETER_X", i_val=x)
1155 CALL section_vals_val_get(section, "PRINT_FM_REDISTRIBUTE", l_val=should_print)
1156 CALL section_vals_val_get(section, "ELPA_FORCE_REDISTRIBUTE", l_val=elpa_force_redistribute)
1157
1158 CALL cp_fm_redistribute_init(a, x, should_print, elpa_force_redistribute)
1159
1160 END SUBROUTINE fm_diag_rules_setup
1161! **************************************************************************************************
1162!> \brief reads the Walltime also in format HH:MM:SS
1163!> \param section ...
1164!> \param keyword_name ...
1165!> \param walltime ...
1166!> \par History
1167!> none
1168!> \author Mandes
1169! **************************************************************************************************
1170 SUBROUTINE cp2k_get_walltime(section, keyword_name, walltime)
1171 TYPE(section_vals_type), POINTER :: section
1172 CHARACTER(LEN=*), INTENT(in) :: keyword_name
1173 REAL(kind=dp), INTENT(out) :: walltime
1174
1175 CHARACTER(LEN=1) :: c1, c2
1176 CHARACTER(LEN=100) :: txt
1177 INTEGER :: hours, ierr, minutes, n, seconds
1178
1179 CALL section_vals_val_get(section, keyword_name, c_val=txt)
1180 n = len_trim(txt)
1181
1182 IF (n == 0) THEN
1183 walltime = -1.0_dp
1184 ELSE IF (index(txt, ":") == 0) THEN
1185 READ (txt(1:n), fmt=*, iostat=ierr) walltime
1186 IF (ierr /= 0) cpabort('Could not parse WALLTIME: "'//txt(1:n)//'"')
1187 ELSE
1188 READ (txt(1:n), fmt="(I2,A1,I2,A1,I2)", iostat=ierr) hours, c1, minutes, c2, seconds
1189 IF (n /= 8 .OR. ierr /= 0 .OR. c1 .NE. ":" .OR. c2 .NE. ":") &
1190 cpabort('Could not parse WALLTIME: "'//txt(1:n)//'"')
1191 walltime = 3600.0_dp*real(hours, dp) + 60.0_dp*real(minutes, dp) + real(seconds, dp)
1192 END IF
1193 END SUBROUTINE cp2k_get_walltime
1194
1195! **************************************************************************************************
1196!> \brief Writes final timings and banner for CP2K
1197!> \param root_section ...
1198!> \param para_env ...
1199!> \param globenv ...
1200!> \param wdir ...
1201!> \param q_finalize ...
1202!> \par History
1203!> none
1204!> \author JGH,MK
1205!> \note
1206!> The following routines need to be synchronized wrt. adding/removing
1207!> of the default environments (logging, performance,error):
1208!> environment:cp2k_init, environment:cp2k_finalize,
1209!> f77_interface:f_env_add_defaults, f77_interface:f_env_rm_defaults,
1210!> f77_interface:create_force_env, f77_interface:destroy_force_env
1211! **************************************************************************************************
1212 SUBROUTINE cp2k_finalize(root_section, para_env, globenv, wdir, q_finalize)
1213
1214 TYPE(section_vals_type), POINTER :: root_section
1215 TYPE(mp_para_env_type), POINTER :: para_env
1216 TYPE(global_environment_type), POINTER :: globenv
1217 CHARACTER(LEN=*), OPTIONAL :: wdir
1218 LOGICAL, INTENT(IN), OPTIONAL :: q_finalize
1219
1220 CHARACTER(LEN=default_path_length) :: cg_filename
1221 INTEGER :: cg_mode, iw, unit_exit
1222 LOGICAL :: delete_it, do_finalize, report_maxloc, &
1223 sort_by_self_time
1224 REAL(kind=dp) :: r_timings
1225 TYPE(cp_logger_type), POINTER :: logger
1226
1227 ! Look if we inherited a failure, more care is needed if so
1228 ! i.e. the input is most likely not available
1229 ! Set flag if this is a development version
1230
1231 do_finalize = .true.
1232 IF (PRESENT(q_finalize)) do_finalize = q_finalize
1233 ! Clean up
1234 NULLIFY (logger)
1235 logger => cp_get_default_logger()
1236 IF (do_finalize) THEN
1240 CALL diag_finalize()
1241 ! finalize the fft (i.e. writes the wisdom if FFTW3 )
1242 CALL finalize_fft(para_env, globenv%fftw_wisdom_file_name)
1243 CALL finalize_libvori()
1244 END IF
1245
1246 ! Write message passing performance info
1247
1248 iw = cp_print_key_unit_nr(logger, root_section, "GLOBAL%PROGRAM_RUN_INFO", &
1249 extension=".log")
1250 CALL describe_mp_perf_env(iw)
1251 CALL cp_print_key_finished_output(iw, logger, root_section, &
1252 "GLOBAL%PROGRAM_RUN_INFO")
1253
1254 CALL collect_citations_from_ranks(para_env)
1255 iw = cp_print_key_unit_nr(logger, root_section, "GLOBAL%REFERENCES", &
1256 extension=".Log")
1257 IF (iw > 0) THEN
1258 WRITE (unit=iw, fmt="(/,T2,A)") repeat("-", 79)
1259 WRITE (unit=iw, fmt="(T2,A,T80,A)") "-", "-"
1260 WRITE (unit=iw, fmt="(T2,A,T30,A,T80,A)") "-", "R E F E R E N C E S", "-"
1261 WRITE (unit=iw, fmt="(T2,A,T80,A)") "-", "-"
1262 WRITE (unit=iw, fmt="(T2,A)") repeat("-", 79)
1263 WRITE (unit=iw, fmt="(T2,A)") ""
1264 WRITE (unit=iw, fmt="(T2,A)") trim(cp2k_version)//", the CP2K developers group ("//trim(cp2k_year)//")."
1265 WRITE (unit=iw, fmt="(T2,A)") "CP2K is freely available from "//trim(cp2k_home)//" ."
1266 WRITE (unit=iw, fmt="(T2,A)") ""
1267 CALL print_cited_references(unit=iw)
1268 END IF
1269 CALL cp_print_key_finished_output(iw, logger, root_section, &
1270 "GLOBAL%REFERENCES")
1271
1272 CALL timestop(globenv%handle) ! corresponding the "CP2K" in cp2k_init
1273
1274 iw = cp_print_key_unit_nr(logger, root_section, "GLOBAL%TIMINGS", &
1275 extension=".Log")
1276 r_timings = section_get_rval(root_section, "GLOBAL%TIMINGS%THRESHOLD")
1277 sort_by_self_time = section_get_lval(root_section, "GLOBAL%TIMINGS%SORT_BY_SELF_TIME")
1278 report_maxloc = section_get_lval(root_section, "GLOBAL%TIMINGS%REPORT_MAXLOC")
1279 IF (m_energy() .NE. 0.0_dp) THEN
1280 CALL timings_report_print(iw, r_timings, sort_by_self_time, cost_type_energy, report_maxloc, para_env)
1281 END IF
1282 CALL timings_report_print(iw, r_timings, sort_by_self_time, cost_type_time, report_maxloc, para_env)
1283
1284 ! Write the callgraph, if desired by user
1285 CALL section_vals_val_get(root_section, "GLOBAL%CALLGRAPH", i_val=cg_mode)
1286 IF (cg_mode /= callgraph_none) THEN
1287 CALL section_vals_val_get(root_section, "GLOBAL%CALLGRAPH_FILE_NAME", c_val=cg_filename)
1288 IF (len_trim(cg_filename) == 0) cg_filename = trim(logger%iter_info%project_name)
1289 IF (cg_mode == callgraph_all) & !incorporate mpi-rank into filename
1290 cg_filename = trim(cg_filename)//"_"//trim(adjustl(cp_to_string(para_env%mepos)))
1291 IF (iw > 0) THEN
1292 WRITE (unit=iw, fmt="(T2,3X,A)") "Writing callgraph to: "//trim(cg_filename)//".callgraph"
1293 WRITE (unit=iw, fmt="()")
1294 WRITE (unit=iw, fmt="(T2,A)") "-------------------------------------------------------------------------------"
1295 END IF
1296 IF (cg_mode == callgraph_all .OR. para_env%is_source()) &
1297 CALL timings_report_callgraph(trim(cg_filename)//".callgraph")
1298 END IF
1299
1300 CALL cp_print_key_finished_output(iw, logger, root_section, &
1301 "GLOBAL%TIMINGS")
1302
1303 CALL rm_mp_perf_env()
1304 CALL rm_timer_env()
1305
1306 IF (para_env%is_source()) THEN
1307 iw = cp_print_key_unit_nr(logger, root_section, "GLOBAL%PROGRAM_RUN_INFO", &
1308 extension=".log")
1309
1310 ! Deleting (if existing) the external EXIT files
1311 delete_it = .false.
1312 INQUIRE (file="EXIT", exist=delete_it)
1313 IF (delete_it) THEN
1314 CALL open_file(file_name="EXIT", unit_number=unit_exit)
1315 CALL close_file(unit_number=unit_exit, file_status="DELETE")
1316 END IF
1317
1318 delete_it = .false.
1319 INQUIRE (file=trim(logger%iter_info%project_name)//".EXIT", exist=delete_it)
1320 IF (delete_it) THEN
1321 CALL open_file(file_name=trim(logger%iter_info%project_name)//".EXIT", unit_number=unit_exit)
1322 CALL close_file(unit_number=unit_exit, file_status="DELETE")
1323 END IF
1324
1325 ! Print OpenMP issue counter and number of warnings for this workload
1326 IF (iw > 0) THEN
1327 IF (0 <= m_omp_trace_issues()) THEN
1328 WRITE (iw, "(T2,A,I0)") "The number of traced issues for OpenMP : ", m_omp_trace_issues()
1329 END IF
1330 WRITE (iw, "(T2,A,I0)") "The number of warnings for this run is : ", warning_counter
1331 WRITE (iw, *) ""
1332 WRITE (unit=iw, fmt="(T2,A)") repeat("-", 79)
1333 END IF
1334
1335 ! Update the runtime environment variables
1336 CALL get_runtime_info()
1337
1338 ! Just a choice, do not print the CP2K footer if there is a failure
1339 CALL cp2k_footer(iw, wdir)
1340 IF (iw > 0) FLUSH (iw) ! ignore &GLOBAL / FLUSH_SHOULD_FLUSH
1341
1342 CALL cp_print_key_finished_output(iw, logger, root_section, &
1343 "GLOBAL%PROGRAM_RUN_INFO")
1344 END IF
1345
1346 ! Release message passing environment
1348
1349 END SUBROUTINE cp2k_finalize
1350
1351END MODULE environment
Target architecture or instruction set extension according to compiler target flags.
Definition machine.F:96
Trace OpenMP constructs if ennvironment variable CP2K_OMP_TRACE=1.
Definition machine.F:107
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public marek2014
integer, save, public solca2024
integer, save, public frigo2005
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:44
character(len= *), parameter, public compile_host
Definition cp2k_info.F:62
character(len= *), parameter, public compile_arch
Definition cp2k_info.F:50
integer, public r_pid
Definition cp2k_info.F:69
character(len= *), parameter, public compile_revision
Definition cp2k_info.F:38
character(len= *), parameter, public compile_date
Definition cp2k_info.F:56
character(len= *), parameter, public cp2k_year
Definition cp2k_info.F:43
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:80
character(len= *), parameter, public cp2k_version
Definition cp2k_info.F:42
subroutine, public get_runtime_info()
...
Definition cp2k_info.F:328
character(len=default_string_length), public r_user_name
Definition cp2k_info.F:68
Module that contains the routines for error handling.
integer, save, public warning_counter
Utility routines to open and close files. Tracking of preconnections.
Definition cp_files.F:16
subroutine, public open_file(file_name, file_status, file_form, file_action, file_position, file_pad, unit_number, debug, skip_get_unit_number, file_access)
Opens the requested file using a free unit number.
Definition cp_files.F:308
subroutine, public close_file(unit_number, file_status, keep_preconnection)
Close an open file given by its logical unit number. Optionally, keep the file and unit preconnected.
Definition cp_files.F:119
character(len=default_path_length) function, public get_data_dir()
Returns path of data directory if set, otherwise an empty string.
Definition cp_files.F:555
Auxiliary tools to redistribute cp_fm_type matrices before and after diagonalization....
subroutine, public cp_fm_redistribute_init(a, x, should_print, elpa_force_redistribute)
Initializes the parameters that determine how to calculate the optimal number of CPUs for diagonalizi...
used for collecting some of the diagonalization schemes available for cp_fm_type. cp_fm_power also mo...
Definition cp_fm_diag.F:17
real(kind=dp), parameter, public eps_check_diag_default
Definition cp_fm_diag.F:86
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
subroutine, public diag_finalize()
Finalize the diagonalization library.
Definition cp_fm_diag.F:209
subroutine, public diag_init(diag_lib, fallback_applied, elpa_kernel, elpa_neigvec_min_input, elpa_qr, elpa_print, elpa_qr_unsafe, dlaf_neigvec_min_input, eps_check_diag_input)
Setup the diagonalization library to be used.
Definition cp_fm_diag.F:152
integer, parameter, public fm_diag_type_elpa
Definition cp_fm_diag.F:104
represent the structure of a full matrix
subroutine, public cp_fm_struct_config(nrow_block, ncol_block, force_block)
allows to modify the default settings for matrix creation
represent a full matrix distributed on many processors
Definition cp_fm_types.F:15
integer function, public cp_fm_get_mm_type()
...
subroutine, public cp_fm_setup(mm_type)
...
various routines to log and control the output. The idea is that decisions about where to log should ...
recursive integer function, public cp_logger_get_default_unit_nr(logger, local, skip_not_ionode)
asks the default unit number of the given logger. try to use cp_logger_get_unit_nr
subroutine, public cp_logger_set(logger, local_filename, global_filename)
sets various attributes of the given logger
subroutine, public cp_rm_default_logger()
the cousin of cp_add_default_logger, decrements the stack, so that the default logger is what it has ...
subroutine, public cp_logger_release(logger)
releases this logger
subroutine, public cp_logger_create(logger, para_env, print_level, default_global_unit_nr, default_local_unit_nr, global_filename, local_filename, close_global_unit_on_dealloc, iter_info, close_local_unit_on_dealloc, suffix, template_logger)
initializes a logger
subroutine, public cp_add_default_logger(logger)
adds a default logger. MUST be called before logging occours
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
subroutine, public cp_mpi_io_set(flag)
Sets flag which determines whether or not to use MPI I/O for I/O routines that have been parallized w...
integer, parameter, public debug_print_level
integer function, public cp_print_key_unit_nr(logger, basis_section, print_key_path, extension, middle_name, local, log_filename, ignore_should_output, file_form, file_position, file_action, file_status, do_backup, on_file, is_new_file, mpi_io, fout)
...
integer, parameter, public low_print_level
integer, parameter, public medium_print_level
subroutine, public cp_print_key_finished_output(unit_nr, logger, basis_section, print_key_path, local, ignore_should_output, on_file, mpi_io)
should be called after you finish working with a unit obtained with cp_print_key_unit_nr,...
integer, parameter, public high_print_level
integer, parameter, public silent_print_level
Sets up and terminates the global environment variables.
Definition environment.F:17
subroutine, public cp2k_finalize(root_section, para_env, globenv, wdir, q_finalize)
Writes final timings and banner for CP2K.
subroutine, public cp2k_read(root_section, para_env, globenv)
read part of cp2k_init
subroutine, public cp2k_get_walltime(section, keyword_name, walltime)
reads the Walltime also in format HH:MM:SS
subroutine, public cp2k_init(para_env, output_unit, globenv, input_file_name, wdir)
Initializes a CP2K run (setting of the global environment variables)
subroutine, public cp2k_setup(root_section, para_env, globenv)
globenv initializations that need the input and error
subroutine, public init_fft(fftlib, alltoall, fftsg_sizes, pool_limit, wisdom_file, plan_style)
...
Definition fft_tools.F:186
integer, parameter, public fwfft
Definition fft_tools.F:146
subroutine, public finalize_fft(para_env, wisdom_file)
does whatever is needed to finalize the current fft setup
Definition fft_tools.F:216
Interface for the force calculations.
subroutine, public multiple_fe_list(force_env_sections, root_section, i_force_eval, nforce_eval)
returns the order of the multiple force_env
Calculation of the incomplete Gamma function F_n(t) for multi-center integrals over Cartesian Gaussia...
Definition gamma.F:15
subroutine, public deallocate_md_ftable()
Deallocate the table of F_n(t) values.
Definition gamma.F:121
Define type storing the global information of a run. Keep the amount of stored data small....
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
subroutine, public cp2k_header(iw, wdir)
...
Definition header.F:40
subroutine, public cp2k_footer(iw, wdir)
...
Definition header.F:69
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public energy_run
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 do_eip
integer, parameter, public do_test
integer, parameter, public do_fist
integer, parameter, public do_sirius
integer, parameter, public do_dgemm_blas
integer, parameter, public callgraph_none
integer, parameter, public mol_dyn_run
integer, parameter, public do_fft_fftw3
integer, parameter, public none_run
integer, parameter, public do_qs
integer, parameter, public do_dgemm_spla
builds the global input section for cp2k
subroutine, public create_global_section(section)
section to hold global settings for the whole program
represents an enumeration, i.e. a mapping between integers and strings
character(len=default_string_length) function, public enum_i2c(enum, i)
maps an integer to a string
represents keywords in an input
subroutine, public keyword_get(keyword, names, usage, description, type_of_var, n_var, default_value, lone_keyword_value, repeats, enum, citations)
...
objects that represent the structure of input sections and the data contained in an input section
real(kind=dp) function, public section_get_rval(section_vals, keyword_name)
...
subroutine, public section_vals_val_set(section_vals, keyword_name, i_rep_section, i_rep_val, val, l_val, i_val, r_val, c_val, l_vals_ptr, i_vals_ptr, r_vals_ptr, c_vals_ptr)
sets the requested value
integer function, public section_get_ival(section_vals, keyword_name)
...
recursive type(section_vals_type) function, pointer, public section_vals_get_subs_vals(section_vals, subsection_name, i_rep_section, can_return_null)
returns the values of the requested subsection
recursive subroutine, public section_release(section)
releases the given keyword list (see doc/ReferenceCounting.html)
recursive type(keyword_type) function, pointer, public section_get_keyword(section, keyword_name)
returns the requested keyword
subroutine, public section_vals_get(section_vals, ref_count, n_repetition, n_subs_vals_rep, section, explicit)
returns various attributes about the section_vals
type(section_vals_type) function, pointer, public section_vals_get_subs_vals3(section_vals, subsection_name, i_rep_section)
returns the values of the n-th non default subsection (null if no such section exists (not so many no...
subroutine, public section_vals_val_get(section_vals, keyword_name, i_rep_section, i_rep_val, n_rep_val, val, l_val, i_val, r_val, c_val, l_vals, i_vals, r_vals, c_vals, explicit)
returns the requested value
logical function, public section_get_lval(section_vals, keyword_name)
...
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public int_8
Definition kinds.F:54
integer, parameter, public dp
Definition kinds.F:34
integer, parameter, public default_string_length
Definition kinds.F:57
integer, parameter, public default_path_length
Definition kinds.F:58
subroutine, public print_kind_info(iw)
Print informations about the used data types.
Definition kinds.F:72
subroutine, public local_gemm_set_library(dgemm_library)
...
Machine interface based on Fortran 2003 and POSIX.
Definition machine.F:17
logical, save, public flush_should_flush
Definition machine.F:115
integer function, public m_procrun(pid)
Returns if a process is running on the local machine 1 if yes and 0 if not.
Definition machine.F:407
subroutine, public m_memory_details(memtotal, memfree, buffers, cached, slab, sreclaimable, memlikelyfree)
get more detailed memory info, all units are bytes. the only 'useful' option is MemLikelyFree which i...
Definition machine.F:510
pure integer function, public m_cpuid()
Target architecture or instruction set extension according to CPU-check at runtime.
Definition machine.F:194
pure integer function, public m_cpuid_vlen(cpuid, typesize)
Determine vector-length for a given CPUID.
Definition machine.F:276
real(kind=dp) function, public m_energy()
returns the energy used since some time in the past. The precise meaning depends on the infrastructur...
Definition machine.F:327
subroutine, public m_cpuinfo(model_name)
reads /proc/cpuinfo if it exists (i.e. Linux) to return relevant info
Definition machine.F:161
pure character(len=default_string_length) function, public m_cpuid_name(cpuid)
Determine name of target architecture for a given CPUID.
Definition machine.F:232
subroutine, public m_omp_get_stacksize(omp_stacksize)
Retrieve environment variable OMP_STACKSIZE.
Definition machine.F:762
Interface to the message passing library MPI.
logical, save, public mp_collect_timings
Defines all routines to deal with the performance of MPI routines.
Definition mp_perf_env.F:11
subroutine, public rm_mp_perf_env()
...
subroutine, public describe_mp_perf_env(scr)
...
subroutine, public add_mp_perf_env(perf_env)
start and stop the performance indicators for every call to start there has to be (exactly) one call ...
Definition mp_perf_env.F:76
Provides Cartesian and spherical orbital pointers and indices.
subroutine, public init_orbital_pointers(maxl)
Initialize or update the orbital pointers.
subroutine, public deallocate_orbital_pointers()
Deallocate the orbital pointers.
Calculation of the spherical harmonics and the corresponding orbital transformation matrices.
subroutine, public init_spherical_harmonics(maxl, output_unit)
Initialize or update the orbital transformation matrices.
subroutine, public deallocate_spherical_harmonics()
Deallocate the orbital transformation matrices.
Parallel (pseudo)random number generator (RNG) for multiple streams and substreams of random numbers.
subroutine, public check_rng(output_unit, ionode)
...
subroutine, public write_rng_matrices(output_unit)
Write the transformation matrices of the two MRG components (raised to the specified output)
integer, parameter, public gaussian
Definition of physical constants:
Definition physcon.F:68
real(kind=dp), parameter, public seconds
Definition physcon.F:150
subroutine, public write_physcon(output_unit)
Write all basic physical constants used by CP2K to a logical output unit.
Definition physcon.F:217
provides a uniform framework to add references to CP2K cite and output these
subroutine, public collect_citations_from_ranks(para_env)
Checks for each reference if any mpi-rank has marked it for citation.
subroutine, public cite_reference(key)
marks a given reference as cited.
subroutine, public print_cited_references(unit)
printout of all cited references in the journal format sorted by publication year
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,...
subroutine, public string_to_ascii(string, nascii)
Convert a string to sequence of integer numbers.
subroutine, public ascii_to_string(nascii, string)
Convert a sequence of integer numbers (ASCII code) to a string. Blanks are inserted for invalid ASCII...
Timing routines for accounting.
integer, parameter, public cost_type_energy
subroutine, public timings_report_callgraph(filename)
Write accumulated callgraph information as cachegrind-file. http://kcachegrind.sourceforge....
integer, parameter, public cost_type_time
subroutine, public timings_report_print(iw, r_timings, sort_by_self_time, cost_type, report_maxloc, para_env)
Print accumulated information on timers.
Timing routines for accounting.
Definition timings.F:17
integer, save, public global_timings_level
Definition timings.F:68
subroutine, public timings_setup_tracing(trace_max, unit_nr, trace_str, routine_names)
Set routine tracer.
Definition timings.F:398
subroutine, public add_timer_env(timer_env)
adds the given timer_env to the top of the stack
Definition timings.F:93
subroutine, public rm_timer_env()
removes the current timer env from the stack
Definition timings.F:134
character(len=default_string_length), parameter, public root_cp2k_name
Definition timings.F:70
Interface for Voronoi Integration and output of BQB files.
subroutine, public finalize_libvori()
Call libvori's finalize if support is compiled in.
type of a logger, at the moment it contains just a print level starting at which level it should be l...
contains the initially parsed file and the initial parallel environment
represent a keyword in the input
represent a section of the input file
stores all the informations relevant to an mpi environment