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