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 : !> \par History
10 : !> JGH (30.11.2001) : new entries in setup_parameters_type
11 : !> change name from input_file_name to coord_...
12 : !> added topology file
13 : !> added atom_names
14 : !> Teodoro Laino [tlaino] 12.2008 - Preparing for VIRTUAL SITE constraints
15 : !> (patch by Marcel Baer)
16 : !> \author CJM & JGH
17 : ! **************************************************************************************************
18 : MODULE topology_types
19 : USE cell_types, ONLY: cell_release,&
20 : cell_type
21 : USE colvar_types, ONLY: colvar_p_type,&
22 : colvar_release
23 : USE input_constants, ONLY: do_bondparm_covalent,&
24 : do_conn_generate,&
25 : do_constr_none,&
26 : do_skip_13
27 : USE kinds, ONLY: default_path_length,&
28 : default_string_length,&
29 : dp
30 : #include "./base/base_uses.f90"
31 :
32 : IMPLICIT NONE
33 :
34 : ! **************************************************************************************************
35 : TYPE atom_info_type
36 : INTEGER, DIMENSION(:), POINTER :: id_molname => NULL()
37 : INTEGER, DIMENSION(:), POINTER :: id_resname => NULL()
38 : INTEGER, DIMENSION(:), POINTER :: id_atmname => NULL()
39 : INTEGER, DIMENSION(:), POINTER :: id_atom_names => NULL()
40 : INTEGER, DIMENSION(:), POINTER :: id_element => NULL()
41 : INTEGER, POINTER :: resid(:) => NULL()
42 : REAL(KIND=dp), DIMENSION(:, :), POINTER :: r => NULL()
43 : INTEGER, POINTER :: map_mol_typ(:) => NULL()
44 : INTEGER, POINTER :: map_mol_num(:) => NULL()
45 : INTEGER, POINTER :: map_mol_res(:) => NULL()
46 : REAL(KIND=dp), POINTER :: atm_charge(:) => NULL()
47 : REAL(KIND=dp), POINTER :: atm_mass(:) => NULL()
48 : REAL(KIND=dp), POINTER :: occup(:) => NULL()
49 : REAL(KIND=dp), POINTER :: beta(:) => NULL()
50 : END TYPE atom_info_type
51 :
52 : ! **************************************************************************************************
53 : TYPE connectivity_info_type
54 : INTEGER, POINTER :: bond_a(:) => NULL(), bond_b(:) => NULL(), bond_type(:) => NULL()
55 : INTEGER, POINTER :: ub_a(:) => NULL(), ub_b(:) => NULL(), ub_c(:) => NULL()
56 : INTEGER, POINTER :: theta_a(:) => NULL(), theta_b(:) => NULL(), theta_c(:) => NULL(), theta_type(:) => NULL()
57 : INTEGER, POINTER :: phi_a(:) => NULL(), phi_b(:) => NULL(), phi_c(:) => NULL(), phi_d(:) => NULL(), phi_type(:) => NULL()
58 : INTEGER, POINTER :: impr_a(:) => NULL(), impr_b(:) => NULL(), impr_c(:) => NULL(), &
59 : impr_d(:) => NULL(), impr_type(:) => NULL()
60 : INTEGER, POINTER :: onfo_a(:) => NULL(), onfo_b(:) => NULL()
61 : INTEGER, POINTER :: c_bond_a(:) => NULL(), c_bond_b(:) => NULL(), c_bond_type(:) => NULL()
62 : END TYPE connectivity_info_type
63 :
64 : ! **************************************************************************************************
65 : TYPE constraint_info_type
66 : ! Bonds involving Hydrogens
67 : LOGICAL :: hbonds_restraint = .FALSE. ! Restraints control
68 : REAL(KIND=dp) :: hbonds_k0 = -1.0_dp ! Restraints control
69 : ! Fixed Atoms
70 : INTEGER :: nfixed_atoms = -1
71 : INTEGER, POINTER :: fixed_atoms(:) => NULL(), fixed_type(:) => NULL(), fixed_mol_type(:) => NULL()
72 : LOGICAL, POINTER :: fixed_restraint(:) => NULL() ! Restraints control
73 : REAL(KIND=dp), POINTER :: fixed_k0(:) => NULL() ! Restraints control
74 : ! Freeze QM or MM
75 : INTEGER :: freeze_qm = -1, freeze_mm = -1, freeze_qm_type = -1, freeze_mm_type = -1
76 : LOGICAL :: fixed_mm_restraint = .FALSE., fixed_qm_restraint = .FALSE. ! Restraints control
77 : REAL(KIND=dp) :: fixed_mm_k0 = -1.0_dp, fixed_qm_k0 = -1.0_dp ! Restraints control
78 : ! Freeze with molnames
79 : LOGICAL, POINTER :: fixed_mol_restraint(:) => NULL() ! Restraints control
80 : REAL(KIND=dp), POINTER :: fixed_mol_k0(:) => NULL() ! Restraints control
81 : CHARACTER(LEN=default_string_length), POINTER :: fixed_molnames(:) => NULL()
82 : LOGICAL, POINTER, DIMENSION(:) :: fixed_exclude_qm => NULL(), fixed_exclude_mm => NULL()
83 : ! Collective constraints
84 : INTEGER :: nconst_colv = -1
85 : INTEGER, POINTER :: const_colv_mol(:) => NULL()
86 : CHARACTER(LEN=default_string_length), POINTER :: const_colv_molname(:) => NULL()
87 : REAL(KIND=dp), POINTER :: const_colv_target(:) => NULL()
88 : REAL(KIND=dp), POINTER :: const_colv_target_growth(:) => NULL()
89 : TYPE(colvar_p_type), POINTER, DIMENSION(:) :: colvar_set => NULL()
90 : LOGICAL, POINTER :: colv_intermolecular(:) => NULL()
91 : LOGICAL, POINTER :: colv_restraint(:) => NULL() ! Restraints control
92 : REAL(KIND=dp), POINTER :: colv_k0(:) => NULL() ! Restraints control
93 : LOGICAL, POINTER, DIMENSION(:) :: colv_exclude_qm => NULL(), colv_exclude_mm => NULL()
94 : ! G3x3
95 : INTEGER :: nconst_g33 = -1
96 : INTEGER, POINTER :: const_g33_mol(:) => NULL()
97 : CHARACTER(LEN=default_string_length), POINTER :: const_g33_molname(:) => NULL()
98 : INTEGER, POINTER :: const_g33_a(:) => NULL()
99 : INTEGER, POINTER :: const_g33_b(:) => NULL()
100 : INTEGER, POINTER :: const_g33_c(:) => NULL()
101 : REAL(KIND=dp), POINTER :: const_g33_dab(:) => NULL()
102 : REAL(KIND=dp), POINTER :: const_g33_dac(:) => NULL()
103 : REAL(KIND=dp), POINTER :: const_g33_dbc(:) => NULL()
104 : LOGICAL, POINTER :: g33_intermolecular(:) => NULL()
105 : LOGICAL, POINTER :: g33_restraint(:) => NULL() ! Restraints control
106 : REAL(KIND=dp), POINTER :: g33_k0(:) => NULL() ! Restraints control
107 : LOGICAL, POINTER, DIMENSION(:) :: g33_exclude_qm => NULL(), g33_exclude_mm => NULL()
108 : ! G4x6
109 : INTEGER :: nconst_g46 = -1
110 : INTEGER, POINTER :: const_g46_mol(:) => NULL()
111 : CHARACTER(LEN=default_string_length), POINTER :: const_g46_molname(:) => NULL()
112 : INTEGER, POINTER :: const_g46_a(:) => NULL()
113 : INTEGER, POINTER :: const_g46_b(:) => NULL()
114 : INTEGER, POINTER :: const_g46_c(:) => NULL()
115 : INTEGER, POINTER :: const_g46_d(:) => NULL()
116 : REAL(KIND=dp), POINTER :: const_g46_dab(:) => NULL()
117 : REAL(KIND=dp), POINTER :: const_g46_dac(:) => NULL()
118 : REAL(KIND=dp), POINTER :: const_g46_dbc(:) => NULL()
119 : REAL(KIND=dp), POINTER :: const_g46_dad(:) => NULL()
120 : REAL(KIND=dp), POINTER :: const_g46_dbd(:) => NULL()
121 : REAL(KIND=dp), POINTER :: const_g46_dcd(:) => NULL()
122 : LOGICAL, POINTER :: g46_intermolecular(:) => NULL()
123 : LOGICAL, POINTER :: g46_restraint(:) => NULL() ! Restraints control
124 : REAL(KIND=dp), POINTER :: g46_k0(:) => NULL() ! Restraints control
125 : LOGICAL, POINTER, DIMENSION(:) :: g46_exclude_qm => NULL(), g46_exclude_mm => NULL()
126 : ! virtual_site
127 : INTEGER :: nconst_vsite = -1
128 : INTEGER, POINTER :: const_vsite_mol(:) => NULL()
129 : CHARACTER(LEN=default_string_length), POINTER :: const_vsite_molname(:) => NULL()
130 : INTEGER, POINTER :: const_vsite_a(:) => NULL()
131 : INTEGER, POINTER :: const_vsite_b(:) => NULL()
132 : INTEGER, POINTER :: const_vsite_c(:) => NULL()
133 : INTEGER, POINTER :: const_vsite_d(:) => NULL()
134 : REAL(KIND=dp), POINTER :: const_vsite_wbc(:) => NULL()
135 : REAL(KIND=dp), POINTER :: const_vsite_wdc(:) => NULL()
136 : LOGICAL, POINTER :: vsite_intermolecular(:) => NULL()
137 : LOGICAL, POINTER :: vsite_restraint(:) => NULL() ! Restraints control
138 : REAL(KIND=dp), POINTER :: vsite_k0(:) => NULL() ! Restraints control
139 : LOGICAL, POINTER, DIMENSION(:) :: vsite_exclude_qm => NULL(), vsite_exclude_mm => NULL()
140 : END TYPE constraint_info_type
141 :
142 : ! **************************************************************************************************
143 : TYPE topology_parameters_type
144 : TYPE(atom_info_type), POINTER :: atom_info => NULL()
145 : TYPE(connectivity_info_type), POINTER :: conn_info => NULL()
146 : TYPE(constraint_info_type), POINTER :: cons_info => NULL()
147 : TYPE(cell_type), POINTER :: cell => NULL(), cell_ref => NULL(), cell_muc => NULL()
148 : INTEGER :: conn_type = -1
149 : INTEGER :: coord_type = -1
150 : INTEGER :: exclude_vdw = -1
151 : INTEGER :: exclude_ei = -1
152 : INTEGER :: bondparm_type = -1
153 : !TRY TO REMOVE THIS FIVE VARIABLE IN THE FUTURE
154 : INTEGER :: natoms = -1, natom_type = -1
155 : INTEGER :: nmol = -1, nmol_type = -1, nmol_conn = -1
156 : !TRY TO REMOVE THIS FIVE VARIABLE IN THE FUTURE
157 : LOGICAL :: aa_element = .FALSE.
158 : LOGICAL :: molname_generated = .FALSE.
159 : REAL(KIND=dp) :: bondparm_factor = -1.0_dp
160 : LOGICAL :: create_molecules = .FALSE.
161 : LOGICAL :: reorder_atom = .FALSE.
162 : LOGICAL :: molecules_check = .FALSE.
163 : LOGICAL :: coordinate = .FALSE.
164 : LOGICAL :: use_g96_velocity = .FALSE.
165 : CHARACTER(LEN=default_path_length) :: coord_file_name = ""
166 : CHARACTER(LEN=default_path_length) :: conn_file_name = ""
167 : LOGICAL :: const_atom = .FALSE.
168 : LOGICAL :: const_hydr = .FALSE.
169 : LOGICAL :: const_colv = .FALSE.
170 : LOGICAL :: const_33 = .FALSE.
171 : LOGICAL :: const_46 = .FALSE.
172 : LOGICAL :: const_vsite = .FALSE.
173 : LOGICAL :: charge_occup = .FALSE.
174 : LOGICAL :: charge_beta = .FALSE.
175 : LOGICAL :: charge_extended = .FALSE.
176 : LOGICAL :: para_res = .FALSE.
177 : END TYPE topology_parameters_type
178 :
179 : ! **************************************************************************************************
180 : TYPE constr_list_type
181 : INTEGER, DIMENSION(:), POINTER :: constr => NULL()
182 : END TYPE constr_list_type
183 :
184 : PUBLIC :: atom_info_type, &
185 : connectivity_info_type, &
186 : constraint_info_type, &
187 : topology_parameters_type, &
188 : constr_list_type
189 :
190 : PUBLIC :: init_topology, &
191 : deallocate_topology, &
192 : pre_read_topology
193 :
194 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'topology_types'
195 : PRIVATE
196 :
197 : CONTAINS
198 :
199 : ! **************************************************************************************************
200 : !> \brief 1. Just NULLIFY and zero all the stuff
201 : !> \param topology ...
202 : !> \par History
203 : !> none
204 : ! **************************************************************************************************
205 9410 : SUBROUTINE init_topology(topology)
206 : TYPE(topology_parameters_type), INTENT(INOUT) :: topology
207 :
208 : !-----------------------------------------------------------------------------
209 : ! 1. Nullify and allocate things in topology
210 : !-----------------------------------------------------------------------------
211 :
212 9410 : ALLOCATE (topology%atom_info)
213 9410 : ALLOCATE (topology%conn_info)
214 9410 : ALLOCATE (topology%cons_info)
215 : !-----------------------------------------------------------------------------
216 : ! 2. Initialize and Nullify things in topology
217 : !-----------------------------------------------------------------------------
218 9410 : NULLIFY (topology%cell, topology%cell_ref, topology%cell_muc)
219 9410 : topology%natoms = 0
220 9410 : topology%natom_type = 0
221 9410 : topology%nmol = 0
222 9410 : topology%nmol_type = 0
223 9410 : topology%nmol_conn = 0
224 9410 : topology%bondparm_type = do_bondparm_covalent
225 9410 : topology%reorder_atom = .FALSE.
226 9410 : topology%create_molecules = .FALSE.
227 9410 : topology%molecules_check = .FALSE.
228 9410 : topology%coordinate = .FALSE.
229 9410 : topology%use_g96_velocity = .FALSE.
230 9410 : topology%coord_type = -1
231 9410 : topology%coord_file_name = ''
232 9410 : topology%conn_type = do_conn_generate
233 9410 : topology%conn_file_name = 'OFF'
234 9410 : topology%const_atom = .FALSE.
235 9410 : topology%const_hydr = .FALSE.
236 9410 : topology%const_colv = .FALSE.
237 9410 : topology%const_33 = .FALSE.
238 9410 : topology%const_46 = .FALSE.
239 9410 : topology%const_vsite = .FALSE.
240 9410 : topology%charge_occup = .FALSE.
241 9410 : topology%charge_beta = .FALSE.
242 9410 : topology%charge_extended = .FALSE.
243 9410 : topology%para_res = .FALSE.
244 9410 : topology%molname_generated = .FALSE.
245 9410 : topology%aa_element = .FALSE.
246 9410 : topology%exclude_vdw = do_skip_13
247 9410 : topology%exclude_ei = do_skip_13
248 : !-----------------------------------------------------------------------------
249 : ! 3. Initialize and Nullify things in topology%atom_info
250 : !-----------------------------------------------------------------------------
251 : NULLIFY (topology%atom_info%id_molname)
252 : NULLIFY (topology%atom_info%id_resname)
253 : NULLIFY (topology%atom_info%resid)
254 : NULLIFY (topology%atom_info%id_atmname)
255 : NULLIFY (topology%atom_info%id_atom_names)
256 : NULLIFY (topology%atom_info%r)
257 : NULLIFY (topology%atom_info%map_mol_typ)
258 : NULLIFY (topology%atom_info%map_mol_num)
259 : NULLIFY (topology%atom_info%map_mol_res)
260 : NULLIFY (topology%atom_info%atm_charge)
261 : NULLIFY (topology%atom_info%atm_mass)
262 : NULLIFY (topology%atom_info%occup)
263 : NULLIFY (topology%atom_info%beta)
264 : NULLIFY (topology%atom_info%id_element)
265 : !-----------------------------------------------------------------------------
266 : ! 4. Initialize and Nullify things in topology%conn_info
267 : !-----------------------------------------------------------------------------
268 : NULLIFY (topology%conn_info%bond_a)
269 : NULLIFY (topology%conn_info%bond_b)
270 : NULLIFY (topology%conn_info%bond_type)
271 : NULLIFY (topology%conn_info%ub_a)
272 : NULLIFY (topology%conn_info%ub_b)
273 : NULLIFY (topology%conn_info%ub_c)
274 : NULLIFY (topology%conn_info%theta_a)
275 : NULLIFY (topology%conn_info%theta_b)
276 : NULLIFY (topology%conn_info%theta_c)
277 : NULLIFY (topology%conn_info%theta_type)
278 : NULLIFY (topology%conn_info%phi_a)
279 : NULLIFY (topology%conn_info%phi_b)
280 : NULLIFY (topology%conn_info%phi_c)
281 : NULLIFY (topology%conn_info%phi_d)
282 : NULLIFY (topology%conn_info%phi_type)
283 : NULLIFY (topology%conn_info%impr_a)
284 : NULLIFY (topology%conn_info%impr_b)
285 : NULLIFY (topology%conn_info%impr_c)
286 : NULLIFY (topology%conn_info%impr_d)
287 : NULLIFY (topology%conn_info%impr_type)
288 : NULLIFY (topology%conn_info%onfo_a)
289 : NULLIFY (topology%conn_info%onfo_b)
290 : NULLIFY (topology%conn_info%c_bond_a)
291 : NULLIFY (topology%conn_info%c_bond_b)
292 : NULLIFY (topology%conn_info%c_bond_type)
293 : !-----------------------------------------------------------------------------
294 : ! 5. Initialize and Nullify things in topology%cons_info
295 : !-----------------------------------------------------------------------------
296 9410 : CALL init_constraint(topology%cons_info)
297 9410 : END SUBROUTINE init_topology
298 :
299 : ! **************************************************************************************************
300 : !> \brief 1. Just NULLIFY and zero all the stuff
301 : !> \param constraint_info ...
302 : !> \par History
303 : !> none
304 : ! **************************************************************************************************
305 9410 : SUBROUTINE init_constraint(constraint_info)
306 : TYPE(constraint_info_type), POINTER :: constraint_info
307 :
308 : ! Bonds involving Hydrogens
309 :
310 9410 : constraint_info%hbonds_restraint = .FALSE.
311 : ! Fixed Atoms
312 9410 : constraint_info%nfixed_atoms = 0
313 9410 : constraint_info%freeze_mm = do_constr_none
314 9410 : constraint_info%freeze_qm = do_constr_none
315 9410 : NULLIFY (constraint_info%fixed_atoms)
316 9410 : NULLIFY (constraint_info%fixed_type)
317 9410 : NULLIFY (constraint_info%fixed_mol_type)
318 9410 : NULLIFY (constraint_info%fixed_molnames)
319 9410 : NULLIFY (constraint_info%fixed_restraint)
320 9410 : NULLIFY (constraint_info%fixed_k0)
321 9410 : NULLIFY (constraint_info%fixed_mol_restraint)
322 9410 : NULLIFY (constraint_info%fixed_mol_k0)
323 9410 : NULLIFY (constraint_info%fixed_exclude_qm, constraint_info%fixed_exclude_mm)
324 : ! Collective Constraints
325 9410 : constraint_info%nconst_colv = 0
326 9410 : NULLIFY (constraint_info%colvar_set)
327 9410 : NULLIFY (constraint_info%const_colv_mol)
328 9410 : NULLIFY (constraint_info%const_colv_molname)
329 9410 : NULLIFY (constraint_info%const_colv_target)
330 9410 : NULLIFY (constraint_info%const_colv_target_growth)
331 9410 : NULLIFY (constraint_info%colv_intermolecular)
332 9410 : NULLIFY (constraint_info%colv_restraint)
333 9410 : NULLIFY (constraint_info%colv_k0)
334 9410 : NULLIFY (constraint_info%colv_exclude_qm, constraint_info%colv_exclude_mm)
335 : ! G3x3
336 9410 : constraint_info%nconst_g33 = 0
337 9410 : NULLIFY (constraint_info%const_g33_mol)
338 9410 : NULLIFY (constraint_info%const_g33_molname)
339 9410 : NULLIFY (constraint_info%const_g33_a)
340 9410 : NULLIFY (constraint_info%const_g33_b)
341 9410 : NULLIFY (constraint_info%const_g33_c)
342 9410 : NULLIFY (constraint_info%const_g33_dab)
343 9410 : NULLIFY (constraint_info%const_g33_dac)
344 9410 : NULLIFY (constraint_info%const_g33_dbc)
345 9410 : NULLIFY (constraint_info%g33_intermolecular)
346 9410 : NULLIFY (constraint_info%g33_restraint)
347 9410 : NULLIFY (constraint_info%g33_k0)
348 9410 : NULLIFY (constraint_info%g33_exclude_qm, constraint_info%g33_exclude_mm)
349 : ! G4x6
350 9410 : constraint_info%nconst_g46 = 0
351 9410 : NULLIFY (constraint_info%const_g46_mol)
352 9410 : NULLIFY (constraint_info%const_g46_molname)
353 9410 : NULLIFY (constraint_info%const_g46_a)
354 9410 : NULLIFY (constraint_info%const_g46_b)
355 9410 : NULLIFY (constraint_info%const_g46_c)
356 9410 : NULLIFY (constraint_info%const_g46_d)
357 9410 : NULLIFY (constraint_info%const_g46_dab)
358 9410 : NULLIFY (constraint_info%const_g46_dac)
359 9410 : NULLIFY (constraint_info%const_g46_dbc)
360 9410 : NULLIFY (constraint_info%const_g46_dad)
361 9410 : NULLIFY (constraint_info%const_g46_dbd)
362 9410 : NULLIFY (constraint_info%const_g46_dcd)
363 9410 : NULLIFY (constraint_info%g46_intermolecular)
364 9410 : NULLIFY (constraint_info%g46_restraint)
365 9410 : NULLIFY (constraint_info%g46_k0)
366 9410 : NULLIFY (constraint_info%g46_exclude_qm, constraint_info%g46_exclude_mm)
367 : ! virtual_site
368 9410 : constraint_info%nconst_vsite = 0
369 9410 : NULLIFY (constraint_info%const_vsite_mol)
370 9410 : NULLIFY (constraint_info%const_vsite_molname)
371 9410 : NULLIFY (constraint_info%const_vsite_a)
372 9410 : NULLIFY (constraint_info%const_vsite_b)
373 9410 : NULLIFY (constraint_info%const_vsite_c)
374 9410 : NULLIFY (constraint_info%const_vsite_d)
375 9410 : NULLIFY (constraint_info%const_vsite_wbc)
376 9410 : NULLIFY (constraint_info%const_vsite_wdc)
377 9410 : NULLIFY (constraint_info%vsite_intermolecular)
378 9410 : NULLIFY (constraint_info%vsite_restraint)
379 9410 : NULLIFY (constraint_info%vsite_k0)
380 9410 : NULLIFY (constraint_info%vsite_exclude_qm, constraint_info%vsite_exclude_mm)
381 :
382 9410 : END SUBROUTINE init_constraint
383 :
384 : ! **************************************************************************************************
385 : !> \brief 1. Just DEALLOCATE all the stuff
386 : !> \param topology ...
387 : !> \par History
388 : !> none
389 : ! **************************************************************************************************
390 9410 : SUBROUTINE deallocate_topology(topology)
391 : TYPE(topology_parameters_type), INTENT(INOUT) :: topology
392 :
393 : !-----------------------------------------------------------------------------
394 : ! 1. DEALLOCATE things in topology%atom_info
395 : !-----------------------------------------------------------------------------
396 :
397 9410 : IF (ASSOCIATED(topology%atom_info%id_molname)) THEN
398 9410 : DEALLOCATE (topology%atom_info%id_molname)
399 : END IF
400 9410 : IF (ASSOCIATED(topology%atom_info%id_resname)) THEN
401 9410 : DEALLOCATE (topology%atom_info%id_resname)
402 : END IF
403 9410 : IF (ASSOCIATED(topology%atom_info%resid)) THEN
404 8882 : DEALLOCATE (topology%atom_info%resid)
405 : END IF
406 9410 : IF (ASSOCIATED(topology%atom_info%id_atmname)) THEN
407 9410 : DEALLOCATE (topology%atom_info%id_atmname)
408 : END IF
409 9410 : IF (ASSOCIATED(topology%atom_info%id_atom_names)) THEN
410 9410 : DEALLOCATE (topology%atom_info%id_atom_names)
411 : END IF
412 9410 : IF (ASSOCIATED(topology%atom_info%r)) THEN
413 9410 : DEALLOCATE (topology%atom_info%r)
414 : END IF
415 9410 : IF (ASSOCIATED(topology%atom_info%map_mol_typ)) THEN
416 9410 : DEALLOCATE (topology%atom_info%map_mol_typ)
417 : END IF
418 9410 : IF (ASSOCIATED(topology%atom_info%map_mol_num)) THEN
419 9410 : DEALLOCATE (topology%atom_info%map_mol_num)
420 : END IF
421 9410 : IF (ASSOCIATED(topology%atom_info%map_mol_res)) THEN
422 9410 : DEALLOCATE (topology%atom_info%map_mol_res)
423 : END IF
424 9410 : IF (ASSOCIATED(topology%atom_info%atm_charge)) THEN
425 9410 : DEALLOCATE (topology%atom_info%atm_charge)
426 : END IF
427 9410 : IF (ASSOCIATED(topology%atom_info%atm_mass)) THEN
428 9410 : DEALLOCATE (topology%atom_info%atm_mass)
429 : END IF
430 9410 : IF (ASSOCIATED(topology%atom_info%occup)) THEN
431 2039 : DEALLOCATE (topology%atom_info%occup)
432 : END IF
433 9410 : IF (ASSOCIATED(topology%atom_info%beta)) THEN
434 2039 : DEALLOCATE (topology%atom_info%beta)
435 : END IF
436 9410 : IF (ASSOCIATED(topology%atom_info%id_element)) THEN
437 9410 : DEALLOCATE (topology%atom_info%id_element)
438 : END IF
439 : !-----------------------------------------------------------------------------
440 : ! 2. DEALLOCATE things in topology%conn_info
441 : !-----------------------------------------------------------------------------
442 9410 : IF (ASSOCIATED(topology%conn_info%bond_a)) THEN
443 9410 : DEALLOCATE (topology%conn_info%bond_a)
444 : END IF
445 9410 : IF (ASSOCIATED(topology%conn_info%bond_b)) THEN
446 9410 : DEALLOCATE (topology%conn_info%bond_b)
447 : END IF
448 9410 : IF (ASSOCIATED(topology%conn_info%bond_type)) THEN
449 14 : DEALLOCATE (topology%conn_info%bond_type)
450 : END IF
451 9410 : IF (ASSOCIATED(topology%conn_info%ub_a)) THEN
452 9396 : DEALLOCATE (topology%conn_info%ub_a)
453 : END IF
454 9410 : IF (ASSOCIATED(topology%conn_info%ub_b)) THEN
455 9396 : DEALLOCATE (topology%conn_info%ub_b)
456 : END IF
457 9410 : IF (ASSOCIATED(topology%conn_info%ub_c)) THEN
458 9396 : DEALLOCATE (topology%conn_info%ub_c)
459 : END IF
460 9410 : IF (ASSOCIATED(topology%conn_info%theta_a)) THEN
461 9410 : DEALLOCATE (topology%conn_info%theta_a)
462 : END IF
463 9410 : IF (ASSOCIATED(topology%conn_info%theta_b)) THEN
464 9410 : DEALLOCATE (topology%conn_info%theta_b)
465 : END IF
466 9410 : IF (ASSOCIATED(topology%conn_info%theta_c)) THEN
467 9410 : DEALLOCATE (topology%conn_info%theta_c)
468 : END IF
469 9410 : IF (ASSOCIATED(topology%conn_info%theta_type)) THEN
470 14 : DEALLOCATE (topology%conn_info%theta_type)
471 : END IF
472 9410 : IF (ASSOCIATED(topology%conn_info%phi_a)) THEN
473 9410 : DEALLOCATE (topology%conn_info%phi_a)
474 : END IF
475 9410 : IF (ASSOCIATED(topology%conn_info%phi_b)) THEN
476 9410 : DEALLOCATE (topology%conn_info%phi_b)
477 : END IF
478 9410 : IF (ASSOCIATED(topology%conn_info%phi_c)) THEN
479 9410 : DEALLOCATE (topology%conn_info%phi_c)
480 : END IF
481 9410 : IF (ASSOCIATED(topology%conn_info%phi_d)) THEN
482 9410 : DEALLOCATE (topology%conn_info%phi_d)
483 : END IF
484 9410 : IF (ASSOCIATED(topology%conn_info%phi_type)) THEN
485 14 : DEALLOCATE (topology%conn_info%phi_type)
486 : END IF
487 9410 : IF (ASSOCIATED(topology%conn_info%impr_a)) THEN
488 9410 : DEALLOCATE (topology%conn_info%impr_a)
489 : END IF
490 9410 : IF (ASSOCIATED(topology%conn_info%impr_b)) THEN
491 9410 : DEALLOCATE (topology%conn_info%impr_b)
492 : END IF
493 9410 : IF (ASSOCIATED(topology%conn_info%impr_c)) THEN
494 9410 : DEALLOCATE (topology%conn_info%impr_c)
495 : END IF
496 9410 : IF (ASSOCIATED(topology%conn_info%impr_d)) THEN
497 9410 : DEALLOCATE (topology%conn_info%impr_d)
498 : END IF
499 9410 : IF (ASSOCIATED(topology%conn_info%impr_type)) THEN
500 14 : DEALLOCATE (topology%conn_info%impr_type)
501 : END IF
502 9410 : IF (ASSOCIATED(topology%conn_info%onfo_a)) THEN
503 9404 : DEALLOCATE (topology%conn_info%onfo_a)
504 : END IF
505 9410 : IF (ASSOCIATED(topology%conn_info%onfo_b)) THEN
506 9404 : DEALLOCATE (topology%conn_info%onfo_b)
507 : END IF
508 9410 : IF (ASSOCIATED(topology%conn_info%c_bond_a)) THEN
509 7101 : DEALLOCATE (topology%conn_info%c_bond_a)
510 : END IF
511 9410 : IF (ASSOCIATED(topology%conn_info%c_bond_b)) THEN
512 7101 : DEALLOCATE (topology%conn_info%c_bond_b)
513 : END IF
514 9410 : IF (ASSOCIATED(topology%conn_info%c_bond_type)) THEN
515 0 : DEALLOCATE (topology%conn_info%c_bond_type)
516 : END IF
517 : !-----------------------------------------------------------------------------
518 : ! 3. DEALLOCATE things in topology%cons_info
519 : !-----------------------------------------------------------------------------
520 9410 : IF (ASSOCIATED(topology%cons_info)) &
521 9410 : CALL deallocate_constraint(topology%cons_info)
522 : !-----------------------------------------------------------------------------
523 : ! 4. DEALLOCATE things in topology
524 : !-----------------------------------------------------------------------------
525 9410 : CALL cell_release(topology%cell)
526 9410 : CALL cell_release(topology%cell_ref)
527 9410 : CALL cell_release(topology%cell_muc)
528 9410 : IF (ASSOCIATED(topology%atom_info)) THEN
529 9410 : DEALLOCATE (topology%atom_info)
530 : END IF
531 9410 : IF (ASSOCIATED(topology%conn_info)) THEN
532 9410 : DEALLOCATE (topology%conn_info)
533 : END IF
534 9410 : IF (ASSOCIATED(topology%cons_info)) THEN
535 9410 : DEALLOCATE (topology%cons_info)
536 : END IF
537 :
538 9410 : END SUBROUTINE deallocate_topology
539 :
540 : ! **************************************************************************************************
541 : !> \brief 1. Just DEALLOCATE all the stuff
542 : !> \param constraint_info ...
543 : !> \par History
544 : !> none
545 : ! **************************************************************************************************
546 9410 : SUBROUTINE deallocate_constraint(constraint_info)
547 : TYPE(constraint_info_type), POINTER :: constraint_info
548 :
549 : INTEGER :: i
550 :
551 : ! Fixed Atoms
552 :
553 9410 : IF (ASSOCIATED(constraint_info%fixed_atoms)) THEN
554 110 : DEALLOCATE (constraint_info%fixed_atoms)
555 : END IF
556 9410 : IF (ASSOCIATED(constraint_info%fixed_type)) THEN
557 110 : DEALLOCATE (constraint_info%fixed_type)
558 : END IF
559 9410 : IF (ASSOCIATED(constraint_info%fixed_molnames)) THEN
560 110 : DEALLOCATE (constraint_info%fixed_molnames)
561 : END IF
562 9410 : IF (ASSOCIATED(constraint_info%fixed_mol_type)) THEN
563 110 : DEALLOCATE (constraint_info%fixed_mol_type)
564 : END IF
565 9410 : IF (ASSOCIATED(constraint_info%fixed_restraint)) THEN
566 110 : DEALLOCATE (constraint_info%fixed_restraint)
567 : END IF
568 9410 : IF (ASSOCIATED(constraint_info%fixed_k0)) THEN
569 110 : DEALLOCATE (constraint_info%fixed_k0)
570 : END IF
571 9410 : IF (ASSOCIATED(constraint_info%fixed_mol_restraint)) THEN
572 110 : DEALLOCATE (constraint_info%fixed_mol_restraint)
573 : END IF
574 9410 : IF (ASSOCIATED(constraint_info%fixed_mol_k0)) THEN
575 110 : DEALLOCATE (constraint_info%fixed_mol_k0)
576 : END IF
577 9410 : IF (ASSOCIATED(constraint_info%fixed_exclude_qm)) THEN
578 110 : DEALLOCATE (constraint_info%fixed_exclude_qm)
579 : END IF
580 9410 : IF (ASSOCIATED(constraint_info%fixed_exclude_mm)) THEN
581 110 : DEALLOCATE (constraint_info%fixed_exclude_mm)
582 : END IF
583 : ! Collective Constraint
584 9410 : IF (ASSOCIATED(constraint_info%colvar_set)) THEN
585 586 : DO i = 1, SIZE(constraint_info%colvar_set)
586 586 : IF (ASSOCIATED(constraint_info%colvar_set(i)%colvar)) THEN
587 450 : CALL colvar_release(constraint_info%colvar_set(i)%colvar)
588 450 : NULLIFY (constraint_info%colvar_set(i)%colvar)
589 : END IF
590 : END DO
591 136 : DEALLOCATE (constraint_info%colvar_set)
592 : END IF
593 9410 : IF (ASSOCIATED(constraint_info%const_colv_mol)) THEN
594 136 : DEALLOCATE (constraint_info%const_colv_mol)
595 : END IF
596 9410 : IF (ASSOCIATED(constraint_info%const_colv_molname)) THEN
597 136 : DEALLOCATE (constraint_info%const_colv_molname)
598 : END IF
599 9410 : IF (ASSOCIATED(constraint_info%const_colv_target)) THEN
600 136 : DEALLOCATE (constraint_info%const_colv_target)
601 : END IF
602 9410 : IF (ASSOCIATED(constraint_info%const_colv_target_growth)) THEN
603 136 : DEALLOCATE (constraint_info%const_colv_target_growth)
604 : END IF
605 9410 : IF (ASSOCIATED(constraint_info%colv_intermolecular)) THEN
606 136 : DEALLOCATE (constraint_info%colv_intermolecular)
607 : END IF
608 9410 : IF (ASSOCIATED(constraint_info%colv_restraint)) THEN
609 136 : DEALLOCATE (constraint_info%colv_restraint)
610 : END IF
611 9410 : IF (ASSOCIATED(constraint_info%colv_k0)) THEN
612 136 : DEALLOCATE (constraint_info%colv_k0)
613 : END IF
614 9410 : IF (ASSOCIATED(constraint_info%colv_exclude_qm)) THEN
615 136 : DEALLOCATE (constraint_info%colv_exclude_qm)
616 : END IF
617 9410 : IF (ASSOCIATED(constraint_info%colv_exclude_mm)) THEN
618 136 : DEALLOCATE (constraint_info%colv_exclude_mm)
619 : END IF
620 : ! G3x3
621 9410 : IF (ASSOCIATED(constraint_info%const_g33_mol)) THEN
622 156 : DEALLOCATE (constraint_info%const_g33_mol)
623 : END IF
624 9410 : IF (ASSOCIATED(constraint_info%const_g33_molname)) THEN
625 156 : DEALLOCATE (constraint_info%const_g33_molname)
626 : END IF
627 9410 : IF (ASSOCIATED(constraint_info%const_g33_a)) THEN
628 156 : DEALLOCATE (constraint_info%const_g33_a)
629 : END IF
630 9410 : IF (ASSOCIATED(constraint_info%const_g33_b)) THEN
631 156 : DEALLOCATE (constraint_info%const_g33_b)
632 : END IF
633 9410 : IF (ASSOCIATED(constraint_info%const_g33_c)) THEN
634 156 : DEALLOCATE (constraint_info%const_g33_c)
635 : END IF
636 9410 : IF (ASSOCIATED(constraint_info%const_g33_dab)) THEN
637 156 : DEALLOCATE (constraint_info%const_g33_dab)
638 : END IF
639 9410 : IF (ASSOCIATED(constraint_info%const_g33_dac)) THEN
640 156 : DEALLOCATE (constraint_info%const_g33_dac)
641 : END IF
642 9410 : IF (ASSOCIATED(constraint_info%const_g33_dbc)) THEN
643 156 : DEALLOCATE (constraint_info%const_g33_dbc)
644 : END IF
645 9410 : IF (ASSOCIATED(constraint_info%g33_intermolecular)) THEN
646 156 : DEALLOCATE (constraint_info%g33_intermolecular)
647 : END IF
648 9410 : IF (ASSOCIATED(constraint_info%g33_restraint)) THEN
649 156 : DEALLOCATE (constraint_info%g33_restraint)
650 : END IF
651 9410 : IF (ASSOCIATED(constraint_info%g33_k0)) THEN
652 156 : DEALLOCATE (constraint_info%g33_k0)
653 : END IF
654 9410 : IF (ASSOCIATED(constraint_info%g33_exclude_qm)) THEN
655 156 : DEALLOCATE (constraint_info%g33_exclude_qm)
656 : END IF
657 9410 : IF (ASSOCIATED(constraint_info%g33_exclude_mm)) THEN
658 156 : DEALLOCATE (constraint_info%g33_exclude_mm)
659 : END IF
660 : ! G4x6
661 9410 : IF (ASSOCIATED(constraint_info%const_g46_mol)) THEN
662 16 : DEALLOCATE (constraint_info%const_g46_mol)
663 : END IF
664 9410 : IF (ASSOCIATED(constraint_info%const_g46_molname)) THEN
665 16 : DEALLOCATE (constraint_info%const_g46_molname)
666 : END IF
667 9410 : IF (ASSOCIATED(constraint_info%const_g46_a)) THEN
668 16 : DEALLOCATE (constraint_info%const_g46_a)
669 : END IF
670 9410 : IF (ASSOCIATED(constraint_info%const_g46_b)) THEN
671 16 : DEALLOCATE (constraint_info%const_g46_b)
672 : END IF
673 9410 : IF (ASSOCIATED(constraint_info%const_g46_c)) THEN
674 16 : DEALLOCATE (constraint_info%const_g46_c)
675 : END IF
676 9410 : IF (ASSOCIATED(constraint_info%const_g46_d)) THEN
677 16 : DEALLOCATE (constraint_info%const_g46_d)
678 : END IF
679 9410 : IF (ASSOCIATED(constraint_info%const_g46_dab)) THEN
680 16 : DEALLOCATE (constraint_info%const_g46_dab)
681 : END IF
682 9410 : IF (ASSOCIATED(constraint_info%const_g46_dac)) THEN
683 16 : DEALLOCATE (constraint_info%const_g46_dac)
684 : END IF
685 9410 : IF (ASSOCIATED(constraint_info%const_g46_dbc)) THEN
686 16 : DEALLOCATE (constraint_info%const_g46_dbc)
687 : END IF
688 9410 : IF (ASSOCIATED(constraint_info%const_g46_dad)) THEN
689 16 : DEALLOCATE (constraint_info%const_g46_dad)
690 : END IF
691 9410 : IF (ASSOCIATED(constraint_info%const_g46_dbd)) THEN
692 16 : DEALLOCATE (constraint_info%const_g46_dbd)
693 : END IF
694 9410 : IF (ASSOCIATED(constraint_info%const_g46_dcd)) THEN
695 16 : DEALLOCATE (constraint_info%const_g46_dcd)
696 : END IF
697 9410 : IF (ASSOCIATED(constraint_info%g46_intermolecular)) THEN
698 16 : DEALLOCATE (constraint_info%g46_intermolecular)
699 : END IF
700 9410 : IF (ASSOCIATED(constraint_info%g46_restraint)) THEN
701 16 : DEALLOCATE (constraint_info%g46_restraint)
702 : END IF
703 9410 : IF (ASSOCIATED(constraint_info%g46_k0)) THEN
704 16 : DEALLOCATE (constraint_info%g46_k0)
705 : END IF
706 9410 : IF (ASSOCIATED(constraint_info%g46_exclude_qm)) THEN
707 16 : DEALLOCATE (constraint_info%g46_exclude_qm)
708 : END IF
709 9410 : IF (ASSOCIATED(constraint_info%g46_exclude_mm)) THEN
710 16 : DEALLOCATE (constraint_info%g46_exclude_mm)
711 : END IF
712 : ! virtual_site
713 9410 : IF (ASSOCIATED(constraint_info%const_vsite_mol)) THEN
714 8 : DEALLOCATE (constraint_info%const_vsite_mol)
715 : END IF
716 9410 : IF (ASSOCIATED(constraint_info%const_vsite_molname)) THEN
717 8 : DEALLOCATE (constraint_info%const_vsite_molname)
718 : END IF
719 9410 : IF (ASSOCIATED(constraint_info%const_vsite_a)) THEN
720 8 : DEALLOCATE (constraint_info%const_vsite_a)
721 : END IF
722 9410 : IF (ASSOCIATED(constraint_info%const_vsite_b)) THEN
723 8 : DEALLOCATE (constraint_info%const_vsite_b)
724 : END IF
725 9410 : IF (ASSOCIATED(constraint_info%const_vsite_c)) THEN
726 8 : DEALLOCATE (constraint_info%const_vsite_c)
727 : END IF
728 9410 : IF (ASSOCIATED(constraint_info%const_vsite_d)) THEN
729 8 : DEALLOCATE (constraint_info%const_vsite_d)
730 : END IF
731 9410 : IF (ASSOCIATED(constraint_info%const_vsite_wbc)) THEN
732 8 : DEALLOCATE (constraint_info%const_vsite_wbc)
733 : END IF
734 9410 : IF (ASSOCIATED(constraint_info%const_vsite_wdc)) THEN
735 8 : DEALLOCATE (constraint_info%const_vsite_wdc)
736 : END IF
737 9410 : IF (ASSOCIATED(constraint_info%vsite_intermolecular)) THEN
738 8 : DEALLOCATE (constraint_info%vsite_intermolecular)
739 : END IF
740 9410 : IF (ASSOCIATED(constraint_info%vsite_restraint)) THEN
741 8 : DEALLOCATE (constraint_info%vsite_restraint)
742 : END IF
743 9410 : IF (ASSOCIATED(constraint_info%vsite_k0)) THEN
744 8 : DEALLOCATE (constraint_info%vsite_k0)
745 : END IF
746 9410 : IF (ASSOCIATED(constraint_info%vsite_exclude_qm)) THEN
747 8 : DEALLOCATE (constraint_info%vsite_exclude_qm)
748 : END IF
749 9410 : IF (ASSOCIATED(constraint_info%vsite_exclude_mm)) THEN
750 8 : DEALLOCATE (constraint_info%vsite_exclude_mm)
751 : END IF
752 9410 : END SUBROUTINE deallocate_constraint
753 :
754 : ! **************************************************************************************************
755 : !> \brief Deallocate possibly allocated arrays before reading topology
756 : !> \param topology ...
757 : !> \par History
758 : !> none
759 : ! **************************************************************************************************
760 795 : SUBROUTINE pre_read_topology(topology)
761 : TYPE(topology_parameters_type), INTENT(INOUT) :: topology
762 :
763 : TYPE(atom_info_type), POINTER :: atom_info
764 :
765 795 : atom_info => topology%atom_info
766 :
767 795 : IF (ASSOCIATED(atom_info%id_molname)) THEN
768 795 : DEALLOCATE (atom_info%id_molname)
769 : END IF
770 :
771 795 : IF (ASSOCIATED(atom_info%resid)) THEN
772 795 : DEALLOCATE (atom_info%resid)
773 : END IF
774 :
775 795 : IF (ASSOCIATED(atom_info%id_resname)) THEN
776 795 : DEALLOCATE (atom_info%id_resname)
777 : END IF
778 :
779 795 : IF (ASSOCIATED(atom_info%id_atmname)) THEN
780 795 : DEALLOCATE (atom_info%id_atmname)
781 : END IF
782 :
783 795 : IF (ASSOCIATED(atom_info%atm_charge)) THEN
784 795 : DEALLOCATE (atom_info%atm_charge)
785 : END IF
786 :
787 795 : IF (ASSOCIATED(atom_info%atm_mass)) THEN
788 795 : DEALLOCATE (atom_info%atm_mass)
789 : END IF
790 :
791 795 : END SUBROUTINE pre_read_topology
792 :
793 0 : END MODULE topology_types
|