1!--------------------------------------------------------------------------------------------------! 2! CP2K: A general program to perform molecular dynamics simulations ! 3! Copyright (C) 2000 - 2019 CP2K developers group ! 4!--------------------------------------------------------------------------------------------------! 5 6! ************************************************************************************************** 7!> \brief Contains the mapping ATOM_KIND -> ELEMENT for the most 8!> common cases in CHARMM and AMBER 9!> This should avoid in most cases the need to provide the element 10!> column in the PDB if in the atom_name column of the PDB is provided 11!> instead the atom kind 12!> \par History 13!> 10.2006 created [tlaino] 14!> \author Teodoro Laino 15! ************************************************************************************************** 16MODULE mm_mapping_library 17 18 USE kinds, ONLY: default_string_length 19#include "./base/base_uses.f90" 20 21 IMPLICIT NONE 22 PRIVATE 23 LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .TRUE. 24 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'mm_mapping_library' 25 26! ************************************************************************************************** 27 TYPE ff_map_type 28 CHARACTER(LEN=default_string_length), DIMENSION(:), POINTER :: kind 29 CHARACTER(LEN=default_string_length), DIMENSION(:), POINTER :: element 30 END TYPE ff_map_type 31 32 TYPE(ff_map_type), POINTER, PUBLIC :: amber_map, & 33 charmm_map, & 34 gromos_map 35 PUBLIC :: create_ff_map, & 36 destroy_ff_map 37CONTAINS 38 39! ************************************************************************************************** 40!> \brief Initialize arrays for mapping KINDS <-> ELEMENTS 41!> for major elements in AMBER and CHARMM 42!> \param ff_type ... 43!> \par History 44!> 10.2006 created [tlaino] 45!> \author Teodoro Laino 46! ************************************************************************************************** 47 SUBROUTINE create_ff_map(ff_type) 48 CHARACTER(LEN=*), INTENT(IN) :: ff_type 49 50 CHARACTER(len=*), PARAMETER :: routineN = 'create_ff_map', routineP = moduleN//':'//routineN 51 INTEGER, PARAMETER :: amb_imax = 66, chm_imax = 108, & 52 grm_imax = 22 53 54 SELECT CASE (ff_type) 55 CASE ("AMBER") 56 ALLOCATE (amber_map) 57 ! allocate substructures 58 ALLOCATE (amber_map%kind(amb_imax)) 59 ALLOCATE (amber_map%element(amb_imax)) 60 61 amber_map%kind = (/ & 62 "BR", "C ", "CA", "CB", "CC", "CD", "CI", "CK", "CP", "CM", & 63 "CS", "CN", "CQ", "CR", "CT", "CV", "CW", "C*", "CX", "CY", & 64 "CZ", "CO", "TG", "2C", "3C", "C0", "F ", "H ", "HC", "HA", & 65 "HO", "HS", "HW", "HP", "HZ", "I ", "IM", "IP", "IB", "MG", & 66 "N ", "NA", "NB", "NC", "N*", "NT", "NY", "ND", "NL", "TN", & 67 "OA", "O ", "OW", "OH", "OD", "OS", "OP", "P ", "S ", "SH", & 68 "CU", "FE", "Li", "K ", "Rb", "Cs"/) 69 amber_map%element = (/ & 70 "Br", "C ", "C ", "C ", "C ", "C ", "C ", "C ", "C ", "C ", & 71 "C ", "C ", "C ", "C ", "C ", "C ", "C ", "C ", "C ", "C ", & 72 "C ", "C ", "C ", "C ", "C ", "Ca", "F ", "H ", "H ", "H ", & 73 "H ", "H ", "H ", "H ", "H ", "I ", "Cl", "Na", "Na", "Mg", & 74 "N ", "N ", "N ", "N ", "N ", "N ", "N ", "N ", "N ", "N ", & 75 "O ", "O ", "O ", "O ", "O ", "O ", "O ", "P ", "S ", "S ", & 76 "Cu", "Fe", "Li", "K ", "Rb", "Cs"/) 77 78 CASE ("CHARMM") 79 ALLOCATE (charmm_map) 80 ! allocate substructures 81 ALLOCATE (charmm_map%kind(chm_imax)) 82 ALLOCATE (charmm_map%element(chm_imax)) 83 84 charmm_map%kind = (/ & 85 "CA ", "CAL ", "C ", "CC ", "CD ", "CE ", "CEL ", "CES ", "CLA ", "CL ", & 86 "CM ", "CN1A", "CN1T", "CN3A", "CN3B", "CN3C", "CN3D", "CN3T", "CN5G", "CN7B", & 87 "CN7C", "CN7D", "CN8B", "CNA ", "CN ", "CNE ", "CPA ", "CPB ", "CP ", "CPH ", & 88 "CPM ", "CPT ", "CS ", "CT ", "CTL ", "CY ", "DUM ", "FE ", "FNA ", "FN ", & 89 "HA ", "HAL ", "HB ", "HC ", "HCL ", "HE ", "HE ", "HEL ", "H ", "HL ", & 90 "HN3B", "HN3C", "HNE ", "HN ", "HNP ", "HOL ", "HP ", "HR ", "HS ", "HT ", & 91 "MG ", "NC ", "NE ", "NH3L", "NH ", "N ", "NN1C", "NN2B", "NN2C", "NN2G", & 92 "NN2U", "NN3A", "NN3G", "NN3I", "NN ", "NPH ", "NP ", "NR ", "NR ", "NTL ", & 93 "NY ", "O2L ", "OBL ", "OB ", "OCL ", "OC ", "OHL ", "OH ", "OM ", "ON1C", & 94 "ON2b", "ON6B", "ON ", "O ", "OSL ", "OS ", "OT ", "P2 ", "PL ", "POT ", & 95 "P ", "SL ", "SM ", "SOD ", "S ", "SS ", "ZN ", "CN6B"/) 96 97 charmm_map%element = (/ & 98 "C ", "Ca", "C ", "C ", "C ", "C ", "C ", "Cs", "Cl", "C ", & 99 "C ", "C ", "C ", "C ", "C ", "C ", "C ", "C ", "C ", "C ", & 100 "C ", "C ", "C ", "C ", "C ", "C ", "C ", "C ", "C ", "C ", & 101 "C ", "C ", "C ", "C ", "C ", "C ", "H ", "Fe", "F ", "F ", & 102 "H ", "H ", "H ", "H ", "H ", "H ", "He", "H ", "H ", "H ", & 103 "H ", "H ", "H ", "H ", "H ", "H ", "H ", "H ", "H ", "H ", & 104 "Mg", "N ", "Ne", "N ", "N ", "N ", "N ", "N ", "N ", "N ", & 105 "N ", "N ", "N ", "N ", "N ", "N ", "N ", "N ", "N ", "N ", & 106 "N ", "O ", "O ", "O ", "O ", "O ", "O ", "O ", "O ", "O ", & 107 "O ", "O ", "O ", "O ", "O ", "O ", "O ", "P ", "P ", "K ", & 108 "P ", "S ", "S ", "Na", "S ", "S ", "Zn", "C "/) 109 110 CASE ("GROMOS") 111 ALLOCATE (gromos_map) 112 ! allocate substructures 113 ALLOCATE (gromos_map%kind(grm_imax)) 114 ALLOCATE (gromos_map%element(grm_imax)) 115 116 gromos_map%kind = (/ & 117 "H1 ", "CA ", "HA ", "SD ", "OG ", "CG ", "HD ", "SG ", & 118 "CZ ", "OH ", "C2 ", "H8 ", "O4* ", "O5* ", "PA ", "O1A ", & 119 "MG ", "Na ", "Cl ", "OW ", "HW ", "HW "/) 120 121 gromos_map%element = (/ & 122 "H ", "C ", "H ", "S ", "O ", "C ", "H ", "S ", & 123 "C ", "O ", "C ", "H ", "O ", "O ", "P ", "O ", & 124 "Mg", "Na", "Cl", "O ", "H ", "H "/) 125 126 END SELECT 127 128 END SUBROUTINE create_ff_map 129 130! ************************************************************************************************** 131!> \brief Deallocates the arrays used for mapping 132!> \param ff_type ... 133!> \par History 134!> 10.2006 created [tlaino] 135!> \author Teodoro Laino 136! ************************************************************************************************** 137 SUBROUTINE destroy_ff_map(ff_type) 138 CHARACTER(LEN=*), INTENT(IN) :: ff_type 139 140 CHARACTER(len=*), PARAMETER :: routineN = 'destroy_ff_map', routineP = moduleN//':'//routineN 141 142 SELECT CASE (ff_type) 143 CASE ("AMBER") 144 ! deallocate substructures 145 DEALLOCATE (amber_map%kind) 146 DEALLOCATE (amber_map%element) 147 ! deallocate main 148 DEALLOCATE (amber_map) 149 CASE ("CHARMM") 150 ! deallocate substructures 151 DEALLOCATE (charmm_map%kind) 152 DEALLOCATE (charmm_map%element) 153 ! deallocate main 154 DEALLOCATE (charmm_map) 155 CASE ("GROMOS") 156 ! deallocate substructures 157 DEALLOCATE (gromos_map%kind) 158 DEALLOCATE (gromos_map%element) 159 ! deallocate main 160 DEALLOCATE (gromos_map) 161 END SELECT 162 END SUBROUTINE destroy_ff_map 163 164END MODULE mm_mapping_library 165