1!--------------------------------------------------------------------------------------------------!
2!   CP2K: A general program to perform molecular dynamics simulations                              !
3!   Copyright (C) 2000 - 2019  CP2K developers group                                               !
4!--------------------------------------------------------------------------------------------------!
5
6! **************************************************************************************************
7!> \brief Define all structures types related to force_fields
8!> \par History
9!>      10.2008 Teodoro Laino [tlaino] - University of Zurich
10!>      added native support for AMBER forcefield
11!>      10.2014 Moved kind types into force_field_kind_types.F [Ole Schuett]
12!> \author MK (29.08.2003)
13! **************************************************************************************************
14MODULE force_field_types
15
16   USE damping_dipole_types,            ONLY: damping_info_type
17   USE force_field_kind_types,          ONLY: legendre_data_type
18   USE kinds,                           ONLY: default_path_length,&
19                                              default_string_length,&
20                                              dp
21   USE pair_potential_types,            ONLY: pair_potential_p_release,&
22                                              pair_potential_p_type
23   USE shell_potential_types,           ONLY: shell_p_release,&
24                                              shell_p_type
25#include "./base/base_uses.f90"
26
27   IMPLICIT NONE
28
29   PRIVATE
30
31   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'force_field_types'
32
33! *** Define the derived structure types ***
34
35! **************************************************************************************************
36   TYPE input_info_type
37      CHARACTER(LEN=default_string_length), POINTER :: charge_atm(:)
38      REAL(KIND=dp), POINTER                         :: charge(:)
39      CHARACTER(LEN=default_string_length), POINTER :: apol_atm(:)
40      REAL(KIND=dp), POINTER                         :: apol(:)
41      CHARACTER(LEN=default_string_length), POINTER :: cpol_atm(:)
42      REAL(KIND=dp), POINTER                         :: cpol(:)
43      INTEGER, POINTER                               :: bond_kind(:)
44      CHARACTER(LEN=default_string_length), POINTER :: bond_a(:)
45      CHARACTER(LEN=default_string_length), POINTER :: bond_b(:)
46      REAL(KIND=dp), POINTER                         :: bond_k(:, :)
47      REAL(KIND=dp), POINTER                         :: bond_r0(:)
48      REAL(KIND=dp), POINTER                         :: bond_cs(:)
49      INTEGER, POINTER                               :: bend_kind(:)
50      CHARACTER(LEN=default_string_length), POINTER :: bend_a(:)
51      CHARACTER(LEN=default_string_length), POINTER :: bend_b(:)
52      CHARACTER(LEN=default_string_length), POINTER :: bend_c(:)
53      REAL(KIND=dp), POINTER                         :: bend_k(:)
54      REAL(KIND=dp), POINTER                         :: bend_theta0(:)
55      REAL(KIND=dp), POINTER                         :: bend_cb(:)
56      REAL(KIND=dp), POINTER, DIMENSION(:)           :: bend_r012, &
57                                                        bend_r032, &
58                                                        bend_kbs12, &
59                                                        bend_kbs32, &
60                                                        bend_kss
61      TYPE(legendre_data_type), POINTER, DIMENSION(:):: bend_legendre
62      INTEGER, POINTER                               :: ub_kind(:)
63      CHARACTER(LEN=default_string_length), POINTER :: ub_a(:)
64      CHARACTER(LEN=default_string_length), POINTER :: ub_b(:)
65      CHARACTER(LEN=default_string_length), POINTER :: ub_c(:)
66      REAL(KIND=dp), POINTER                         :: ub_k(:, :)
67      REAL(KIND=dp), POINTER                         :: ub_r0(:)
68      INTEGER, POINTER                               :: torsion_kind(:)
69      CHARACTER(LEN=default_string_length), POINTER :: torsion_a(:)
70      CHARACTER(LEN=default_string_length), POINTER :: torsion_b(:)
71      CHARACTER(LEN=default_string_length), POINTER :: torsion_c(:)
72      CHARACTER(LEN=default_string_length), POINTER :: torsion_d(:)
73      REAL(KIND=dp), POINTER                         :: torsion_k(:)
74      INTEGER, POINTER                               :: torsion_m(:)
75      REAL(KIND=dp), POINTER                         :: torsion_phi0(:)
76      INTEGER, POINTER                               :: impr_kind(:)
77      CHARACTER(LEN=default_string_length), POINTER :: impr_a(:)
78      CHARACTER(LEN=default_string_length), POINTER :: impr_b(:)
79      CHARACTER(LEN=default_string_length), POINTER :: impr_c(:)
80      CHARACTER(LEN=default_string_length), POINTER :: impr_d(:)
81      REAL(KIND=dp), POINTER                         :: impr_k(:)
82      REAL(KIND=dp), POINTER                         :: impr_phi0(:)
83      INTEGER, POINTER                               :: opbend_kind(:)
84      CHARACTER(LEN=default_string_length), POINTER :: opbend_a(:)
85      CHARACTER(LEN=default_string_length), POINTER :: opbend_b(:)
86      CHARACTER(LEN=default_string_length), POINTER :: opbend_c(:)
87      CHARACTER(LEN=default_string_length), POINTER :: opbend_d(:)
88      REAL(KIND=dp), POINTER                         :: opbend_k(:)
89      REAL(KIND=dp), POINTER                         :: opbend_phi0(:)
90      TYPE(pair_potential_p_type), POINTER          :: nonbonded
91      TYPE(pair_potential_p_type), POINTER          :: nonbonded14
92      TYPE(shell_p_type), DIMENSION(:), POINTER     :: shell_list
93      TYPE(damping_info_type), DIMENSION(:), POINTER :: damping_list
94   END TYPE input_info_type
95
96! **************************************************************************************************
97   TYPE charmm_info_type
98      CHARACTER(LEN=default_string_length), POINTER :: bond_a(:)
99      CHARACTER(LEN=default_string_length), POINTER :: bond_b(:)
100      REAL(KIND=dp), POINTER                         :: bond_k(:)
101      REAL(KIND=dp), POINTER                         :: bond_r0(:)
102      CHARACTER(LEN=default_string_length), POINTER :: bend_a(:)
103      CHARACTER(LEN=default_string_length), POINTER :: bend_b(:)
104      CHARACTER(LEN=default_string_length), POINTER :: bend_c(:)
105      REAL(KIND=dp), POINTER                         :: bend_k(:)
106      REAL(KIND=dp), POINTER                         :: bend_theta0(:)
107      CHARACTER(LEN=default_string_length), POINTER :: ub_a(:)
108      CHARACTER(LEN=default_string_length), POINTER :: ub_b(:)
109      CHARACTER(LEN=default_string_length), POINTER :: ub_c(:)
110      REAL(KIND=dp), POINTER                         :: ub_k(:)
111      REAL(KIND=dp), POINTER                         :: ub_r0(:)
112      CHARACTER(LEN=default_string_length), POINTER :: torsion_a(:)
113      CHARACTER(LEN=default_string_length), POINTER :: torsion_b(:)
114      CHARACTER(LEN=default_string_length), POINTER :: torsion_c(:)
115      CHARACTER(LEN=default_string_length), POINTER :: torsion_d(:)
116      REAL(KIND=dp), POINTER                         :: torsion_k(:)
117      INTEGER, POINTER                               :: torsion_m(:)
118      REAL(KIND=dp), POINTER                         :: torsion_phi0(:)
119      CHARACTER(LEN=default_string_length), POINTER :: impr_a(:)
120      CHARACTER(LEN=default_string_length), POINTER :: impr_b(:)
121      CHARACTER(LEN=default_string_length), POINTER :: impr_c(:)
122      CHARACTER(LEN=default_string_length), POINTER :: impr_d(:)
123      REAL(KIND=dp), POINTER                         :: impr_k(:)
124      REAL(KIND=dp), POINTER                         :: impr_phi0(:)
125      CHARACTER(LEN=default_string_length), POINTER :: nonbond_a(:)
126      REAL(KIND=dp), POINTER                        :: nonbond_eps(:)
127      REAL(KIND=dp), POINTER                        :: nonbond_rmin2(:)
128      CHARACTER(LEN=default_string_length), POINTER :: nonbond_a_14(:)
129      REAL(KIND=dp), POINTER                        :: nonbond_eps_14(:)
130      REAL(KIND=dp), POINTER                        :: nonbond_rmin2_14(:)
131   END TYPE charmm_info_type
132
133! **************************************************************************************************
134   TYPE amber_info_type
135      CHARACTER(LEN=default_string_length), POINTER :: bond_a(:)
136      CHARACTER(LEN=default_string_length), POINTER :: bond_b(:)
137      REAL(KIND=dp), POINTER                         :: bond_k(:)
138      REAL(KIND=dp), POINTER                         :: bond_r0(:)
139      CHARACTER(LEN=default_string_length), POINTER :: bend_a(:)
140      CHARACTER(LEN=default_string_length), POINTER :: bend_b(:)
141      CHARACTER(LEN=default_string_length), POINTER :: bend_c(:)
142      REAL(KIND=dp), POINTER                         :: bend_k(:)
143      REAL(KIND=dp), POINTER                         :: bend_theta0(:)
144      CHARACTER(LEN=default_string_length), POINTER :: torsion_a(:)
145      CHARACTER(LEN=default_string_length), POINTER :: torsion_b(:)
146      CHARACTER(LEN=default_string_length), POINTER :: torsion_c(:)
147      CHARACTER(LEN=default_string_length), POINTER :: torsion_d(:)
148      REAL(KIND=dp), POINTER                         :: torsion_k(:)
149      INTEGER, POINTER                               :: torsion_m(:)
150      REAL(KIND=dp), POINTER                         :: torsion_phi0(:)
151      CHARACTER(LEN=default_string_length), POINTER :: nonbond_a(:)
152      REAL(KIND=dp), POINTER                        :: nonbond_eps(:)
153      REAL(KIND=dp), POINTER                        :: nonbond_rmin2(:)
154   END TYPE amber_info_type
155
156! **************************************************************************************************
157   TYPE gromos_info_type
158      INTEGER                                        :: ff_gromos_type
159      REAL(KIND=dp), POINTER                         :: solvent_k(:)
160      REAL(KIND=dp), POINTER                         :: solvent_r0(:)
161      REAL(KIND=dp), POINTER                         :: bond_k(:)
162      REAL(KIND=dp), POINTER                         :: bond_r0(:)
163      REAL(KIND=dp), POINTER                         :: bend_k(:)
164      REAL(KIND=dp), POINTER                         :: bend_theta0(:)
165      REAL(KIND=dp), POINTER                         :: torsion_k(:)
166      INTEGER, POINTER                               :: torsion_m(:)
167      REAL(KIND=dp), POINTER                         :: torsion_phi0(:)
168      REAL(KIND=dp), POINTER                         :: impr_k(:)
169      REAL(KIND=dp), POINTER                         :: impr_phi0(:)
170      CHARACTER(LEN=default_string_length), POINTER :: nonbond_a(:)
171      REAL(KIND=dp), POINTER                        :: nonbond_c6(:, :)
172      REAL(KIND=dp), POINTER                        :: nonbond_c12(:, :)
173      CHARACTER(LEN=default_string_length), POINTER :: nonbond_a_14(:)
174      REAL(KIND=dp), POINTER                        :: nonbond_c6_14(:, :)
175      REAL(KIND=dp), POINTER                        :: nonbond_c12_14(:, :)
176   END TYPE gromos_info_type
177
178! **************************************************************************************************
179   TYPE force_field_type
180      LOGICAL                                   :: shift_cutoff, &
181                                                   do_nonbonded, &
182                                                   electrostatics, &
183                                                   multiple_potential, &
184                                                   ignore_missing_critical
185      INTEGER                                   :: ff_type
186      REAL(KIND=dp)                             :: rcut_nb
187      REAL(KIND=dp)                             :: ei_scale14
188      REAL(KIND=dp)                             :: vdw_scale14
189      REAL(KIND=dp)                             :: eps_spline, &
190                                                   max_energy, &
191                                                   emax_spline, &
192                                                   rlow_nb
193      INTEGER                                   :: npoints
194      CHARACTER(LEN=default_path_length)       :: ff_file_name
195      TYPE(input_info_type), POINTER            :: inp_info
196      TYPE(charmm_info_type), POINTER           :: chm_info
197      TYPE(gromos_info_type), POINTER           :: gro_info
198      TYPE(amber_info_type), POINTER           :: amb_info
199   END TYPE force_field_type
200
201! *** Public subroutines ***
202
203   PUBLIC :: init_ff_type, &
204             deallocate_ff_type, &
205             init_inp_info, &
206             deallocate_inp_info
207
208! *** Public data types ***
209
210   PUBLIC :: charmm_info_type, &
211             amber_info_type, &
212             gromos_info_type, &
213             input_info_type, &
214             force_field_type
215
216CONTAINS
217
218! **************************************************************************************************
219!> \brief 1. Just NULLIFY and zero all the stuff
220!> \param ff_type ...
221!> \author ikuo
222! **************************************************************************************************
223   SUBROUTINE init_ff_type(ff_type)
224      TYPE(force_field_type), INTENT(INOUT)              :: ff_type
225
226      CHARACTER(LEN=*), PARAMETER :: routineN = 'init_ff_type', routineP = moduleN//':'//routineN
227
228!-----------------------------------------------------------------------------
229! 1. Initialize
230!-----------------------------------------------------------------------------
231
232      NULLIFY (ff_type%inp_info, ff_type%chm_info, ff_type%amb_info, ff_type%gro_info)
233      ALLOCATE (ff_type%inp_info)
234      ALLOCATE (ff_type%chm_info)
235      ALLOCATE (ff_type%gro_info)
236      ALLOCATE (ff_type%amb_info)
237
238      !-----------------------------------------------------------------------------
239      ! 2. Initialize and Nullify things in ff_type%inp_info
240      !-----------------------------------------------------------------------------
241      CALL init_inp_info(ff_type%inp_info)
242
243      !-----------------------------------------------------------------------------
244      ! 3. Initialize and Nullify things in ff_type%chm_info
245      !-----------------------------------------------------------------------------
246      CALL init_chm_info(ff_type%chm_info)
247
248      !-----------------------------------------------------------------------------
249      ! 4. Initialize and Nullify things in ff_type%gro_info
250      !-----------------------------------------------------------------------------
251      CALL init_gromos_info(ff_type%gro_info)
252
253      !-----------------------------------------------------------------------------
254      ! 5. Initialize and Nullify things in ff_type%amb_info
255      !-----------------------------------------------------------------------------
256      CALL init_amber_info(ff_type%amb_info)
257
258   END SUBROUTINE init_ff_type
259
260! **************************************************************************************************
261!> \brief Specific function to initialize the gro_info
262!> \param gro_info ...
263!> \author ikuo
264! **************************************************************************************************
265   SUBROUTINE init_gromos_info(gro_info)
266      TYPE(gromos_info_type), POINTER                    :: gro_info
267
268      NULLIFY (gro_info%solvent_k)
269      NULLIFY (gro_info%solvent_r0)
270      NULLIFY (gro_info%bond_k)
271      NULLIFY (gro_info%bond_r0)
272      NULLIFY (gro_info%bend_k)
273      NULLIFY (gro_info%bend_theta0)
274      NULLIFY (gro_info%torsion_k)
275      NULLIFY (gro_info%torsion_m)
276      NULLIFY (gro_info%torsion_phi0)
277      NULLIFY (gro_info%impr_k)
278      NULLIFY (gro_info%impr_phi0)
279      NULLIFY (gro_info%nonbond_a)
280      NULLIFY (gro_info%nonbond_c6)
281      NULLIFY (gro_info%nonbond_c12)
282      NULLIFY (gro_info%nonbond_a_14)
283      NULLIFY (gro_info%nonbond_c6_14)
284      NULLIFY (gro_info%nonbond_c12_14)
285
286   END SUBROUTINE init_gromos_info
287
288! **************************************************************************************************
289!> \brief Specific function to initialize the chm_info
290!> \param chm_info ...
291!> \par History
292!>      none
293!> \author teo
294! **************************************************************************************************
295   SUBROUTINE init_chm_info(chm_info)
296      TYPE(charmm_info_type), POINTER                    :: chm_info
297
298      NULLIFY (chm_info%bond_a)
299      NULLIFY (chm_info%bond_b)
300      NULLIFY (chm_info%bond_k)
301      NULLIFY (chm_info%bond_r0)
302      NULLIFY (chm_info%bend_a)
303      NULLIFY (chm_info%bend_b)
304      NULLIFY (chm_info%bend_c)
305      NULLIFY (chm_info%bend_k)
306      NULLIFY (chm_info%bend_theta0)
307      NULLIFY (chm_info%ub_a)
308      NULLIFY (chm_info%ub_b)
309      NULLIFY (chm_info%ub_c)
310      NULLIFY (chm_info%ub_k)
311      NULLIFY (chm_info%ub_r0)
312      NULLIFY (chm_info%torsion_a)
313      NULLIFY (chm_info%torsion_b)
314      NULLIFY (chm_info%torsion_c)
315      NULLIFY (chm_info%torsion_d)
316      NULLIFY (chm_info%torsion_k)
317      NULLIFY (chm_info%torsion_m)
318      NULLIFY (chm_info%torsion_phi0)
319      NULLIFY (chm_info%impr_a)
320      NULLIFY (chm_info%impr_b)
321      NULLIFY (chm_info%impr_c)
322      NULLIFY (chm_info%impr_d)
323      NULLIFY (chm_info%impr_k)
324      NULLIFY (chm_info%impr_phi0)
325      NULLIFY (chm_info%nonbond_a)
326      NULLIFY (chm_info%nonbond_eps)
327      NULLIFY (chm_info%nonbond_rmin2)
328      NULLIFY (chm_info%nonbond_a_14)
329      NULLIFY (chm_info%nonbond_eps_14)
330      NULLIFY (chm_info%nonbond_rmin2_14)
331
332   END SUBROUTINE init_chm_info
333
334! **************************************************************************************************
335!> \brief Specific function to initialize the chm_info
336!> \param amb_info ...
337!> \par History
338!>      none
339!> \author teo
340! **************************************************************************************************
341   SUBROUTINE init_amber_info(amb_info)
342      TYPE(amber_info_type), POINTER                     :: amb_info
343
344      NULLIFY (amb_info%bond_a)
345      NULLIFY (amb_info%bond_b)
346      NULLIFY (amb_info%bond_k)
347      NULLIFY (amb_info%bond_r0)
348      NULLIFY (amb_info%bend_a)
349      NULLIFY (amb_info%bend_b)
350      NULLIFY (amb_info%bend_c)
351      NULLIFY (amb_info%bend_k)
352      NULLIFY (amb_info%bend_theta0)
353      NULLIFY (amb_info%torsion_a)
354      NULLIFY (amb_info%torsion_b)
355      NULLIFY (amb_info%torsion_c)
356      NULLIFY (amb_info%torsion_d)
357      NULLIFY (amb_info%torsion_k)
358      NULLIFY (amb_info%torsion_m)
359      NULLIFY (amb_info%torsion_phi0)
360      NULLIFY (amb_info%nonbond_a)
361      NULLIFY (amb_info%nonbond_eps)
362      NULLIFY (amb_info%nonbond_rmin2)
363
364   END SUBROUTINE init_amber_info
365
366! **************************************************************************************************
367!> \brief Specific function to initialize the inp_info
368!> \param inp_info ...
369!> \par History
370!>      none
371!> \author teo
372! **************************************************************************************************
373   SUBROUTINE init_inp_info(inp_info)
374      TYPE(input_info_type), POINTER                     :: inp_info
375
376      NULLIFY (inp_info%charge_atm)
377      NULLIFY (inp_info%charge)
378      NULLIFY (inp_info%apol_atm)
379      NULLIFY (inp_info%apol)
380      NULLIFY (inp_info%cpol_atm)
381      NULLIFY (inp_info%cpol)
382      NULLIFY (inp_info%bond_kind)
383      NULLIFY (inp_info%bond_a)
384      NULLIFY (inp_info%bond_b)
385      NULLIFY (inp_info%bond_k)
386      NULLIFY (inp_info%bond_r0)
387      NULLIFY (inp_info%bond_cs)
388      NULLIFY (inp_info%bend_kind)
389      NULLIFY (inp_info%bend_a)
390      NULLIFY (inp_info%bend_b)
391      NULLIFY (inp_info%bend_c)
392      NULLIFY (inp_info%bend_k)
393      NULLIFY (inp_info%bend_theta0)
394      NULLIFY (inp_info%bend_cb)
395      NULLIFY (inp_info%bend_r012)
396      NULLIFY (inp_info%bend_r032)
397      NULLIFY (inp_info%bend_kbs12)
398      NULLIFY (inp_info%bend_kbs32)
399      NULLIFY (inp_info%bend_kss)
400      NULLIFY (inp_info%bend_legendre)
401      NULLIFY (inp_info%ub_kind)
402      NULLIFY (inp_info%ub_a)
403      NULLIFY (inp_info%ub_b)
404      NULLIFY (inp_info%ub_c)
405      NULLIFY (inp_info%ub_k)
406      NULLIFY (inp_info%ub_r0)
407      NULLIFY (inp_info%torsion_kind)
408      NULLIFY (inp_info%torsion_a)
409      NULLIFY (inp_info%torsion_b)
410      NULLIFY (inp_info%torsion_c)
411      NULLIFY (inp_info%torsion_d)
412      NULLIFY (inp_info%torsion_k)
413      NULLIFY (inp_info%torsion_m)
414      NULLIFY (inp_info%torsion_phi0)
415      NULLIFY (inp_info%impr_kind)
416      NULLIFY (inp_info%impr_a)
417      NULLIFY (inp_info%impr_b)
418      NULLIFY (inp_info%impr_c)
419      NULLIFY (inp_info%impr_d)
420      NULLIFY (inp_info%impr_k)
421      NULLIFY (inp_info%impr_phi0)
422      NULLIFY (inp_info%opbend_kind)
423      NULLIFY (inp_info%opbend_a)
424      NULLIFY (inp_info%opbend_b)
425      NULLIFY (inp_info%opbend_c)
426      NULLIFY (inp_info%opbend_d)
427      NULLIFY (inp_info%opbend_k)
428      NULLIFY (inp_info%opbend_phi0)
429      NULLIFY (inp_info%nonbonded)
430      NULLIFY (inp_info%nonbonded14)
431      NULLIFY (inp_info%shell_list)
432      NULLIFY (inp_info%damping_list)
433
434   END SUBROUTINE init_inp_info
435
436! **************************************************************************************************
437!> \brief 1. Just DEALLOCATE all the stuff
438!> \param ff_type ...
439! **************************************************************************************************
440   SUBROUTINE deallocate_ff_type(ff_type)
441      TYPE(force_field_type), INTENT(INOUT)              :: ff_type
442
443      CHARACTER(LEN=*), PARAMETER :: routineN = 'deallocate_ff_type', &
444         routineP = moduleN//':'//routineN
445
446!-----------------------------------------------------------------------------
447! 1. DEALLOCATE things in ff_type%inp_info
448!-----------------------------------------------------------------------------
449
450      CALL deallocate_inp_info(ff_type%inp_info)
451
452      !-----------------------------------------------------------------------------
453      ! 2. DEALLOCATE things in ff_type%chm_info
454      !-----------------------------------------------------------------------------
455      CALL deallocate_chm_info(ff_type%chm_info)
456
457      !-----------------------------------------------------------------------------
458      ! 3. DEALLOCATE things in ff_type%gro_info
459      !-----------------------------------------------------------------------------
460      CALL deallocate_gromos_info(ff_type%gro_info)
461
462      !-----------------------------------------------------------------------------
463      ! 4. DEALLOCATE things in ff_type%amb_info
464      !-----------------------------------------------------------------------------
465      CALL deallocate_amb_info(ff_type%amb_info)
466
467      !-----------------------------------------------------------------------------
468      ! 5. DEALLOCATE things in ff_type
469      !-----------------------------------------------------------------------------
470      IF (ASSOCIATED(ff_type%inp_info)) THEN
471         DEALLOCATE (ff_type%inp_info)
472      END IF
473      IF (ASSOCIATED(ff_type%chm_info)) THEN
474         DEALLOCATE (ff_type%chm_info)
475      END IF
476      IF (ASSOCIATED(ff_type%gro_info)) THEN
477         DEALLOCATE (ff_type%gro_info)
478      END IF
479      IF (ASSOCIATED(ff_type%amb_info)) THEN
480         DEALLOCATE (ff_type%amb_info)
481      END IF
482
483   END SUBROUTINE deallocate_ff_type
484
485! **************************************************************************************************
486!> \brief Specific function to deallocate the gro_info
487!> \param gro_info ...
488!> \author ikuo
489! **************************************************************************************************
490   SUBROUTINE deallocate_gromos_info(gro_info)
491      TYPE(gromos_info_type), POINTER                    :: gro_info
492
493      CHARACTER(LEN=*), PARAMETER :: routineN = 'deallocate_gromos_info', &
494         routineP = moduleN//':'//routineN
495
496      IF (ASSOCIATED(gro_info%solvent_k)) THEN
497         DEALLOCATE (gro_info%solvent_k)
498      END IF
499      IF (ASSOCIATED(gro_info%solvent_r0)) THEN
500         DEALLOCATE (gro_info%solvent_r0)
501      END IF
502      IF (ASSOCIATED(gro_info%bond_k)) THEN
503         DEALLOCATE (gro_info%bond_k)
504      END IF
505      IF (ASSOCIATED(gro_info%bond_r0)) THEN
506         DEALLOCATE (gro_info%bond_r0)
507      END IF
508      IF (ASSOCIATED(gro_info%bend_k)) THEN
509         DEALLOCATE (gro_info%bend_k)
510      END IF
511      IF (ASSOCIATED(gro_info%bend_theta0)) THEN
512         DEALLOCATE (gro_info%bend_theta0)
513      END IF
514      IF (ASSOCIATED(gro_info%torsion_k)) THEN
515         DEALLOCATE (gro_info%torsion_k)
516      END IF
517      IF (ASSOCIATED(gro_info%torsion_m)) THEN
518         DEALLOCATE (gro_info%torsion_m)
519      END IF
520      IF (ASSOCIATED(gro_info%torsion_phi0)) THEN
521         DEALLOCATE (gro_info%torsion_phi0)
522      END IF
523      IF (ASSOCIATED(gro_info%impr_k)) THEN
524         DEALLOCATE (gro_info%impr_k)
525      END IF
526      IF (ASSOCIATED(gro_info%impr_phi0)) THEN
527         DEALLOCATE (gro_info%impr_phi0)
528      END IF
529      IF (ASSOCIATED(gro_info%nonbond_a)) THEN
530         DEALLOCATE (gro_info%nonbond_a)
531      END IF
532      IF (ASSOCIATED(gro_info%nonbond_c6)) THEN
533         DEALLOCATE (gro_info%nonbond_c6)
534      END IF
535      IF (ASSOCIATED(gro_info%nonbond_c12)) THEN
536         DEALLOCATE (gro_info%nonbond_c12)
537      END IF
538      IF (ASSOCIATED(gro_info%nonbond_a_14)) THEN
539         DEALLOCATE (gro_info%nonbond_a_14)
540      END IF
541      IF (ASSOCIATED(gro_info%nonbond_c6_14)) THEN
542         DEALLOCATE (gro_info%nonbond_c6_14)
543      END IF
544      IF (ASSOCIATED(gro_info%nonbond_c12_14)) THEN
545         DEALLOCATE (gro_info%nonbond_c12_14)
546      END IF
547
548   END SUBROUTINE deallocate_gromos_info
549
550! **************************************************************************************************
551!> \brief Specific function to deallocate the chm_info
552!> \param chm_info ...
553!> \par History
554!>      none
555!> \author teo
556! **************************************************************************************************
557   SUBROUTINE deallocate_chm_info(chm_info)
558      TYPE(charmm_info_type), POINTER                    :: chm_info
559
560      CHARACTER(LEN=*), PARAMETER :: routineN = 'deallocate_chm_info', &
561         routineP = moduleN//':'//routineN
562
563      IF (ASSOCIATED(chm_info%bond_a)) THEN
564         DEALLOCATE (chm_info%bond_a)
565      END IF
566      IF (ASSOCIATED(chm_info%bond_b)) THEN
567         DEALLOCATE (chm_info%bond_b)
568      END IF
569      IF (ASSOCIATED(chm_info%bond_k)) THEN
570         DEALLOCATE (chm_info%bond_k)
571      END IF
572      IF (ASSOCIATED(chm_info%bond_r0)) THEN
573         DEALLOCATE (chm_info%bond_r0)
574      END IF
575      IF (ASSOCIATED(chm_info%bend_a)) THEN
576         DEALLOCATE (chm_info%bend_a)
577      END IF
578      IF (ASSOCIATED(chm_info%bend_b)) THEN
579         DEALLOCATE (chm_info%bend_b)
580      END IF
581      IF (ASSOCIATED(chm_info%bend_c)) THEN
582         DEALLOCATE (chm_info%bend_c)
583      END IF
584      IF (ASSOCIATED(chm_info%bend_k)) THEN
585         DEALLOCATE (chm_info%bend_k)
586      END IF
587      IF (ASSOCIATED(chm_info%bend_theta0)) THEN
588         DEALLOCATE (chm_info%bend_theta0)
589      END IF
590      IF (ASSOCIATED(chm_info%ub_a)) THEN
591         DEALLOCATE (chm_info%ub_a)
592      END IF
593      IF (ASSOCIATED(chm_info%ub_b)) THEN
594         DEALLOCATE (chm_info%ub_b)
595      END IF
596      IF (ASSOCIATED(chm_info%ub_c)) THEN
597         DEALLOCATE (chm_info%ub_c)
598      END IF
599      IF (ASSOCIATED(chm_info%ub_k)) THEN
600         DEALLOCATE (chm_info%ub_k)
601      END IF
602      IF (ASSOCIATED(chm_info%ub_r0)) THEN
603         DEALLOCATE (chm_info%ub_r0)
604      END IF
605      IF (ASSOCIATED(chm_info%torsion_a)) THEN
606         DEALLOCATE (chm_info%torsion_a)
607      END IF
608      IF (ASSOCIATED(chm_info%torsion_b)) THEN
609         DEALLOCATE (chm_info%torsion_b)
610      END IF
611      IF (ASSOCIATED(chm_info%torsion_c)) THEN
612         DEALLOCATE (chm_info%torsion_c)
613      END IF
614      IF (ASSOCIATED(chm_info%torsion_d)) THEN
615         DEALLOCATE (chm_info%torsion_d)
616      END IF
617      IF (ASSOCIATED(chm_info%torsion_k)) THEN
618         DEALLOCATE (chm_info%torsion_k)
619      END IF
620      IF (ASSOCIATED(chm_info%torsion_m)) THEN
621         DEALLOCATE (chm_info%torsion_m)
622      END IF
623      IF (ASSOCIATED(chm_info%torsion_phi0)) THEN
624         DEALLOCATE (chm_info%torsion_phi0)
625      END IF
626      IF (ASSOCIATED(chm_info%impr_a)) THEN
627         DEALLOCATE (chm_info%impr_a)
628      END IF
629      IF (ASSOCIATED(chm_info%impr_b)) THEN
630         DEALLOCATE (chm_info%impr_b)
631      END IF
632      IF (ASSOCIATED(chm_info%impr_c)) THEN
633         DEALLOCATE (chm_info%impr_c)
634      END IF
635      IF (ASSOCIATED(chm_info%impr_d)) THEN
636         DEALLOCATE (chm_info%impr_d)
637      END IF
638      IF (ASSOCIATED(chm_info%impr_k)) THEN
639         DEALLOCATE (chm_info%impr_k)
640      END IF
641      IF (ASSOCIATED(chm_info%impr_phi0)) THEN
642         DEALLOCATE (chm_info%impr_phi0)
643      END IF
644      IF (ASSOCIATED(chm_info%nonbond_a)) THEN
645         DEALLOCATE (chm_info%nonbond_a)
646      END IF
647      IF (ASSOCIATED(chm_info%nonbond_eps)) THEN
648         DEALLOCATE (chm_info%nonbond_eps)
649      END IF
650      IF (ASSOCIATED(chm_info%nonbond_rmin2)) THEN
651         DEALLOCATE (chm_info%nonbond_rmin2)
652      END IF
653      IF (ASSOCIATED(chm_info%nonbond_a_14)) THEN
654         DEALLOCATE (chm_info%nonbond_a_14)
655      END IF
656      IF (ASSOCIATED(chm_info%nonbond_eps_14)) THEN
657         DEALLOCATE (chm_info%nonbond_eps_14)
658      END IF
659      IF (ASSOCIATED(chm_info%nonbond_rmin2_14)) THEN
660         DEALLOCATE (chm_info%nonbond_rmin2_14)
661      END IF
662
663   END SUBROUTINE deallocate_chm_info
664
665! **************************************************************************************************
666!> \brief Specific function to deallocate the chm_info
667!> \param amb_info ...
668!> \par History
669!>      none
670!> \author Teodoro Laino [tlaino] - University of Zurich 10.2008
671! **************************************************************************************************
672   SUBROUTINE deallocate_amb_info(amb_info)
673      TYPE(amber_info_type), POINTER                     :: amb_info
674
675      CHARACTER(LEN=*), PARAMETER :: routineN = 'deallocate_amb_info', &
676         routineP = moduleN//':'//routineN
677
678      IF (ASSOCIATED(amb_info%bond_a)) THEN
679         DEALLOCATE (amb_info%bond_a)
680      END IF
681      IF (ASSOCIATED(amb_info%bond_b)) THEN
682         DEALLOCATE (amb_info%bond_b)
683      END IF
684      IF (ASSOCIATED(amb_info%bond_k)) THEN
685         DEALLOCATE (amb_info%bond_k)
686      END IF
687      IF (ASSOCIATED(amb_info%bond_r0)) THEN
688         DEALLOCATE (amb_info%bond_r0)
689      END IF
690      IF (ASSOCIATED(amb_info%bend_a)) THEN
691         DEALLOCATE (amb_info%bend_a)
692      END IF
693      IF (ASSOCIATED(amb_info%bend_b)) THEN
694         DEALLOCATE (amb_info%bend_b)
695      END IF
696      IF (ASSOCIATED(amb_info%bend_c)) THEN
697         DEALLOCATE (amb_info%bend_c)
698      END IF
699      IF (ASSOCIATED(amb_info%bend_k)) THEN
700         DEALLOCATE (amb_info%bend_k)
701      END IF
702      IF (ASSOCIATED(amb_info%bend_theta0)) THEN
703         DEALLOCATE (amb_info%bend_theta0)
704      END IF
705      IF (ASSOCIATED(amb_info%torsion_a)) THEN
706         DEALLOCATE (amb_info%torsion_a)
707      END IF
708      IF (ASSOCIATED(amb_info%torsion_b)) THEN
709         DEALLOCATE (amb_info%torsion_b)
710      END IF
711      IF (ASSOCIATED(amb_info%torsion_c)) THEN
712         DEALLOCATE (amb_info%torsion_c)
713      END IF
714      IF (ASSOCIATED(amb_info%torsion_d)) THEN
715         DEALLOCATE (amb_info%torsion_d)
716      END IF
717      IF (ASSOCIATED(amb_info%torsion_k)) THEN
718         DEALLOCATE (amb_info%torsion_k)
719      END IF
720      IF (ASSOCIATED(amb_info%torsion_m)) THEN
721         DEALLOCATE (amb_info%torsion_m)
722      END IF
723      IF (ASSOCIATED(amb_info%torsion_phi0)) THEN
724         DEALLOCATE (amb_info%torsion_phi0)
725      END IF
726      IF (ASSOCIATED(amb_info%nonbond_a)) THEN
727         DEALLOCATE (amb_info%nonbond_a)
728      END IF
729      IF (ASSOCIATED(amb_info%nonbond_eps)) THEN
730         DEALLOCATE (amb_info%nonbond_eps)
731      END IF
732      IF (ASSOCIATED(amb_info%nonbond_rmin2)) THEN
733         DEALLOCATE (amb_info%nonbond_rmin2)
734      END IF
735
736   END SUBROUTINE deallocate_amb_info
737
738! **************************************************************************************************
739!> \brief Specific function to deallocate the inp_info
740!> \param inp_info ...
741!> \par History
742!>      none
743!> \author teo
744! **************************************************************************************************
745   SUBROUTINE deallocate_inp_info(inp_info)
746      TYPE(input_info_type), POINTER                     :: inp_info
747
748      CHARACTER(LEN=*), PARAMETER :: routineN = 'deallocate_inp_info', &
749         routineP = moduleN//':'//routineN
750
751      INTEGER                                            :: i
752
753      IF (ASSOCIATED(inp_info%charge_atm)) THEN
754         DEALLOCATE (inp_info%charge_atm)
755      END IF
756      IF (ASSOCIATED(inp_info%charge)) THEN
757         DEALLOCATE (inp_info%charge)
758      END IF
759      IF (ASSOCIATED(inp_info%apol_atm)) THEN
760         DEALLOCATE (inp_info%apol_atm)
761      END IF
762      IF (ASSOCIATED(inp_info%apol)) THEN
763         DEALLOCATE (inp_info%apol)
764      END IF
765      IF (ASSOCIATED(inp_info%cpol_atm)) THEN
766         DEALLOCATE (inp_info%cpol_atm)
767      END IF
768      IF (ASSOCIATED(inp_info%cpol)) THEN
769         DEALLOCATE (inp_info%cpol)
770      END IF
771      IF (ASSOCIATED(inp_info%bond_kind)) THEN
772         DEALLOCATE (inp_info%bond_kind)
773      END IF
774      IF (ASSOCIATED(inp_info%bond_a)) THEN
775         DEALLOCATE (inp_info%bond_a)
776      END IF
777      IF (ASSOCIATED(inp_info%bond_b)) THEN
778         DEALLOCATE (inp_info%bond_b)
779      END IF
780      IF (ASSOCIATED(inp_info%bond_k)) THEN
781         DEALLOCATE (inp_info%bond_k)
782      END IF
783      IF (ASSOCIATED(inp_info%bond_r0)) THEN
784         DEALLOCATE (inp_info%bond_r0)
785      END IF
786      IF (ASSOCIATED(inp_info%bond_cs)) THEN
787         DEALLOCATE (inp_info%bond_cs)
788      END IF
789      IF (ASSOCIATED(inp_info%bend_kind)) THEN
790         DEALLOCATE (inp_info%bend_kind)
791      END IF
792      IF (ASSOCIATED(inp_info%bend_a)) THEN
793         DEALLOCATE (inp_info%bend_a)
794      END IF
795      IF (ASSOCIATED(inp_info%bend_b)) THEN
796         DEALLOCATE (inp_info%bend_b)
797      END IF
798      IF (ASSOCIATED(inp_info%bend_c)) THEN
799         DEALLOCATE (inp_info%bend_c)
800      END IF
801      IF (ASSOCIATED(inp_info%bend_k)) THEN
802         DEALLOCATE (inp_info%bend_k)
803      END IF
804      IF (ASSOCIATED(inp_info%bend_theta0)) THEN
805         DEALLOCATE (inp_info%bend_theta0)
806      END IF
807      IF (ASSOCIATED(inp_info%bend_legendre)) THEN
808         DO i = 1, SIZE(inp_info%bend_legendre)
809            IF (ASSOCIATED(inp_info%bend_legendre(i)%coeffs)) THEN
810               DEALLOCATE (inp_info%bend_legendre(i)%coeffs)
811               NULLIFY (inp_info%bend_legendre(i)%coeffs)
812            END IF
813         END DO
814         DEALLOCATE (inp_info%bend_legendre)
815         NULLIFY (inp_info%bend_legendre)
816      END IF
817      IF (ASSOCIATED(inp_info%bend_cb)) THEN
818         DEALLOCATE (inp_info%bend_cb)
819      END IF
820      IF (ASSOCIATED(inp_info%bend_r012)) THEN
821         DEALLOCATE (inp_info%bend_r012)
822      END IF
823      IF (ASSOCIATED(inp_info%bend_r032)) THEN
824         DEALLOCATE (inp_info%bend_r032)
825      END IF
826      IF (ASSOCIATED(inp_info%bend_kbs12)) THEN
827         DEALLOCATE (inp_info%bend_kbs12)
828      END IF
829      IF (ASSOCIATED(inp_info%bend_kbs32)) THEN
830         DEALLOCATE (inp_info%bend_kbs32)
831      END IF
832      IF (ASSOCIATED(inp_info%bend_kss)) THEN
833         DEALLOCATE (inp_info%bend_kss)
834      END IF
835      IF (ASSOCIATED(inp_info%ub_kind)) THEN
836         DEALLOCATE (inp_info%ub_kind)
837      END IF
838      IF (ASSOCIATED(inp_info%ub_a)) THEN
839         DEALLOCATE (inp_info%ub_a)
840      END IF
841      IF (ASSOCIATED(inp_info%ub_b)) THEN
842         DEALLOCATE (inp_info%ub_b)
843      END IF
844      IF (ASSOCIATED(inp_info%ub_c)) THEN
845         DEALLOCATE (inp_info%ub_c)
846      END IF
847      IF (ASSOCIATED(inp_info%ub_k)) THEN
848         DEALLOCATE (inp_info%ub_k)
849      END IF
850      IF (ASSOCIATED(inp_info%ub_r0)) THEN
851         DEALLOCATE (inp_info%ub_r0)
852      END IF
853      IF (ASSOCIATED(inp_info%torsion_kind)) THEN
854         DEALLOCATE (inp_info%torsion_kind)
855      END IF
856      IF (ASSOCIATED(inp_info%torsion_a)) THEN
857         DEALLOCATE (inp_info%torsion_a)
858      END IF
859      IF (ASSOCIATED(inp_info%torsion_b)) THEN
860         DEALLOCATE (inp_info%torsion_b)
861      END IF
862      IF (ASSOCIATED(inp_info%torsion_c)) THEN
863         DEALLOCATE (inp_info%torsion_c)
864      END IF
865      IF (ASSOCIATED(inp_info%torsion_d)) THEN
866         DEALLOCATE (inp_info%torsion_d)
867      END IF
868      IF (ASSOCIATED(inp_info%torsion_k)) THEN
869         DEALLOCATE (inp_info%torsion_k)
870      END IF
871      IF (ASSOCIATED(inp_info%torsion_m)) THEN
872         DEALLOCATE (inp_info%torsion_m)
873      END IF
874      IF (ASSOCIATED(inp_info%torsion_phi0)) THEN
875         DEALLOCATE (inp_info%torsion_phi0)
876      END IF
877      IF (ASSOCIATED(inp_info%impr_kind)) THEN
878         DEALLOCATE (inp_info%impr_kind)
879      END IF
880      IF (ASSOCIATED(inp_info%impr_a)) THEN
881         DEALLOCATE (inp_info%impr_a)
882      END IF
883      IF (ASSOCIATED(inp_info%impr_b)) THEN
884         DEALLOCATE (inp_info%impr_b)
885      END IF
886      IF (ASSOCIATED(inp_info%impr_c)) THEN
887         DEALLOCATE (inp_info%impr_c)
888      END IF
889      IF (ASSOCIATED(inp_info%impr_d)) THEN
890         DEALLOCATE (inp_info%impr_d)
891      END IF
892      IF (ASSOCIATED(inp_info%impr_k)) THEN
893         DEALLOCATE (inp_info%impr_k)
894      END IF
895      IF (ASSOCIATED(inp_info%impr_phi0)) THEN
896         DEALLOCATE (inp_info%impr_phi0)
897      END IF
898      IF (ASSOCIATED(inp_info%opbend_kind)) THEN
899         DEALLOCATE (inp_info%opbend_kind)
900      END IF
901      IF (ASSOCIATED(inp_info%opbend_a)) THEN
902         DEALLOCATE (inp_info%opbend_a)
903      END IF
904      IF (ASSOCIATED(inp_info%opbend_b)) THEN
905         DEALLOCATE (inp_info%opbend_b)
906      END IF
907      IF (ASSOCIATED(inp_info%opbend_c)) THEN
908         DEALLOCATE (inp_info%opbend_c)
909      END IF
910      IF (ASSOCIATED(inp_info%opbend_d)) THEN
911         DEALLOCATE (inp_info%opbend_d)
912      END IF
913      IF (ASSOCIATED(inp_info%opbend_k)) THEN
914         DEALLOCATE (inp_info%opbend_k)
915      END IF
916      IF (ASSOCIATED(inp_info%opbend_phi0)) THEN
917         DEALLOCATE (inp_info%opbend_phi0)
918      END IF
919      IF (ASSOCIATED(inp_info%nonbonded)) THEN
920         CALL pair_potential_p_release(inp_info%nonbonded)
921      END IF
922      IF (ASSOCIATED(inp_info%nonbonded14)) THEN
923         CALL pair_potential_p_release(inp_info%nonbonded14)
924      END IF
925      IF (ASSOCIATED(inp_info%shell_list)) THEN
926         CALL shell_p_release(inp_info%shell_list)
927      END IF
928      IF (ASSOCIATED(inp_info%damping_list)) THEN
929         DEALLOCATE (inp_info%damping_list)
930      END IF
931
932   END SUBROUTINE deallocate_inp_info
933
934END MODULE force_field_types
935