21 #include "./base/base_uses.f90"
27 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'metadynamics_types'
41 LOGICAL :: restart, slow_growth, wtcontrol
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
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
52 REAL(KIND=
dp) :: tail_cutoff
53 INTEGER :: p_exp, q_exp
54 END TYPE hills_env_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
70 LOGICAL :: do_wall, periodic
71 REAL(KIND=
dp) :: mass, lambda, vvp
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
81 TYPE multiple_walkers_type
82 INTEGER :: n_hills_local
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
89 END TYPE multiple_walkers_type
95 LOGICAL :: do_hills, do_multiple_walkers
96 LOGICAL :: extended_lagrange
97 LOGICAL :: well_tempered
100 CHARACTER(LEN=default_path_length) :: plumed_input_file
102 REAL(KIND=
dp) :: ekin_s, epot_s, dt, &
104 LOGICAL :: tempcontrol, restart
105 REAL(KIND=
dp) :: temp_wanted, toll_temp
106 REAL(KIND=
dp) :: delta_t, invdt, &
107 wtgamma, wttemperature
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(:), &
122 END TYPE meta_env_type
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
151 LOGICAL :: do_langevin
153 NULLIFY (meta_env%multiple_walkers, &
154 meta_env%metadyn_section, &
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()
166 meta_env%ekin_s = 0.0_dp
167 meta_env%epot_s = 0.0_dp
168 meta_env%epot_walls = 0.0_dp
171 meta_env%tempcontrol = .false.
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.
184 ALLOCATE (meta_env%metavar(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
206 l_val=meta_env%do_multiple_walkers)
207 IF (meta_env%do_multiple_walkers)
THEN
208 ALLOCATE (meta_env%multiple_walkers)
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
217 IF (do_langevin)
THEN
218 ALLOCATE (meta_env%rng(meta_env%n_colvar))
229 TYPE(meta_env_type),
INTENT(IN),
POINTER :: meta_env
230 REAL(kind=
dp),
OPTIONAL,
POINTER :: time
232 IF (
ASSOCIATED(meta_env))
THEN
233 IF (
PRESENT(time))
THEN
234 NULLIFY (meta_env%time)
235 meta_env%time => time
246 TYPE(meta_env_type),
INTENT(INOUT) :: meta_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)
257 DEALLOCATE (meta_env%metavar)
261 CALL hills_env_release(meta_env%hills_env)
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)
267 IF (
ASSOCIATED(meta_env%multiple_walkers%walkers_file_name))
THEN
268 DEALLOCATE (meta_env%multiple_walkers%walkers_file_name)
270 DEALLOCATE (meta_env%multiple_walkers)
274 IF (meta_env%langevin) &
275 DEALLOCATE (meta_env%rng)
277 NULLIFY (meta_env%time)
278 NULLIFY (meta_env%metadyn_section)
286 SUBROUTINE hills_env_release(hills_env)
287 TYPE(hills_env_type),
POINTER :: hills_env
289 IF (
ASSOCIATED(hills_env))
THEN
290 IF (
ASSOCIATED(hills_env%ss_history))
THEN
291 DEALLOCATE (hills_env%ss_history)
293 IF (
ASSOCIATED(hills_env%delta_s_history))
THEN
294 DEALLOCATE (hills_env%delta_s_history)
296 IF (
ASSOCIATED(hills_env%ww_history))
THEN
297 DEALLOCATE (hills_env%ww_history)
299 IF (
ASSOCIATED(hills_env%invdt_history))
THEN
300 DEALLOCATE (hills_env%invdt_history)
302 DEALLOCATE (hills_env)
304 END SUBROUTINE hills_env_release
Calculation of the incomplete Gamma function F_n(t) for multi-center integrals over Cartesian Gaussia...
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_path_length
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)
Parallel (pseudo)random number generator (RNG) for multiple streams and substreams of random numbers.