CP2K 2.4 (Revision 12889)

force_field_types.f90

Go to the documentation of this file.
00001 !-----------------------------------------------------------------------------!
00002 !   CP2K: A general program to perform molecular dynamics simulations         !
00003 !   Copyright (C) 2000 - 2013  CP2K developers group                          !
00004 !-----------------------------------------------------------------------------!
00005 
00006 ! *****************************************************************************
00013 MODULE force_field_types
00014 
00015   USE damping_dipole_types,            ONLY: damping_info_type
00016   USE f77_blas
00017   USE input_constants,                 ONLY: do_ff_undef
00018   USE kinds,                           ONLY: default_path_length,&
00019                                              default_string_length,&
00020                                              dp
00021   USE pair_potential_types,            ONLY: pair_potential_p_release,&
00022                                              pair_potential_p_type
00023   USE shell_potential_types,           ONLY: shell_p_release,&
00024                                              shell_p_type
00025 #include "cp_common_uses.h"
00026 
00027   IMPLICIT NONE
00028 
00029   PRIVATE
00030 
00031   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'force_field_types'
00032 
00033 ! *** Define the derived structure types ***
00034 
00035 ! *****************************************************************************
00036   TYPE bond_kind_type
00037      INTEGER                        :: id_type
00038      REAL(KIND = dp)                :: k(3),r0,cs
00039      INTEGER                        :: kind_number
00040   END TYPE bond_kind_type
00041 
00042 ! *****************************************************************************
00043   TYPE bend_kind_type
00044      INTEGER                        :: id_type
00045      REAL(KIND = dp)                :: k,theta0,cb
00046      REAL(KIND = dp)                :: r012,r032,kbs12,kbs32,kss
00047      INTEGER                        :: kind_number
00048   END TYPE bend_kind_type
00049 
00050 ! *****************************************************************************
00051   TYPE ub_kind_type
00052      INTEGER                        :: id_type
00053      REAL(KIND = dp)                :: k(3),r0
00054      INTEGER                        :: kind_number
00055   END TYPE ub_kind_type
00056 
00057 ! *****************************************************************************
00058   TYPE torsion_kind_type
00059      INTEGER                        :: id_type
00060      INTEGER                        :: nmul
00061      INTEGER, POINTER               :: m(:)
00062      REAL(KIND = dp), POINTER       :: k(:),phi0(:)
00063      INTEGER                        :: kind_number
00064   END TYPE torsion_kind_type
00065 
00066 ! *****************************************************************************
00067   TYPE impr_kind_type
00068      INTEGER                        :: id_type
00069      REAL(KIND = dp)                :: k,phi0
00070      INTEGER                        :: kind_number
00071   END TYPE impr_kind_type
00072 
00073 ! *****************************************************************************
00074   TYPE opbend_kind_type
00075      INTEGER                        :: id_type
00076      REAL(KIND = dp)                :: k,phi0
00077      INTEGER                        :: kind_number
00078   END TYPE opbend_kind_type
00079 
00080 ! *****************************************************************************
00081   TYPE input_info_type
00082     CHARACTER (LEN=default_string_length), POINTER :: charge_atm(:)
00083     REAL(KIND=dp), POINTER                         :: charge(:)
00084     CHARACTER (LEN=default_string_length), POINTER :: apol_atm(:)
00085     REAL(KIND=dp), POINTER                         :: apol(:)
00086     CHARACTER (LEN=default_string_length), POINTER :: cpol_atm(:)
00087     REAL(KIND=dp), POINTER                         :: cpol(:)
00088     INTEGER, POINTER                               :: bond_kind(:)
00089     CHARACTER (LEN=default_string_length), POINTER :: bond_a(:)
00090     CHARACTER (LEN=default_string_length), POINTER :: bond_b(:)
00091     REAL(KIND=dp), POINTER                         :: bond_k(:,:)
00092     REAL(KIND=dp), POINTER                         :: bond_r0(:)
00093     REAL(KIND=dp), POINTER                         :: bond_cs(:)
00094     INTEGER, POINTER                               :: bend_kind(:)
00095     CHARACTER (LEN=default_string_length), POINTER :: bend_a(:)
00096     CHARACTER (LEN=default_string_length), POINTER :: bend_b(:)
00097     CHARACTER (LEN=default_string_length), POINTER :: bend_c(:)
00098     REAL(KIND=dp), POINTER                         :: bend_k(:)
00099     REAL(KIND=dp), POINTER                         :: bend_theta0(:)
00100     REAL(KIND=dp), POINTER                         :: bend_cb(:)
00101     REAL(KIND=dp), POINTER, DIMENSION(:)           :: bend_r012,
00102                                                       bend_r032,
00103                                                       bend_kbs12,
00104                                                       bend_kbs32,
00105                                                       bend_kss
00106     INTEGER, POINTER                               :: ub_kind(:)
00107     CHARACTER (LEN=default_string_length), POINTER :: ub_a(:)
00108     CHARACTER (LEN=default_string_length), POINTER :: ub_b(:)
00109     CHARACTER (LEN=default_string_length), POINTER :: ub_c(:)
00110     REAL(KIND=dp), POINTER                         :: ub_k(:,:)
00111     REAL(KIND=dp), POINTER                         :: ub_r0(:)
00112     INTEGER, POINTER                               :: torsion_kind(:)
00113     CHARACTER (LEN=default_string_length), POINTER :: torsion_a(:)
00114     CHARACTER (LEN=default_string_length), POINTER :: torsion_b(:)
00115     CHARACTER (LEN=default_string_length), POINTER :: torsion_c(:)
00116     CHARACTER (LEN=default_string_length), POINTER :: torsion_d(:)
00117     REAL(KIND=dp), POINTER                         :: torsion_k(:)
00118     INTEGER, POINTER                               :: torsion_m(:)
00119     REAL(KIND=dp), POINTER                         :: torsion_phi0(:)
00120     INTEGER, POINTER                               :: impr_kind(:)
00121     CHARACTER (LEN=default_string_length), POINTER :: impr_a(:)
00122     CHARACTER (LEN=default_string_length), POINTER :: impr_b(:)
00123     CHARACTER (LEN=default_string_length), POINTER :: impr_c(:)
00124     CHARACTER (LEN=default_string_length), POINTER :: impr_d(:)
00125     REAL(KIND=dp), POINTER                         :: impr_k(:)
00126     REAL(KIND=dp), POINTER                         :: impr_phi0(:)
00127     INTEGER, POINTER                               :: opbend_kind(:)
00128     CHARACTER (LEN=default_string_length), POINTER :: opbend_a(:)
00129     CHARACTER (LEN=default_string_length), POINTER :: opbend_b(:)
00130     CHARACTER (LEN=default_string_length), POINTER :: opbend_c(:)
00131     CHARACTER (LEN=default_string_length), POINTER :: opbend_d(:)
00132     REAL(KIND=dp), POINTER                         :: opbend_k(:)
00133     REAL(KIND=dp), POINTER                         :: opbend_phi0(:)
00134     TYPE (pair_potential_p_type), POINTER          :: nonbonded
00135     TYPE (pair_potential_p_type), POINTER          :: nonbonded14
00136     TYPE (shell_p_type), DIMENSION(:), POINTER     :: shell_list
00137     TYPE (damping_info_type),DIMENSION(:), POINTER :: damping_list
00138   END TYPE input_info_type
00139 
00140 ! *****************************************************************************
00141   TYPE charmm_info_type
00142     CHARACTER (LEN=default_string_length), POINTER :: bond_a(:)
00143     CHARACTER (LEN=default_string_length), POINTER :: bond_b(:)
00144     REAL(KIND=dp), POINTER                         :: bond_k(:)
00145     REAL(KIND=dp), POINTER                         :: bond_r0(:)
00146     CHARACTER (LEN=default_string_length), POINTER :: bend_a(:)
00147     CHARACTER (LEN=default_string_length), POINTER :: bend_b(:)
00148     CHARACTER (LEN=default_string_length), POINTER :: bend_c(:)
00149     REAL(KIND=dp), POINTER                         :: bend_k(:)
00150     REAL(KIND=dp), POINTER                         :: bend_theta0(:)
00151     CHARACTER (LEN=default_string_length), POINTER :: ub_a(:)
00152     CHARACTER (LEN=default_string_length), POINTER :: ub_b(:)
00153     CHARACTER (LEN=default_string_length), POINTER :: ub_c(:)
00154     REAL(KIND=dp), POINTER                         :: ub_k(:)
00155     REAL(KIND=dp), POINTER                         :: ub_r0(:)
00156     CHARACTER (LEN=default_string_length), POINTER :: torsion_a(:)
00157     CHARACTER (LEN=default_string_length), POINTER :: torsion_b(:)
00158     CHARACTER (LEN=default_string_length), POINTER :: torsion_c(:)
00159     CHARACTER (LEN=default_string_length), POINTER :: torsion_d(:)
00160     REAL(KIND=dp), POINTER                         :: torsion_k(:)
00161     INTEGER, POINTER                               :: torsion_m(:)
00162     REAL(KIND=dp), POINTER                         :: torsion_phi0(:)
00163     CHARACTER (LEN=default_string_length), POINTER :: impr_a(:)
00164     CHARACTER (LEN=default_string_length), POINTER :: impr_b(:)
00165     CHARACTER (LEN=default_string_length), POINTER :: impr_c(:)
00166     CHARACTER (LEN=default_string_length), POINTER :: impr_d(:)
00167     REAL(KIND=dp), POINTER                         :: impr_k(:)
00168     REAL(KIND=dp), POINTER                         :: impr_phi0(:)
00169     CHARACTER (LEN=default_string_length), POINTER :: nonbond_a(:)
00170     REAL (KIND=dp), POINTER                        :: nonbond_eps(:)
00171     REAL (KIND=dp), POINTER                        :: nonbond_rmin2(:)
00172     CHARACTER (LEN=default_string_length), POINTER :: nonbond_a_14(:)
00173     REAL (KIND=dp), POINTER                        :: nonbond_eps_14(:)
00174     REAL (KIND=dp), POINTER                        :: nonbond_rmin2_14(:)
00175   END TYPE charmm_info_type
00176 
00177 ! *****************************************************************************
00178   TYPE amber_info_type
00179     CHARACTER (LEN=default_string_length), POINTER :: bond_a(:)
00180     CHARACTER (LEN=default_string_length), POINTER :: bond_b(:)
00181     REAL(KIND=dp), POINTER                         :: bond_k(:)
00182     REAL(KIND=dp), POINTER                         :: bond_r0(:)
00183     CHARACTER (LEN=default_string_length), POINTER :: bend_a(:)
00184     CHARACTER (LEN=default_string_length), POINTER :: bend_b(:)
00185     CHARACTER (LEN=default_string_length), POINTER :: bend_c(:)
00186     REAL(KIND=dp), POINTER                         :: bend_k(:)
00187     REAL(KIND=dp), POINTER                         :: bend_theta0(:)
00188     CHARACTER (LEN=default_string_length), POINTER :: torsion_a(:)
00189     CHARACTER (LEN=default_string_length), POINTER :: torsion_b(:)
00190     CHARACTER (LEN=default_string_length), POINTER :: torsion_c(:)
00191     CHARACTER (LEN=default_string_length), POINTER :: torsion_d(:)
00192     REAL(KIND=dp), POINTER                         :: torsion_k(:)
00193     REAL(KIND=dp), POINTER                         :: torsion_m(:)
00194     REAL(KIND=dp), POINTER                         :: torsion_phi0(:)
00195     CHARACTER (LEN=default_string_length), POINTER :: nonbond_a(:)
00196     REAL (KIND=dp), POINTER                        :: nonbond_eps(:)
00197     REAL (KIND=dp), POINTER                        :: nonbond_rmin2(:)
00198   END TYPE amber_info_type
00199 
00200 ! *****************************************************************************
00201   TYPE gromos_info_type
00202     INTEGER                                        :: ff_gromos_type
00203     REAL(KIND=dp), POINTER                         :: solvent_k(:)
00204     REAL(KIND=dp), POINTER                         :: solvent_r0(:)
00205     REAL(KIND=dp), POINTER                         :: bond_k(:)
00206     REAL(KIND=dp), POINTER                         :: bond_r0(:)
00207     REAL(KIND=dp), POINTER                         :: bend_k(:)
00208     REAL(KIND=dp), POINTER                         :: bend_theta0(:)
00209     REAL(KIND=dp), POINTER                         :: torsion_k(:)
00210     INTEGER, POINTER                               :: torsion_m(:)
00211     REAL(KIND=dp), POINTER                         :: torsion_phi0(:)
00212     REAL(KIND=dp), POINTER                         :: impr_k(:)
00213     REAL(KIND=dp), POINTER                         :: impr_phi0(:)
00214     CHARACTER (LEN=default_string_length), POINTER :: nonbond_a(:)
00215     REAL (KIND=dp), POINTER                        :: nonbond_c6(:,:)
00216     REAL (KIND=dp), POINTER                        :: nonbond_c12(:,:)
00217     CHARACTER (LEN=default_string_length), POINTER :: nonbond_a_14(:)
00218     REAL (KIND=dp), POINTER                        :: nonbond_c6_14(:,:)
00219     REAL (KIND=dp), POINTER                        :: nonbond_c12_14(:,:)
00220   END TYPE gromos_info_type
00221 
00222 ! *****************************************************************************
00223   TYPE force_field_type
00224     LOGICAL                                   :: shift_cutoff,
00225                                                  do_nonbonded,
00226                                                  electrostatics,
00227                                                  multiple_potential,
00228                                                  ignore_missing_critical
00229     INTEGER                                   :: ff_type
00230     REAL(KIND=dp)                             :: rcut_nb
00231     REAL(KIND=dp)                             :: ei_scale14
00232     REAL(KIND=dp)                             :: vdw_scale14
00233     REAL(KIND=dp)                             :: eps_spline,
00234                                                  max_energy,
00235                                                  emax_spline,
00236                                                  rlow_nb
00237     INTEGER                                   :: npoints
00238     CHARACTER (LEN=default_path_length)       :: ff_file_name
00239     TYPE (input_info_type),POINTER            :: inp_info
00240     TYPE (charmm_info_type),POINTER           :: chm_info
00241     TYPE (gromos_info_type),POINTER           :: gro_info
00242     TYPE (amber_info_type), POINTER           :: amb_info
00243   END TYPE force_field_type
00244 
00245 ! *** Public subroutines ***
00246 
00247   PUBLIC :: allocate_bend_kind_set,&
00248             allocate_bond_kind_set,&
00249             allocate_ub_kind_set,&
00250             allocate_torsion_kind_set,&
00251             allocate_impr_kind_set,&
00252             allocate_opbend_kind_set,&
00253             init_ff_type,&
00254             deallocate_ff_type,&
00255             deallocate_bend_kind_set,&
00256             deallocate_bond_kind_set,&
00257             torsion_kind_dealloc_ref,&
00258             impr_kind_dealloc_ref,&
00259             init_inp_info,&
00260             deallocate_inp_info
00261 
00262 ! *** Public data types ***
00263 
00264   PUBLIC :: bend_kind_type,&
00265             bond_kind_type,&
00266             impr_kind_type,&
00267             torsion_kind_type,&
00268             opbend_kind_type,&
00269             ub_kind_type,&
00270             ub_kind_dealloc_ref,&
00271             charmm_info_type,&
00272             amber_info_type,&
00273             gromos_info_type,&
00274             input_info_type,&
00275             force_field_type
00276 
00277 CONTAINS
00278 
00279 ! *****************************************************************************
00282   SUBROUTINE allocate_bend_kind_set(bend_kind_set,nkind,error)
00283 
00284     TYPE(bend_kind_type), DIMENSION(:), 
00285       POINTER                                :: bend_kind_set
00286     INTEGER, INTENT(IN)                      :: nkind
00287     TYPE(cp_error_type), INTENT(inout)       :: error
00288 
00289     CHARACTER(LEN=*), PARAMETER :: routineN = 'allocate_bend_kind_set', 
00290       routineP = moduleN//':'//routineN
00291 
00292     INTEGER                                  :: ikind, stat
00293     LOGICAL                                  :: failure
00294 
00295     failure = .FALSE.
00296     IF (.NOT.failure) THEN
00297        NULLIFY(bend_kind_set)
00298        ALLOCATE (bend_kind_set(nkind),STAT=stat)
00299        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00300        DO ikind=1,nkind
00301           bend_kind_set(ikind)%id_type = do_ff_undef
00302           bend_kind_set(ikind)%k = 0.0_dp
00303           bend_kind_set(ikind)%theta0 = 0.0_dp
00304           bend_kind_set(ikind)%cb = 0.0_dp
00305           bend_kind_set(ikind)%r012 = 0.0_dp
00306           bend_kind_set(ikind)%r032 = 0.0_dp
00307           bend_kind_set(ikind)%kbs12 = 0.0_dp
00308           bend_kind_set(ikind)%kbs32 = 0.0_dp
00309           bend_kind_set(ikind)%kss = 0.0_dp
00310           bend_kind_set(ikind)%kind_number = ikind
00311        END DO
00312     END IF
00313   END SUBROUTINE allocate_bend_kind_set
00314 
00315 ! *****************************************************************************
00318   SUBROUTINE allocate_bond_kind_set(bond_kind_set,nkind,error)
00319 
00320     TYPE(bond_kind_type), DIMENSION(:), 
00321       POINTER                                :: bond_kind_set
00322     INTEGER, INTENT(IN)                      :: nkind
00323     TYPE(cp_error_type), INTENT(inout)       :: error
00324 
00325     CHARACTER(LEN=*), PARAMETER :: routineN = 'allocate_bond_kind_set', 
00326       routineP = moduleN//':'//routineN
00327 
00328     INTEGER                                  :: ikind, stat
00329     LOGICAL                                  :: failure
00330 
00331     failure = .FALSE.
00332     NULLIFY(bond_kind_set)
00333     IF (.NOT.failure) THEN
00334        ALLOCATE (bond_kind_set(nkind),STAT=stat)
00335        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00336        DO ikind=1,nkind
00337           bond_kind_set(ikind)%id_type = do_ff_undef
00338           bond_kind_set(ikind)%k(:) = 0.0_dp
00339           bond_kind_set(ikind)%r0 = 0.0_dp
00340           bond_kind_set(ikind)%cs = 0.0_dp
00341           bond_kind_set(ikind)%kind_number = ikind
00342        END DO
00343     END IF
00344   END SUBROUTINE allocate_bond_kind_set
00345 
00346 ! *****************************************************************************
00349   SUBROUTINE allocate_torsion_kind_set(torsion_kind_set,nkind,error)
00350 
00351     TYPE(torsion_kind_type), DIMENSION(:), 
00352       POINTER                                :: torsion_kind_set
00353     INTEGER, INTENT(IN)                      :: nkind
00354     TYPE(cp_error_type), INTENT(inout)       :: error
00355 
00356     CHARACTER(LEN=*), PARAMETER :: routineN = 'allocate_torsion_kind_set', 
00357       routineP = moduleN//':'//routineN
00358 
00359     INTEGER                                  :: ikind, stat
00360     LOGICAL                                  :: failure
00361 
00362     failure = .FALSE.
00363     NULLIFY(torsion_kind_set)
00364     IF (.NOT.failure) THEN
00365        ALLOCATE (torsion_kind_set(nkind),STAT=stat)
00366        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00367 
00368        DO ikind=1,nkind
00369           torsion_kind_set(ikind)%id_type = do_ff_undef
00370           torsion_kind_set(ikind)%nmul = 0
00371           NULLIFY(torsion_kind_set(ikind)%k)
00372           NULLIFY(torsion_kind_set(ikind)%m)
00373           NULLIFY(torsion_kind_set(ikind)%phi0)
00374           torsion_kind_set(ikind)%kind_number = ikind
00375        END DO
00376     END IF
00377   END SUBROUTINE allocate_torsion_kind_set
00378 
00379 ! *****************************************************************************
00382   SUBROUTINE allocate_ub_kind_set(ub_kind_set,nkind,error)
00383 
00384     TYPE(ub_kind_type), DIMENSION(:), 
00385       POINTER                                :: ub_kind_set
00386     INTEGER, INTENT(IN)                      :: nkind
00387     TYPE(cp_error_type), INTENT(inout)       :: error
00388 
00389     CHARACTER(LEN=*), PARAMETER :: routineN = 'allocate_ub_kind_set', 
00390       routineP = moduleN//':'//routineN
00391 
00392     INTEGER                                  :: ikind, stat
00393     LOGICAL                                  :: failure
00394 
00395     failure = .FALSE.
00396     NULLIFY(ub_kind_set)
00397     ALLOCATE (ub_kind_set(nkind),STAT=stat)
00398     CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00399     DO ikind=1,nkind
00400       ub_kind_set(ikind)%id_type = do_ff_undef
00401       ub_kind_set(ikind)%k = 0.0_dp
00402       ub_kind_set(ikind)%r0 = 0.0_dp
00403       ub_kind_set(ikind)%kind_number = ikind
00404     END DO
00405   END SUBROUTINE allocate_ub_kind_set
00406 
00407 ! *****************************************************************************
00410   SUBROUTINE allocate_impr_kind_set(impr_kind_set,nkind,error)
00411 
00412     TYPE(impr_kind_type), DIMENSION(:), 
00413       POINTER                                :: impr_kind_set
00414     INTEGER, INTENT(IN)                      :: nkind
00415     TYPE(cp_error_type), INTENT(inout)       :: error
00416 
00417     CHARACTER(LEN=*), PARAMETER :: routineN = 'allocate_impr_kind_set', 
00418       routineP = moduleN//':'//routineN
00419 
00420     INTEGER                                  :: ikind, stat
00421     LOGICAL                                  :: failure
00422 
00423     failure = .FALSE.
00424     NULLIFY(impr_kind_set)
00425     ALLOCATE (impr_kind_set(nkind),STAT=stat)
00426     CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00427     DO ikind=1,nkind
00428       impr_kind_set(ikind)%id_type = do_ff_undef
00429       impr_kind_set(ikind)%k = 0.0_dp
00430       impr_kind_set(ikind)%phi0 = 0.0_dp
00431       impr_kind_set(ikind)%kind_number = ikind
00432     END DO
00433   END SUBROUTINE allocate_impr_kind_set
00434 
00435 ! *****************************************************************************
00438   SUBROUTINE allocate_opbend_kind_set(opbend_kind_set,nkind,error)
00439 
00440     TYPE(opbend_kind_type), DIMENSION(:), 
00441       POINTER                                :: opbend_kind_set
00442     INTEGER, INTENT(IN)                      :: nkind
00443     TYPE(cp_error_type), INTENT(inout)       :: error
00444 
00445     CHARACTER(LEN=*), PARAMETER :: routineN = 'allocate_opbend_kind_set', 
00446       routineP = moduleN//':'//routineN
00447 
00448     INTEGER                                  :: ikind, stat
00449     LOGICAL                                  :: failure
00450 
00451     failure = .FALSE.
00452     NULLIFY(opbend_kind_set)
00453     ALLOCATE (opbend_kind_set(nkind),STAT=stat)
00454     CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00455     DO ikind=1,nkind
00456       opbend_kind_set(ikind)%id_type = do_ff_undef
00457       opbend_kind_set(ikind)%k = 0.0_dp
00458       opbend_kind_set(ikind)%phi0 = 0.0_dp
00459       opbend_kind_set(ikind)%kind_number = ikind
00460     END DO
00461   END SUBROUTINE allocate_opbend_kind_set
00462 
00463 ! *****************************************************************************
00467   SUBROUTINE init_ff_type (ff_type,error)
00468     TYPE(force_field_type), INTENT(INOUT)    :: ff_type
00469     TYPE(cp_error_type), INTENT(inout)       :: error
00470 
00471     CHARACTER(LEN=*), PARAMETER :: routineN = 'init_ff_type', 
00472       routineP = moduleN//':'//routineN
00473 
00474     INTEGER                                  :: stat
00475     LOGICAL                                  :: failure
00476 
00477     failure = .FALSE.
00478 
00479     !-----------------------------------------------------------------------------
00480     ! 1. Initialize
00481     !-----------------------------------------------------------------------------
00482     NULLIFY(ff_type%inp_info,ff_type%chm_info,ff_type%amb_info,ff_type%gro_info)
00483     ALLOCATE(ff_type%inp_info,STAT=stat)
00484     CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00485     ALLOCATE(ff_type%chm_info,STAT=stat)
00486     CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00487     ALLOCATE(ff_type%gro_info,STAT=stat)
00488     CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00489     ALLOCATE(ff_type%amb_info,STAT=stat)
00490     CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00491 
00492     !-----------------------------------------------------------------------------
00493     ! 2. Initialize and Nullify things in ff_type%inp_info
00494     !-----------------------------------------------------------------------------
00495     CALL init_inp_info(ff_type%inp_info)
00496 
00497     !-----------------------------------------------------------------------------
00498     ! 3. Initialize and Nullify things in ff_type%chm_info
00499     !-----------------------------------------------------------------------------
00500     CALL init_chm_info(ff_type%chm_info)
00501 
00502     !-----------------------------------------------------------------------------
00503     ! 4. Initialize and Nullify things in ff_type%gro_info
00504     !-----------------------------------------------------------------------------
00505     CALL init_gromos_info(ff_type%gro_info)
00506 
00507     !-----------------------------------------------------------------------------
00508     ! 5. Initialize and Nullify things in ff_type%amb_info
00509     !-----------------------------------------------------------------------------
00510     CALL init_amber_info(ff_type%amb_info)
00511 
00512   END SUBROUTINE init_ff_type
00513 
00514 ! *****************************************************************************
00518   SUBROUTINE init_gromos_info(gro_info)
00519     TYPE(gromos_info_type), POINTER          :: gro_info
00520 
00521     NULLIFY(gro_info%solvent_k)
00522     NULLIFY(gro_info%solvent_r0)
00523     NULLIFY(gro_info%bond_k)
00524     NULLIFY(gro_info%bond_r0)
00525     NULLIFY(gro_info%bend_k)
00526     NULLIFY(gro_info%bend_theta0)
00527     NULLIFY(gro_info%torsion_k)
00528     NULLIFY(gro_info%torsion_m)
00529     NULLIFY(gro_info%torsion_phi0)
00530     NULLIFY(gro_info%impr_k)
00531     NULLIFY(gro_info%impr_phi0)
00532     NULLIFY(gro_info%nonbond_a)
00533     NULLIFY(gro_info%nonbond_c6)
00534     NULLIFY(gro_info%nonbond_c12)
00535     NULLIFY(gro_info%nonbond_a_14)
00536     NULLIFY(gro_info%nonbond_c6_14)
00537     NULLIFY(gro_info%nonbond_c12_14)
00538 
00539   END SUBROUTINE init_gromos_info
00540 
00541 ! *****************************************************************************
00547   SUBROUTINE init_chm_info(chm_info)
00548     TYPE(charmm_info_type), POINTER          :: chm_info
00549 
00550     NULLIFY(chm_info%bond_a)
00551     NULLIFY(chm_info%bond_b)
00552     NULLIFY(chm_info%bond_k)
00553     NULLIFY(chm_info%bond_r0)
00554     NULLIFY(chm_info%bend_a)
00555     NULLIFY(chm_info%bend_b)
00556     NULLIFY(chm_info%bend_c)
00557     NULLIFY(chm_info%bend_k)
00558     NULLIFY(chm_info%bend_theta0)
00559     NULLIFY(chm_info%ub_a)
00560     NULLIFY(chm_info%ub_b)
00561     NULLIFY(chm_info%ub_c)
00562     NULLIFY(chm_info%ub_k)
00563     NULLIFY(chm_info%ub_r0)
00564     NULLIFY(chm_info%torsion_a)
00565     NULLIFY(chm_info%torsion_b)
00566     NULLIFY(chm_info%torsion_c)
00567     NULLIFY(chm_info%torsion_d)
00568     NULLIFY(chm_info%torsion_k)
00569     NULLIFY(chm_info%torsion_m)
00570     NULLIFY(chm_info%torsion_phi0)
00571     NULLIFY(chm_info%impr_a)
00572     NULLIFY(chm_info%impr_b)
00573     NULLIFY(chm_info%impr_c)
00574     NULLIFY(chm_info%impr_d)
00575     NULLIFY(chm_info%impr_k)
00576     NULLIFY(chm_info%impr_phi0)
00577     NULLIFY(chm_info%nonbond_a)
00578     NULLIFY(chm_info%nonbond_eps)
00579     NULLIFY(chm_info%nonbond_rmin2)
00580     NULLIFY(chm_info%nonbond_a_14)
00581     NULLIFY(chm_info%nonbond_eps_14)
00582     NULLIFY(chm_info%nonbond_rmin2_14)
00583 
00584   END SUBROUTINE init_chm_info
00585 
00586 ! *****************************************************************************
00592   SUBROUTINE init_amber_info(amb_info)
00593     TYPE(amber_info_type), POINTER           :: amb_info
00594 
00595     NULLIFY(amb_info%bond_a)
00596     NULLIFY(amb_info%bond_b)
00597     NULLIFY(amb_info%bond_k)
00598     NULLIFY(amb_info%bond_r0)
00599     NULLIFY(amb_info%bend_a)
00600     NULLIFY(amb_info%bend_b)
00601     NULLIFY(amb_info%bend_c)
00602     NULLIFY(amb_info%bend_k)
00603     NULLIFY(amb_info%bend_theta0)
00604     NULLIFY(amb_info%torsion_a)
00605     NULLIFY(amb_info%torsion_b)
00606     NULLIFY(amb_info%torsion_c)
00607     NULLIFY(amb_info%torsion_d)
00608     NULLIFY(amb_info%torsion_k)
00609     NULLIFY(amb_info%torsion_m)
00610     NULLIFY(amb_info%torsion_phi0)
00611     NULLIFY(amb_info%nonbond_a)
00612     NULLIFY(amb_info%nonbond_eps)
00613     NULLIFY(amb_info%nonbond_rmin2)
00614 
00615   END SUBROUTINE init_amber_info
00616 
00617 ! *****************************************************************************
00623   SUBROUTINE init_inp_info(inp_info)
00624     TYPE(input_info_type), POINTER           :: inp_info
00625 
00626     NULLIFY(inp_info%charge_atm)
00627     NULLIFY(inp_info%charge)
00628     NULLIFY(inp_info%apol_atm)
00629     NULLIFY(inp_info%apol)
00630     NULLIFY(inp_info%cpol_atm)
00631     NULLIFY(inp_info%cpol)
00632     NULLIFY(inp_info%bond_kind)
00633     NULLIFY(inp_info%bond_a)
00634     NULLIFY(inp_info%bond_b)
00635     NULLIFY(inp_info%bond_k)
00636     NULLIFY(inp_info%bond_r0)
00637     NULLIFY(inp_info%bond_cs)
00638     NULLIFY(inp_info%bend_kind)
00639     NULLIFY(inp_info%bend_a)
00640     NULLIFY(inp_info%bend_b)
00641     NULLIFY(inp_info%bend_c)
00642     NULLIFY(inp_info%bend_k)
00643     NULLIFY(inp_info%bend_theta0)
00644     NULLIFY(inp_info%bend_cb)
00645     NULLIFY(inp_info%bend_r012)
00646     NULLIFY(inp_info%bend_r032)
00647     NULLIFY(inp_info%bend_kbs12)
00648     NULLIFY(inp_info%bend_kbs32)
00649     NULLIFY(inp_info%bend_kss)
00650     NULLIFY(inp_info%ub_kind)
00651     NULLIFY(inp_info%ub_a)
00652     NULLIFY(inp_info%ub_b)
00653     NULLIFY(inp_info%ub_c)
00654     NULLIFY(inp_info%ub_k)
00655     NULLIFY(inp_info%ub_r0)
00656     NULLIFY(inp_info%torsion_kind)
00657     NULLIFY(inp_info%torsion_a)
00658     NULLIFY(inp_info%torsion_b)
00659     NULLIFY(inp_info%torsion_c)
00660     NULLIFY(inp_info%torsion_d)
00661     NULLIFY(inp_info%torsion_k)
00662     NULLIFY(inp_info%torsion_m)
00663     NULLIFY(inp_info%torsion_phi0)
00664     NULLIFY(inp_info%impr_kind)
00665     NULLIFY(inp_info%impr_a)
00666     NULLIFY(inp_info%impr_b)
00667     NULLIFY(inp_info%impr_c)
00668     NULLIFY(inp_info%impr_d)
00669     NULLIFY(inp_info%impr_k)
00670     NULLIFY(inp_info%impr_phi0)
00671     NULLIFY(inp_info%opbend_kind)
00672     NULLIFY(inp_info%opbend_a)
00673     NULLIFY(inp_info%opbend_b)
00674     NULLIFY(inp_info%opbend_c)
00675     NULLIFY(inp_info%opbend_d)
00676     NULLIFY(inp_info%opbend_k)
00677     NULLIFY(inp_info%opbend_phi0)
00678     NULLIFY(inp_info%nonbonded)
00679     NULLIFY(inp_info%nonbonded14)
00680     NULLIFY(inp_info%shell_list)
00681     NULLIFY(inp_info%damping_list)
00682 
00683   END SUBROUTINE init_inp_info
00684 
00685 ! *****************************************************************************
00688   SUBROUTINE deallocate_ff_type (ff_type,error)
00689     TYPE(force_field_type), INTENT(INOUT)    :: ff_type
00690     TYPE(cp_error_type), INTENT(inout)       :: error
00691 
00692     CHARACTER(LEN=*), PARAMETER :: routineN = 'deallocate_ff_type', 
00693       routineP = moduleN//':'//routineN
00694 
00695     INTEGER                                  :: stat
00696     LOGICAL                                  :: failure
00697 
00698     failure = .FALSE.
00699 
00700     !-----------------------------------------------------------------------------
00701     ! 1. DEALLOCATE things in ff_type%inp_info
00702     !-----------------------------------------------------------------------------
00703     CALL deallocate_inp_info(ff_type%inp_info, error=error)
00704 
00705     !-----------------------------------------------------------------------------
00706     ! 2. DEALLOCATE things in ff_type%chm_info
00707     !-----------------------------------------------------------------------------
00708     CALL deallocate_chm_info(ff_type%chm_info,error)
00709 
00710     !-----------------------------------------------------------------------------
00711     ! 3. DEALLOCATE things in ff_type%gro_info
00712     !-----------------------------------------------------------------------------
00713     CALL deallocate_gromos_info(ff_type%gro_info,error)
00714 
00715     !-----------------------------------------------------------------------------
00716     ! 4. DEALLOCATE things in ff_type%amb_info
00717     !-----------------------------------------------------------------------------
00718     CALL deallocate_amb_info(ff_type%amb_info,error)
00719 
00720     !-----------------------------------------------------------------------------
00721     ! 5. DEALLOCATE things in ff_type
00722     !-----------------------------------------------------------------------------
00723     IF(ASSOCIATED(ff_type%inp_info)) THEN
00724        DEALLOCATE(ff_type%inp_info,STAT=stat)
00725        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00726     END IF
00727     IF(ASSOCIATED(ff_type%chm_info)) THEN
00728        DEALLOCATE(ff_type%chm_info,STAT=stat)
00729        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00730     END IF
00731     IF(ASSOCIATED(ff_type%gro_info)) THEN
00732        DEALLOCATE(ff_type%gro_info,STAT=stat)
00733        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00734     END IF
00735     IF(ASSOCIATED(ff_type%amb_info)) THEN
00736        DEALLOCATE(ff_type%amb_info,STAT=stat)
00737        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00738     END IF
00739 
00740   END SUBROUTINE deallocate_ff_type
00741 
00742 ! *****************************************************************************
00746   SUBROUTINE deallocate_gromos_info(gro_info,error)
00747     TYPE(gromos_info_type), POINTER          :: gro_info
00748     TYPE(cp_error_type), INTENT(inout)       :: error
00749 
00750     CHARACTER(LEN=*), PARAMETER :: routineN = 'deallocate_gromos_info', 
00751       routineP = moduleN//':'//routineN
00752 
00753     INTEGER                                  :: stat
00754     LOGICAL                                  :: failure
00755 
00756     failure = .FALSE.
00757     IF(ASSOCIATED(gro_info%solvent_k)) THEN
00758        DEALLOCATE(gro_info%solvent_k,STAT=stat)
00759        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00760     END IF
00761     IF(ASSOCIATED(gro_info%solvent_r0)) THEN
00762        DEALLOCATE(gro_info%solvent_r0,STAT=stat)
00763        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00764     END IF
00765     IF(ASSOCIATED(gro_info%bond_k)) THEN
00766        DEALLOCATE(gro_info%bond_k,STAT=stat)
00767        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00768     END IF
00769     IF(ASSOCIATED(gro_info%bond_r0)) THEN
00770        DEALLOCATE(gro_info%bond_r0,STAT=stat)
00771        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00772     END IF
00773     IF(ASSOCIATED(gro_info%bend_k)) THEN
00774        DEALLOCATE(gro_info%bend_k,STAT=stat)
00775        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00776     END IF
00777     IF(ASSOCIATED(gro_info%bend_theta0)) THEN
00778        DEALLOCATE(gro_info%bend_theta0,STAT=stat)
00779        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00780     END IF
00781     IF(ASSOCIATED(gro_info%torsion_k)) THEN
00782        DEALLOCATE(gro_info%torsion_k,STAT=stat)
00783        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00784     END IF
00785     IF(ASSOCIATED(gro_info%torsion_m)) THEN
00786        DEALLOCATE(gro_info%torsion_m,STAT=stat)
00787        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00788     END IF
00789     IF(ASSOCIATED(gro_info%torsion_phi0)) THEN
00790        DEALLOCATE(gro_info%torsion_phi0,STAT=stat)
00791        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00792     END IF
00793     IF(ASSOCIATED(gro_info%impr_k)) THEN
00794        DEALLOCATE(gro_info%impr_k,STAT=stat)
00795        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00796     END IF
00797     IF(ASSOCIATED(gro_info%impr_phi0)) THEN
00798        DEALLOCATE(gro_info%impr_phi0,STAT=stat)
00799        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00800     END IF
00801     IF(ASSOCIATED(gro_info%nonbond_a)) THEN
00802        DEALLOCATE(gro_info%nonbond_a,STAT=stat)
00803        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00804     END IF
00805     IF(ASSOCIATED(gro_info%nonbond_c6)) THEN
00806        DEALLOCATE(gro_info%nonbond_c6,STAT=stat)
00807        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00808     END IF
00809     IF(ASSOCIATED(gro_info%nonbond_c12)) THEN
00810        DEALLOCATE(gro_info%nonbond_c12,STAT=stat)
00811        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00812     END IF
00813     IF(ASSOCIATED(gro_info%nonbond_a_14)) THEN
00814        DEALLOCATE(gro_info%nonbond_a_14,STAT=stat)
00815        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00816     END IF
00817     IF(ASSOCIATED(gro_info%nonbond_c6_14)) THEN
00818        DEALLOCATE(gro_info%nonbond_c6_14,STAT=stat)
00819        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00820     END IF
00821     IF(ASSOCIATED(gro_info%nonbond_c12_14)) THEN
00822        DEALLOCATE(gro_info%nonbond_c12_14,STAT=stat)
00823        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00824     END IF
00825 
00826   END SUBROUTINE deallocate_gromos_info
00827 
00828 ! *****************************************************************************
00834   SUBROUTINE deallocate_chm_info(chm_info,error)
00835     TYPE(charmm_info_type), POINTER          :: chm_info
00836     TYPE(cp_error_type), INTENT(inout)       :: error
00837 
00838     CHARACTER(LEN=*), PARAMETER :: routineN = 'deallocate_chm_info', 
00839       routineP = moduleN//':'//routineN
00840 
00841     INTEGER                                  :: stat
00842     LOGICAL                                  :: failure
00843 
00844     failure = .FALSE.
00845     IF(ASSOCIATED(chm_info%bond_a)) THEN
00846        DEALLOCATE(chm_info%bond_a,STAT=stat)
00847        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00848     END IF
00849     IF(ASSOCIATED(chm_info%bond_b)) THEN
00850        DEALLOCATE(chm_info%bond_b,STAT=stat)
00851        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00852     END IF
00853     IF(ASSOCIATED(chm_info%bond_k)) THEN
00854        DEALLOCATE(chm_info%bond_k,STAT=stat)
00855        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00856     END IF
00857     IF(ASSOCIATED(chm_info%bond_r0)) THEN
00858        DEALLOCATE(chm_info%bond_r0,STAT=stat)
00859        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00860     END IF
00861     IF(ASSOCIATED(chm_info%bend_a)) THEN
00862        DEALLOCATE(chm_info%bend_a,STAT=stat)
00863        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00864     END IF
00865     IF(ASSOCIATED(chm_info%bend_b)) THEN
00866        DEALLOCATE(chm_info%bend_b,STAT=stat)
00867        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00868     END IF
00869     IF(ASSOCIATED(chm_info%bend_c)) THEN
00870        DEALLOCATE(chm_info%bend_c,STAT=stat)
00871        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00872     END IF
00873     IF(ASSOCIATED(chm_info%bend_k)) THEN
00874        DEALLOCATE(chm_info%bend_k,STAT=stat)
00875        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00876     END IF
00877     IF(ASSOCIATED(chm_info%bend_theta0)) THEN
00878        DEALLOCATE(chm_info%bend_theta0,STAT=stat)
00879        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00880     END IF
00881     IF(ASSOCIATED(chm_info%ub_a)) THEN
00882        DEALLOCATE(chm_info%ub_a,STAT=stat)
00883        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00884     END IF
00885     IF(ASSOCIATED(chm_info%ub_b)) THEN
00886        DEALLOCATE(chm_info%ub_b,STAT=stat)
00887        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00888     END IF
00889     IF(ASSOCIATED(chm_info%ub_c)) THEN
00890        DEALLOCATE(chm_info%ub_c,STAT=stat)
00891        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00892     END IF
00893     IF(ASSOCIATED(chm_info%ub_k)) THEN
00894        DEALLOCATE(chm_info%ub_k,STAT=stat)
00895        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00896     END IF
00897     IF(ASSOCIATED(chm_info%ub_r0)) THEN
00898        DEALLOCATE(chm_info%ub_r0,STAT=stat)
00899        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00900     END IF
00901     IF(ASSOCIATED(chm_info%torsion_a)) THEN
00902        DEALLOCATE(chm_info%torsion_a,STAT=stat)
00903        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00904     END IF
00905     IF(ASSOCIATED(chm_info%torsion_b)) THEN
00906        DEALLOCATE(chm_info%torsion_b,STAT=stat)
00907        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00908     END IF
00909     IF(ASSOCIATED(chm_info%torsion_c)) THEN
00910        DEALLOCATE(chm_info%torsion_c,STAT=stat)
00911        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00912     END IF
00913     IF(ASSOCIATED(chm_info%torsion_d)) THEN
00914        DEALLOCATE(chm_info%torsion_d,STAT=stat)
00915        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00916     END IF
00917     IF(ASSOCIATED(chm_info%torsion_k)) THEN
00918        DEALLOCATE(chm_info%torsion_k,STAT=stat)
00919        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00920     END IF
00921     IF(ASSOCIATED(chm_info%torsion_m)) THEN
00922        DEALLOCATE(chm_info%torsion_m,STAT=stat)
00923        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00924     END IF
00925     IF(ASSOCIATED(chm_info%torsion_phi0)) THEN
00926        DEALLOCATE(chm_info%torsion_phi0,STAT=stat)
00927        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00928     END IF
00929     IF(ASSOCIATED(chm_info%impr_a)) THEN
00930        DEALLOCATE(chm_info%impr_a,STAT=stat)
00931        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00932     END IF
00933     IF(ASSOCIATED(chm_info%impr_b)) THEN
00934        DEALLOCATE(chm_info%impr_b,STAT=stat)
00935        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00936     END IF
00937     IF(ASSOCIATED(chm_info%impr_c)) THEN
00938        DEALLOCATE(chm_info%impr_c,STAT=stat)
00939        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00940     END IF
00941     IF(ASSOCIATED(chm_info%impr_d)) THEN
00942        DEALLOCATE(chm_info%impr_d,STAT=stat)
00943        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00944     END IF
00945     IF(ASSOCIATED(chm_info%impr_k)) THEN
00946        DEALLOCATE(chm_info%impr_k,STAT=stat)
00947        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00948     END IF
00949     IF(ASSOCIATED(chm_info%impr_phi0)) THEN
00950        DEALLOCATE(chm_info%impr_phi0,STAT=stat)
00951        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00952     END IF
00953     IF(ASSOCIATED(chm_info%nonbond_a)) THEN
00954        DEALLOCATE(chm_info%nonbond_a,STAT=stat)
00955        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00956     END IF
00957     IF(ASSOCIATED(chm_info%nonbond_eps)) THEN
00958        DEALLOCATE(chm_info%nonbond_eps,STAT=stat)
00959        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00960     END IF
00961     IF(ASSOCIATED(chm_info%nonbond_rmin2)) THEN
00962        DEALLOCATE(chm_info%nonbond_rmin2,STAT=stat)
00963        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00964     END IF
00965     IF(ASSOCIATED(chm_info%nonbond_a_14)) THEN
00966        DEALLOCATE(chm_info%nonbond_a_14,STAT=stat)
00967        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00968     END IF
00969     IF(ASSOCIATED(chm_info%nonbond_eps_14)) THEN
00970        DEALLOCATE(chm_info%nonbond_eps_14,STAT=stat)
00971        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00972     END IF
00973     IF(ASSOCIATED(chm_info%nonbond_rmin2_14)) THEN
00974        DEALLOCATE(chm_info%nonbond_rmin2_14,STAT=stat)
00975        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
00976     END IF
00977 
00978   END SUBROUTINE deallocate_chm_info
00979 
00980 ! *****************************************************************************
00986   SUBROUTINE deallocate_amb_info(amb_info,error)
00987     TYPE(amber_info_type), POINTER           :: amb_info
00988     TYPE(cp_error_type), INTENT(inout)       :: error
00989 
00990     CHARACTER(LEN=*), PARAMETER :: routineN = 'deallocate_amb_info', 
00991       routineP = moduleN//':'//routineN
00992 
00993     INTEGER                                  :: stat
00994     LOGICAL                                  :: failure
00995 
00996     failure = .FALSE.
00997     IF(ASSOCIATED(amb_info%bond_a)) THEN
00998        DEALLOCATE(amb_info%bond_a,STAT=stat)
00999        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01000     END IF
01001     IF(ASSOCIATED(amb_info%bond_b)) THEN
01002        DEALLOCATE(amb_info%bond_b,STAT=stat)
01003        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01004     END IF
01005     IF(ASSOCIATED(amb_info%bond_k)) THEN
01006        DEALLOCATE(amb_info%bond_k,STAT=stat)
01007        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01008     END IF
01009     IF(ASSOCIATED(amb_info%bond_r0)) THEN
01010        DEALLOCATE(amb_info%bond_r0,STAT=stat)
01011        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01012     END IF
01013     IF(ASSOCIATED(amb_info%bend_a)) THEN
01014        DEALLOCATE(amb_info%bend_a,STAT=stat)
01015        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01016     END IF
01017     IF(ASSOCIATED(amb_info%bend_b)) THEN
01018        DEALLOCATE(amb_info%bend_b,STAT=stat)
01019        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01020     END IF
01021     IF(ASSOCIATED(amb_info%bend_c)) THEN
01022        DEALLOCATE(amb_info%bend_c,STAT=stat)
01023        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01024     END IF
01025     IF(ASSOCIATED(amb_info%bend_k)) THEN
01026        DEALLOCATE(amb_info%bend_k,STAT=stat)
01027        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01028     END IF
01029     IF(ASSOCIATED(amb_info%bend_theta0)) THEN
01030        DEALLOCATE(amb_info%bend_theta0,STAT=stat)
01031        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01032     END IF
01033     IF(ASSOCIATED(amb_info%torsion_a)) THEN
01034        DEALLOCATE(amb_info%torsion_a,STAT=stat)
01035        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01036     END IF
01037     IF(ASSOCIATED(amb_info%torsion_b)) THEN
01038        DEALLOCATE(amb_info%torsion_b,STAT=stat)
01039        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01040     END IF
01041     IF(ASSOCIATED(amb_info%torsion_c)) THEN
01042        DEALLOCATE(amb_info%torsion_c,STAT=stat)
01043        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01044     END IF
01045     IF(ASSOCIATED(amb_info%torsion_d)) THEN
01046        DEALLOCATE(amb_info%torsion_d,STAT=stat)
01047        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01048     END IF
01049     IF(ASSOCIATED(amb_info%torsion_k)) THEN
01050        DEALLOCATE(amb_info%torsion_k,STAT=stat)
01051        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01052     END IF
01053     IF(ASSOCIATED(amb_info%torsion_m)) THEN
01054        DEALLOCATE(amb_info%torsion_m,STAT=stat)
01055        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01056     END IF
01057     IF(ASSOCIATED(amb_info%torsion_phi0)) THEN
01058        DEALLOCATE(amb_info%torsion_phi0,STAT=stat)
01059        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01060     END IF
01061     IF(ASSOCIATED(amb_info%nonbond_a)) THEN
01062        DEALLOCATE(amb_info%nonbond_a,STAT=stat)
01063        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01064     END IF
01065     IF(ASSOCIATED(amb_info%nonbond_eps)) THEN
01066        DEALLOCATE(amb_info%nonbond_eps,STAT=stat)
01067        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01068     END IF
01069     IF(ASSOCIATED(amb_info%nonbond_rmin2)) THEN
01070        DEALLOCATE(amb_info%nonbond_rmin2,STAT=stat)
01071        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01072     END IF
01073 
01074   END SUBROUTINE deallocate_amb_info
01075 
01076 ! *****************************************************************************
01082   SUBROUTINE deallocate_inp_info(inp_info, error)
01083     TYPE(input_info_type), POINTER           :: inp_info
01084     TYPE(cp_error_type), INTENT(inout)       :: error
01085 
01086     CHARACTER(LEN=*), PARAMETER :: routineN = 'deallocate_inp_info', 
01087       routineP = moduleN//':'//routineN
01088 
01089     INTEGER                                  :: stat
01090     LOGICAL                                  :: failure
01091 
01092     failure = .FALSE.
01093     IF(ASSOCIATED(inp_info%charge_atm)) THEN
01094        DEALLOCATE(inp_info%charge_atm,STAT=stat)
01095        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01096     END IF
01097     IF(ASSOCIATED(inp_info%charge)) THEN
01098        DEALLOCATE(inp_info%charge,STAT=stat)
01099        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01100     END IF
01101     IF(ASSOCIATED(inp_info%apol_atm)) THEN
01102        DEALLOCATE(inp_info%apol_atm,STAT=stat)
01103        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01104     END IF
01105     IF(ASSOCIATED(inp_info%apol)) THEN
01106        DEALLOCATE(inp_info%apol,STAT=stat)
01107        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01108     END IF
01109     IF(ASSOCIATED(inp_info%cpol_atm)) THEN
01110        DEALLOCATE(inp_info%cpol_atm,STAT=stat)
01111        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01112     END IF
01113     IF(ASSOCIATED(inp_info%cpol)) THEN
01114        DEALLOCATE(inp_info%cpol,STAT=stat)
01115        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01116     END IF
01117     IF(ASSOCIATED(inp_info%bond_kind)) THEN
01118        DEALLOCATE(inp_info%bond_kind,STAT=stat)
01119        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01120     END IF
01121     IF(ASSOCIATED(inp_info%bond_a)) THEN
01122        DEALLOCATE(inp_info%bond_a,STAT=stat)
01123        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01124     END IF
01125     IF(ASSOCIATED(inp_info%bond_b)) THEN
01126        DEALLOCATE(inp_info%bond_b,STAT=stat)
01127        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01128     END IF
01129     IF(ASSOCIATED(inp_info%bond_k)) THEN
01130        DEALLOCATE(inp_info%bond_k,STAT=stat)
01131        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01132     END IF
01133     IF(ASSOCIATED(inp_info%bond_r0)) THEN
01134        DEALLOCATE(inp_info%bond_r0,STAT=stat)
01135        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01136     END IF
01137     IF(ASSOCIATED(inp_info%bond_cs)) THEN
01138        DEALLOCATE(inp_info%bond_cs,STAT=stat)
01139        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01140     END IF
01141     IF(ASSOCIATED(inp_info%bend_kind)) THEN
01142        DEALLOCATE(inp_info%bend_kind,STAT=stat)
01143        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01144     END IF
01145     IF(ASSOCIATED(inp_info%bend_a)) THEN
01146        DEALLOCATE(inp_info%bend_a,STAT=stat)
01147        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01148     END IF
01149     IF(ASSOCIATED(inp_info%bend_b)) THEN
01150        DEALLOCATE(inp_info%bend_b,STAT=stat)
01151        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01152     END IF
01153     IF(ASSOCIATED(inp_info%bend_c)) THEN
01154        DEALLOCATE(inp_info%bend_c,STAT=stat)
01155        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01156     END IF
01157     IF(ASSOCIATED(inp_info%bend_k)) THEN
01158        DEALLOCATE(inp_info%bend_k,STAT=stat)
01159        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01160     END IF
01161     IF(ASSOCIATED(inp_info%bend_theta0)) THEN
01162        DEALLOCATE(inp_info%bend_theta0,STAT=stat)
01163        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01164     END IF
01165     IF(ASSOCIATED(inp_info%bend_cb)) THEN
01166        DEALLOCATE(inp_info%bend_cb,STAT=stat)
01167        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01168     END IF
01169     IF(ASSOCIATED(inp_info%bend_r012)) THEN
01170        DEALLOCATE(inp_info%bend_r012,STAT=stat)
01171        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01172     END IF
01173     IF(ASSOCIATED(inp_info%bend_r032)) THEN
01174        DEALLOCATE(inp_info%bend_r032,STAT=stat)
01175        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01176     END IF
01177     IF(ASSOCIATED(inp_info%bend_kbs12)) THEN
01178        DEALLOCATE(inp_info%bend_kbs12,STAT=stat)
01179        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01180     END IF
01181     IF(ASSOCIATED(inp_info%bend_kbs32)) THEN
01182        DEALLOCATE(inp_info%bend_kbs32,STAT=stat)
01183        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01184     END IF
01185     IF(ASSOCIATED(inp_info%bend_kss)) THEN
01186        DEALLOCATE(inp_info%bend_kss,STAT=stat)
01187        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01188     END IF
01189     IF(ASSOCIATED(inp_info%ub_kind)) THEN
01190        DEALLOCATE(inp_info%ub_kind,STAT=stat)
01191        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01192     END IF
01193     IF(ASSOCIATED(inp_info%ub_a)) THEN
01194        DEALLOCATE(inp_info%ub_a,STAT=stat)
01195        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01196     END IF
01197     IF(ASSOCIATED(inp_info%ub_b)) THEN
01198        DEALLOCATE(inp_info%ub_b,STAT=stat)
01199        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01200     END IF
01201     IF(ASSOCIATED(inp_info%ub_c)) THEN
01202        DEALLOCATE(inp_info%ub_c,STAT=stat)
01203        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01204     END IF
01205     IF(ASSOCIATED(inp_info%ub_k)) THEN
01206        DEALLOCATE(inp_info%ub_k,STAT=stat)
01207        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01208     END IF
01209     IF(ASSOCIATED(inp_info%ub_r0)) THEN
01210        DEALLOCATE(inp_info%ub_r0,STAT=stat)
01211        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01212     END IF
01213     IF(ASSOCIATED(inp_info%torsion_kind)) THEN
01214        DEALLOCATE(inp_info%torsion_kind,STAT=stat)
01215        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01216     END IF
01217     IF(ASSOCIATED(inp_info%torsion_a)) THEN
01218        DEALLOCATE(inp_info%torsion_a,STAT=stat)
01219        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01220     END IF
01221     IF(ASSOCIATED(inp_info%torsion_b)) THEN
01222        DEALLOCATE(inp_info%torsion_b,STAT=stat)
01223        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01224     END IF
01225     IF(ASSOCIATED(inp_info%torsion_c)) THEN
01226        DEALLOCATE(inp_info%torsion_c,STAT=stat)
01227        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01228     END IF
01229     IF(ASSOCIATED(inp_info%torsion_d)) THEN
01230        DEALLOCATE(inp_info%torsion_d,STAT=stat)
01231        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01232     END IF
01233     IF(ASSOCIATED(inp_info%torsion_k)) THEN
01234        DEALLOCATE(inp_info%torsion_k,STAT=stat)
01235        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01236     END IF
01237     IF(ASSOCIATED(inp_info%torsion_m)) THEN
01238        DEALLOCATE(inp_info%torsion_m,STAT=stat)
01239        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01240     END IF
01241     IF(ASSOCIATED(inp_info%torsion_phi0)) THEN
01242        DEALLOCATE(inp_info%torsion_phi0,STAT=stat)
01243        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01244     END IF
01245     IF(ASSOCIATED(inp_info%impr_kind)) THEN
01246        DEALLOCATE(inp_info%impr_kind,STAT=stat)
01247        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01248     END IF
01249     IF(ASSOCIATED(inp_info%impr_a)) THEN
01250        DEALLOCATE(inp_info%impr_a,STAT=stat)
01251        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01252     END IF
01253     IF(ASSOCIATED(inp_info%impr_b)) THEN
01254        DEALLOCATE(inp_info%impr_b,STAT=stat)
01255        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01256     END IF
01257     IF(ASSOCIATED(inp_info%impr_c)) THEN
01258        DEALLOCATE(inp_info%impr_c,STAT=stat)
01259        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01260     END IF
01261     IF(ASSOCIATED(inp_info%impr_d)) THEN
01262        DEALLOCATE(inp_info%impr_d,STAT=stat)
01263        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01264     END IF
01265     IF(ASSOCIATED(inp_info%impr_k)) THEN
01266        DEALLOCATE(inp_info%impr_k,STAT=stat)
01267        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01268     END IF
01269     IF(ASSOCIATED(inp_info%impr_phi0)) THEN
01270        DEALLOCATE(inp_info%impr_phi0,STAT=stat)
01271        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01272     END IF
01273     IF(ASSOCIATED(inp_info%opbend_kind)) THEN
01274        DEALLOCATE(inp_info%opbend_kind,STAT=stat)
01275        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01276     END IF
01277     IF(ASSOCIATED(inp_info%opbend_a)) THEN
01278        DEALLOCATE(inp_info%opbend_a,STAT=stat)
01279        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01280     END IF
01281     IF(ASSOCIATED(inp_info%opbend_b)) THEN
01282        DEALLOCATE(inp_info%opbend_b,STAT=stat)
01283        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01284     END IF
01285     IF(ASSOCIATED(inp_info%opbend_c)) THEN
01286        DEALLOCATE(inp_info%opbend_c,STAT=stat)
01287        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01288     END IF
01289     IF(ASSOCIATED(inp_info%opbend_d)) THEN
01290        DEALLOCATE(inp_info%opbend_d,STAT=stat)
01291        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01292     END IF
01293     IF(ASSOCIATED(inp_info%opbend_k)) THEN
01294        DEALLOCATE(inp_info%opbend_k,STAT=stat)
01295        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01296     END IF
01297     IF(ASSOCIATED(inp_info%opbend_phi0)) THEN
01298        DEALLOCATE(inp_info%opbend_phi0,STAT=stat)
01299        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01300     END IF
01301     IF(ASSOCIATED(inp_info%nonbonded)) THEN
01302        CALL pair_potential_p_release(inp_info%nonbonded,error=error)
01303     END IF
01304     IF(ASSOCIATED(inp_info%nonbonded14)) THEN
01305        CALL pair_potential_p_release(inp_info%nonbonded14,error=error)
01306     END IF
01307     IF(ASSOCIATED(inp_info%shell_list)) THEN
01308        CALL shell_p_release(inp_info%shell_list,error=error)
01309     END IF
01310     IF(ASSOCIATED(inp_info%damping_list)) THEN
01311        DEALLOCATE(inp_info%damping_list,STAT=stat)
01312        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01313     END IF
01314 
01315   END SUBROUTINE deallocate_inp_info
01316 
01317 ! *****************************************************************************
01320   SUBROUTINE deallocate_bend_kind_set(bend_kind_set,error)
01321 
01322     TYPE(bend_kind_type), DIMENSION(:), 
01323       POINTER                                :: bend_kind_set
01324     TYPE(cp_error_type), INTENT(inout)       :: error
01325 
01326     CHARACTER(LEN=*), PARAMETER :: routineN = 'deallocate_bend_kind_set', 
01327       routineP = moduleN//':'//routineN
01328 
01329     INTEGER                                  :: stat
01330     LOGICAL                                  :: failure
01331 
01332     failure = .FALSE.
01333     DEALLOCATE (bend_kind_set,STAT=stat)
01334     CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01335   END SUBROUTINE deallocate_bend_kind_set
01336 
01337 ! *****************************************************************************
01340   SUBROUTINE deallocate_bond_kind_set(bond_kind_set,error)
01341 
01342     TYPE(bond_kind_type), DIMENSION(:), 
01343       POINTER                                :: bond_kind_set
01344     TYPE(cp_error_type), INTENT(inout)       :: error
01345 
01346     CHARACTER(LEN=*), PARAMETER :: routineN = 'deallocate_bond_kind_set', 
01347       routineP = moduleN//':'//routineN
01348 
01349     INTEGER                                  :: stat
01350     LOGICAL                                  :: failure
01351 
01352     failure = .FALSE.
01353     DEALLOCATE (bond_kind_set,STAT=stat)
01354     CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01355 
01356   END SUBROUTINE deallocate_bond_kind_set
01357 
01358 ! *****************************************************************************
01361   SUBROUTINE torsion_kind_dealloc_ref(torsion_kind,error)
01362 
01363     TYPE(torsion_kind_type), INTENT(INOUT)   :: torsion_kind
01364     TYPE(cp_error_type), INTENT(inout)       :: error
01365 
01366     CHARACTER(len=*), PARAMETER :: routineN = 'torsion_kind_dealloc_ref', 
01367       routineP = moduleN//':'//routineN
01368 
01369     INTEGER                                  :: stat
01370     LOGICAL                                  :: failure
01371 
01372     failure = .FALSE.
01373 
01374     IF(ASSOCIATED(torsion_kind%k)) THEN
01375        DEALLOCATE(torsion_kind%k,STAT=stat)
01376        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01377     END IF
01378     IF(ASSOCIATED(torsion_kind%m)) THEN
01379        DEALLOCATE(torsion_kind%m,STAT=stat)
01380        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01381     END IF
01382     IF(ASSOCIATED(torsion_kind%phi0)) THEN
01383        DEALLOCATE(torsion_kind%phi0,STAT=stat)
01384        CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01385     END IF
01386 
01387   END SUBROUTINE torsion_kind_dealloc_ref
01388 
01389 ! *****************************************************************************
01392   SUBROUTINE ub_kind_dealloc_ref(ub_kind_set, error)
01393     TYPE(ub_kind_type), DIMENSION(:), 
01394       POINTER                                :: ub_kind_set
01395     TYPE(cp_error_type), INTENT(inout)       :: error
01396 
01397     CHARACTER(len=*), PARAMETER :: routineN = 'ub_kind_dealloc_ref', 
01398       routineP = moduleN//':'//routineN
01399 
01400     INTEGER                                  :: stat
01401     LOGICAL                                  :: failure
01402 
01403     failure = .FALSE.
01404     DEALLOCATE(ub_kind_set, STAT=stat)
01405     CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01406 
01407   END SUBROUTINE ub_kind_dealloc_ref
01408 
01409 ! *****************************************************************************
01412   SUBROUTINE impr_kind_dealloc_ref(impr_kind, error)
01413 
01414     TYPE(impr_kind_type), INTENT(INOUT)      :: impr_kind
01415     TYPE(cp_error_type), INTENT(inout)       :: error
01416 
01417     CHARACTER(len=*), PARAMETER :: routineN = 'impr_kind_dealloc_ref', 
01418       routineP = moduleN//':'//routineN
01419 
01420     LOGICAL                                  :: failure
01421 
01422     failure = .FALSE.
01423     !
01424     ! Questa e' la migliore routine che mente umana abbia concepito! ;-)
01425     !
01426   END SUBROUTINE impr_kind_dealloc_ref
01427 
01428 END MODULE force_field_types