Line data Source code
1 : !--------------------------------------------------------------------------------------------------! 2 : ! CP2K: A general program to perform molecular dynamics simulations ! 3 : ! Copyright 2000-2023 CP2K developers group <https://cp2k.org> ! 4 : ! ! 5 : ! SPDX-License-Identifier: GPL-2.0-or-later ! 6 : !--------------------------------------------------------------------------------------------------! 7 : 8 : ! ************************************************************************************************** 9 : !> \brief Split md_ener module from md_environment_type 10 : !> \author Teodoro Laino [tlaino] - 03.2008 - University of Zurich 11 : ! ************************************************************************************************** 12 : MODULE md_ener_types 13 : 14 : USE kinds, ONLY: dp 15 : #include "../base/base_uses.f90" 16 : 17 : IMPLICIT NONE 18 : 19 : PRIVATE 20 : 21 : ! ************************************************************************************************** 22 : TYPE md_ener_type 23 : INTEGER :: nfree, nfree_shell 24 : REAL(KIND=dp) :: constant 25 : REAL(KIND=dp) :: delta_cons, delta_epot 26 : REAL(KIND=dp) :: epot 27 : REAL(KIND=dp) :: ekin, ekin_qm 28 : REAL(KIND=dp) :: temp_part, temp_qm 29 : REAL(KIND=dp) :: temp_baro 30 : REAL(KIND=dp) :: ekin_coefs 31 : REAL(KIND=dp) :: temp_coefs 32 : REAL(KIND=dp) :: ekin_shell, temp_shell 33 : REAL(KIND=dp) :: thermostat_part_kin, thermostat_part_pot 34 : REAL(KIND=dp) :: thermostat_fast_kin, thermostat_fast_pot 35 : REAL(KIND=dp) :: thermostat_slow_kin, thermostat_slow_pot 36 : REAL(KIND=dp) :: thermostat_baro_kin, thermostat_baro_pot 37 : REAL(KIND=dp) :: thermostat_coef_kin, thermostat_coef_pot 38 : REAL(KIND=dp) :: thermostat_shell_kin, thermostat_shell_pot 39 : REAL(KIND=dp) :: baro_kin, baro_pot 40 : REAL(KIND=dp) :: vcom(3), total_mass 41 : REAL(KIND=dp), DIMENSION(:), POINTER :: ekin_kind 42 : REAL(KIND=dp), DIMENSION(:), POINTER :: temp_kind 43 : INTEGER, DIMENSION(:), POINTER :: nfree_kind 44 : REAL(KIND=dp), DIMENSION(:), POINTER :: ekin_shell_kind 45 : REAL(KIND=dp), DIMENSION(:), POINTER :: temp_shell_kind 46 : INTEGER, DIMENSION(:), POINTER :: nfree_shell_kind 47 : END TYPE md_ener_type 48 : 49 : ! *** Public subroutines and data types *** 50 : PUBLIC :: create_md_ener, release_md_ener, md_ener_type, zero_md_ener 51 : 52 : ! *** Global parameters *** 53 : 54 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'md_ener_types' 55 : 56 : CONTAINS 57 : 58 : ! ************************************************************************************************** 59 : !> \brief retains the given md_ener structure 60 : !> \param md_ener ... 61 : !> \par History 62 : !> 10.2007 created [MI] 63 : !> \author MI 64 : ! ************************************************************************************************** 65 1729 : SUBROUTINE create_md_ener(md_ener) 66 : TYPE(md_ener_type), INTENT(OUT) :: md_ener 67 : 68 1729 : NULLIFY (md_ener%ekin_kind) 69 1729 : NULLIFY (md_ener%temp_kind) 70 1729 : NULLIFY (md_ener%nfree_kind) 71 1729 : NULLIFY (md_ener%ekin_shell_kind) 72 1729 : NULLIFY (md_ener%temp_shell_kind) 73 1729 : NULLIFY (md_ener%nfree_shell_kind) 74 1729 : END SUBROUTINE create_md_ener 75 : 76 : ! ************************************************************************************************** 77 : !> \brief releases the given md_ener structure 78 : !> \param md_ener ... 79 : !> \par History 80 : !> 10.2007 created [MI] 81 : !> \author MI 82 : ! ************************************************************************************************** 83 1729 : SUBROUTINE release_md_ener(md_ener) 84 : TYPE(md_ener_type), INTENT(INOUT) :: md_ener 85 : 86 1729 : IF (ASSOCIATED(md_ener%temp_kind)) THEN 87 28 : DEALLOCATE (md_ener%temp_kind) 88 : END IF 89 1729 : IF (ASSOCIATED(md_ener%ekin_kind)) THEN 90 28 : DEALLOCATE (md_ener%ekin_kind) 91 : END IF 92 1729 : IF (ASSOCIATED(md_ener%nfree_kind)) THEN 93 28 : DEALLOCATE (md_ener%nfree_kind) 94 : END IF 95 1729 : IF (ASSOCIATED(md_ener%temp_shell_kind)) THEN 96 18 : DEALLOCATE (md_ener%temp_shell_kind) 97 : END IF 98 1729 : IF (ASSOCIATED(md_ener%ekin_shell_kind)) THEN 99 18 : DEALLOCATE (md_ener%ekin_shell_kind) 100 : END IF 101 1729 : IF (ASSOCIATED(md_ener%nfree_shell_kind)) THEN 102 18 : DEALLOCATE (md_ener%nfree_shell_kind) 103 : END IF 104 : 105 1729 : END SUBROUTINE release_md_ener 106 : 107 : ! ************************************************************************************************** 108 : !> \brief initialize to zero energies and temperatures 109 : !> \param md_ener ... 110 : !> \param tkind ... 111 : !> \param tshell ... 112 : !> \par History 113 : !> 10.2007 created [MI] 114 : !> \author MI 115 : ! ************************************************************************************************** 116 43076 : SUBROUTINE zero_md_ener(md_ener, tkind, tshell) 117 : TYPE(md_ener_type), INTENT(INOUT) :: md_ener 118 : LOGICAL, INTENT(IN) :: tkind, tshell 119 : 120 43076 : md_ener%ekin = 0.0_dp 121 43076 : md_ener%temp_part = 0.0_dp 122 43076 : md_ener%temp_baro = 0.0_dp 123 43076 : md_ener%ekin_coefs = 0.0_dp 124 43076 : md_ener%temp_coefs = 0.0_dp 125 43076 : md_ener%ekin_qm = 0.0_dp 126 43076 : md_ener%temp_qm = 0.0_dp 127 43076 : md_ener%ekin_shell = 0.0_dp 128 43076 : md_ener%temp_shell = 0.0_dp 129 43076 : md_ener%constant = 0.0_dp 130 43076 : md_ener%delta_cons = 0.0_dp 131 43076 : md_ener%delta_epot = 0.0_dp 132 43076 : md_ener%thermostat_part_kin = 0.0_dp 133 43076 : md_ener%thermostat_part_pot = 0.0_dp 134 43076 : md_ener%thermostat_fast_kin = 0.0_dp 135 43076 : md_ener%thermostat_fast_pot = 0.0_dp 136 43076 : md_ener%thermostat_slow_kin = 0.0_dp 137 43076 : md_ener%thermostat_slow_pot = 0.0_dp 138 43076 : md_ener%thermostat_coef_kin = 0.0_dp 139 43076 : md_ener%thermostat_coef_pot = 0.0_dp 140 43076 : md_ener%thermostat_baro_kin = 0.0_dp 141 43076 : md_ener%thermostat_baro_pot = 0.0_dp 142 43076 : md_ener%thermostat_shell_kin = 0.0_dp 143 43076 : md_ener%thermostat_shell_pot = 0.0_dp 144 43076 : md_ener%baro_kin = 0.0_dp 145 43076 : md_ener%baro_pot = 0.0_dp 146 43076 : IF (tkind) THEN 147 1576 : md_ener%temp_kind = 0.0_dp 148 1576 : md_ener%ekin_kind = 0.0_dp 149 : 150 522 : IF (tshell) THEN 151 1188 : md_ener%temp_shell_kind = 0.0_dp 152 1188 : md_ener%ekin_shell_kind = 0.0_dp 153 : END IF 154 : END IF 155 172304 : md_ener%vcom(:) = 0.0_dp 156 43076 : md_ener%total_mass = 0.0_dp 157 43076 : END SUBROUTINE zero_md_ener 158 : 159 0 : END MODULE md_ener_types