(git:374b731)
Loading...
Searching...
No Matches
mc_run.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 preps the system for a Monte Carlo run (sets up some environments,
10!> calls the routines to read in the MC parameters)...converted
11!> from qs_mc.F
12!> \par Literature
13!> a list of papers for the theory behind various MC moves
14!> Books:
15!> D. Frenkel, B. Smit: Understanding Molecular Simulation (1996)
16!> M.P. Allen, D.J. Tildesley: Computer Simulations of Liquids (1987)
17!> \par
18!> Aggregation volume bias Monte Carlo (AVBMC):
19!> Chen, B.; Siepmann, J.I. J. Phys. Chem. B 2000, 104, 8725.
20!> \par
21!> Biasing with an inexpensive potential:
22!> Iftimie et al. J. Chem. Phys. 2000, 113, 4852.
23!> Gelb, L. D. J. Chem. Phys. 2003, 118, 7747.
24!> \par
25!> Configurational bias Monte Carlo (CBMC):
26!> Siepmann, J.I.; Frenkel, D. Mol. Phys. 1992, 75, 59.
27!> \par
28!> Gibbs ensemble Monte Carlo (GEMC):
29!> Panagiotopoulos, A.Z. Mol. Phys. 1987, 61, 813.
30!> Panagiotopoulos et al. Mol. Phys. 1988, 63, 527.
31!> Smit et al. Mol. Phys. 1989, 68, 931.
32!> \par
33!> Isobaric-isothermal ensemble:
34!> McDonald, I.R. Mol. Phys. 1972, 23, 41.
35!> \par
36!> Original Monte Carlo paper:
37!> Metropolis et al. J. Chem. Phys. 1953, 21, 1087.
38!> \author MJM-Oct-15-03
39! **************************************************************************************************
40MODULE mc_run
53 USE kinds, ONLY: dp
63 USE mc_types, ONLY: &
70 USE parallel_rng_types, ONLY: uniform,&
72 USE physcon, ONLY: angstrom
73#include "../../base/base_uses.f90"
74
75 IMPLICIT NONE
76
77 PRIVATE
78! *** Global parameters ***
79
80 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'mc_run'
81
82 PUBLIC :: do_mon_car
83
84!-----------------------------------------------------------------------------!
85
86CONTAINS
87
88! **************************************************************************************************
89!> \brief starts the Monte Carlo simulation and determines which ensemble we're
90!> running
91!> \param force_env_1 the force environment for the simulation, or
92!> the force environment for box 1, depending on which
93!> ensemble we're running
94!> \param globenv the global environment for the simulation
95!> \param input_declaration ...
96!> \param input_file_name the name of the input file that force_env_1 was
97!> created from
98!> \author MJM
99!> \note
100!> Designed for parallel.
101! **************************************************************************************************
102 SUBROUTINE do_mon_car(force_env_1, globenv, input_declaration, input_file_name)
103
104 TYPE(force_env_type), POINTER :: force_env_1
105 TYPE(global_environment_type), POINTER :: globenv
106 TYPE(section_type), POINTER :: input_declaration
107 CHARACTER(LEN=*) :: input_file_name
108
109 CHARACTER(LEN=20) :: ensemble
110 CHARACTER(LEN=40) :: box2_file, dat_file
111 INTEGER :: box_number, ibox, isos, iw, nboxes, &
112 nmol_types
113 INTEGER, DIMENSION(:), POINTER :: nunits_tot
114 LOGICAL :: lbias, lhmc, lrestart, lskip_box, &
115 lterminate
116 REAL(dp) :: rcut
117 REAL(dp), DIMENSION(:, :), POINTER :: empty_coordinates
118 TYPE(force_env_p_type), DIMENSION(:), POINTER :: force_env
119 TYPE(force_env_type), POINTER :: force_env_2
120 TYPE(global_environment_type), POINTER :: globenv_2
121 TYPE(mc_environment_p_type), DIMENSION(:), POINTER :: mc_env
122 TYPE(mc_input_file_type), POINTER :: mc_bias_file, mc_input_file
123 TYPE(mc_molecule_info_type), POINTER :: mc_molecule_info
125 DIMENSION(:), POINTER :: mc_par
126 TYPE(mp_para_env_type), POINTER :: para_env
127 TYPE(rng_stream_type) :: rng_stream
128 TYPE(section_vals_type), POINTER :: force_env_section, mc_section, &
129 root_section
130
131 NULLIFY (mc_env, mc_par, force_env_2, force_env_section, &
132 root_section, mc_molecule_info)
133
134 CALL force_env_retain(force_env_1)
135
136 para_env => force_env_1%para_env
138 force_env_section => force_env_1%force_env_section
139 root_section => force_env_1%root_section
140 CALL section_vals_get(force_env_section, n_repetition=isos)
141 cpassert(isos == 1)
142! set some values...will use get_globenv if that ever comes around
143
144! initialize the random numbers
145 rng_stream = rng_stream_type( &
146 last_rng_stream=force_env_1%globenv%gaussian_rng_stream, &
147 name="first", &
148 distribution_type=uniform)
149
150! need to figure out how many boxes we have, based on the value
151! of mc_par % ensemble
152 NULLIFY (mc_section)
153 mc_section => section_vals_get_subs_vals(root_section, &
154 "MOTION%MC")
155 CALL section_vals_val_get(mc_section, "ENSEMBLE", &
156 c_val=ensemble)
157
158! now we read in the second force_env, if we have another box
159 SELECT CASE (ensemble)
160 CASE ("TRADITIONAL", "VIRIAL")
161 nboxes = 1
162 CASE ("GEMC_NVT", "GEMC_NPT")
163 nboxes = 2
164 CALL section_vals_val_get(mc_section, "BOX2_FILE_NAME", &
165 c_val=box2_file)
166 CALL mc_create_force_env(force_env_2, input_declaration, para_env, &
167 box2_file, globenv_new=globenv_2)
168 END SELECT
169
170! now we create the various pointers that contain information for all boxes
171 ALLOCATE (force_env(1:nboxes))
172 SELECT CASE (ensemble)
173 CASE ("TRADITIONAL", "VIRIAL")
174 force_env(1)%force_env => force_env_1
175 CASE ("GEMC_NVT", "GEMC_NPT")
176 force_env(1)%force_env => force_env_1
177 force_env(2)%force_env => force_env_2
178 END SELECT
179 ALLOCATE (mc_par(1:nboxes))
180 ALLOCATE (mc_env(1:nboxes))
181
182! now we need the molecule information
183! determine the total number of molecules and atoms
184 CALL mc_determine_molecule_info(force_env, mc_molecule_info, &
185 coordinates_empty=empty_coordinates)
186 CALL get_mc_molecule_info(mc_molecule_info, nmol_types=nmol_types, &
187 nunits_tot=nunits_tot)
188
189 DO ibox = 1, nboxes
190
191 IF (iw > 0) THEN
192 WRITE (iw, *)
193 WRITE (iw, *)
194 WRITE (iw, '(A,I2,A)') '******************************** Begin BOX ', ibox, &
195 ' *******************************'
196 END IF
197
198! allocates an mc_env and sets the variables to zero
199 ALLOCATE (mc_env(ibox)%mc_env)
200 CALL mc_env_create(mc_env(ibox)%mc_env)
201
202! now read in the values of the mc_pars
203! creating the mc_par
204 CALL mc_sim_par_create(mc_par(ibox)%mc_par, nmol_types)
205
206! attach molecule information to all mc_par structures, so we know what we have to read in
207 CALL set_mc_par(mc_par(ibox)%mc_par, mc_molecule_info=mc_molecule_info)
208
209! read the input of the Monte Carlo section
210 force_env_section => force_env(ibox)%force_env%force_env_section
211 root_section => force_env(ibox)%force_env%root_section
212 IF (ibox == 1) THEN
213 CALL read_mc_section(mc_par(ibox)%mc_par, para_env, globenv, input_file_name, &
214 root_section, force_env_section)
215 ELSE
216 CALL read_mc_section(mc_par(ibox)%mc_par, para_env, globenv, box2_file, &
217 root_section, force_env_section)
218 END IF
219
220! get the input file data, in case we need to make a restart...
221! this is also used in the swap move, or anytime we need to make a dat file
222! always judge based on lbias from box 1...in case someone only changes the value
223! for box 1
224 CALL get_mc_par(mc_par(ibox)%mc_par, mc_input_file=mc_input_file, lhmc=lhmc)
225 CALL get_mc_par(mc_par(1)%mc_par, lbias=lbias)
226 IF (ibox == 1) THEN
227 CALL mc_input_file_create(mc_input_file, &
228 input_file_name, mc_molecule_info, empty_coordinates, lhmc)
229 ELSE
230 CALL mc_input_file_create(mc_input_file, &
231 box2_file, mc_molecule_info, empty_coordinates, lhmc)
232 END IF
233 CALL set_mc_par(mc_par(ibox)%mc_par, mc_input_file=mc_input_file)
234
235 IF (lbias) THEN
236 CALL get_mc_par(mc_par(ibox)%mc_par, mc_bias_file=mc_bias_file)
237 CALL mc_input_file_create(mc_bias_file, &
238 "bias_template.inp", mc_molecule_info, empty_coordinates, lhmc)
239 CALL set_mc_par(mc_par(ibox)%mc_par, mc_bias_file=mc_bias_file)
240 END IF
241
242! check for restart
243 CALL get_mc_par(mc_par(ibox)%mc_par, lrestart=lrestart, &
244 dat_file=dat_file)
245 IF (lrestart) THEN
246 CALL read_mc_restart(mc_par(ibox)%mc_par, force_env(ibox)%force_env, &
247 iw, nunits_tot(ibox), rng_stream)
248! release the old force env and make the new one
249 CALL force_env_release(force_env(ibox)%force_env)
250 CALL mc_create_force_env(force_env(ibox)%force_env, &
251 input_declaration, para_env, dat_file)
252 END IF
253
254 END DO
255
256! figure out if we have an empty box
257 box_number = 0
258 lskip_box = .false.
259 DO ibox = 1, nboxes
260 IF (nunits_tot(ibox) == 0) THEN
261 IF (lskip_box) THEN
262 cpabort('More than one box has no atoms in it!')
263 END IF
264 box_number = ibox
265 lskip_box = .true.
266 END IF
267 END DO
268
269! in case there was a restart, we need to do this again
270 CALL mc_molecule_info_destroy(mc_molecule_info)
271 CALL mc_determine_molecule_info(force_env, mc_molecule_info, box_number=box_number)
272 CALL get_mc_molecule_info(mc_molecule_info, nmol_types=nmol_types, &
273 nunits_tot=nunits_tot)
274 DO ibox = 1, nboxes
275 CALL set_mc_par(mc_par(ibox)%mc_par, mc_molecule_info=mc_molecule_info)
276 END DO
277! if we're doing a classical simulation, figure out the largest
278! potential cutoff and write it to the screen
279 IF (force_env(1)%force_env%in_use .EQ. use_fist_force) THEN
280 CALL find_mc_rcut(mc_par(1)%mc_par, force_env(1)%force_env, lterminate)
281 CALL get_mc_par(mc_par(1)%mc_par, rcut=rcut)
282 IF (iw > 0) WRITE (iw, '( A,T73,F8.4 )') &
283 ' MC| Interaction cutoff [angstroms]', rcut*angstrom
284 IF (lterminate) THEN
285 cpabort('Cutoff larger than twice the boxlength')
286 END IF
287 END IF
288
289! make sure some values are the same between boxes
290 IF (nboxes == 2) THEN
291 CALL equilize_mc_sim_parameters(mc_par, iw)
292 END IF
293
294! now check the input parameters and run the simulation
295 DO ibox = 1, nboxes
296
297 CALL mc_input_parameters_check(mc_par(ibox)%mc_par)
298
299! attach all the structures to one convientent structure
300 CALL set_mc_env(mc_env(ibox)%mc_env, mc_par=mc_par(ibox)%mc_par, &
301 force_env=force_env(ibox)%force_env)
302
303 END DO
304
305! if we're computing the second virial coefficient, do that instead
306! of running a simulation
307 SELECT CASE (ensemble)
308 CASE ("VIRIAL")
309 CALL mc_compute_virial(mc_env, rng_stream)
310 CASE DEFAULT
311 CALL mc_run_ensemble(mc_env, para_env, globenv, input_declaration, nboxes, rng_stream)
312 END SELECT
313
314! get rid of all the MC molecule information
315 CALL get_mc_env(mc_env(1)%mc_env, mc_par=mc_par(1)%mc_par)
316 CALL get_mc_par(mc_par(1)%mc_par, mc_molecule_info=mc_molecule_info)
317 CALL mc_molecule_info_destroy(mc_molecule_info)
318
319 DO ibox = 1, nboxes
320 CALL get_mc_env(mc_env(ibox)%mc_env, &
321 mc_par=mc_par(ibox)%mc_par, force_env=force_env(ibox)%force_env)
322 CALL get_mc_par(mc_par(ibox)%mc_par, mc_input_file=mc_input_file)
323
324 CALL mc_input_file_destroy(mc_input_file)
325 IF (lbias) THEN
326 CALL get_mc_par(mc_par(ibox)%mc_par, mc_bias_file=mc_bias_file)
327 CALL mc_input_file_destroy(mc_bias_file)
328 END IF
329
330 CALL mc_sim_par_destroy(mc_par(ibox)%mc_par)
331 CALL mc_env_release(mc_env(ibox)%mc_env)
332 DEALLOCATE (mc_env(ibox)%mc_env)
333 CALL force_env_release(force_env(ibox)%force_env)
334 END DO
335
336 DEALLOCATE (empty_coordinates)
337 DEALLOCATE (mc_par)
338 DEALLOCATE (mc_env)
339 DEALLOCATE (force_env)
340
341 END SUBROUTINE do_mon_car
342
343! **************************************************************************************************
344!> \brief takes some parameters from one set of MC simulation parameters
345!> and transfers them to a second set...used so that we're not using
346!> different parameters between two simulation boxes, if they should
347!> be the same (move probabilities, for instance)
348!> \param mc_par the pointer that contains the simulation parameters
349!> for both boxes
350!> \param iw the unit number that prints to screen
351!> \author MJM
352!> \note
353!> Designed for parallel.
354! **************************************************************************************************
355 SUBROUTINE equilize_mc_sim_parameters(mc_par, iw)
357 DIMENSION(:), POINTER :: mc_par
358 INTEGER, INTENT(IN) :: iw
359
360 CHARACTER(20) :: ensemble
361 INTEGER :: iprint, iupcltrans, iuptrans, iupvolume, &
362 nmoves, nstep, nswapmoves
363 INTEGER, DIMENSION(:), POINTER :: avbmc_atom
364 LOGICAL :: lbias, lrestart, lstop
365 REAL(dp) :: beta, pmswap, pmtraion, pmtrans, &
366 pmvolume, pressure, rcut, temperature
367 REAL(dp), DIMENSION(:), POINTER :: avbmc_rmax, avbmc_rmin, pbias, &
368 pmavbmc_mol, pmrot_mol, pmswap_mol, &
369 pmtraion_mol, pmtrans_mol
370
371 IF (iw > 0) THEN
372 WRITE (iw, '( A,A )') 'Ignoring some input for box 2, and ', &
373 'using the values for box 1 for the following variables:'
374 WRITE (iw, '( A,A )') 'nstep,iupvolume,iuptrans,iupcltrans,nmoves,', &
375 'nswapmoves,iprint,lbias,lstop,temperature,pressure'
376 WRITE (iw, '( A,A )') 'pmvolume,pmtraion,pmtrans,BETA,rcut,', &
377 'lrestart'
378 WRITE (iw, '( A,A )') 'pmtraion_mol,pmtrans_mol,pmrot_mol,pmswap_mol,', &
379 'avbmc_atom'
380 WRITE (iw, '( A,A )') 'avbmc_rmin,avmbc_rmax,pmavbmc_mol,pbias,pmswap'
381 END IF
382
383 CALL get_mc_par(mc_par(1)%mc_par, nstep=nstep, iupvolume=iupvolume, iupcltrans=iupcltrans, &
384 iuptrans=iuptrans, nmoves=nmoves, nswapmoves=nswapmoves, &
385 iprint=iprint, lbias=lbias, lstop=lstop, temperature=temperature, &
386 pressure=pressure, pmswap=pmswap, pmvolume=pmvolume, &
387 pmtraion=pmtraion, pmtrans=pmtrans, beta=beta, rcut=rcut, &
388 lrestart=lrestart, pmtraion_mol=pmtraion_mol, pmtrans_mol=pmtrans_mol, &
389 pmrot_mol=pmrot_mol, pmswap_mol=pmswap_mol, avbmc_atom=avbmc_atom, &
390 avbmc_rmin=avbmc_rmin, avbmc_rmax=avbmc_rmax, pmavbmc_mol=pmavbmc_mol, &
391 pbias=pbias, ensemble=ensemble)
392 CALL set_mc_par(mc_par(2)%mc_par, nstep=nstep, iupvolume=iupvolume, iupcltrans=iupcltrans, &
393 iuptrans=iuptrans, nmoves=nmoves, nswapmoves=nswapmoves, &
394 iprint=iprint, lbias=lbias, lstop=lstop, temperature=temperature, &
395 pressure=pressure, pmswap=pmswap, pmvolume=pmvolume, &
396 pmtraion=pmtraion, pmtrans=pmtrans, beta=beta, rcut=rcut, &
397 lrestart=lrestart, pmtraion_mol=pmtraion_mol, pmtrans_mol=pmtrans_mol, &
398 pmrot_mol=pmrot_mol, pmswap_mol=pmswap_mol, avbmc_atom=avbmc_atom, &
399 avbmc_rmin=avbmc_rmin, avbmc_rmax=avbmc_rmax, pmavbmc_mol=pmavbmc_mol, &
400 pbias=pbias, ensemble=ensemble)
401
402 END SUBROUTINE equilize_mc_sim_parameters
403
404END MODULE mc_run
various routines to log and control the output. The idea is that decisions about where to log should ...
integer function, public cp_logger_get_default_io_unit(logger)
returns the unit nr for the ionode (-1 on all other processors) skips as well checks if the procs cal...
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
integer, parameter, public use_fist_force
Define type storing the global information of a run. Keep the amount of stored data small....
objects that represent the structure of input sections and the data contained in an input section
recursive type(section_vals_type) function, pointer, public section_vals_get_subs_vals(section_vals, subsection_name, i_rep_section, can_return_null)
returns the values of the requested subsection
subroutine, public section_vals_get(section_vals, ref_count, n_repetition, n_subs_vals_rep, section, explicit)
returns various attributes about the section_vals
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
contains some general routines for dealing with the restart files and creating force_env for MC use
Definition mc_control.F:15
subroutine, public read_mc_restart(mc_par, force_env, iw, mc_nunits_tot, rng_stream)
reads the input coordinates of the simulation from a file written above
Definition mc_control.F:170
subroutine, public mc_create_force_env(force_env, input_declaration, para_env, input_file_name, globenv_new)
creates a force environment for any of the different kinds of MC simulations we can do (FIST,...
Definition mc_control.F:348
Used to run the bulk of the MC simulation, doing things like choosing move types and writing data to ...
subroutine, public mc_compute_virial(mc_env, rng_stream)
Computes the second virial coefficient of a molecule by using the integral form of the second virial ...
subroutine, public mc_run_ensemble(mc_env, para_env, globenv, input_declaration, nboxes, rng_stream)
directs the program in running one or two box MC simulations
contains the subroutines for dealing with the mc_env
subroutine, public get_mc_env(mc_env, mc_par, force_env)
provides a method for getting the various structures attached to an mc_env
subroutine, public mc_env_create(mc_env)
creates and initializes an mc_env
subroutine, public set_mc_env(mc_env, mc_par, force_env)
provides a method for attaching various structures to an mc_env
subroutine, public mc_env_release(mc_env)
releases the given mc env
preps the system for a Monte Carlo run (sets up some environments, calls the routines to read in the ...
Definition mc_run.F:40
subroutine, public do_mon_car(force_env_1, globenv, input_declaration, input_file_name)
starts the Monte Carlo simulation and determines which ensemble we're running
Definition mc_run.F:103
holds all the structure types needed for Monte Carlo, except the mc_environment_type
Definition mc_types.F:15
subroutine, public get_mc_par(mc_par, nstep, nvirial, iuptrans, iupcltrans, iupvolume, nmoves, nswapmoves, rm, cl, diff, nstart, source, group, lbias, ionode, lrestart, lstop, rmvolume, rmcltrans, rmbond, rmangle, rmrot, rmtrans, temperature, pressure, rclus, beta, pmswap, pmvolume, pmtraion, pmtrans, pmcltrans, ensemble, program, restart_file_name, molecules_file, moves_file, coords_file, energy_file, displacement_file, cell_file, dat_file, data_file, box2_file, fft_lib, iprint, rcut, ldiscrete, discrete_step, pmavbmc, pbias, avbmc_atom, avbmc_rmin, avbmc_rmax, rmdihedral, input_file, mc_molecule_info, pmswap_mol, pmavbmc_mol, pmtrans_mol, pmrot_mol, pmtraion_mol, mc_input_file, mc_bias_file, pmvol_box, pmclus_box, virial_temps, exp_min_val, exp_max_val, min_val, max_val, eta, pmhmc, pmhmc_box, lhmc, rand2skip)
...
Definition mc_types.F:405
subroutine, public get_mc_molecule_info(mc_molecule_info, nmol_types, nchain_total, nboxes, names, conf_prob, nchains, nunits, mol_type, nunits_tot, in_box, atom_names, mass)
...
Definition mc_types.F:554
subroutine, public read_mc_section(mc_par, para_env, globenv, input_file_name, input_file, force_env_section)
reads in the Monte Carlo simulation parameters from an input file
Definition mc_types.F:1209
subroutine, public mc_determine_molecule_info(force_env, mc_molecule_info, box_number, coordinates_empty)
figures out the number of total molecules, the number of atoms in each molecule, an array with the mo...
Definition mc_types.F:1787
subroutine, public mc_molecule_info_destroy(mc_molecule_info)
deallocates all the arrays in the mc_molecule_info_type
Definition mc_types.F:2001
subroutine, public mc_sim_par_destroy(mc_par)
destroys (deallocates) the mc_simulation_parameters type
Definition mc_types.F:888
subroutine, public mc_input_parameters_check(mc_par)
...
Definition mc_types.F:2024
subroutine, public mc_input_file_destroy(mc_input_file)
destroys (deallocates) things in the mc_input_file_type
Definition mc_types.F:1124
subroutine, public find_mc_rcut(mc_par, force_env, lterminate)
finds the largest interaction cutoff value in a classical simulation so we know the smallest size we ...
Definition mc_types.F:1728
subroutine, public mc_sim_par_create(mc_par, nmol_types)
creates (allocates) the mc_simulation_parameters type
Definition mc_types.F:851
subroutine, public mc_input_file_create(mc_input_file, input_file_name, mc_molecule_info, empty_coords, lhmc)
creates (allocates) the mc_input_file_type
Definition mc_types.F:932
subroutine, public set_mc_par(mc_par, rm, cl, diff, nstart, rmvolume, rmcltrans, rmbond, rmangle, rmdihedral, rmrot, rmtrans, program, nmoves, nswapmoves, lstop, temperature, pressure, rclus, iuptrans, iupcltrans, iupvolume, pmswap, pmvolume, pmtraion, pmtrans, pmcltrans, beta, rcut, iprint, lbias, nstep, lrestart, ldiscrete, discrete_step, pmavbmc, mc_molecule_info, pmavbmc_mol, pmtrans_mol, pmrot_mol, pmtraion_mol, pmswap_mol, avbmc_rmin, avbmc_rmax, avbmc_atom, pbias, ensemble, pmvol_box, pmclus_box, eta, mc_input_file, mc_bias_file, exp_max_val, exp_min_val, min_val, max_val, pmhmc, pmhmc_box, lhmc, ionode, source, group, rand2skip)
changes the private elements of the mc_parameters_type
Definition mc_types.F:667
Interface to the message passing library MPI.
Parallel (pseudo)random number generator (RNG) for multiple streams and substreams of random numbers.
integer, parameter, public uniform
Definition of physical constants:
Definition physcon.F:68
real(kind=dp), parameter, public angstrom
Definition physcon.F:144
allows for the creation of an array of force_env
wrapper to abstract the force evaluation of the various methods
contains the initially parsed file and the initial parallel environment
represent a section of the input file
stores all the informations relevant to an mpi environment