LCOV - code coverage report
Current view: top level - src/mimic - mimic_loop.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:ca6acae) Lines: 0.0 % 42 0
Test Date: 2026-01-02 06:29:53 Functions: 0.0 % 1 0

            Line data    Source code
       1              : !--------------------------------------------------------------------------------------------------!
       2              : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3              : !   Copyright 2000-2026 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              : 
      15              : MODULE mimic_loop
      16              : 
      17              :    USE force_env_methods,               ONLY: force_env_calc_energy_force
      18              :    USE force_env_types,                 ONLY: force_env_type
      19              :    USE mcl_requests,                    ONLY: &
      20              :         MCL_COMPUTE_FORCES, MCL_EXIT, MCL_RECV_PARTICLE_POSITIONS, &
      21              :         MCL_RECV_POTENTIAL_ON_GRIDPOINTS, MCL_SEND_BOX_GRIDPOINT_COORDS, &
      22              :         MCL_SEND_BOX_NUM_GRIDPOINTS, MCL_SEND_BOX_ORIGIN, MCL_SEND_BOX_VECTORS, &
      23              :         MCL_SEND_CLIENT_APIVER, MCL_SEND_CLIENT_ID, MCL_SEND_CLIENT_NAME, MCL_SEND_CLIENT_RUNTYPE, &
      24              :         MCL_SEND_DENSITY, MCL_SEND_ENERGY, MCL_SEND_NUCLEAR_CHARGES, MCL_SEND_NUM_CONSTR_ANGLES, &
      25              :         MCL_SEND_NUM_CONSTR_BONDS, MCL_SEND_NUM_FRAGMENTS, MCL_SEND_NUM_PARTICLES, &
      26              :         MCL_SEND_NUM_PARTICLES_IN_FRAGMENTS, MCL_SEND_NUM_PARTICLE_SPECIES, &
      27              :         MCL_SEND_PARTICLE_FORCES, MCL_SEND_PARTICLE_IDS_IN_FRAGMENTS, MCL_SEND_PARTICLE_POSITIONS, &
      28              :         MCL_SEND_PARTICLE_SPECIES_IDS, MCL_SEND_REFERENCE_CHARGES, MCL_SEND_SPECIES_ELEMENTS, &
      29              :         MCL_SEND_SPECIES_LABELS, MCL_SEND_SPECIES_MASSES
      30              :    USE mimic_communicator,              ONLY: mimic_communicator_type
      31              : #include "../base/base_uses.f90"
      32              : 
      33              :    IMPLICIT NONE
      34              : 
      35              :    PRIVATE
      36              : 
      37              :    PUBLIC :: do_mimic_loop
      38              : 
      39              : CONTAINS
      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            0 :    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            0 :       TYPE(mimic_communicator_type)                      :: mimic_comm
      56              : 
      57            0 :       CALL timeset(routineN, handle)
      58              : 
      59            0 :       CPASSERT(ASSOCIATED(force_env))
      60              : 
      61            0 :       CALL mimic_comm%initialize(force_env)
      62              : 
      63            0 :       is_last_step = .FALSE.
      64              :       DO WHILE (.NOT. is_last_step)
      65            0 :          request = mimic_comm%receive_request()
      66              : 
      67            0 :          SELECT CASE (request)
      68              :          CASE (MCL_SEND_CLIENT_ID)
      69            0 :             CALL mimic_comm%send_client_info("id")
      70              :          CASE (MCL_SEND_CLIENT_NAME)
      71            0 :             CALL mimic_comm%send_client_info("name")
      72              :          CASE (MCL_SEND_CLIENT_RUNTYPE)
      73            0 :             CALL mimic_comm%send_client_info("run_type")
      74              :          CASE (MCL_SEND_CLIENT_APIVER)
      75            0 :             CALL mimic_comm%send_client_info("api_version")
      76              :          CASE (MCL_SEND_NUM_PARTICLES)
      77            0 :             CALL mimic_comm%send_value("num_atoms")
      78              :          CASE (MCL_SEND_NUM_PARTICLE_SPECIES)
      79            0 :             CALL mimic_comm%send_value("num_kinds")
      80              :          CASE (MCL_SEND_PARTICLE_SPECIES_IDS)
      81            0 :             CALL mimic_comm%send_atom_info("kinds")
      82              :          CASE (MCL_SEND_NUM_FRAGMENTS)
      83            0 :             CALL mimic_comm%send_value("num_fragments")
      84              :          CASE (MCL_SEND_NUM_PARTICLES_IN_FRAGMENTS)
      85            0 :             CALL mimic_comm%send_value("num_atoms_in_fragments")
      86              :          CASE (MCL_SEND_NUM_CONSTR_BONDS)
      87            0 :             CALL mimic_comm%send_value("num_bonds")
      88              :          CASE (MCL_SEND_NUM_CONSTR_ANGLES)
      89            0 :             CALL mimic_comm%send_value("num_angles")
      90              :          CASE (MCL_SEND_SPECIES_MASSES)
      91            0 :             CALL mimic_comm%send_kind_info("masses")
      92              :          CASE (MCL_SEND_PARTICLE_IDS_IN_FRAGMENTS)
      93            0 :             CALL mimic_comm%send_atom_info("ids")
      94              :          CASE (MCL_SEND_SPECIES_ELEMENTS)
      95            0 :             CALL mimic_comm%send_kind_info("elements")
      96              :          CASE (MCL_SEND_SPECIES_LABELS)
      97            0 :             CALL mimic_comm%send_kind_info("labels")
      98              :          CASE (MCL_SEND_PARTICLE_POSITIONS)
      99            0 :             CALL mimic_comm%send_positions()
     100              :          CASE (MCL_RECV_PARTICLE_POSITIONS)
     101            0 :             CALL mimic_comm%receive_positions()
     102              :          CASE (MCL_SEND_PARTICLE_FORCES)
     103            0 :             CALL mimic_comm%send_forces()
     104              :          CASE (MCL_SEND_ENERGY)
     105            0 :             CALL mimic_comm%send_value("energy")
     106              :          CASE (MCL_SEND_NUCLEAR_CHARGES)
     107            0 :             CALL mimic_comm%send_kind_info("nuclear_charges")
     108              :          CASE (MCL_SEND_BOX_NUM_GRIDPOINTS)
     109            0 :             CALL mimic_comm%send_box_info("num_gridpoints")
     110              :          CASE (MCL_SEND_BOX_ORIGIN)
     111            0 :             CALL mimic_comm%send_box_info("origin")
     112              :          CASE (MCL_SEND_BOX_VECTORS)
     113            0 :             CALL mimic_comm%send_box_info("box_vectors")
     114              :          CASE (MCL_SEND_BOX_GRIDPOINT_COORDS)
     115            0 :             CALL mimic_comm%send_grid_coordinates()
     116              :          CASE (MCL_SEND_DENSITY)
     117            0 :             CALL mimic_comm%send_density()
     118              :          CASE (MCL_RECV_POTENTIAL_ON_GRIDPOINTS)
     119            0 :             CALL mimic_comm%receive_potential()
     120              :          CASE (MCL_SEND_REFERENCE_CHARGES)
     121            0 :             CALL mimic_comm%send_result("hirshfeld_charges")
     122              :          CASE (MCL_COMPUTE_FORCES)
     123            0 :             CALL force_env_calc_energy_force(force_env, calc_force=.TRUE.)
     124              :          CASE (MCL_EXIT)
     125            0 :             is_last_step = .TRUE.
     126              :          CASE DEFAULT
     127            0 :             WRITE (request_str, "(I0)") request
     128            0 :             CPABORT("Unrecognized MiMiC request: "//TRIM(request_str))
     129              :          END SELECT
     130              :       END DO
     131              : 
     132            0 :       CALL mimic_comm%finalize()
     133              : 
     134            0 :       CALL timestop(handle)
     135              : 
     136            0 :    END SUBROUTINE do_mimic_loop
     137              : 
     138              : END MODULE mimic_loop
     139              : 
        

Generated by: LCOV version 2.0-1