1!--------------------------------------------------------------------------------------------------! 2! CP2K: A general program to perform molecular dynamics simulations ! 3! Copyright (C) 2000 - 2020 CP2K developers group ! 4!--------------------------------------------------------------------------------------------------! 5 6! ************************************************************************************************** 7!> \brief Lumps all possible extended system variables into one 8!> type for easy access and passing 9!> \par History 10!> Teodoro Laino - 09.2007 - University of Zurich 11!> Cleaned the typo.. no need to have an extended 12!> type. Thermostat and Barostat type have been created 13!> \author CJM 14! ************************************************************************************************** 15MODULE extended_system_types 16 USE bibliography, ONLY: Nose1984a,& 17 Nose1984b,& 18 cite_reference 19 USE input_constants, ONLY: do_thermo_no_communication 20 USE input_section_types, ONLY: section_vals_type,& 21 section_vals_val_get 22 USE kinds, ONLY: dp 23#include "./base/base_uses.f90" 24 25 IMPLICIT NONE 26 PRIVATE 27 28 PUBLIC :: lnhc_dealloc, & 29 lnhc_init, & 30 lnhc_parameters_type, & 31 map_info_type, & 32 create_map_info_type, & 33 release_map_info_type, & 34 npt_info_type 35 36 LOGICAL, PARAMETER, PUBLIC :: debug_isotropic_limit = .FALSE. 37 LOGICAL, PARAMETER, PUBLIC :: debug_uniaxial_limit = .FALSE. 38 39! ************************************************************************************************** 40 TYPE npt_info_type 41 REAL(KIND=dp) :: eps 42 REAL(KIND=dp) :: v 43 REAL(KIND=dp) :: f 44 REAL(KIND=dp) :: mass 45 END TYPE npt_info_type 46 47! ************************************************************************************************** 48 TYPE nhc_info_type 49 INTEGER :: degrees_of_freedom 50 REAL(KIND=dp) :: eta 51 REAL(KIND=dp) :: v 52 REAL(KIND=dp) :: f 53 REAL(KIND=dp) :: nkt 54 REAL(KIND=dp) :: mass 55 END TYPE nhc_info_type 56 57! ************************************************************************************************** 58 TYPE point_info_type 59 REAL(KIND=dp), POINTER :: point 60 END TYPE point_info_type 61 62! ************************************************************************************************** 63 TYPE map_info_type 64 INTEGER :: dis_type 65 INTEGER, POINTER, DIMENSION(:) :: index, map_index 66 REAL(KIND=dp), POINTER, DIMENSION(:) :: v_scale 67 REAL(KIND=dp), POINTER, DIMENSION(:) :: s_kin 68 TYPE(point_info_type), POINTER, DIMENSION(:, :) :: p_scale 69 TYPE(point_info_type), POINTER, DIMENSION(:, :) :: p_kin 70 END TYPE map_info_type 71 72! ************************************************************************************************** 73 TYPE lnhc_parameters_type 74 INTEGER :: nyosh, nc, nhc_len 75 INTEGER :: glob_num_nhc, loc_num_nhc, region 76 REAL(KIND=dp) :: tau_nhc, dt_fact 77 REAL(KIND=dp), POINTER :: dt_yosh(:) 78 TYPE(nhc_info_type), POINTER :: nvt(:, :) 79 TYPE(map_info_type), POINTER :: map_info 80 END TYPE lnhc_parameters_type 81 82 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'extended_system_types' 83 84CONTAINS 85 86! ************************************************************************************************** 87!> \brief Initialize type for Nose-Hoover thermostat 88!> \param lnhc ... 89!> \param section ... 90! ************************************************************************************************** 91 SUBROUTINE lnhc_init(lnhc, section) 92 TYPE(lnhc_parameters_type), POINTER :: lnhc 93 TYPE(section_vals_type), POINTER :: section 94 95 CHARACTER(LEN=*), PARAMETER :: routineN = 'lnhc_init', routineP = moduleN//':'//routineN 96 97 NULLIFY (lnhc%dt_yosh) 98 NULLIFY (lnhc%nvt) 99 NULLIFY (lnhc%map_info) 100 lnhc%loc_num_nhc = 0 101 lnhc%glob_num_nhc = 0 102 lnhc%dt_fact = 1.0_dp 103 CALL cite_reference(Nose1984a) 104 CALL cite_reference(Nose1984b) 105 CALL section_vals_val_get(section, "LENGTH", i_val=lnhc%nhc_len) 106 CALL section_vals_val_get(section, "YOSHIDA", i_val=lnhc%nyosh) 107 CALL section_vals_val_get(section, "TIMECON", r_val=lnhc%tau_nhc) 108 CALL section_vals_val_get(section, "MTS", i_val=lnhc%nc) 109 CALL create_map_info_type(lnhc%map_info) 110 111 END SUBROUTINE lnhc_init 112 113! ************************************************************************************************** 114!> \brief create the map_info type 115!> \param map_info ... 116! ************************************************************************************************** 117 SUBROUTINE create_map_info_type(map_info) 118 TYPE(map_info_type), POINTER :: map_info 119 120 CHARACTER(LEN=*), PARAMETER :: routineN = 'create_map_info_type', & 121 routineP = moduleN//':'//routineN 122 123 ALLOCATE (map_info) 124 NULLIFY (map_info%index, map_info%map_index) 125 NULLIFY (map_info%v_scale) 126 NULLIFY (map_info%p_scale) 127 NULLIFY (map_info%s_kin) 128 NULLIFY (map_info%p_kin) 129 map_info%dis_type = do_thermo_no_communication 130 131 END SUBROUTINE create_map_info_type 132 133! ************************************************************************************************** 134!> \brief release the map_info type 135!> \param map_info ... 136! ************************************************************************************************** 137 SUBROUTINE release_map_info_type(map_info) 138 TYPE(map_info_type), POINTER :: map_info 139 140 CHARACTER(LEN=*), PARAMETER :: routineN = 'release_map_info_type', & 141 routineP = moduleN//':'//routineN 142 143 IF (ASSOCIATED(map_info)) THEN 144 IF (ASSOCIATED(map_info%p_kin)) THEN 145 DEALLOCATE (map_info%p_kin) 146 END IF 147 IF (ASSOCIATED(map_info%p_scale)) THEN 148 DEALLOCATE (map_info%p_scale) 149 END IF 150 IF (ASSOCIATED(map_info%v_scale)) THEN 151 DEALLOCATE (map_info%v_scale) 152 END IF 153 IF (ASSOCIATED(map_info%s_kin)) THEN 154 DEALLOCATE (map_info%s_kin) 155 END IF 156 IF (ASSOCIATED(map_info%index)) THEN 157 DEALLOCATE (map_info%index) 158 END IF 159 IF (ASSOCIATED(map_info%map_index)) THEN 160 DEALLOCATE (map_info%map_index) 161 END IF 162 163 DEALLOCATE (map_info) 164 END IF 165 166 END SUBROUTINE release_map_info_type 167 168! ************************************************************************************************** 169!> \brief Deallocate type for Nose-Hoover thermostat 170!> \param lnhc ... 171! ************************************************************************************************** 172 SUBROUTINE lnhc_dealloc(lnhc) 173 TYPE(lnhc_parameters_type), POINTER :: lnhc 174 175 CHARACTER(LEN=*), PARAMETER :: routineN = 'lnhc_dealloc', routineP = moduleN//':'//routineN 176 177 IF (ASSOCIATED(lnhc)) THEN 178 IF (ASSOCIATED(lnhc%dt_yosh)) THEN 179 DEALLOCATE (lnhc%dt_yosh) 180 END IF 181 IF (ASSOCIATED(lnhc%nvt)) THEN 182 DEALLOCATE (lnhc%nvt) 183 ENDIF 184 CALL release_map_info_type(lnhc%map_info) 185 DEALLOCATE (lnhc) 186 ENDIF 187 188 END SUBROUTINE lnhc_dealloc 189 190END MODULE extended_system_types 191