LCOV - code coverage report
Current view: top level - src/swarm - swarm_input.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:936074a) Lines: 100.0 % 29 29
Test Date: 2025-12-04 06:27:48 Functions: 100.0 % 1 1

            Line data    Source code
       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 Declares the input for swarm framework
      10              : !> \author Ole Schuett
      11              : ! **************************************************************************************************
      12              : MODULE swarm_input
      13              :    USE cp_output_handling,              ONLY: add_last_numeric,&
      14              :                                               cp_print_key_section_create,&
      15              :                                               low_print_level
      16              :    USE glbopt_input,                    ONLY: glbopt_declare_input
      17              :    USE input_constants,                 ONLY: swarm_do_glbopt
      18              :    USE input_keyword_types,             ONLY: keyword_create,&
      19              :                                               keyword_release,&
      20              :                                               keyword_type
      21              :    USE input_section_types,             ONLY: section_add_keyword,&
      22              :                                               section_add_subsection,&
      23              :                                               section_create,&
      24              :                                               section_release,&
      25              :                                               section_type
      26              :    USE input_val_types,                 ONLY: integer_t
      27              :    USE string_utilities,                ONLY: s2a
      28              : #include "../base/base_uses.f90"
      29              : 
      30              :    IMPLICIT NONE
      31              :    PRIVATE
      32              : 
      33              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'swarm_input'
      34              : 
      35              :    PUBLIC :: create_swarm_section
      36              : 
      37              : CONTAINS
      38              : 
      39              : ! **************************************************************************************************
      40              : !> \brief Declares the SWARM input section
      41              : !> \param swarm_section ...
      42              : !> \author Ole Schuett
      43              : ! **************************************************************************************************
      44         9284 :    SUBROUTINE create_swarm_section(swarm_section)
      45              :       TYPE(section_type), POINTER                        :: swarm_section
      46              : 
      47              :       TYPE(keyword_type), POINTER                        :: keyword
      48              :       TYPE(section_type), POINTER                        :: print_section, printkey
      49              : 
      50         9284 :       NULLIFY (swarm_section, print_section, printkey, keyword)
      51              : 
      52              :       CALL section_create(swarm_section, __LOCATION__, name="SWARM", &
      53              :                           description="Section to control swarm runs. "// &
      54              :                           "The swarm framework provides a common ground for master/worker algorithms.", &
      55         9284 :                           repeats=.FALSE.)
      56              : 
      57              :       CALL keyword_create(keyword, __LOCATION__, name="BEHAVIOR", &
      58              :                           description="Which behaviour should control the swarm.", &
      59              :                           usage="BEHAVIOR <STRING>", &
      60              :                           default_i_val=swarm_do_glbopt, &
      61              :                           enum_c_vals=s2a("GLOBAL_OPT"), &
      62              :                           enum_desc=s2a("Runs global geometry optimisation"), &
      63         9284 :                           enum_i_vals=[swarm_do_glbopt])
      64         9284 :       CALL section_add_keyword(swarm_section, keyword)
      65         9284 :       CALL keyword_release(keyword)
      66              : 
      67              :       CALL keyword_create(keyword, __LOCATION__, name="NUMBER_OF_WORKERS", &
      68              :                           description="Number of workers used for swarm. "// &
      69              :                           "Of the total number of processors one is used for the master, "// &
      70              :                           "the remaining processors should be divisible by the number of workers.", &
      71         9284 :                           type_of_var=integer_t)
      72         9284 :       CALL section_add_keyword(swarm_section, keyword)
      73         9284 :       CALL keyword_release(keyword)
      74              : 
      75              :       CALL keyword_create(keyword, __LOCATION__, name="REPLAY_COMMUNICATION_LOG", &
      76              :                           description="Filename of communication log of previous run. Use this to restart a swarm.", &
      77              :                           repeats=.FALSE., &
      78         9284 :                           usage="REPLAY_COMMUNICATION_LOG <CHARACTER>", default_lc_val="swarm_translog_replay.xyz")
      79         9284 :       CALL section_add_keyword(swarm_section, keyword)
      80         9284 :       CALL keyword_release(keyword)
      81              : 
      82              :       CALL keyword_create(keyword, __LOCATION__, name="MAX_ITER", &
      83              :                           description="The maximum number iterations the master should perform", &
      84         9284 :                           type_of_var=integer_t, default_i_val=HUGE(1))
      85         9284 :       CALL section_add_keyword(swarm_section, keyword)
      86         9284 :       CALL keyword_release(keyword)
      87              : 
      88              :       CALL section_create(print_section, __LOCATION__, name="PRINT", &
      89              :                           description="Controls the printing properties during a global optimization run", &
      90         9284 :                           n_keywords=0, n_subsections=1, repeats=.TRUE.)
      91              : 
      92              :       CALL cp_print_key_section_create( &
      93              :          printkey, __LOCATION__, "WORKER_RUN_INFO", &
      94              :          description="Controls the printing of the worker's basic information during the global optimization", &
      95         9284 :          print_level=low_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
      96         9284 :       CALL section_add_subsection(print_section, printkey)
      97         9284 :       CALL section_release(printkey)
      98              : 
      99              :       CALL cp_print_key_section_create( &
     100              :          printkey, __LOCATION__, "MASTER_RUN_INFO", &
     101              :          description="Controls the printing of the masters's basic information during the global optimization", &
     102         9284 :          print_level=low_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
     103         9284 :       CALL section_add_subsection(print_section, printkey)
     104         9284 :       CALL section_release(printkey)
     105              : 
     106              :       CALL cp_print_key_section_create(printkey, __LOCATION__, "COMMUNICATION_LOG", &
     107              :                                        description="Log all the communication between workers and master. Needed for restart.", &
     108              :                                        print_level=low_print_level, common_iter_levels=1, &
     109         9284 :                                        filename="", unit_str="angstrom")
     110         9284 :       CALL section_add_subsection(print_section, printkey)
     111         9284 :       CALL section_release(printkey)
     112              : 
     113         9284 :       CALL section_add_subsection(swarm_section, print_section)
     114         9284 :       CALL section_release(print_section)
     115              : 
     116         9284 :       CALL glbopt_declare_input(swarm_section)
     117              : 
     118         9284 :    END SUBROUTINE create_swarm_section
     119              : 
     120              : END MODULE swarm_input
     121              : 
        

Generated by: LCOV version 2.0-1