LCOV - code coverage report
Current view: top level - src - farming_types.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:71c3ab0) Lines: 97.1 % 35 34
Test Date: 2026-07-25 06:35:44 Functions: 66.7 % 6 4

            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              : MODULE farming_types
      10              : 
      11              :    USE kinds,                           ONLY: default_path_length,&
      12              :                                               dp
      13              : #include "./base/base_uses.f90"
      14              : 
      15              :    IMPLICIT NONE
      16              :    PRIVATE
      17              : 
      18              :    PUBLIC :: farming_env_type, deallocate_farming_env, init_farming_env, init_job_type
      19              : 
      20              :    INTEGER, PUBLIC, PARAMETER :: job_pending = 1, job_running = 2, job_finished = 3
      21              : 
      22              : ! **************************************************************************************************
      23              :    TYPE job_type
      24              :       CHARACTER(LEN=default_path_length) :: cwd = "" ! the directory to go to
      25              :       CHARACTER(LEN=default_path_length) :: input = "" ! the input file to use
      26              :       CHARACTER(LEN=default_path_length) :: output = "" ! the output file to use
      27              :       INTEGER                            :: ID = -1 ! the ID of this job
      28              :       INTEGER, POINTER, DIMENSION(:)     :: dependencies => NULL() ! the dependencies of this job
      29              :       INTEGER                            :: status = -1 ! pending,running,finished
      30              :    END TYPE job_type
      31              : 
      32              : ! **************************************************************************************************
      33              :    TYPE farming_env_type
      34              :       INTEGER :: group_size_wish = -1
      35              :       LOGICAL :: group_size_wish_set = .FALSE.
      36              :       INTEGER :: ngroup_wish = -1
      37              :       LOGICAL :: ngroup_wish_set = .FALSE.
      38              :       LOGICAL :: restart = .FALSE.
      39              :       LOGICAL :: CYCLE = .FALSE.
      40              :       LOGICAL :: captain_minion = .FALSE.
      41              :       ! user preference for partitioning the cpus
      42              :       INTEGER, DIMENSION(:), POINTER                              :: group_partition => NULL()
      43              :       CHARACTER(LEN=default_path_length)                          :: restart_file_name = "" ! restart file for farming
      44              :       CHARACTER(LEN=default_path_length)                          :: cwd = "" ! directory we started from
      45              :       INTEGER                                                     :: Njobs = -1 ! how many jobs to run
      46              :       INTEGER                                                     :: restart_n = -1 ! where to start
      47              :       INTEGER                                                     :: max_steps = -1 ! max number of steps,
      48              :       ! results in max_steps*Ngroup jobs being run
      49              :       INTEGER                                                     :: stride = -1 ! for creating minion groups.
      50              :       TYPE(job_type), DIMENSION(:), POINTER                       :: job => NULL() ! a list of jobs
      51              :       REAL(KIND=dp) :: wait_time = 0.0_dp
      52              :    END TYPE farming_env_type
      53              : 
      54              : CONTAINS
      55              : 
      56              : ! **************************************************************************************************
      57              : !> \brief help poor compilers do their job
      58              : !>       i.e. provide a default initialization
      59              : !> \param farming_env an associated farming env pointer
      60              : !> \par History
      61              : !>      03.2004 created [Joost VandeVondele ]
      62              : ! **************************************************************************************************
      63           24 :    SUBROUTINE init_farming_env(farming_env)
      64              :       TYPE(farming_env_type), POINTER                    :: farming_env
      65              : 
      66           24 :       IF (ASSOCIATED(farming_env)) THEN
      67           24 :          farming_env%group_size_wish = 0
      68           24 :          farming_env%group_size_wish_set = .FALSE.
      69           24 :          farming_env%ngroup_wish = 0
      70           24 :          farming_env%ngroup_wish_set = .FALSE.
      71           24 :          farming_env%restart = .FALSE.
      72           24 :          farming_env%restart_n = 1
      73           24 :          farming_env%cycle = .FALSE.
      74           24 :          farming_env%captain_minion = .FALSE.
      75           24 :          NULLIFY (farming_env%group_partition)
      76           24 :          farming_env%cwd = "."
      77           24 :          farming_env%Njobs = 0
      78              :          ! so that maxsteps*ngroup is (likely) not overflowing
      79           24 :          farming_env%max_steps = 65535
      80           24 :          NULLIFY (farming_env%Job)
      81              :       END IF
      82           24 :    END SUBROUTINE init_farming_env
      83              : 
      84              : ! **************************************************************************************************
      85              : !> \brief provide a default initialization
      86              : !> \param job ...
      87              : !> \par History
      88              : !>      09.2007 created [Joost VandeVondele ]
      89              : ! **************************************************************************************************
      90          160 :    ELEMENTAL SUBROUTINE init_job_type(job)
      91              :       TYPE(job_type), INTENT(OUT)                        :: job
      92              : 
      93          160 :       job%cwd = ""
      94          160 :       job%input = ""
      95          160 :       job%output = ""
      96              :       job%ID = -1
      97          160 :       job%status = job_pending
      98              :       NULLIFY (job%dependencies)
      99              : 
     100          160 :    END SUBROUTINE init_job_type
     101              : 
     102              : ! **************************************************************************************************
     103              : !> \brief deallocates all memory associated with this job
     104              : !> \param job ...
     105              : !> \par History
     106              : !>      09.2007 created [Joost VandeVondele ]
     107              : ! **************************************************************************************************
     108          160 :    SUBROUTINE deallocate_job_type(job)
     109              :       TYPE(job_type)                                     :: job
     110              : 
     111          160 :       IF (ASSOCIATED(job%dependencies)) DEALLOCATE (job%dependencies)
     112              : 
     113          160 :    END SUBROUTINE deallocate_job_type
     114              : 
     115              : ! **************************************************************************************************
     116              : !> \brief deallocates all associated fields of the farming_env type
     117              : !>      and the type itself
     118              : !> \param farming_env ...
     119              : !> \par History
     120              : !>      03.2004 created [Joost VandeVondele]
     121              : ! **************************************************************************************************
     122           24 :    SUBROUTINE deallocate_farming_env(farming_env)
     123              :       TYPE(farming_env_type), POINTER                    :: farming_env
     124              : 
     125              :       INTEGER                                            :: I
     126              : 
     127           24 :       IF (ASSOCIATED(farming_env)) THEN
     128           24 :          IF (ASSOCIATED(farming_env%job)) THEN
     129          184 :             DO I = 1, SIZE(farming_env%job, 1)
     130          184 :                CALL deallocate_job_type(farming_env%job(I))
     131              :             END DO
     132           24 :             DEALLOCATE (farming_env%job)
     133              :          END IF
     134           24 :          IF (ASSOCIATED(farming_env%group_partition)) DEALLOCATE (farming_env%group_partition)
     135           24 :          DEALLOCATE (farming_env) ! and the type itself
     136              :       END IF
     137           24 :    END SUBROUTINE deallocate_farming_env
     138            0 : END MODULE farming_types
        

Generated by: LCOV version 2.0-1