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