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