154 USE xc_gauxc_interface,
ONLY: cp_gauxc_status_type,&
158#include "./base/base_uses.f90"
163 LOGICAL,
PRIVATE,
PARAMETER :: debug_this_module = .true.
164 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'f77_interface'
168 TYPE(f_env_type),
POINTER :: f_env => null()
169 END TYPE f_env_p_type
178 CHARACTER(len=default_path_length) :: my_path =
"", old_path =
""
181 TYPE(f_env_p_type),
DIMENSION(:),
POINTER,
SAVE ::
f_envs
183 LOGICAL,
SAVE :: module_initialized = .false.
184 INTEGER,
SAVE :: last_f_env_id = 0, n_f_envs = 0
204 FUNCTION get_pos_of_env(env_id)
RESULT(res)
205 INTEGER,
INTENT(in) :: env_id
208 INTEGER :: env_pos, isub
211 DO isub = 1, n_f_envs
212 IF (
f_envs(isub)%f_env%id_nr == env_id)
THEN
217 END FUNCTION get_pos_of_env
229 LOGICAL,
INTENT(in) :: init_mpi
230 INTEGER,
INTENT(out) :: ierr
233 INTEGER :: offload_device_count, unit_nr
234 INTEGER,
POINTER :: active_device_id
235 INTEGER,
TARGET :: offload_chosen_device
236 TYPE(cp_gauxc_status_type) :: gauxc_status
239 IF (.NOT. module_initialized)
THEN
263 IF (
PRESENT(mpi_comm))
THEN
282 default_global_unit_nr=unit_nr, &
283 close_global_unit_on_dealloc=.false.)
288 module_initialized = .true.
297 NULLIFY (active_device_id)
301 IF (offload_device_count > 0)
THEN
304 active_device_id => offload_chosen_device
311 accdrv_active_device_id=active_device_id)
312#if defined(__parallel)
315 CALL gauxc_init(status=gauxc_status)
317 CALL gauxc_check_status(gauxc_status)
341 LOGICAL,
INTENT(in) :: finalize_mpi
342 INTEGER,
INTENT(out) :: ierr
345 TYPE(cp_gauxc_status_type) :: gauxc_status
351 IF (.NOT. module_initialized)
THEN
354 DO ienv = n_f_envs, 1, -1
370 CALL gauxc_finalize(gauxc_status)
371 CALL gauxc_check_status(gauxc_status)
373 CALL dbcsr_finalize_lib()
388 IF (finalize_mpi)
THEN
401 RECURSIVE SUBROUTINE f_env_dealloc(f_env)
406 cpassert(
ASSOCIATED(f_env))
411 IF (f_env%old_path /= f_env%my_path)
THEN
412 CALL m_chdir(f_env%old_path, ierr)
415 END SUBROUTINE f_env_dealloc
428 SUBROUTINE f_env_create(f_env, force_env, timer_env, mp_perf_env, id_nr, logger, old_dir)
433 INTEGER,
INTENT(in) :: id_nr
435 CHARACTER(len=*),
INTENT(in) :: old_dir
438 f_env%force_env => force_env
440 f_env%logger => logger
442 f_env%timer_env => timer_env
448 f_env%old_path = old_dir
449 END SUBROUTINE f_env_create
457 INTEGER,
INTENT(in) :: f_env_id
463 f_env_pos = get_pos_of_env(f_env_id)
464 IF (f_env_pos < 1)
THEN
467 f_env =>
f_envs(f_env_pos)%f_env
488 INTEGER,
INTENT(in) :: f_env_id
490 INTEGER,
INTENT(out),
OPTIONAL :: handle
492 INTEGER :: f_env_pos, ierr
496 f_env_pos = get_pos_of_env(f_env_id)
497 IF (f_env_pos < 1)
THEN
500 f_env =>
f_envs(f_env_pos)%f_env
501 logger => f_env%logger
502 cpassert(
ASSOCIATED(logger))
504 IF (f_env%old_path /= f_env%my_path)
THEN
505 CALL m_chdir(trim(f_env%my_path), ierr)
533 INTEGER,
INTENT(out),
OPTIONAL :: ierr
534 INTEGER,
INTENT(in),
OPTIONAL :: handle
541 IF (
ASSOCIATED(f_env))
THEN
542 IF (
PRESENT(handle))
THEN
546 logger => f_env%logger
550 cpassert(
ASSOCIATED(logger))
551 cpassert(
ASSOCIATED(d_logger))
552 cpassert(
ASSOCIATED(d_timer_env))
553 cpassert(
ASSOCIATED(d_mp_perf_env))
554 cpassert(
ASSOCIATED(logger, d_logger))
556 cpassert(
ASSOCIATED(d_mp_perf_env, f_env%mp_perf_env))
557 IF (f_env%old_path /= f_env%my_path)
THEN
558 CALL m_chdir(trim(f_env%old_path), ierr2)
561 IF (
PRESENT(ierr))
THEN
568 IF (
PRESENT(ierr))
THEN
602 output_path, mpi_comm, output_unit, owns_out_unit, &
603 input, ierr, work_dir, initial_variables)
604 INTEGER,
INTENT(out) :: new_env_id
606 CHARACTER(len=*),
INTENT(in) :: input_path
607 CHARACTER(len=*),
INTENT(in),
OPTIONAL :: output_path
610 INTEGER,
INTENT(in),
OPTIONAL :: output_unit
611 LOGICAL,
INTENT(in),
OPTIONAL :: owns_out_unit
613 INTEGER,
INTENT(out),
OPTIONAL :: ierr
614 CHARACTER(len=*),
INTENT(in),
OPTIONAL :: work_dir
615 CHARACTER(len=*),
DIMENSION(:, :),
OPTIONAL :: initial_variables
617 CHARACTER(len=*),
PARAMETER :: routinen =
'create_force_env'
619 CHARACTER(len=default_path_length) :: old_dir, wdir
620 INTEGER :: handle, i, ierr2, iforce_eval, isubforce_eval, k, method_name_id, my_group, &
621 nforce_eval, ngroups, nsubforce_size, unit_nr
622 INTEGER,
DIMENSION(:),
POINTER :: group_distribution, i_force_eval, &
624 LOGICAL :: check, do_qmmm_force_mixing, multiple_subsys, my_owns_out_unit, &
625 use_motion_section, use_multiple_para_env
631 TYPE(f_env_p_type),
DIMENSION(:),
POINTER :: f_envs_old
633 TYPE(
fp_type),
POINTER :: fp_env
646 TYPE(
section_vals_type),
POINTER :: fe_section, force_env_section, force_env_sections, &
647 fp_section, input_file, qmmm_section, qmmmx_section, root_section, subsys_section, &
651 cpassert(
ASSOCIATED(input_declaration))
652 NULLIFY (para_env, force_env, timer_env,
mp_perf_env, globenv, meta_env, &
653 fp_env, eip_env, pwdft_env, mixed_env, qs_env, qmmm_env, embed_env)
655 IF (
PRESENT(mpi_comm))
THEN
660 CALL para_env%retain()
667 IF (
PRESENT(work_dir))
THEN
668 IF (work_dir /=
" ")
THEN
671 IF (
PRESENT(ierr)) ierr = ierr2
678 IF (
PRESENT(output_unit))
THEN
679 unit_nr = output_unit
681 IF (para_env%is_source())
THEN
682 IF (output_path ==
"__STD_OUT__")
THEN
686 file_status=
"UNKNOWN", &
687 file_action=
"WRITE", &
688 file_position=
"APPEND", &
697 IF (
PRESENT(owns_out_unit)) my_owns_out_unit = owns_out_unit
699 CALL cp2k_init(para_env, output_unit=unit_nr, globenv=globenv, input_file_name=input_path, &
706 IF (
PRESENT(input)) input_file => input
707 IF (.NOT.
ASSOCIATED(input_file))
THEN
708 IF (
PRESENT(initial_variables))
THEN
709 input_file =>
read_input(input_declaration, input_path, initial_variables, para_env=para_env)
711 input_file =>
read_input(input_declaration, input_path, empty_initial_variables, para_env=para_env)
717 CALL check_cp2k_input(input_declaration, input_file, para_env=para_env, output_unit=unit_nr)
719 root_section => input_file
722 IF (n_f_envs + 1 >
SIZE(
f_envs))
THEN
724 ALLOCATE (
f_envs(n_f_envs + 10))
726 f_envs(i)%f_env => f_envs_old(i)%f_env
728 DO i = n_f_envs + 1,
SIZE(
f_envs)
731 DEALLOCATE (f_envs_old)
734 CALL cp2k_read(root_section, para_env, globenv)
736 CALL cp2k_setup(root_section, para_env, globenv)
738 ALLOCATE (group_distribution(0:para_env%num_pe - 1))
739 group_distribution = 0
740 lgroup_distribution => group_distribution
744 l_val=multiple_subsys)
745 CALL multiple_fe_list(force_env_sections, root_section, i_force_eval, nforce_eval)
747 IF (.NOT. multiple_subsys)
THEN
748 DO iforce_eval = 2, nforce_eval
750 i_rep_section=i_force_eval(iforce_eval))
754 nsubforce_size = nforce_eval - 1
755 use_multiple_para_env = .false.
756 use_motion_section = .true.
757 DO iforce_eval = 1, nforce_eval
758 NULLIFY (force_env_section, my_force_env, subsys_section)
760 IF (.NOT. multiple_subsys)
THEN
762 i_rep_section=i_force_eval(1))
765 IF (use_multiple_para_env)
THEN
768 i_rep_section=i_force_eval(1))
771 "In case of multiple force_eval the MAIN force_eval (the first in the list of FORCE_EVAL_ORDER or "// &
772 "the one omitted from that order list) must be a MIXED_ENV type calculation. Please check your "// &
773 "input file and possibly correct the MULTIPLE_FORCE_EVAL%FORCE_EVAL_ORDER. ")
776 IF (method_name_id ==
do_mixed)
THEN
777 check =
ASSOCIATED(force_env%mixed_env%sub_para_env)
779 ngroups = force_env%mixed_env%ngroups
780 my_group = lgroup_distribution(para_env%mepos)
781 isubforce_eval = iforce_eval - 1
783 IF (
modulo(isubforce_eval - 1, ngroups) /= my_group) cycle
784 my_para_env => force_env%mixed_env%sub_para_env(my_group + 1)%para_env
785 my_logger => force_env%mixed_env%sub_logger(my_group + 1)%p
789 IF (method_name_id ==
do_embed)
THEN
790 check =
ASSOCIATED(force_env%embed_env%sub_para_env)
792 ngroups = force_env%embed_env%ngroups
793 my_group = lgroup_distribution(para_env%mepos)
794 isubforce_eval = iforce_eval - 1
796 IF (
modulo(isubforce_eval - 1, ngroups) /= my_group) cycle
797 my_para_env => force_env%embed_env%sub_para_env(my_group + 1)%para_env
798 my_logger => force_env%embed_env%sub_logger(my_group + 1)%p
803 my_para_env => para_env
809 IF (nforce_eval > 1)
THEN
811 i_force_eval(iforce_eval), i_force_eval(iforce_eval))
812 IF (iforce_eval /= 1) use_motion_section = .false.
814 force_env_section => force_env_sections
815 use_motion_section = .true.
819 IF (method_name_id ==
do_qmmm)
THEN
822 IF (do_qmmm_force_mixing)
THEN
827 SELECT CASE (method_name_id)
830 force_env_section=force_env_section, subsys_section=subsys_section, &
831 use_motion_section=use_motion_section)
836 CALL qs_init(qs_env, my_para_env, root_section, globenv=globenv, force_env_section=force_env_section, &
837 subsys_section=subsys_section, use_motion_section=use_motion_section)
838 CALL force_env_create(my_force_env, root_section, qs_env=qs_env, para_env=my_para_env, globenv=globenv, &
839 force_env_section=force_env_section)
845 force_env_section, qmmm_section, subsys_section, use_motion_section)
846 CALL force_env_create(my_force_env, root_section, qmmm_env=qmmm_env, para_env=my_para_env, &
847 globenv=globenv, force_env_section=force_env_section)
852 force_env_section, subsys_section, use_motion_section)
853 CALL force_env_create(my_force_env, root_section, qmmmx_env=qmmmx_env, para_env=my_para_env, &
854 globenv=globenv, force_env_section=force_env_section)
859 CALL eip_init(eip_env, root_section, my_para_env, force_env_section=force_env_section, &
860 subsys_section=subsys_section)
861 CALL force_env_create(my_force_env, root_section, eip_env=eip_env, para_env=my_para_env, &
862 globenv=globenv, force_env_section=force_env_section)
866 IF (unit_nr > 0)
WRITE (unit=unit_nr, fmt=
"(T2,A)", advance=
"NO")
"SIRIUS| "
871 CALL pwdft_init(pwdft_env, root_section, my_para_env, force_env_section=force_env_section, &
872 subsys_section=subsys_section, use_motion_section=use_motion_section)
873 CALL force_env_create(my_force_env, root_section, pwdft_env=pwdft_env, para_env=my_para_env, &
874 globenv=globenv, force_env_section=force_env_section)
879 force_env_section=force_env_section, n_subforce_eval=nsubforce_size, &
880 use_motion_section=use_motion_section)
881 CALL force_env_create(my_force_env, root_section, mixed_env=mixed_env, para_env=my_para_env, &
882 globenv=globenv, force_env_section=force_env_section)
884 use_multiple_para_env = .true.
886 lgroup_distribution => my_force_env%mixed_env%group_distribution
891 force_env_section=force_env_section, n_subforce_eval=nsubforce_size, &
892 use_motion_section=use_motion_section)
893 CALL force_env_create(my_force_env, root_section, embed_env=embed_env, para_env=my_para_env, &
894 globenv=globenv, force_env_section=force_env_section)
896 use_multiple_para_env = .true.
898 lgroup_distribution => my_force_env%embed_env%group_distribution
902 CALL nnp_init(nnp_env, root_section, my_para_env, force_env_section=force_env_section, &
903 subsys_section=subsys_section, use_motion_section=use_motion_section)
904 CALL force_env_create(my_force_env, root_section, nnp_env=nnp_env, para_env=my_para_env, &
905 globenv=globenv, force_env_section=force_env_section)
909 CALL ipi_init(ipi_env, root_section, my_para_env, force_env_section=force_env_section, &
910 subsys_section=subsys_section)
911 CALL force_env_create(my_force_env, root_section, ipi_env=ipi_env, para_env=my_para_env, &
912 globenv=globenv, force_env_section=force_env_section)
919 "Invalid METHOD <"//trim(
enum_i2c(enum, method_name_id))// &
924 NULLIFY (meta_env, fp_env)
925 IF (use_motion_section)
THEN
928 CALL metadyn_read(meta_env, my_force_env, root_section, my_para_env, fe_section)
939 IF (nforce_eval > 1 .AND. iforce_eval == 1)
THEN
940 ALLOCATE (my_force_env%sub_force_env(nsubforce_size))
942 DO k = 1, nsubforce_size
943 NULLIFY (my_force_env%sub_force_env(k)%force_env)
947 IF (iforce_eval == 1)
THEN
948 force_env => my_force_env
950 force_env%sub_force_env(iforce_eval - 1)%force_env => my_force_env
953 IF (.NOT. use_multiple_para_env)
THEN
954 lgroup_distribution = iforce_eval
959 IF (use_multiple_para_env)
THEN
962 DEALLOCATE (group_distribution)
963 DEALLOCATE (i_force_eval)
966 CALL para_env%max(last_f_env_id)
967 last_f_env_id = last_f_env_id + 1
968 new_env_id = last_f_env_id
969 n_f_envs = n_f_envs + 1
970 CALL f_env_create(
f_envs(n_f_envs)%f_env, logger=logger, &
972 id_nr=last_f_env_id, old_dir=old_dir)
996 INTEGER,
INTENT(in) :: env_id
997 INTEGER,
INTENT(out) :: ierr
998 LOGICAL,
INTENT(IN),
OPTIONAL :: q_finalize
1000 INTEGER :: env_pos, i
1008 env_pos = get_pos_of_env(env_id)
1009 n_f_envs = n_f_envs - 1
1010 DO i = env_pos, n_f_envs
1013 NULLIFY (
f_envs(n_f_envs + 1)%f_env)
1016 root_section=root_section, para_env=para_env)
1018 cpassert(
ASSOCIATED(globenv))
1019 NULLIFY (f_env%force_env%globenv)
1020 CALL f_env_dealloc(f_env)
1021 IF (
PRESENT(q_finalize))
THEN
1022 CALL cp2k_finalize(root_section, para_env, globenv, f_env%old_path, q_finalize)
1024 CALL cp2k_finalize(root_section, para_env, globenv, f_env%old_path)
1042 INTEGER,
INTENT(IN) :: env_id
1043 INTEGER,
INTENT(OUT) :: n_atom, ierr
1065 INTEGER,
INTENT(IN) :: env_id
1066 INTEGER,
INTENT(OUT) :: n_particle, ierr
1088 INTEGER,
INTENT(IN) :: env_id
1089 REAL(kind=
dp),
DIMENSION(3, 3) :: cell
1090 INTEGER,
DIMENSION(3),
OPTIONAL :: per
1091 INTEGER,
INTENT(OUT) :: ierr
1100 cpassert(
ASSOCIATED(cell_full))
1101 cell = cell_full%hmat
1102 IF (
PRESENT(per)) per(:) = cell_full%perd(:)
1116 INTEGER,
INTENT(IN) :: env_id
1117 REAL(kind=
dp),
DIMENSION(3, 3) :: cell
1118 INTEGER,
INTENT(OUT) :: ierr
1128 CALL get_qs_env(qmmm_env%qs_env, cell=cell_qmmm)
1129 cpassert(
ASSOCIATED(cell_qmmm))
1130 cell = cell_qmmm%hmat
1145 SUBROUTINE get_result_r1(env_id, description, N, RESULT, res_exist, ierr)
1147 CHARACTER(LEN=default_string_length) :: description
1149 REAL(kind=
dp),
DIMENSION(1:N) :: result
1150 LOGICAL,
OPTIONAL :: res_exist
1154 LOGICAL :: exist_res
1159 NULLIFY (f_env, subsys, results)
1165 IF (
PRESENT(res_exist))
THEN
1167 exist_res = res_exist
1173 CALL get_results(results, description=description, n_rep=nres)
1174 CALL get_results(results, description=description, values=result, nval=nres)
1179 END SUBROUTINE get_result_r1
1192 INTEGER,
INTENT(IN) :: env_id, n_el
1193 REAL(kind=
dp),
DIMENSION(1:n_el) :: frc
1194 INTEGER,
INTENT(OUT) :: ierr
1214 INTEGER,
INTENT(IN) :: env_id
1215 REAL(kind=
dp),
DIMENSION(3, 3),
INTENT(OUT) :: stress_tensor
1216 INTEGER,
INTENT(OUT) :: ierr
1223 NULLIFY (f_env, subsys, virial, cell)
1224 stress_tensor(:, :) = 0.0_dp
1227 CALL force_env_get(f_env%force_env, subsys=subsys, cell=cell)
1229 IF (virial%pv_availability)
THEN
1230 stress_tensor(:, :) = virial%pv_virial(:, :)/cell%deth
1247 INTEGER,
INTENT(IN) :: env_id, n_el
1248 REAL(kind=
dp),
DIMENSION(1:n_el) :: pos
1249 INTEGER,
INTENT(OUT) :: ierr
1269 SUBROUTINE get_vel(env_id, vel, n_el, ierr)
1271 INTEGER,
INTENT(IN) :: env_id, n_el
1272 REAL(kind=
dp),
DIMENSION(1:n_el) :: vel
1273 INTEGER,
INTENT(OUT) :: ierr
1282 END SUBROUTINE get_vel
1293 INTEGER,
INTENT(IN) :: env_id
1294 REAL(kind=
dp),
DIMENSION(3, 3) :: new_cell
1295 INTEGER,
INTENT(OUT) :: ierr
1301 NULLIFY (f_env, cell, subsys)
1305 cpassert(
ASSOCIATED(cell))
1306 cell%hmat = new_cell
1325 INTEGER,
INTENT(IN) :: env_id, n_el
1326 REAL(kind=
dp),
DIMENSION(1:n_el) :: new_pos
1327 INTEGER,
INTENT(OUT) :: ierr
1352 INTEGER,
INTENT(IN) :: env_id, n_el
1353 REAL(kind=
dp),
DIMENSION(1:n_el) :: new_vel
1354 INTEGER,
INTENT(OUT) :: ierr
1378 INTEGER,
INTENT(in) :: env_id
1380 INTEGER,
INTENT(out) :: ierr
1403 INTEGER,
INTENT(in) :: env_id
1404 REAL(kind=
dp),
INTENT(out) :: e_pot
1405 INTEGER,
INTENT(out) :: ierr
1430 INTEGER,
INTENT(IN) :: env_id, n_el
1431 REAL(kind=
dp),
DIMENSION(1:n_el),
INTENT(IN) :: pos
1432 REAL(kind=
dp),
INTENT(OUT) :: e_pot
1433 INTEGER,
INTENT(OUT) :: ierr
1435 REAL(kind=
dp),
DIMENSION(1) :: dummy_f
1437 CALL calc_force(env_id, pos, n_el, e_pot, dummy_f, 0, ierr)
1458 RECURSIVE SUBROUTINE calc_force(env_id, pos, n_el_pos, e_pot, force, n_el_force, ierr)
1460 INTEGER,
INTENT(in) :: env_id, n_el_pos
1461 REAL(kind=
dp),
DIMENSION(1:n_el_pos),
INTENT(in) :: pos
1462 REAL(kind=
dp),
INTENT(out) :: e_pot
1463 INTEGER,
INTENT(in) :: n_el_force
1464 REAL(kind=
dp),
DIMENSION(1:n_el_force), &
1465 INTENT(inout) :: force
1466 INTEGER,
INTENT(out) :: ierr
1470 calc_f = (n_el_force /= 0)
1471 CALL set_pos(env_id, pos, n_el_pos, ierr)
1473 IF (ierr == 0)
CALL get_energy(env_id, e_pot, ierr)
1474 IF (calc_f .AND. (ierr == 0))
CALL get_force(env_id, force, n_el_force, ierr)
1492 SUBROUTINE check_input(input_declaration, input_file_path, output_file_path, &
1493 echo_input, mpi_comm, initial_variables, ierr)
1495 CHARACTER(len=*),
INTENT(in) :: input_file_path, output_file_path
1496 LOGICAL,
INTENT(in),
OPTIONAL :: echo_input
1498 CHARACTER(len=default_path_length), &
1499 DIMENSION(:, :),
INTENT(IN) :: initial_variables
1500 INTEGER,
INTENT(out) :: ierr
1503 LOGICAL :: my_echo_input
1508 my_echo_input = .false.
1509 IF (
PRESENT(echo_input)) my_echo_input = echo_input
1511 IF (
PRESENT(mpi_comm))
THEN
1516 CALL para_env%retain()
1518 IF (para_env%is_source())
THEN
1519 IF (output_file_path ==
"__STD_OUT__")
THEN
1522 CALL open_file(file_name=output_file_path, file_status=
"UNKNOWN", &
1523 file_action=
"WRITE", file_position=
"APPEND", &
1524 unit_number=unit_nr)
1532 default_global_unit_nr=unit_nr, &
1533 close_global_unit_on_dealloc=.false.)
1537 input_file =>
read_input(input_declaration, input_file_path, initial_variables=initial_variables, &
1539 CALL check_cp2k_input(input_declaration, input_file, para_env=para_env, output_unit=unit_nr)
1540 IF (my_echo_input .AND. (unit_nr > 0))
THEN
1544 hide_defaults=.false.)
static GRID_HOST_DEVICE int modulo(int a, int m)
Equivalent of Fortran's MODULO, which always return a positive number. https://gcc....
void grid_library_finalize(void)
Finalizes the grid library.
void grid_library_init(void)
Initializes the grid library.
Central dispatch for basic hooks.
procedure(cp_warn_interface), pointer, public cp_warn_hook
subroutine, public cp_abort(location, message)
Terminate the program.
subroutine, public timeset(routinen, handle)
Start timer.
procedure(cp_abort_interface), pointer, public cp_abort_hook
procedure(timeset_interface), pointer, public timeset_hook
subroutine, public timestop(handle)
Stop timer.
procedure(timestop_interface), pointer, public timestop_hook
collects all references to literature in CP2K as new algorithms / method are included from literature...
subroutine, public add_all_references()
adds references that can later be cited / printed using the key
Handles all functions related to the CELL.
subroutine, public init_cell(cell, hmat, periodic)
Initialise/readjust a simulation cell after hmat has been changed.
Handles all functions related to the CELL.
some minimal info about CP2K, including its version and license
subroutine, public get_runtime_info()
...
subroutine, public cp_dlaf_finalize()
Finalize DLA-Future and pika runtime.
subroutine, public cp_dlaf_free_all_grids()
Free all DLA-Future grids.
Module that contains the routines for error handling.
subroutine, public cp_error_handling_setup()
Registers handlers with base_hooks.F.
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 init_preconnection_list()
Allocate and initialise the list of preconnected units.
various routines to log and control the output. The idea is that decisions about where to log should ...
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
integer function, public cp_default_logger_stack_size()
...
integer, parameter, public cp_failure_level
subroutine, public cp_logger_retain(logger)
retains the given logger (to be called to keep a shared copy of the 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_openpmd_output_finalize()
Close all outputs.
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
subroutine, public cp_iterate(iteration_info, last, iter_nr, increment, iter_nr_out)
adds one to the actual iteration
set of type/routines to handle the storage of results in force_envs
logical function, public test_for_result(results, description)
test for a certain result in the result_list
set of type/routines to handle the storage of results in force_envs
types that represent a subsys, i.e. a part of the system
subroutine, public cp_subsys_set(subsys, atomic_kinds, particles, local_particles, molecules, molecule_kinds, local_molecules, para_env, colvar_p, shell_particles, core_particles, gci, multipoles, results, cell, cell_ref, use_ref_cell)
sets various propreties of the subsys
subroutine, public unpack_subsys_particles(subsys, f, r, s, v, fscale, cell)
Unpack components of a subsystem particle sets into a single vector.
subroutine, public cp_subsys_get(subsys, ref_count, atomic_kinds, atomic_kind_set, particles, particle_set, local_particles, molecules, molecule_set, molecule_kinds, molecule_kind_set, local_molecules, para_env, colvar_p, shell_particles, core_particles, gci, multipoles, natom, nparticle, ncore, nshell, nkind, atprop, virial, results, cell, cell_ref, use_ref_cell)
returns information about various attributes of the given subsys
subroutine, public dbm_library_init()
Initialize DBM library.
subroutine, public dbm_library_finalize()
Finalize DBM library.
The environment for the empirical interatomic potential methods.
subroutine, public eip_env_create(eip_env)
Creates the eip environment.
Methods and functions on the EIP environment.
subroutine, public eip_init(eip_env, root_section, para_env, force_env_section, subsys_section)
Initialize the eip environment.
Main force create for embedding.
subroutine, public embed_create_force_env(embed_env, root_section, para_env, force_env_section, n_subforce_eval, use_motion_section)
Controls program flow for embedded calculations.
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_get_from_id(f_env_id, f_env)
...
subroutine, public set_vel(env_id, new_vel, n_el, ierr)
sets the velocities of the particles
subroutine, public get_nparticle(env_id, n_particle, ierr)
returns the number of particles in the given force env
subroutine, public get_natom(env_id, n_atom, ierr)
returns the number of atoms in the given force env
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 ...
subroutine, public get_cell(env_id, cell, per, ierr)
gets a cell
type(mp_para_env_type), pointer, save, public default_para_env
recursive subroutine, public calc_energy_force(env_id, calc_force, ierr)
updates the energy and the forces of given force_env
subroutine, public get_energy(env_id, e_pot, ierr)
returns the energy of the last configuration calculated
subroutine, public init_cp2k(init_mpi, ierr, mpi_comm)
initializes cp2k, needs to be called once before using any of the other functions when using cp2k as ...
subroutine, public get_qmmm_cell(env_id, cell, ierr)
gets the qmmm cell
subroutine, public get_pos(env_id, pos, n_el, ierr)
gets the positions of the particles
type(f_env_p_type), dimension(:), pointer, save f_envs
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...
recursive subroutine, public calc_energy(env_id, pos, n_el, e_pot, ierr)
returns the energy of the configuration given by the positions passed as argument
subroutine, public set_cell(env_id, new_cell, ierr)
sets a new cell
subroutine, public finalize_cp2k(finalize_mpi, ierr)
cleanup after you have finished using this interface
subroutine, public set_pos(env_id, new_pos, n_el, ierr)
sets the positions of the particles
subroutine, public get_stress_tensor(env_id, stress_tensor, ierr)
gets the stress tensor
subroutine, public check_input(input_declaration, input_file_path, output_file_path, echo_input, mpi_comm, initial_variables, ierr)
performs a check of the input
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 get_force(env_id, frc, n_el, ierr)
gets the forces of the particles
recursive subroutine, public calc_force(env_id, pos, n_el_pos, e_pot, force, n_el_force, ierr)
returns the energy of the configuration given by the positions passed as argument
perform classical molecular dynamics and path integral simulations
subroutine, public fist_create_force_env(force_env, root_section, para_env, globenv, qmmm, qmmm_env, force_env_section, subsys_section, use_motion_section, prev_subsys)
Controls program flow for classical MD and path-integrals.
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.
subroutine, public force_env_create(force_env, root_section, para_env, globenv, fist_env, qs_env, meta_env, sub_force_env, qmmm_env, qmmmx_env, eip_env, pwdft_env, force_env_section, mixed_env, embed_env, nnp_env, ipi_env)
creates and initializes a force environment
Interface for the force calculations.
integer function, public force_env_get_natom(force_env)
returns the number of atoms
subroutine, public force_env_get_vel(force_env, vel, n)
returns the particle velocities in a dimension(*) array
subroutine, public multiple_fe_list(force_env_sections, root_section, i_force_eval, nforce_eval)
returns the order of the multiple force_env
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, ipi_env)
returns various attributes about the force environment
subroutine, public force_env_retain(force_env)
retains the given force env
subroutine, public force_env_get_pos(force_env, pos, n)
returns the particle positions in a dimension(*) array
subroutine, public force_env_set(force_env, meta_env, fp_env, force_env_section, method_name_id, additional_potential)
changes some attributes of the force_env
subroutine, public force_env_get_frc(force_env, frc, n)
returns the particle forces in a dimension(*) array
recursive subroutine, public force_env_release(force_env)
releases the given force env
integer function, public force_env_get_nparticle(force_env)
returns the number of particles in a force environment
types used in the flexible partitioning scheme
subroutine, public fp_env_write(fp_env, fp_section)
writes information concerning the fp_env to the output
subroutine, public fp_env_read(fp_env, fp_section)
reads the corresponding input section and stores it in the fp_env
pure subroutine, public fp_env_create(fp_env)
create retain release the flexible partitioning environment
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.
The environment for the empirical interatomic potential methods.
Methods and functions on the i–PI environment.
subroutine, public ipi_init(ipi_env, root_section, para_env, force_env_section, subsys_section)
Initialize the ipi environment.
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
integer, parameter, public default_path_length
Interface to the Libint-Library or a c++ wrapper.
subroutine, public cp_libint_static_cleanup()
subroutine, public cp_libint_static_init()
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_getcwd(curdir)
...
subroutine, public m_chdir(dir, ierror)
...
Interface to the message passing library MPI.
subroutine, public mp_world_init(mp_comm)
initializes the system default communicator
subroutine, public mp_query_thread_level()
Query the MPI thread-support level when MPI is managed by an embedding application.
type(mp_comm_type), parameter, public mp_comm_world
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)
subroutine, public mp_world_finalize()
Finalize the system default communicator and MPI when CP2K owns MPI.
perform biased molecular dynamics (H= k H1 + (1-k) H2 [linear or general mixing)
subroutine, public mixed_create_force_env(mixed_env, root_section, para_env, force_env_section, n_subforce_eval, use_motion_section)
Controls program flow for mixed calculations.
Defines all routines to deal with the performance of MPI routines.
subroutine, public mp_perf_env_release(perf_env)
...
subroutine, public rm_mp_perf_env()
...
type(mp_perf_env_type) function, pointer, public get_mp_perf_env()
...
elemental subroutine, public mp_perf_env_retain(perf_env)
...
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 ...
Data types for neural network potentials.
Methods dealing with Neural Network potentials.
subroutine, public nnp_init(nnp_env, root_section, para_env, force_env_section, subsys_section, use_motion_section)
Read and initialize all the information for neural network potentials.
Fortran API for the offload package, which is written in C.
subroutine, public offload_set_chosen_device(device_id)
Selects the chosen device to be used.
integer function, public offload_get_device_count()
Returns the number of available devices.
subroutine, public offload_init()
Initialize runtime.
Periodic Table related data definitions.
subroutine, public init_periodic_table()
Initialization of Periodic Table related data.
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.
The type definitions for the PWDFT environment.
subroutine, public pwdft_env_create(pwdft_env)
Creates the pwdft environment.
Methods and functions on the PWDFT environment.
subroutine, public pwdft_init(pwdft_env, root_section, para_env, force_env_section, subsys_section, use_motion_section)
Initialize the pwdft environment.
Initialize a QM/MM calculation.
subroutine, public qmmm_env_create(qmmm_env, root_section, para_env, globenv, force_env_section, qmmm_section, subsys_section, use_motion_section, prev_subsys, ignore_outside_box)
...
Basic container type for QM/MM.
Initialize a QM/MM calculation with Force-Mixing.
subroutine, public qmmmx_env_create(qmmmx_env, root_section, para_env, globenv, force_env_section, subsys_section, use_motion_section)
...
Basic container type for QM/MM with force mixing.
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, mimic, 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_pp, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, 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, matrix_vhxc, 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, xcint_weights, 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, rhoz_cneo_set, ecoul_1c, rho0_s_rs, rho0_s_gs, rhoz_cneo_s_rs, rhoz_cneo_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, harris_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, eeq, rhs, do_rixs, tb_tblite)
Get the QUICKSTEP environment.
subroutine, public qs_env_create(qs_env, globenv)
allocates and intitializes a qs_env
subroutine, public qs_init(qs_env, para_env, root_section, globenv, cp_subsys, kpoint_env, qmmm, qmmm_env_qm, force_env_section, subsys_section, use_motion_section, silent, multip, charge)
Read the input and the database files for the setup of the QUICKSTEP environment.
provides a uniform framework to add references to CP2K cite and output these
subroutine, public remove_all_references()
deallocate the bibliography
Interface to the SIRIUS Library.
subroutine, public cp_sirius_init()
Empty implementation in case SIRIUS is not compiled in.
logical function, public cp_sirius_is_initialized()
Return always .FALSE. because the Sirius library is not compiled in.
subroutine, public cp_sirius_finalize()
Empty implementation in case SIRIUS is not compiled in.
generates a unique id number for a string (str2id) that can be used two compare two strings....
subroutine, public string_table_deallocate(iw)
deallocates the string table
subroutine, public string_table_allocate()
allocates the string table
Types used by timings.F and timings_report.F Due to the fortran restriction on cicular module-depende...
Timing routines for accounting.
subroutine, public timings_register_hooks()
Registers handlers with base_hooks.F.
type(timer_env_type) function, pointer, public get_timer_env()
returns the current timer env from the stack
subroutine, public add_timer_env(timer_env)
adds the given timer_env to the top of the stack
subroutine, public rm_timer_env()
removes the current timer env from the stack
subroutine, public timer_env_release(timer_env)
releases the given timer env
subroutine, public timer_env_retain(timer_env)
retains the given timer env
Type defining parameters related to the simulation cell.
type of a logger, at the moment it contains just a print level starting at which level it should be l...
contains arbitrary information which need to be stored
represents a system: atoms, molecules, their pos,vel,...
The empirical interatomic potential environment.
Embedding environment type.
wrapper to abstract the force evaluation of the various methods
contains the initially parsed file and the initial parallel environment
stores all the informations relevant to an mpi environment
Main data type collecting all relevant data for neural network potentials.
The PWDFT environment type.