(git:ed6f26b)
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-2025 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 = .false., slow_growth = .false., wtcontrol = .false.
42 !RG Adaptive hills
43 REAL(kind=dp) :: ww = 0.0_dp, min_disp = 0.0_dp, energy = 0.0_dp
44 INTEGER :: n_hills = -1, nt_hills = -1, min_nt_hills = -1
45 INTEGER :: old_hill_number = -1, old_hill_step = -1
46 !RG Adaptive hills
47 REAL(kind=dp), DIMENSION(:, :), POINTER :: ss_history => null()
48 REAL(kind=dp), DIMENSION(:, :), POINTER :: delta_s_history => null()
49 REAL(kind=dp), DIMENSION(:), POINTER :: ww_history => null()
50 REAL(kind=dp), DIMENSION(:), POINTER :: invdt_history => null()
51 !Hills tail damping
52 REAL(kind=dp) :: tail_cutoff = 0.0_dp
53 INTEGER :: p_exp = -1, q_exp = -1
54 END TYPE hills_env_type
55
56! **************************************************************************************************
57!> \brief defines types for WALLS
58! **************************************************************************************************
59 TYPE wall_type
60 INTEGER :: id_type = -1, id_direction = -1
61 REAL(kind=dp) :: pos = 0.0_dp, pos0 = 0.0_dp
62 REAL(kind=dp) :: k_quadratic = 0.0_dp, k_quartic = 0.0_dp, &
63 ww_gauss = 0.0_dp, sigma_gauss = 0.0_dp
64 END TYPE wall_type
65
66! **************************************************************************************************
67!> \brief defines types for COLVAR used in the metadynamics
68! **************************************************************************************************
70 INTEGER :: icolvar = -1
71 LOGICAL :: do_wall = .false., periodic = .false.
72 REAL(kind=dp) :: mass = 0.0_dp, lambda = 0.0_dp, vvp = 0.0_dp
73 REAL(kind=dp) :: gamma = 0.0_dp
74 REAL(kind=dp) :: epot_s = 0.0_dp, delta_s = 0.0_dp, epot_walls = 0.0_dp
75 REAL(kind=dp) :: ss = 0.0_dp, ss0 = 0.0_dp, ff_s = 0.0_dp, ff_hills = 0.0_dp, ff_walls = 0.0_dp
76 TYPE(wall_type), DIMENSION(:), POINTER :: walls => null()
77 END TYPE metavar_type
78
79! **************************************************************************************************
80!> \brief defines types for multiple walkers run
81! **************************************************************************************************
83 INTEGER :: n_hills_local = -1
84 INTEGER :: walker_id = -1
85 INTEGER :: walkers_tot_nr = -1
86 INTEGER :: walkers_freq_comm = -1
87 INTEGER, DIMENSION(:), POINTER :: walkers_status => null()
88 CHARACTER(LEN=default_path_length), &
89 DIMENSION(:), POINTER :: walkers_file_name => null()
91
92! **************************************************************************************************
93!> \brief defines meta_env type
94! **************************************************************************************************
96 LOGICAL :: do_hills = .false., do_multiple_walkers = .false.
97 LOGICAL :: extended_lagrange = .false.
98 LOGICAL :: well_tempered = .false.
99 LOGICAL :: langevin = .false.
100 LOGICAL :: use_plumed = .false.
101 CHARACTER(LEN=default_path_length) :: plumed_input_file = ""
102 INTEGER :: n_colvar = -1
103 REAL(kind=dp) :: ekin_s = 0.0_dp, epot_s = 0.0_dp, dt = 0.0_dp, &
104 avg_temp = 0.0_dp, epot_walls = 0.0_dp
105 LOGICAL :: tempcontrol = .false., restart = .false.
106 REAL(kind=dp) :: temp_wanted = 0.0_dp, toll_temp = 0.0_dp
107 REAL(kind=dp) :: delta_t = 0.0_dp, invdt = 0.0_dp, &
108 wtgamma = 0.0_dp, wttemperature = 0.0_dp
109 INTEGER :: n_steps = -1
110 ! time pointer should never be allocated itself.. that's a quite bad
111 ! choice derived from the md_env.. So whenever the meta_env type is
112 ! used the pointer time should be pointer to the high level time counter
113 REAL(kind=dp), POINTER :: time => null()
114 TYPE(hills_env_type), POINTER :: hills_env => null()
115 TYPE(metavar_type), POINTER, DIMENSION(:) :: metavar => null()
116 TYPE(multiple_walkers_type), POINTER :: multiple_walkers => null()
117 TYPE(mp_para_env_type), POINTER :: para_env => null()
118 TYPE(section_vals_type), POINTER :: metadyn_section => null()
119 TYPE(rng_stream_type), DIMENSION(:), &
120 ALLOCATABLE :: rng
121 INTEGER :: tamcsteps = -1
122 REAL(kind=dp) :: zdt = 0.0_dp
123 END TYPE meta_env_type
124
125CONTAINS
126
127! **************************************************************************************************
128!> \brief allocates a metadynamic environment (performs only minimal
129!> initialization)
130!> \param meta_env the meta env_ that will be allocated
131!> \param n_colvar number of collectiva variables
132!> \param dt ...
133!> \param para_env ...
134!> \param metadyn_section ...
135!> \par History
136!> 04.2004 created
137!> 02.2006 Reorganized the structure of the restart for Metadynamics (teo)
138!> cleaned the metadynamic type
139!> \author - alessandro laio and fawzi mohamed
140!> - Teodoro Laino [tlaino] - University of Zurich. 11.2007
141!> - Teodoro Laino [tlaino] - University of Zurich. 10.2008
142!> Major rewriting and addition of multiple walkers
143! **************************************************************************************************
144 SUBROUTINE metadyn_create(meta_env, n_colvar, dt, para_env, metadyn_section)
145 TYPE(meta_env_type), INTENT(OUT) :: meta_env
146 INTEGER, INTENT(in) :: n_colvar
147 REAL(dp), INTENT(in) :: dt
148 TYPE(mp_para_env_type), POINTER :: para_env
149 TYPE(section_vals_type), POINTER :: metadyn_section
150
151 INTEGER :: i
152 LOGICAL :: do_langevin
153
154 NULLIFY (meta_env%multiple_walkers, &
155 meta_env%metadyn_section, &
156 meta_env%time, &
157 meta_env%hills_env)
158
159 meta_env%use_plumed = .false.
160 meta_env%plumed_input_file = ""
161 meta_env%metadyn_section => metadyn_section
162 meta_env%restart = .true.
163 meta_env%n_colvar = n_colvar
164 meta_env%para_env => para_env
165 CALL para_env%retain()
166
167 meta_env%ekin_s = 0.0_dp
168 meta_env%epot_s = 0.0_dp
169 meta_env%epot_walls = 0.0_dp
170 meta_env%n_steps = 0
171 meta_env%dt = dt
172 meta_env%tempcontrol = .false.
173
174 ! Hills_env
175 ALLOCATE (meta_env%hills_env)
176 ALLOCATE (meta_env%hills_env%ss_history(n_colvar, 0))
177 ALLOCATE (meta_env%hills_env%delta_s_history(n_colvar, 0))
178 ALLOCATE (meta_env%hills_env%ww_history(0))
179 ALLOCATE (meta_env%hills_env%invdt_history(0))
180 meta_env%hills_env%n_hills = 0
181 meta_env%hills_env%energy = 0.0_dp
182 meta_env%hills_env%restart = .true.
183
184 ! Colvar
185 ALLOCATE (meta_env%metavar(n_colvar))
186 DO i = 1, n_colvar
187 NULLIFY (meta_env%metavar(i)%walls)
188 meta_env%metavar(i)%mass = -huge(0.0_dp)
189 meta_env%metavar(i)%lambda = -huge(0.0_dp)
190 meta_env%metavar(i)%gamma = 0.0_dp
191 meta_env%metavar(i)%ss = 0.0_dp
192 meta_env%metavar(i)%ss0 = 0.0_dp
193 meta_env%metavar(i)%ff_s = 0.0_dp
194 meta_env%metavar(i)%vvp = 0.0_dp
195 meta_env%metavar(i)%epot_s = 0.0_dp
196 meta_env%metavar(i)%epot_walls = 0.0_dp
197 meta_env%metavar(i)%delta_s = 0.0_dp
198 meta_env%metavar(i)%ff_hills = 0.0_dp
199 meta_env%metavar(i)%ff_walls = 0.0_dp
200 meta_env%metavar(i)%do_wall = .false.
201 meta_env%metavar(i)%periodic = .false.
202 meta_env%metavar(i)%icolvar = 0
203 END DO
204
205 ! Multiple Walkers
206 CALL section_vals_val_get(metadyn_section, "MULTIPLE_WALKERS%_SECTION_PARAMETERS_", &
207 l_val=meta_env%do_multiple_walkers)
208 IF (meta_env%do_multiple_walkers) THEN
209 ALLOCATE (meta_env%multiple_walkers)
210
211 ! Walkers status and Walkers file name
212 NULLIFY (meta_env%multiple_walkers%walkers_status, &
213 meta_env%multiple_walkers%walkers_file_name)
214 meta_env%multiple_walkers%n_hills_local = 0
215 END IF
216
217 CALL section_vals_val_get(metadyn_section, "LANGEVIN", l_val=do_langevin)
218 IF (do_langevin) THEN
219 ALLOCATE (meta_env%rng(meta_env%n_colvar))
220 END IF
221 END SUBROUTINE metadyn_create
222
223! **************************************************************************************************
224!> \brief sets the meta_env
225!> \param meta_env ...
226!> \param time ...
227!> \author alessandro laio and fawzi mohamed
228! **************************************************************************************************
229 SUBROUTINE set_meta_env(meta_env, time)
230 TYPE(meta_env_type), INTENT(IN), POINTER :: meta_env
231 REAL(kind=dp), OPTIONAL, POINTER :: time
232
233 IF (ASSOCIATED(meta_env)) THEN
234 IF (PRESENT(time)) THEN
235 NULLIFY (meta_env%time)
236 meta_env%time => time
237 END IF
238 END IF
239 END SUBROUTINE set_meta_env
240
241! **************************************************************************************************
242!> \brief releases the meta_env
243!> \param meta_env ...
244!> \author alessandro laio and fawzi mohamed
245! **************************************************************************************************
246 SUBROUTINE meta_env_release(meta_env)
247 TYPE(meta_env_type), INTENT(INOUT) :: meta_env
248
249 INTEGER :: i
250
251 CALL mp_para_env_release(meta_env%para_env)
252 IF (ASSOCIATED(meta_env%metavar)) THEN
253 DO i = 1, SIZE(meta_env%metavar)
254 IF (ASSOCIATED(meta_env%metavar(i)%walls)) THEN
255 DEALLOCATE (meta_env%metavar(i)%walls)
256 END IF
257 END DO
258 DEALLOCATE (meta_env%metavar)
259 END IF
260
261 ! Hills env
262 CALL hills_env_release(meta_env%hills_env)
263 ! Walkers type
264 IF (ASSOCIATED(meta_env%multiple_walkers)) THEN
265 IF (ASSOCIATED(meta_env%multiple_walkers%walkers_status)) THEN
266 DEALLOCATE (meta_env%multiple_walkers%walkers_status)
267 END IF
268 IF (ASSOCIATED(meta_env%multiple_walkers%walkers_file_name)) THEN
269 DEALLOCATE (meta_env%multiple_walkers%walkers_file_name)
270 END IF
271 DEALLOCATE (meta_env%multiple_walkers)
272 END IF
273
274 ! Langevin on COLVARS
275 IF (meta_env%langevin) &
276 DEALLOCATE (meta_env%rng)
277
278 NULLIFY (meta_env%time)
279 NULLIFY (meta_env%metadyn_section)
280 END SUBROUTINE meta_env_release
281
282! **************************************************************************************************
283!> \brief releases the hills_env
284!> \param hills_env ...
285!> \author Teodoro Laino [tlaino] - University of Zurich 10.2008
286! **************************************************************************************************
287 SUBROUTINE hills_env_release(hills_env)
288 TYPE(hills_env_type), POINTER :: hills_env
289
290 IF (ASSOCIATED(hills_env)) THEN
291 IF (ASSOCIATED(hills_env%ss_history)) THEN
292 DEALLOCATE (hills_env%ss_history)
293 END IF
294 IF (ASSOCIATED(hills_env%delta_s_history)) THEN
295 DEALLOCATE (hills_env%delta_s_history)
296 END IF
297 IF (ASSOCIATED(hills_env%ww_history)) THEN
298 DEALLOCATE (hills_env%ww_history)
299 END IF
300 IF (ASSOCIATED(hills_env%invdt_history)) THEN
301 DEALLOCATE (hills_env%invdt_history)
302 END IF
303 DEALLOCATE (hills_env)
304 END IF
305 END SUBROUTINE hills_env_release
306
307END 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