46 #include "../base/base_uses.f90"
53 TYPE md_environment_type
58 LOGICAL :: init = .false., first_time = .false., ehrenfest_md = .false.
59 INTEGER,
POINTER :: itimes => null()
60 REAL(KIND=
dp),
POINTER :: used_time => null(), t => null()
61 REAL(KIND=
dp),
POINTER :: constant => null()
62 TYPE(mp_para_env_type),
POINTER :: para_env => null()
63 TYPE(cell_type),
POINTER :: cell => null()
64 TYPE(force_env_type),
POINTER :: force_env => null()
65 TYPE(md_ener_type),
POINTER :: md_ener => null()
66 TYPE(thermostats_type),
POINTER :: thermostats => null()
67 TYPE(barostat_type),
POINTER :: barostat => null()
68 TYPE(reftraj_type),
POINTER :: reftraj => null()
69 TYPE(free_energy_type),
POINTER :: fe_env => null()
70 TYPE(simpar_type),
POINTER :: simpar => null()
71 TYPE(average_quantities_type),
POINTER :: averages => null()
72 TYPE(thermal_regions_type),
POINTER :: thermal_regions => null()
73 END TYPE md_environment_type
80 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'md_environment_types'
95 TYPE(md_environment_type),
INTENT(OUT) :: md_env
96 TYPE(section_vals_type),
POINTER :: md_section
97 TYPE(mp_para_env_type),
POINTER :: para_env
98 TYPE(force_env_type),
POINTER :: force_env
100 TYPE(section_vals_type),
POINTER :: averages_section
102 md_env%para_env => para_env
103 CALL md_env%para_env%retain()
104 ALLOCATE (md_env%itimes)
105 ALLOCATE (md_env%constant)
106 ALLOCATE (md_env%used_time)
109 md_env%constant = 0.0_dp
110 md_env%used_time = 0.0_dp
113 md_env%first_time = .true.
114 md_env%ehrenfest_md = .false.
116 CALL create_averages(md_env%averages, averages_section, force_env=force_env)
128 TYPE(md_environment_type),
INTENT(INOUT) :: md_env
132 DEALLOCATE (md_env%itimes)
133 DEALLOCATE (md_env%constant)
134 DEALLOCATE (md_env%used_time)
135 DEALLOCATE (md_env%t)
137 NULLIFY (md_env%cell)
138 NULLIFY (md_env%simpar)
140 IF (
ASSOCIATED(md_env%thermostats))
THEN
142 DEALLOCATE (md_env%thermostats)
144 IF (
ASSOCIATED(md_env%reftraj))
THEN
146 DEALLOCATE (md_env%reftraj)
148 IF (
ASSOCIATED(md_env%md_ener))
THEN
150 DEALLOCATE (md_env%md_ener)
154 IF (
ASSOCIATED(md_env%thermal_regions))
THEN
156 DEALLOCATE (md_env%thermal_regions)
190 SUBROUTINE get_md_env(md_env, itimes, constant, used_time, cell, simpar, npt, &
191 force_env, para_env, reftraj, t, init, first_time, fe_env, thermostats, barostat, &
192 thermostat_coeff, thermostat_part, thermostat_shell, thermostat_baro, &
193 thermostat_fast, thermostat_slow, md_ener, averages, &
194 thermal_regions, ehrenfest_md)
196 TYPE(md_environment_type),
INTENT(IN) :: md_env
197 INTEGER,
OPTIONAL,
POINTER :: itimes
198 REAL(kind=
dp),
OPTIONAL,
POINTER :: constant, used_time
199 TYPE(cell_type),
OPTIONAL,
POINTER :: cell
200 TYPE(simpar_type),
OPTIONAL,
POINTER :: simpar
201 TYPE(npt_info_type),
OPTIONAL,
POINTER :: npt(:, :)
202 TYPE(force_env_type),
OPTIONAL,
POINTER :: force_env
203 TYPE(mp_para_env_type),
OPTIONAL,
POINTER :: para_env
204 TYPE(reftraj_type),
OPTIONAL,
POINTER :: reftraj
205 REAL(kind=
dp),
OPTIONAL,
POINTER :: t
206 LOGICAL,
OPTIONAL :: init, first_time
207 TYPE(free_energy_type),
OPTIONAL,
POINTER :: fe_env
208 TYPE(thermostats_type),
OPTIONAL,
POINTER :: thermostats
209 TYPE(barostat_type),
OPTIONAL,
POINTER :: barostat
210 TYPE(thermostat_type),
OPTIONAL,
POINTER :: thermostat_coeff, thermostat_part, &
211 thermostat_shell, thermostat_baro, &
212 thermostat_fast, thermostat_slow
213 TYPE(md_ener_type),
OPTIONAL,
POINTER :: md_ener
214 TYPE(average_quantities_type),
OPTIONAL,
POINTER :: averages
215 TYPE(thermal_regions_type),
OPTIONAL,
POINTER :: thermal_regions
216 LOGICAL,
OPTIONAL :: ehrenfest_md
218 IF (
PRESENT(itimes)) itimes => md_env%itimes
219 IF (
PRESENT(fe_env)) fe_env => md_env%fe_env
220 IF (
PRESENT(constant)) constant => md_env%constant
221 IF (
PRESENT(used_time)) used_time => md_env%used_time
222 IF (
PRESENT(t)) t => md_env%t
223 IF (
PRESENT(cell)) cell => md_env%cell
224 IF (
PRESENT(simpar)) simpar => md_env%simpar
225 IF (
PRESENT(thermostats)) thermostats => md_env%thermostats
226 IF (
PRESENT(barostat)) barostat => md_env%barostat
227 IF (
PRESENT(thermostat_part) .OR.
PRESENT(thermostat_coeff) .OR. &
228 PRESENT(thermostat_baro) .OR.
PRESENT(thermostat_shell) .OR. &
229 PRESENT(thermostat_fast) .OR.
PRESENT(thermostat_slow))
THEN
230 IF (
ASSOCIATED(md_env%thermostats))
THEN
231 IF (
PRESENT(thermostat_part))
THEN
232 thermostat_part => md_env%thermostats%thermostat_part
234 IF (
PRESENT(thermostat_coeff))
THEN
235 thermostat_coeff => md_env%thermostats%thermostat_coef
237 IF (
PRESENT(thermostat_shell))
THEN
238 thermostat_shell => md_env%thermostats%thermostat_shell
240 IF (
PRESENT(thermostat_fast))
THEN
241 thermostat_fast => md_env%thermostats%thermostat_fast
243 IF (
PRESENT(thermostat_slow))
THEN
244 thermostat_slow => md_env%thermostats%thermostat_slow
246 IF (
PRESENT(thermostat_baro))
THEN
247 thermostat_baro => md_env%thermostats%thermostat_baro
251 IF (
PRESENT(npt))
THEN
252 IF (
ASSOCIATED(md_env%barostat))
THEN
253 npt => md_env%barostat%npt
256 IF (
PRESENT(averages)) averages => md_env%averages
257 IF (
PRESENT(force_env)) force_env => md_env%force_env
258 IF (
PRESENT(para_env)) para_env => md_env%para_env
259 IF (
PRESENT(reftraj)) reftraj => md_env%reftraj
260 IF (
PRESENT(md_ener)) md_ener => md_env%md_ener
261 IF (
PRESENT(init)) init = md_env%init
262 IF (
PRESENT(first_time)) first_time = md_env%first_time
263 IF (
PRESENT(ehrenfest_md)) ehrenfest_md = md_env%ehrenfest_md
264 IF (
PRESENT(thermal_regions)) thermal_regions => md_env%thermal_regions
288 SUBROUTINE set_md_env(md_env, itimes, constant, cell, simpar, fe_env, force_env, &
289 para_env, init, first_time, thermostats, barostat, reftraj, md_ener, averages, &
290 thermal_regions, ehrenfest_md)
292 TYPE(md_environment_type),
INTENT(INOUT) :: md_env
293 INTEGER,
OPTIONAL,
POINTER :: itimes
294 REAL(kind=
dp),
OPTIONAL,
POINTER :: constant
295 TYPE(cell_type),
OPTIONAL,
POINTER :: cell
296 TYPE(simpar_type),
OPTIONAL,
POINTER :: simpar
297 TYPE(free_energy_type),
OPTIONAL,
POINTER :: fe_env
298 TYPE(force_env_type),
OPTIONAL,
POINTER :: force_env
299 TYPE(mp_para_env_type),
OPTIONAL,
POINTER :: para_env
300 LOGICAL,
OPTIONAL :: init, first_time
301 TYPE(thermostats_type),
OPTIONAL,
POINTER :: thermostats
302 TYPE(barostat_type),
OPTIONAL,
POINTER :: barostat
303 TYPE(reftraj_type),
OPTIONAL,
POINTER :: reftraj
304 TYPE(md_ener_type),
OPTIONAL,
POINTER :: md_ener
305 TYPE(average_quantities_type),
OPTIONAL,
POINTER :: averages
306 TYPE(thermal_regions_type),
OPTIONAL,
POINTER :: thermal_regions
307 LOGICAL,
OPTIONAL :: ehrenfest_md
309 IF (
PRESENT(init)) md_env%init = init
310 IF (
PRESENT(first_time)) md_env%first_time = first_time
311 IF (
PRESENT(ehrenfest_md)) md_env%ehrenfest_md = ehrenfest_md
312 IF (
PRESENT(cell)) md_env%cell => cell
313 IF (
PRESENT(barostat))
THEN
314 IF (
ASSOCIATED(md_env%barostat))
THEN
315 IF (.NOT.
ASSOCIATED(md_env%barostat, barostat))
THEN
319 md_env%barostat => barostat
321 IF (
PRESENT(thermostats))
THEN
322 IF (
ASSOCIATED(md_env%thermostats))
THEN
323 IF (.NOT.
ASSOCIATED(md_env%thermostats, thermostats))
THEN
325 DEALLOCATE (md_env%thermostats)
328 md_env%thermostats => thermostats
330 IF (
PRESENT(simpar)) md_env%simpar => simpar
331 IF (
PRESENT(itimes)) md_env%itimes => itimes
332 IF (
PRESENT(fe_env)) md_env%fe_env => fe_env
333 IF (
PRESENT(constant)) md_env%constant => constant
334 IF (
PRESENT(para_env)) md_env%para_env => para_env
335 IF (
PRESENT(force_env))
THEN
336 IF (
ASSOCIATED(force_env))
THEN
339 IF (
ASSOCIATED(md_env%force_env))
THEN
342 md_env%force_env => force_env
344 IF (
PRESENT(reftraj))
THEN
345 IF (
ASSOCIATED(md_env%reftraj))
THEN
346 IF (.NOT.
ASSOCIATED(md_env%reftraj, reftraj))
THEN
348 DEALLOCATE (md_env%reftraj)
351 md_env%reftraj => reftraj
353 IF (
PRESENT(md_ener))
THEN
354 IF (
ASSOCIATED(md_env%md_ener))
THEN
355 IF (.NOT.
ASSOCIATED(md_env%md_ener, md_ener))
THEN
357 DEALLOCATE (md_env%md_ener)
360 md_env%md_ener => md_ener
362 IF (
PRESENT(averages))
THEN
365 md_env%averages => averages
367 IF (
PRESENT(thermal_regions))
THEN
368 IF (
ASSOCIATED(md_env%thermal_regions))
THEN
369 IF (.NOT.
ASSOCIATED(md_env%thermal_regions, thermal_regions))
THEN
371 DEALLOCATE (md_env%thermal_regions)
374 md_env%thermal_regions => thermal_regions
388 TYPE(md_environment_type),
INTENT(IN) :: md_env
398 IF (.NOT.
ASSOCIATED(md_env%thermostats))
RETURN
399 IF (.NOT.
ASSOCIATED(md_env%thermostats%thermostat_part))
RETURN
Handles the type to compute averages during an MD.
subroutine, public create_averages(averages, averages_section, virial_avg, force_env)
Creates averages environment.
subroutine, public retain_averages(averages)
retains the given averages env
subroutine, public release_averages(averages)
releases the given averages env
Barostat structure: module containing barostat available for MD.
subroutine, public release_barostat_type(barostat)
...
Handles all functions related to the CELL.
Lumps all possible extended system variables into one type for easy access and passing.
Interface for the force calculations.
subroutine, public force_env_retain(force_env)
retains the given force env
recursive subroutine, public force_env_release(force_env)
releases the given force env
defines types for metadynamics calculation
subroutine, public fe_env_release(fe_env)
releases the fe_env
Defines the basic variable types.
integer, parameter, public dp
Split md_ener module from md_environment_type.
subroutine, public release_md_ener(md_ener)
releases the given md_ener structure
subroutine, public set_md_env(md_env, itimes, constant, cell, simpar, fe_env, force_env, para_env, init, first_time, thermostats, barostat, reftraj, md_ener, averages, thermal_regions, ehrenfest_md)
Set the integrator environment to the correct program.
subroutine, public md_env_create(md_env, md_section, para_env, force_env)
Creates MD environment Purpose: Initialise the integrator environment. retain the para_env for this e...
subroutine, public md_env_release(md_env)
releases the given md env
pure logical function, public need_per_atom_wiener_process(md_env)
...
subroutine, public get_md_env(md_env, itimes, constant, used_time, cell, simpar, npt, force_env, para_env, reftraj, t, init, first_time, fe_env, thermostats, barostat, thermostat_coeff, thermostat_part, thermostat_shell, thermostat_baro, thermostat_fast, thermostat_slow, md_ener, averages, thermal_regions, ehrenfest_md)
get components of MD environment type
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)
initialization of the reftraj structure used to analyse previously generated trajectories
subroutine, public release_reftraj(reftraj)
...
Type for storing MD parameters.
Thermal regions type: to initialize and control the temperature of different regions.
subroutine, public release_thermal_regions(thermal_regions)
release thermal_regions
Thermostat structure: module containing thermostat available for MD.
subroutine, public release_thermostats(thermostats)
...