43 USE dbcsr_api,
ONLY: dbcsr_finalize_lib,&
46 dbcsr_print_statistics
139 #include "../base/base_uses.f90"
147 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'cp2k_runs'
174 RECURSIVE SUBROUTINE cp2k_run(input_declaration, input_file_name, output_unit, mpi_comm, initial_variables)
175 TYPE(section_type),
POINTER :: input_declaration
176 CHARACTER(LEN=*),
INTENT(IN) :: input_file_name
177 INTEGER,
INTENT(IN) :: output_unit
179 CLASS(mp_comm_type) :: mpi_comm
180 CHARACTER(len=default_path_length), &
181 DIMENSION(:, :),
INTENT(IN) :: initial_variables
183 INTEGER :: f_env_handle, grid_backend, ierr, &
184 iter_level, method_name_id, &
185 new_env_id, prog_name_id, run_type_id
186 INTEGER(KIND=int_8) :: m_memory_max_mpi
187 LOGICAL :: echo_input, grid_apply_cutoff, &
188 grid_validate, I_was_ionode
189 TYPE(cp_logger_type),
POINTER :: logger, sublogger
190 TYPE(mp_para_env_type),
POINTER :: para_env
191 TYPE(dft_control_type),
POINTER :: dft_control
192 TYPE(f_env_type),
POINTER :: f_env
193 TYPE(force_env_type),
POINTER :: force_env
194 TYPE(global_environment_type),
POINTER :: globenv
195 TYPE(section_vals_type),
POINTER :: glob_section, input_file, root_section
197 NULLIFY (para_env, f_env, dft_control)
201 #if defined(__DBCSR_ACC)
203 CALL dbcsr_init_lib(mpi_comm%get_handle(), io_unit=output_unit, &
206 CALL dbcsr_init_lib(mpi_comm%get_handle(), io_unit=output_unit)
209 CALL dbcsr_init_lib(mpi_comm%get_handle(), io_unit=output_unit)
217 NULLIFY (globenv, force_env)
222 input_file =>
read_input(input_declaration, input_file_name, initial_variables=initial_variables, &
233 hide_root=.true., hide_defaults=.false.)
236 CALL check_cp2k_input(input_declaration, input_file, para_env=para_env, output_unit=output_unit)
237 root_section => input_file
244 IF (prog_name_id /=
do_cp2k)
THEN
248 CALL cp2k_init(para_env, output_unit, globenv, input_file_name=input_file_name)
249 CALL cp2k_read(root_section, para_env, globenv)
250 CALL cp2k_setup(root_section, para_env, globenv)
254 IF (output_unit > 0 .AND. &
256 CALL dbcsr_print_config(unit_nr=output_unit)
257 WRITE (unit=output_unit, fmt=
'()')
266 validate=grid_validate, &
269 SELECT CASE (prog_name_id)
276 CALL run_swarm(input_declaration, root_section, para_env, globenv, input_file_name)
281 CALL dbcsr_finalize_lib()
288 CALL farming_run(input_declaration, root_section, para_env, initial_variables)
289 #if defined(__DBCSR_ACC)
291 CALL dbcsr_init_lib(mpi_comm%get_handle(), io_unit=output_unit, &
294 CALL dbcsr_init_lib(mpi_comm%get_handle(), io_unit=output_unit)
297 CALL dbcsr_init_lib(mpi_comm%get_handle(), io_unit=output_unit)
309 input_declaration=input_declaration, &
310 input_path=input_file_name, &
311 output_path=
"__STD_OUT__", mpi_comm=para_env, &
312 output_unit=output_unit, &
313 owns_out_unit=.false., &
314 input=input_file, ierr=ierr)
317 force_env => f_env%force_env
320 CALL lib_test(root_section, para_env, globenv)
322 CALL do_tmc(input_declaration, root_section, para_env, globenv)
330 SELECT CASE (globenv%run_type_id)
332 CALL do_pint_run(para_env, root_section, input_declaration, globenv)
338 IF (method_name_id /=
do_qs .AND. &
340 method_name_id /=
do_qmmm .AND. &
342 method_name_id /=
do_nnp .AND. &
345 cpabort(
"Energy/Force run not available for all methods ")
349 n_rlevel_new=iter_level)
357 SELECT CASE (globenv%run_type_id)
365 CALL cp_rm_iter_level(sublogger%iter_info, level_name=
"JUST_ENERGY", n_rlevel_att=iter_level)
373 CALL do_mon_car(force_env, globenv, input_declaration, input_file_name)
375 CALL qs_tamc(force_env, globenv)
377 IF (method_name_id /=
do_qs) &
378 cpabort(
"Electron spectra available only with Quickstep. ")
382 IF (method_name_id /=
do_qs) &
383 cpabort(
"Real time propagation needs METHOD QS. ")
384 CALL get_qs_env(force_env%qs_env, dft_control=dft_control)
385 dft_control%rtp_control%fixed_ions = .true.
388 IF (method_name_id /=
do_qs) &
389 cpabort(
"Ehrenfest dynamics needs METHOD QS ")
390 CALL get_qs_env(force_env%qs_env, dft_control=dft_control)
391 dft_control%rtp_control%fixed_ions = .false.
396 IF (method_name_id /=
do_qs .AND. &
398 cpabort(
"Property calculations by Linear Response only within the QS or QMMM program ")
403 SELECT CASE (method_name_id)
407 cpabort(
"Debug run available only with QS, FIST, and QMMM program ")
410 CALL vb_anal(root_section, input_declaration, para_env, globenv)
412 CALL neb(root_section, input_declaration, para_env, globenv)
429 CALL dbcsr_print_statistics()
435 CALL mpi_comm%max(m_memory_max_mpi)
436 IF (output_unit > 0)
THEN
437 WRITE (output_unit, *)
438 WRITE (output_unit,
'(T2,"MEMORY| Estimated peak process memory [MiB]",T73,I8)') &
439 (m_memory_max_mpi + (1024*1024) - 1)/(1024*1024)
442 IF (prog_name_id ==
do_cp2k)
THEN
443 f_env%force_env => force_env
444 IF (
ASSOCIATED(force_env%globenv))
THEN
445 IF (.NOT.
ASSOCIATED(force_env%globenv, globenv))
THEN
449 force_env%globenv => globenv
456 i_was_ionode = para_env%is_source()
458 cpassert(globenv%ref_count == 1)
463 CALL dbcsr_finalize_lib()
467 END SUBROUTINE cp2k_run
480 RECURSIVE SUBROUTINE farming_run(input_declaration, root_section, para_env, initial_variables)
481 TYPE(section_type),
POINTER :: input_declaration
482 TYPE(section_vals_type),
POINTER :: root_section
483 TYPE(mp_para_env_type),
POINTER :: para_env
484 CHARACTER(len=default_path_length),
DIMENSION(:, :),
INTENT(IN) :: initial_variables
486 CHARACTER(len=*),
PARAMETER :: routineN =
'farming_run'
487 INTEGER,
PARAMETER :: minion_status_done = -3, &
488 minion_status_wait = -4
490 CHARACTER(len=7) :: label
491 CHARACTER(LEN=default_path_length) :: output_file
492 CHARACTER(LEN=default_string_length) :: str
493 INTEGER :: dest, handle, i, i_job_to_restart, ierr, ijob, ijob_current, &
494 ijob_end, ijob_start, iunit, n_jobs_to_run, new_output_unit, &
495 new_rank, ngroups, num_minions, output_unit, primus_minion, &
496 minion_rank, source, tag, todo
497 INTEGER,
DIMENSION(:),
POINTER :: group_distribution, &
498 captain_minion_partition, &
499 minion_distribution, &
501 LOGICAL :: found, captain, minion
502 REAL(KIND=
dp) :: t1, t2
503 REAL(KIND=
dp),
ALLOCATABLE,
DIMENSION(:) :: waittime
504 TYPE(cp_logger_type),
POINTER :: logger
505 TYPE(cp_parser_type),
POINTER :: my_parser
506 TYPE(cp_unit_set_type) :: default_units
507 TYPE(farming_env_type),
POINTER :: farming_env
508 TYPE(section_type),
POINTER :: g_section
509 TYPE(section_vals_type),
POINTER :: g_data
510 TYPE(mp_comm_type) :: minion_group, new_group
513 CALL timeset(routinen, handle)
514 NULLIFY (my_parser, g_section, g_data)
520 IF (output_unit > 0)
WRITE (output_unit, fmt=
"(T2,A)")
"FARMING| Hi, welcome on this farm!"
522 ALLOCATE (farming_env)
531 IF (farming_env%captain_minion)
THEN
532 IF (output_unit > 0)
WRITE (output_unit, fmt=
"(T2,A)")
"FARMING| Using a Captain-Minion setup"
534 ALLOCATE (captain_minion_partition(0:1))
535 captain_minion_partition = (/1, para_env%num_pe - 1/)
536 ALLOCATE (group_distribution(0:para_env%num_pe - 1))
538 CALL minion_group%from_split(para_env, ngroups, group_distribution, &
539 n_subgroups=2, group_partition=captain_minion_partition)
540 DEALLOCATE (captain_minion_partition)
541 DEALLOCATE (group_distribution)
542 num_minions = minion_group%num_pe
543 minion_rank = minion_group%mepos
545 IF (para_env%mepos == 0)
THEN
549 cpassert(num_minions == 1)
550 num_minions = para_env%num_pe - 1
553 cpassert(num_minions == para_env%num_pe - 1)
556 IF (output_unit > 0)
WRITE (output_unit, fmt=
"(T2,A)")
"FARMING| Using a Minion-only setup"
557 CALL minion_group%from_dup(para_env)
558 num_minions = minion_group%num_pe
559 minion_rank = minion_group%mepos
561 IF (output_unit > 0)
WRITE (output_unit, fmt=
"(T2,A,I0)")
"FARMING| Number of Minions ", num_minions
564 ALLOCATE (minion_distribution(0:para_env%num_pe - 1))
565 minion_distribution = 0
566 minion_distribution(para_env%mepos) = minion_rank
567 CALL para_env%sum(minion_distribution)
570 DO i = 1, para_env%num_pe - 1
571 IF (minion_distribution(i) == 0) primus_minion = i
576 ALLOCATE (group_distribution(0:num_minions - 1))
577 group_distribution = -1
579 IF (farming_env%group_size_wish_set)
THEN
580 farming_env%group_size_wish = min(farming_env%group_size_wish, para_env%num_pe)
581 CALL new_group%from_split(minion_group, ngroups, group_distribution, &
582 subgroup_min_size=farming_env%group_size_wish, stride=farming_env%stride)
583 ELSE IF (farming_env%ngroup_wish_set)
THEN
584 IF (
ASSOCIATED(farming_env%group_partition))
THEN
585 CALL new_group%from_split(minion_group, ngroups, group_distribution, &
586 n_subgroups=farming_env%ngroup_wish, &
587 group_partition=farming_env%group_partition, stride=farming_env%stride)
589 CALL new_group%from_split(minion_group, ngroups, group_distribution, &
590 n_subgroups=farming_env%ngroup_wish, stride=farming_env%stride)
593 cpabort(
"must set either group_size_wish or ngroup_wish")
595 new_rank = new_group%mepos
599 IF (farming_env%captain_minion)
THEN
600 IF (para_env%mepos == primus_minion)
THEN
602 CALL para_env%send(group_distribution, 0, tag)
604 CALL para_env%send(ngroups, 0, tag)
606 IF (para_env%mepos == 0)
THEN
608 CALL para_env%recv(group_distribution, primus_minion, tag)
610 CALL para_env%recv(ngroups, primus_minion, tag)
615 IF (output_unit > 0)
THEN
616 WRITE (output_unit, fmt=
"(T2,A,T71,I10)")
"FARMING| Number of created MPI (Minion) groups:", ngroups
617 WRITE (output_unit, fmt=
"(T2,A)", advance=
"NO")
"FARMING| MPI (Minion) process to group correspondence:"
618 DO i = 0, num_minions - 1
619 IF (
modulo(i, 4) == 0)
WRITE (output_unit, *)
620 WRITE (output_unit, fmt=
'(A3,I6,A3,I6,A1)', advance=
"NO") &
621 " (", i,
" : ", group_distribution(i),
")"
623 WRITE (output_unit, *)
629 IF (farming_env%cycle)
THEN
630 n_jobs_to_run = farming_env%max_steps*ngroups
631 i_job_to_restart =
modulo(farming_env%restart_n + n_jobs_to_run - 1, farming_env%njobs) + 1
633 n_jobs_to_run = min(farming_env%njobs, farming_env%max_steps*ngroups)
634 n_jobs_to_run = min(n_jobs_to_run, farming_env%njobs - farming_env%restart_n + 1)
635 i_job_to_restart = n_jobs_to_run + farming_env%restart_n
640 extension=
".restart")
642 WRITE (iunit, *) i_job_to_restart
647 ijob_start = farming_env%restart_n
648 ijob_end = ijob_start + n_jobs_to_run - 1
649 IF (output_unit > 0 .AND. ijob_end - ijob_start < 0)
THEN
650 WRITE (output_unit, fmt=
"(T2,A)")
"FARMING| --- WARNING --- NO JOBS NEED EXECUTION ? "
651 WRITE (output_unit, fmt=
"(T2,A)")
"FARMING| is the cycle keyword required ?"
652 WRITE (output_unit, fmt=
"(T2,A)")
"FARMING| or is a stray RESTART file present ?"
653 WRITE (output_unit, fmt=
"(T2,A)")
"FARMING| or is the group_size requested smaller than the number of CPUs?"
657 IF (farming_env%captain_minion)
THEN
662 IF (new_rank == 0)
THEN
667 CALL para_env%send(todo, dest, tag)
672 CALL para_env%recv(todo, source, tag)
675 CALL new_group%bcast(todo, 0)
677 CALL new_group%bcast(todo, 0)
687 IF (t2 - t1 > farming_env%wait_time)
EXIT
692 CALL execute_job(todo)
696 ALLOCATE (minion_status(0:ngroups - 1))
697 minion_status = minion_status_wait
698 ijob_current = ijob_start - 1
701 IF (all(minion_status == minion_status_done))
EXIT
706 CALL para_env%recv(todo, source, tag)
709 IF (output_unit > 0)
THEN
710 WRITE (output_unit, fmt=*)
"Job finished: ", todo
716 CALL get_next_job(farming_env, ijob_start, ijob_end, ijob_current, todo)
719 CALL para_env%send(todo, dest, tag)
723 IF (output_unit > 0)
THEN
724 WRITE (output_unit, fmt=*)
"Job: ", todo,
" Dir: ", trim(farming_env%Job(todo)%cwd), &
725 " assigned to group ", group_distribution(minion_distribution(dest))
730 minion_status(group_distribution(minion_distribution(dest))) = minion_status_done
731 IF (output_unit > 0)
THEN
732 WRITE (output_unit, fmt=*)
"group done: ", group_distribution(minion_distribution(dest))
737 IF (output_unit > 0)
THEN
738 WRITE (output_unit, fmt=*)
""
739 WRITE (output_unit, fmt=*)
"FARMING JOB DEADLOCKED ... CIRCULAR DEPENDENCIES"
740 WRITE (output_unit, fmt=*)
""
749 DEALLOCATE (minion_status)
756 IF (output_unit > 0)
THEN
757 IF (ijob_end - ijob_start >= 0)
THEN
758 WRITE (output_unit, fmt=
"(T2,A)")
"FARMING| List of jobs : "
759 DO ijob = ijob_start, ijob_end
760 i =
modulo(ijob - 1, farming_env%njobs) + 1
761 WRITE (output_unit, fmt=*)
"Job: ", i,
" Dir: ", trim(farming_env%Job(i)%cwd),
" Input: ", &
762 trim(farming_env%Job(i)%input),
" MPI group:",
modulo(i - 1, ngroups)
768 DO ijob = ijob_start, ijob_end
769 i =
modulo(ijob - 1, farming_env%njobs) + 1
771 IF (
modulo(i - 1, ngroups) == group_distribution(minion_rank))
THEN
772 IF (output_unit > 0)
THEN
773 WRITE (output_unit, fmt=
"(T2,A,I5.5,A)", advance=
"NO")
" Running Job ", i, &
774 " in "//trim(farming_env%Job(i)%cwd)//
"."
778 IF (output_unit > 0)
THEN
779 WRITE (output_unit, fmt=
"(A)")
" Done, output in "//trim(output_file)
791 ALLOCATE (waittime(0:para_env%num_pe - 1))
793 waittime(para_env%mepos) = t2 - t1
794 CALL para_env%sum(waittime)
795 IF (output_unit > 0)
THEN
796 WRITE (output_unit,
'(T2,A)')
"Process idle times [s] at the end of the run"
797 DO i = 0, para_env%num_pe - 1
798 WRITE (output_unit, fmt=
'(A2,I6,A3,F8.3,A1)', advance=
"NO") &
799 " (", i,
" : ", waittime(i),
")"
800 IF (mod(i + 1, 4) == 0)
WRITE (output_unit,
'(A)')
""
804 DEALLOCATE (waittime)
807 IF (minion)
CALL new_group%free()
808 CALL minion_group%free()
811 DEALLOCATE (group_distribution)
812 DEALLOCATE (minion_distribution)
818 "FARMING%PROGRAM_RUN_INFO")
820 CALL timestop(handle)
827 RECURSIVE SUBROUTINE execute_job(i)
832 CALL m_chdir(trim(farming_env%Job(i)%cwd), ierr)
834 cpabort(
"Failed to change dir to: "//trim(farming_env%Job(i)%cwd))
837 IF (new_rank == 0)
THEN
839 IF (farming_env%Job(i)%output ==
"")
THEN
841 WRITE (output_file,
'(A12,I5.5)')
"FARMING_OUT_", i
843 CALL parser_create(my_parser, file_name=trim(farming_env%Job(i)%input))
854 IF (str .NE.
"") output_file = trim(str)//
".out"
857 IF (str .NE.
"") output_file = str
862 DEALLOCATE (my_parser)
864 output_file = farming_env%Job(i)%output
867 CALL open_file(file_name=trim(output_file), &
868 file_action=
"WRITE", &
869 file_status=
"UNKNOWN", &
870 file_position=
"APPEND", &
871 unit_number=new_output_unit)
879 CALL cp2k_run(input_declaration, trim(farming_env%Job(i)%input), new_output_unit, new_group, initial_variables)
881 IF (new_rank == 0)
CALL close_file(unit_number=new_output_unit)
884 CALL m_chdir(trim(farming_env%cwd), ierr)
887 END SUBROUTINE execute_job
888 END SUBROUTINE farming_run
895 INTEGER :: i, unit_number
896 TYPE(section_type),
POINTER :: root_section
898 NULLIFY (root_section)
901 CALL open_file(unit_number=unit_number, &
902 file_name=
"cp2k_input.xml", &
903 file_action=
"WRITE", &
904 file_status=
"REPLACE")
906 WRITE (unit=unit_number, fmt=
"(A)")
'<?xml version="1.0" encoding="utf-8"?>'
909 WRITE (unit=unit_number, fmt=
"(A)") &
911 " <CP2K_VERSION>"//trim(
cp2k_version)//
"</CP2K_VERSION>", &
912 " <CP2K_YEAR>"//trim(
cp2k_year)//
"</CP2K_YEAR>", &
913 " <COMPILE_DATE>"//trim(
compile_date)//
"</COMPILE_DATE>", &
915 DO i = 1, root_section%n_subsections
919 WRITE (unit=unit_number, fmt=
"(A)")
"</CP2K_INPUT>"
924 CALL open_file(unit_number=unit_number, file_name=
"references.html", &
925 file_action=
"WRITE", file_status=
"REPLACE")
926 WRITE (unit_number, fmt=
'(A)')
"<HTML><BODY><HEAD><TITLE>The cp2k literature list</TITLE>"
927 WRITE (unit_number, fmt=
'(A)')
"<H1>CP2K references</H1>"
930 WRITE (unit_number, fmt=
'(A)')
"</BODY></HTML>"
934 CALL open_file(unit_number=unit_number, file_name=
"units.html", &
935 file_action=
"WRITE", file_status=
"REPLACE")
936 WRITE (unit_number, fmt=
'(A)')
"<HTML><BODY><HEAD><TITLE>The cp2k units list</TITLE>"
937 WRITE (unit_number, fmt=
'(A)')
"<H1>CP2K Available Units of Measurement</H1>"
939 WRITE (unit_number, fmt=
'(A)')
"</BODY></HTML>"
957 SUBROUTINE run_input(input_declaration, input_file_path, output_file_path, initial_variables, mpi_comm)
958 TYPE(section_type),
POINTER :: input_declaration
959 CHARACTER(len=*),
INTENT(in) :: input_file_path, output_file_path
960 CHARACTER(len=default_path_length), &
961 DIMENSION(:, :),
INTENT(IN) :: initial_variables
962 TYPE(mp_comm_type),
INTENT(in),
OPTIONAL :: mpi_comm
965 TYPE(mp_para_env_type),
POINTER :: para_env
967 IF (
PRESENT(mpi_comm))
THEN
971 para_env => f77_default_para_env
972 CALL para_env%retain()
974 IF (para_env%is_source())
THEN
975 IF (output_file_path ==
"__STD_OUT__")
THEN
978 INQUIRE (file=output_file_path, number=unit_nr)
983 CALL cp2k_run(input_declaration, input_file_path, unit_nr, para_env, initial_variables)
static GRID_HOST_DEVICE int modulo(int a, int m)
Equivalent of Fortran's MODULO, which always return a positive number. https://gcc....
void apply_cutoff(void *ptr)
void grid_library_print_stats(void(*mpi_sum_func)(long *, int), const int mpi_comm, void(*print_func)(char *, int), const int output_unit)
Prints statistics gathered by the grid library.
void grid_library_set_config(const enum grid_backend backend, const bool validate, const bool apply_cutoff)
Configures the grid library.
subroutine, public atom_code(root_section)
Driver routine to perform atomic calculations.
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public hutter2014
Module to perform a counterpoise correction (BSSE)
subroutine, public do_bsse_calculation(force_env, globenv)
Perform an COUNTERPOISE CORRECTION (BSSE) For a 2-body system the correction scheme can be represente...
performs CELL optimization
subroutine, public cp_cell_opt(force_env, globenv)
Main driver to perform geometry optimization.
Debug energy and derivatives w.r.t. finite differences.
subroutine, public cp2k_debug_energy_and_forces(force_env)
...
some minimal info about CP2K, including its version and license
character(len= *), parameter, public compile_revision
character(len= *), parameter, public compile_date
character(len= *), parameter, public cp2k_year
character(len= *), parameter, public cp2k_version
subroutine, public run_input(input_declaration, input_file_path, output_file_path, initial_variables, mpi_comm)
runs the given input
subroutine, public write_xml_file()
...
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
Routines that link DBCSR and CP2K concepts together.
subroutine, public cp_dbcsr_config(root_section)
Configures options for DBCSR.
subroutine, public cp_dlaf_finalize()
Finalize DLA-Future and pika runtime.
subroutine, public cp_dlaf_initialize()
Initialize DLA-Future and pika runtime.
Utility routines to open and close files. Tracking of preconnections.
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.
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.
various routines to log and control the output. The idea is that decisions about where to log should ...
logical function, public cp_logger_would_log(logger, level)
this function can be called to check if the logger would log a message with the given level from the ...
integer, parameter, public cp_note_level
integer function, public cp_logger_get_default_io_unit(logger)
returns the unit nr for the ionode (-1 on all other processors) skips as well checks if the procs cal...
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...
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)
...
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,...
subroutine, public cp_rm_iter_level(iteration_info, level_name, n_rlevel_att)
Removes an iteration level.
subroutine, public cp_add_iter_level(iteration_info, level_name, n_rlevel_new)
Adds an iteration level.
Utility routines to read data from files. Kept as close as possible to the old parser because.
subroutine, public parser_search_string(parser, string, ignore_case, found, line, begin_line, search_from_begin_of_file)
Search a string pattern in a file defined by its logical unit number "unit". A case sensitive search ...
Utility routines to read data from files. Kept as close as possible to the old parser because.
subroutine, public parser_release(parser)
releases the parser
subroutine, public parser_create(parser, file_name, unit_nr, para_env, end_section_label, separator_chars, comment_char, continuation_char, quote_char, section_char, parse_white_lines, initial_variables, apply_preprocessing)
Start a parser run. Initial variables allow to @SET stuff before opening the file.
subroutine, public print_all_units(unit_nr)
Prints info on all available units in CP2K.
subroutine, public cp_unit_set_release(unit_set)
releases the given unit set
subroutine, public cp_unit_set_create(unit_set, name)
initializes the given unit set
subroutine, public dbm_library_print_stats(mpi_comm, output_unit)
Print DBM library statistics.
Sets up and terminates the global environment variables.
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_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
interface to use cp2k as library
recursive subroutine, public destroy_force_env(env_id, ierr, q_finalize)
deallocates the force_env with the given id
subroutine, public f_env_add_defaults(f_env_id, f_env, handle)
adds the default environments of the f_env to the stack of the defaults, and returns a new error and ...
type(mp_para_env_type), pointer, save, public default_para_env
recursive subroutine, public create_force_env(new_env_id, input_declaration, input_path, output_path, mpi_comm, output_unit, owns_out_unit, input, ierr, work_dir, initial_variables)
creates a new force environment using the given input, and writing the output to the given output uni...
subroutine, public f_env_rm_defaults(f_env, ierr, handle)
removes the default environments of the f_env to the stack of the defaults, and sets ierr accordingly...
subroutine, public farming_parse_input(farming_env, root_section, para_env)
...
subroutine, public get_next_job(farming_env, start, END, current, todo)
...
integer, parameter, public do_nothing
integer, parameter, public do_wait
integer, parameter, public do_deadlock
subroutine, public deallocate_farming_env(farming_env)
deallocates all associated fields of the farming_env type and the type itself
integer, parameter, public job_finished
integer, parameter, public job_running
subroutine, public init_farming_env(farming_env)
help poor compilers do their job i.e. provide a default initialization
Interface for the force calculations.
recursive subroutine, public force_env_calc_energy_force(force_env, calc_force, consistent_energies, skip_external_control, eval_energy_forces, require_consistent_energy_force, linres, calc_stress_tensor)
Interface routine for force and energy calculations.
Interface for the force calculations.
recursive subroutine, public force_env_get(force_env, in_use, fist_env, qs_env, meta_env, fp_env, subsys, para_env, potential_energy, additional_potential, kinetic_energy, harmonic_shell, kinetic_shell, cell, sub_force_env, qmmm_env, qmmmx_env, eip_env, pwdft_env, globenv, input, force_env_section, method_name_id, root_section, mixed_env, nnp_env, embed_env)
returns various attributes about the force environment
performs geometry optimization
subroutine, public cp_geo_opt(force_env, globenv, eval_opt_geo, rm_restart_info)
Main driver to perform geometry optimization.
Define type storing the global information of a run. Keep the amount of stored data small....
subroutine, public globenv_create(globenv)
Creates the global environment globenv.
subroutine, public globenv_release(globenv)
Releases the global environment globenv.
Fortran API for the grid package, which is written in C.
Driver mode - To communicate with i-PI Python wrapper.
subroutine, public run_driver(force_env, globenv)
...
Defines the basic variable types.
integer, parameter, public int_8
integer, parameter, public dp
integer, parameter, public default_string_length
integer, parameter, public default_path_length
Performance tests for basic tasks like matrix multiplies, copy, fft.
subroutine, public lib_test(root_section, para_env, globenv)
Master routine for tests.
Machine interface based on Fortran 2003 and POSIX.
integer, parameter, public default_output_unit
subroutine, public m_memory(mem)
Returns the total amount of memory [bytes] in use, if known, zero otherwise.
subroutine, public m_flush(lunit)
flushes units if the &GLOBAL flag is set accordingly
subroutine, public m_getcwd(curdir)
...
subroutine, public m_chdir(dir, ierror)
...
integer(kind=int_8), save, public m_memory_max
real(kind=dp) function, public m_walltime()
returns time from a real-time clock, protected against rolling early/easily
preps the system for a Monte Carlo run (sets up some environments, calls the routines to read in the ...
subroutine, public do_mon_car(force_env_1, globenv, input_declaration, input_file_name)
starts the Monte Carlo simulation and determines which ensemble we're running
Perform a molecular dynamics (MD) run using QUICKSTEP.
subroutine, public qs_mol_dyn(force_env, globenv, averages, rm_restart_info, hmc_e_initial, hmc_e_final, mdctrl)
Main driver module for Molecular Dynamics.
Interface to the message passing library MPI.
subroutine, public mp_para_env_release(para_env)
releases the para object (to be called when you don't want anymore the shared copy of this object)
integer, parameter, public mp_any_source
Subroutines to perform calculations on molecules from a bigger system. Useful to generate a high-qual...
subroutine, public loop_over_molecules(globenv, force_env)
Prepare data for calculations on isolated molecules.
logical function, public do_mol_loop(force_env)
Is the loop over molecules requested?
Module performing a Nudged Elastic Band Calculation.
subroutine, public neb(input, input_declaration, para_env, globenv)
Real subroutine for NEB calculations.
NEGF based quantum transport calculations.
subroutine, public do_negf(force_env)
Perform NEGF calculation.
Fortran API for the offload package, which is written in C.
integer function, public offload_get_device_count()
Returns the number of available devices.
integer function, public offload_get_chosen_device()
Returns the chosen device.
subroutine, public run_optimize_basis(input_declaration, root_section, para_env)
main entry point for methods aimed at optimizing basis sets
Methods to performs a path integral run.
subroutine, public do_pint_run(para_env, input, input_declaration, globenv)
Perform a path integral simulation.
subroutine, public pw_fpga_finalize()
Releases resources on the fpga device.
subroutine, public pw_fpga_init()
Allocates resources on the fpga device.
subroutine, public pw_gpu_init()
Allocates resources on the gpu device for gpu fft acceleration.
subroutine, public pw_gpu_finalize()
Releases resources on the gpu device for gpu fft acceleration.
subroutine, public get_qs_env(qs_env, atomic_kind_set, qs_kind_set, cell, super_cell, cell_ref, use_ref_cell, kpoints, dft_control, mos, sab_orb, sab_all, qmmm, qmmm_periodic, sac_ae, sac_ppl, sac_lri, sap_ppnl, sab_vdw, sab_scp, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_RI_aux_kp, matrix_s, matrix_s_RI_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, ecoul_1c, rho0_s_rs, rho0_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, WannierCentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, rhs)
Get the QUICKSTEP environment.
Contains the setup for the calculation of properties by linear response by the application of second ...
subroutine, public linres_calculation(force_env)
Driver for the linear response calculatios.
Performs density functional perturbation theory (tddfpt) calculations. Uses the self consistent appro...
subroutine, public tddfpt_calculation(qs_env)
Performs the perturbation calculation.
provides a uniform framework to add references to CP2K cite and output these
subroutine, public print_all_references(cited_only, sorted, FORMAT, unit, list)
printout of all references in a specific format optionally printing only those that are actually cite...
integer, parameter, public print_format_html
Routines for the real time propagation.
subroutine, public rt_prop_setup(force_env)
creates rtp_type, gets the initial state, either by reading MO's from file or calling SCF run
Interface to the SIRIUS Library.
subroutine, public cp_sirius_init()
Empty implementation in case SIRIUS is not compiled in.
subroutine, public cp_sirius_finalize()
Empty implementation in case SIRIUS is not compiled in.
Swarm-framwork, provides a convenient master/worker architecture.
subroutine, public run_swarm(input_declaration, root_section, para_env, globenv, input_path)
Central driver routine of the swarm framework, called by cp2k_runs.F.
Perform a temperature accelarated hybrid monte carlo (TAHMC) run using QUICKSTEP.
subroutine, public qs_tamc(force_env, globenv, averages)
Driver routine for TAHMC.
Tree Monte Carlo entry point, set up, CPU redistribution and input reading.
subroutine, public do_analyze_files(input_declaration, root_section, para_env)
analyze TMC trajectory files
subroutine, public do_tmc(input_declaration, root_section, para_env, globenv)
tmc_entry point
Module performing a vibrational analysis.
subroutine, public vb_anal(input, input_declaration, para_env, globenv)
Module performing a vibrational analysis.