(git:374b731)
Loading...
Searching...
No Matches
metadynamics_types.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2024 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8! **************************************************************************************************
9!> \brief defines types for metadynamics calculation
10!> \par History
11!> 01.2005 created [fawzi and ale]
12! **************************************************************************************************
16 USE kinds, ONLY: default_path_length,&
17 dp
21#include "./base/base_uses.f90"
22
23 IMPLICIT NONE
24
25 PRIVATE
26
27 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'metadynamics_types'
28
29 PUBLIC :: metadyn_create, &
36
37! **************************************************************************************************
38!> \brief defines types for HILLS
39! **************************************************************************************************
41 LOGICAL :: restart, slow_growth, wtcontrol
42 !RG Adaptive hills
43 REAL(kind=dp) :: ww, min_disp, energy
44 INTEGER :: n_hills, nt_hills, min_nt_hills
45 INTEGER :: old_hill_number, old_hill_step
46 !RG Adaptive hills
47 REAL(kind=dp), DIMENSION(:, :), POINTER :: ss_history
48 REAL(kind=dp), DIMENSION(:, :), POINTER :: delta_s_history
49 REAL(kind=dp), DIMENSION(:), POINTER :: ww_history
50 REAL(kind=dp), DIMENSION(:), POINTER :: invdt_history
51 !Hills tail damping
52 REAL(kind=dp) :: tail_cutoff
53 INTEGER :: p_exp, q_exp
54 END TYPE hills_env_type
55
56! **************************************************************************************************
57!> \brief defines types for WALLS
58! **************************************************************************************************
59 TYPE wall_type
60 INTEGER :: id_type, id_direction
61 REAL(kind=dp) :: pos, pos0
62 REAL(kind=dp) :: k_quadratic, k_quartic, ww_gauss, sigma_gauss
63 END TYPE wall_type
64
65! **************************************************************************************************
66!> \brief defines types for COLVAR used in the metadynamics
67! **************************************************************************************************
69 INTEGER :: icolvar
70 LOGICAL :: do_wall, periodic
71 REAL(kind=dp) :: mass, lambda, vvp
72 REAL(kind=dp) :: gamma
73 REAL(kind=dp) :: epot_s, delta_s, epot_walls
74 REAL(kind=dp) :: ss, ss0, ff_s, ff_hills, ff_walls
75 TYPE(wall_type), DIMENSION(:), POINTER :: walls
76 END TYPE metavar_type
77
78! **************************************************************************************************
79!> \brief defines types for multiple walkers run
80! **************************************************************************************************
82 INTEGER :: n_hills_local
83 INTEGER :: walker_id
84 INTEGER :: walkers_tot_nr
85 INTEGER :: walkers_freq_comm
86 INTEGER, DIMENSION(:), POINTER :: walkers_status
87 CHARACTER(LEN=default_path_length), &
88 DIMENSION(:), POINTER :: walkers_file_name
90
91! **************************************************************************************************
92!> \brief defines meta_env type
93! **************************************************************************************************
95 LOGICAL :: do_hills, do_multiple_walkers
96 LOGICAL :: extended_lagrange
97 LOGICAL :: well_tempered
98 LOGICAL :: langevin
99 LOGICAL :: use_plumed
100 CHARACTER(LEN=default_path_length) :: plumed_input_file
101 INTEGER :: n_colvar
102 REAL(kind=dp) :: ekin_s, epot_s, dt, &
103 avg_temp, epot_walls
104 LOGICAL :: tempcontrol, restart
105 REAL(kind=dp) :: temp_wanted, toll_temp
106 REAL(kind=dp) :: delta_t, invdt, &
107 wtgamma, wttemperature
108 INTEGER :: n_steps
109 ! time pointer should never be allocated itself.. that's a quite bad
110 ! choice derived from the md_env.. So whenever the meta_env type is
111 ! used the pointer time should be pointer to the high level time counter
112 REAL(kind=dp), POINTER :: time
113 TYPE(hills_env_type), POINTER :: hills_env
114 TYPE(metavar_type), POINTER, DIMENSION(:) :: metavar
115 TYPE(multiple_walkers_type), POINTER :: multiple_walkers
116 TYPE(mp_para_env_type), POINTER :: para_env
117 TYPE(section_vals_type), POINTER :: metadyn_section
118 TYPE(rng_stream_type), DIMENSION(:), &
119 ALLOCATABLE :: rng
120 INTEGER :: tamcsteps
121 REAL(kind=dp) :: zdt
122 END TYPE meta_env_type
123
124CONTAINS
125
126! **************************************************************************************************
127!> \brief allocates a metadynamic environment (performs only minimal
128!> initialization)
129!> \param meta_env the meta env_ that will be allocated
130!> \param n_colvar number of collectiva variables
131!> \param dt ...
132!> \param para_env ...
133!> \param metadyn_section ...
134!> \par History
135!> 04.2004 created
136!> 02.2006 Reorganized the structure of the restart for Metadynamics (teo)
137!> cleaned the metadynamic type
138!> \author - alessandro laio and fawzi mohamed
139!> - Teodoro Laino [tlaino] - University of Zurich. 11.2007
140!> - Teodoro Laino [tlaino] - University of Zurich. 10.2008
141!> Major rewriting and addition of multiple walkers
142! **************************************************************************************************
143 SUBROUTINE metadyn_create(meta_env, n_colvar, dt, para_env, metadyn_section)
144 TYPE(meta_env_type), INTENT(OUT) :: meta_env
145 INTEGER, INTENT(in) :: n_colvar
146 REAL(dp), INTENT(in) :: dt
147 TYPE(mp_para_env_type), POINTER :: para_env
148 TYPE(section_vals_type), POINTER :: metadyn_section
149
150 INTEGER :: i
151 LOGICAL :: do_langevin
152
153 NULLIFY (meta_env%multiple_walkers, &
154 meta_env%metadyn_section, &
155 meta_env%time, &
156 meta_env%hills_env)
157
158 meta_env%use_plumed = .false.
159 meta_env%plumed_input_file = ""
160 meta_env%metadyn_section => metadyn_section
161 meta_env%restart = .true.
162 meta_env%n_colvar = n_colvar
163 meta_env%para_env => para_env
164 CALL para_env%retain()
165
166 meta_env%ekin_s = 0.0_dp
167 meta_env%epot_s = 0.0_dp
168 meta_env%epot_walls = 0.0_dp
169 meta_env%n_steps = 0
170 meta_env%dt = dt
171 meta_env%tempcontrol = .false.
172
173 ! Hills_env
174 ALLOCATE (meta_env%hills_env)
175 ALLOCATE (meta_env%hills_env%ss_history(n_colvar, 0))
176 ALLOCATE (meta_env%hills_env%delta_s_history(n_colvar, 0))
177 ALLOCATE (meta_env%hills_env%ww_history(0))
178 ALLOCATE (meta_env%hills_env%invdt_history(0))
179 meta_env%hills_env%n_hills = 0
180 meta_env%hills_env%energy = 0.0_dp
181 meta_env%hills_env%restart = .true.
182
183 ! Colvar
184 ALLOCATE (meta_env%metavar(n_colvar))
185 DO i = 1, n_colvar
186 NULLIFY (meta_env%metavar(i)%walls)
187 meta_env%metavar(i)%mass = -huge(0.0_dp)
188 meta_env%metavar(i)%lambda = -huge(0.0_dp)
189 meta_env%metavar(i)%gamma = 0.0_dp
190 meta_env%metavar(i)%ss = 0.0_dp
191 meta_env%metavar(i)%ss0 = 0.0_dp
192 meta_env%metavar(i)%ff_s = 0.0_dp
193 meta_env%metavar(i)%vvp = 0.0_dp
194 meta_env%metavar(i)%epot_s = 0.0_dp
195 meta_env%metavar(i)%epot_walls = 0.0_dp
196 meta_env%metavar(i)%delta_s = 0.0_dp
197 meta_env%metavar(i)%ff_hills = 0.0_dp
198 meta_env%metavar(i)%ff_walls = 0.0_dp
199 meta_env%metavar(i)%do_wall = .false.
200 meta_env%metavar(i)%periodic = .false.
201 meta_env%metavar(i)%icolvar = 0
202 END DO
203
204 ! Multiple Walkers
205 CALL section_vals_val_get(metadyn_section, "MULTIPLE_WALKERS%_SECTION_PARAMETERS_", &
206 l_val=meta_env%do_multiple_walkers)
207 IF (meta_env%do_multiple_walkers) THEN
208 ALLOCATE (meta_env%multiple_walkers)
209
210 ! Walkers status and Walkers file name
211 NULLIFY (meta_env%multiple_walkers%walkers_status, &
212 meta_env%multiple_walkers%walkers_file_name)
213 meta_env%multiple_walkers%n_hills_local = 0
214 END IF
215
216 CALL section_vals_val_get(metadyn_section, "LANGEVIN", l_val=do_langevin)
217 IF (do_langevin) THEN
218 ALLOCATE (meta_env%rng(meta_env%n_colvar))
219 END IF
220 END SUBROUTINE metadyn_create
221
222! **************************************************************************************************
223!> \brief sets the meta_env
224!> \param meta_env ...
225!> \param time ...
226!> \author alessandro laio and fawzi mohamed
227! **************************************************************************************************
228 SUBROUTINE set_meta_env(meta_env, time)
229 TYPE(meta_env_type), INTENT(IN), POINTER :: meta_env
230 REAL(kind=dp), OPTIONAL, POINTER :: time
231
232 IF (ASSOCIATED(meta_env)) THEN
233 IF (PRESENT(time)) THEN
234 NULLIFY (meta_env%time)
235 meta_env%time => time
236 END IF
237 END IF
238 END SUBROUTINE set_meta_env
239
240! **************************************************************************************************
241!> \brief releases the meta_env
242!> \param meta_env ...
243!> \author alessandro laio and fawzi mohamed
244! **************************************************************************************************
245 SUBROUTINE meta_env_release(meta_env)
246 TYPE(meta_env_type), INTENT(INOUT) :: meta_env
247
248 INTEGER :: i
249
250 CALL mp_para_env_release(meta_env%para_env)
251 IF (ASSOCIATED(meta_env%metavar)) THEN
252 DO i = 1, SIZE(meta_env%metavar)
253 IF (ASSOCIATED(meta_env%metavar(i)%walls)) THEN
254 DEALLOCATE (meta_env%metavar(i)%walls)
255 END IF
256 END DO
257 DEALLOCATE (meta_env%metavar)
258 END IF
259
260 ! Hills env
261 CALL hills_env_release(meta_env%hills_env)
262 ! Walkers type
263 IF (ASSOCIATED(meta_env%multiple_walkers)) THEN
264 IF (ASSOCIATED(meta_env%multiple_walkers%walkers_status)) THEN
265 DEALLOCATE (meta_env%multiple_walkers%walkers_status)
266 END IF
267 IF (ASSOCIATED(meta_env%multiple_walkers%walkers_file_name)) THEN
268 DEALLOCATE (meta_env%multiple_walkers%walkers_file_name)
269 END IF
270 DEALLOCATE (meta_env%multiple_walkers)
271 END IF
272
273 ! Langevin on COLVARS
274 IF (meta_env%langevin) &
275 DEALLOCATE (meta_env%rng)
276
277 NULLIFY (meta_env%time)
278 NULLIFY (meta_env%metadyn_section)
279 END SUBROUTINE meta_env_release
280
281! **************************************************************************************************
282!> \brief releases the hills_env
283!> \param hills_env ...
284!> \author Teodoro Laino [tlaino] - University of Zurich 10.2008
285! **************************************************************************************************
286 SUBROUTINE hills_env_release(hills_env)
287 TYPE(hills_env_type), POINTER :: hills_env
288
289 IF (ASSOCIATED(hills_env)) THEN
290 IF (ASSOCIATED(hills_env%ss_history)) THEN
291 DEALLOCATE (hills_env%ss_history)
292 END IF
293 IF (ASSOCIATED(hills_env%delta_s_history)) THEN
294 DEALLOCATE (hills_env%delta_s_history)
295 END IF
296 IF (ASSOCIATED(hills_env%ww_history)) THEN
297 DEALLOCATE (hills_env%ww_history)
298 END IF
299 IF (ASSOCIATED(hills_env%invdt_history)) THEN
300 DEALLOCATE (hills_env%invdt_history)
301 END IF
302 DEALLOCATE (hills_env)
303 END IF
304 END SUBROUTINE hills_env_release
305
306END MODULE metadynamics_types
Calculation of the incomplete Gamma function F_n(t) for multi-center integrals over Cartesian Gaussia...
Definition gamma.F:15
objects that represent the structure of input sections and the data contained in an input section
subroutine, public section_vals_val_get(section_vals, keyword_name, i_rep_section, i_rep_val, n_rep_val, val, l_val, i_val, r_val, c_val, l_vals, i_vals, r_vals, c_vals, explicit)
returns the requested value
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
integer, parameter, public default_path_length
Definition kinds.F:58
Interface to the message passing library MPI.
subroutine, public mp_para_env_release(para_env)
releases the para object (to be called when you don't want anymore the shared copy of this object)
defines types for metadynamics calculation
subroutine, public set_meta_env(meta_env, time)
sets the meta_env
subroutine, public metadyn_create(meta_env, n_colvar, dt, para_env, metadyn_section)
allocates a metadynamic environment (performs only minimal initialization)
subroutine, public meta_env_release(meta_env)
releases the meta_env
Parallel (pseudo)random number generator (RNG) for multiple streams and substreams of random numbers.
stores all the informations relevant to an mpi environment
defines types for COLVAR used in the metadynamics
defines types for multiple walkers run