(git:7f1b8e3)
Loading...
Searching...
No Matches
mimic_loop.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 Module containing the main loop for simulations with the MiMiC framework
10!> \par History
11!> 05.2025 Created [AA]
12!> \author Andrej Antalik
13! **************************************************************************************************
14
16
19 USE mcl_requests, ONLY: &
31#include "../base/base_uses.f90"
32
33 IMPLICIT NONE
34
35 PRIVATE
36
37 PUBLIC :: do_mimic_loop
38
39CONTAINS
40
41! **************************************************************************************************
42!> \brief The main loop for a MiMiC run
43!> \param force_env ...
44!> \par History
45!> 5.2025 created [AA]
46! **************************************************************************************************
47 SUBROUTINE do_mimic_loop(force_env)
48 TYPE(force_env_type), POINTER :: force_env
49
50 CHARACTER(LEN=*), PARAMETER :: routinen = 'do_mimic_loop'
51
52 CHARACTER(LEN=32) :: request_str
53 INTEGER :: handle, request
54 LOGICAL :: is_last_step
55 TYPE(mimic_communicator_type) :: mimic_comm
56
57 CALL timeset(routinen, handle)
58
59 cpassert(ASSOCIATED(force_env))
60
61 CALL mimic_comm%initialize(force_env)
62
63 is_last_step = .false.
64 DO WHILE (.NOT. is_last_step)
65 request = mimic_comm%receive_request()
66
67 SELECT CASE (request)
69 CALL mimic_comm%send_client_info("id")
71 CALL mimic_comm%send_client_info("name")
73 CALL mimic_comm%send_client_info("run_type")
75 CALL mimic_comm%send_client_info("api_version")
77 CALL mimic_comm%send_value("num_atoms")
79 CALL mimic_comm%send_value("num_kinds")
81 CALL mimic_comm%send_atom_info("kinds")
83 CALL mimic_comm%send_value("num_fragments")
85 CALL mimic_comm%send_value("num_atoms_in_fragments")
87 CALL mimic_comm%send_value("num_bonds")
89 CALL mimic_comm%send_value("num_angles")
91 CALL mimic_comm%send_kind_info("masses")
93 CALL mimic_comm%send_atom_info("ids")
95 CALL mimic_comm%send_kind_info("elements")
97 CALL mimic_comm%send_kind_info("labels")
99 CALL mimic_comm%send_positions()
101 CALL mimic_comm%receive_positions()
103 CALL mimic_comm%send_forces()
104 CASE (mcl_send_energy)
105 CALL mimic_comm%send_value("energy")
107 CALL mimic_comm%send_kind_info("nuclear_charges")
109 CALL mimic_comm%send_box_info("num_gridpoints")
111 CALL mimic_comm%send_box_info("origin")
113 CALL mimic_comm%send_box_info("box_vectors")
115 CALL mimic_comm%send_grid_coordinates()
116 CASE (mcl_send_density)
117 CALL mimic_comm%send_density()
119 CALL mimic_comm%receive_potential()
121 CALL mimic_comm%send_result("hirshfeld_charges")
122 CASE (mcl_compute_forces)
123 CALL force_env_calc_energy_force(force_env, calc_force=.true.)
124 CASE (mcl_exit)
125 is_last_step = .true.
126 CASE DEFAULT
127 WRITE (request_str, "(I0)") request
128 cpabort("Unrecognized MiMiC request: "//trim(request_str))
129 END SELECT
130 END DO
131
132 CALL mimic_comm%finalize()
133
134 CALL timestop(handle)
135
136 END SUBROUTINE do_mimic_loop
137
138END MODULE mimic_loop
139
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.
Wrapper module for MiMiC Communication Library (MCL) request labels.
integer, parameter, public mcl_send_box_vectors
integer, parameter, public mcl_send_client_name
integer, parameter, public mcl_send_species_masses
integer, parameter, public mcl_send_num_constr_bonds
integer, parameter, public mcl_exit
integer, parameter, public mcl_send_species_elements
integer, parameter, public mcl_send_density
integer, parameter, public mcl_send_particle_ids_in_fragments
integer, parameter, public mcl_send_client_runtype
integer, parameter, public mcl_compute_forces
integer, parameter, public mcl_send_box_num_gridpoints
integer, parameter, public mcl_send_particle_forces
integer, parameter, public mcl_send_num_particles
integer, parameter, public mcl_send_client_id
integer, parameter, public mcl_send_nuclear_charges
integer, parameter, public mcl_recv_potential_on_gridpoints
integer, parameter, public mcl_recv_particle_positions
integer, parameter, public mcl_send_num_fragments
integer, parameter, public mcl_send_client_apiver
integer, parameter, public mcl_send_num_particles_in_fragments
integer, parameter, public mcl_send_num_particle_species
integer, parameter, public mcl_send_species_labels
integer, parameter, public mcl_send_reference_charges
integer, parameter, public mcl_send_particle_species_ids
integer, parameter, public mcl_send_num_constr_angles
integer, parameter, public mcl_send_box_origin
integer, parameter, public mcl_send_energy
integer, parameter, public mcl_send_particle_positions
integer, parameter, public mcl_send_box_gridpoint_coords
Module containing a MiMiC communicator class.
Module containing the main loop for simulations with the MiMiC framework.
Definition mimic_loop.F:15
subroutine, public do_mimic_loop(force_env)
The main loop for a MiMiC run.
Definition mimic_loop.F:48
wrapper to abstract the force evaluation of the various methods
MiMiC communicator class that facilitates MiMiC client-server data exchange.