46#include "../base/base_uses.f90" 
   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()
 
 
   80   CHARACTER(len=*), 
PARAMETER, 
PRIVATE :: modulen = 
'md_environment_types' 
  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)
 
 
  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)
 
  197      INTEGER, 
OPTIONAL, 
POINTER                         :: itimes
 
  198      REAL(kind=
dp), 
OPTIONAL, 
POINTER                   :: constant, used_time
 
  199      TYPE(
cell_type), 
OPTIONAL, 
POINTER                 :: cell
 
  205      REAL(kind=
dp), 
OPTIONAL, 
POINTER                   :: t
 
  206      LOGICAL, 
OPTIONAL                                  :: init, first_time
 
  210      TYPE(
thermostat_type), 
OPTIONAL, 
POINTER           :: thermostat_coeff, thermostat_part, &
 
  211                                                            thermostat_shell, thermostat_baro, &
 
  212                                                            thermostat_fast, thermostat_slow
 
  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)
 
  293      INTEGER, 
OPTIONAL, 
POINTER                         :: itimes
 
  294      REAL(kind=
dp), 
OPTIONAL, 
POINTER                   :: constant
 
  295      TYPE(
cell_type), 
OPTIONAL, 
POINTER                 :: cell
 
  300      LOGICAL, 
OPTIONAL                                  :: init, first_time
 
  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
 
 
  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)
...
 
Type defining parameters related to the simulation cell.
 
wrapper to abstract the force evaluation of the various methods
 
stores all the informations relevant to an mpi environment
 
Simulation parameter type for molecular dynamics.