(git:374b731)
Loading...
Searching...
No Matches
simpar_methods.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 Methods for storing MD parameters type
10!> \author CJM
11!> \author Teodoro Laino [tlaino] - University of Zurich - 10.2008
12!> reorganization of the original routines/modules
13! **************************************************************************************************
15 USE bibliography, ONLY: evans1983,&
16 kuhne2007,&
19 ricci2003,&
20 cite_reference
27 USE input_constants, ONLY: &
43 USE kinds, ONLY: default_path_length,&
44 dp
45 USE simpar_types, ONLY: simpar_type
46#include "../base/base_uses.f90"
47
48 IMPLICIT NONE
49
50 PRIVATE
51 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'simpar_methods'
52 PUBLIC :: read_md_section
53
54CONTAINS
55
56! **************************************************************************************************
57!> \brief Reads the MD section and setup the simulation parameters type
58!> \param simpar ...
59!> \param motion_section ...
60!> \param md_section ...
61!> \author Teodoro Laino
62! **************************************************************************************************
63 SUBROUTINE read_md_section(simpar, motion_section, md_section)
64 TYPE(simpar_type), POINTER :: simpar
65 TYPE(section_vals_type), POINTER :: motion_section, md_section
66
67 CHARACTER(LEN=default_path_length) :: filename
68 INTEGER :: iprint, iw
69 REAL(kind=dp) :: tmp_r1, tmp_r2, tmp_r3
70 TYPE(cp_logger_type), POINTER :: logger
71 TYPE(enumeration_type), POINTER :: enum
72 TYPE(keyword_type), POINTER :: keyword
73 TYPE(section_type), POINTER :: section
74 TYPE(section_vals_type), POINTER :: print_key
75
76 NULLIFY (logger, print_key, enum, keyword, section)
77 logger => cp_get_default_logger()
78 iw = cp_print_key_unit_nr(logger, md_section, "PRINT%PROGRAM_RUN_INFO", extension=".log")
79
80 CALL read_md_low(simpar, motion_section, md_section)
81 IF (iw > 0) WRITE (unit=iw, fmt="(A)") ""
82
83 ! Begin setup Langevin dynamics
84 IF (simpar%ensemble == langevin_ensemble) THEN
85 CALL cite_reference(ricci2003)
86 IF (simpar%noisy_gamma > 0.0_dp) CALL cite_reference(kuhne2007)
87 IF (simpar%shadow_gamma > 0.0_dp) CALL cite_reference(rengaraj2020)
88 ! Normalization factor using a normal Gaussian random number distribution
89 simpar%var_w = 2.0_dp*simpar%temp_ext*simpar%dt*(simpar%gamma + simpar%noisy_gamma)
90 IF (iw > 0) THEN
91 WRITE (unit=iw, fmt="(T2,A)") &
92 "LD| Parameters for Langevin dynamics"
93 tmp_r1 = cp_unit_from_cp2k(simpar%gamma, "fs^-1")
94 tmp_r2 = cp_unit_from_cp2k(simpar%noisy_gamma, "fs^-1")
95 tmp_r3 = cp_unit_from_cp2k(simpar%shadow_gamma, "fs^-1")
96 WRITE (unit=iw, fmt="(T2,A,T71,ES10.3)") &
97 "LD| Gamma [1/fs] ", tmp_r1, &
98 "LD| Noisy Gamma [1/fs]", tmp_r2, &
99 "LD| Shadow Gamma [1/fs]", tmp_r3, &
100 "LD| Variance [a.u.]", simpar%var_w, &
101 ""
102 END IF
103 END IF
104
105 ! Create section for output enumeration infos
106 CALL create_md_section(section)
107 keyword => section_get_keyword(section, "ENSEMBLE")
108 CALL keyword_get(keyword, enum=enum)
109
110 ! Write MD setup information to output
111 IF (iw > 0) THEN
112 WRITE (iw, '(T2,A)') &
113 'MD_PAR| Molecular dynamics protocol (MD input parameters)'
114 WRITE (iw, '(T2,A,T61,A20)') &
115 'MD_PAR| Ensemble type', adjustr(trim(enum_i2c(enum, simpar%ensemble)))
116 WRITE (iw, '(T2,A,T61,I20)') &
117 'MD_PAR| Number of time steps', simpar%nsteps
118 IF (simpar%variable_dt) THEN
119 WRITE (iw, '(T2,A)') &
120 'MD_PAR| Variable time step is activated'
121 tmp_r1 = cp_unit_from_cp2k(simpar%dt, "fs")
122 WRITE (iw, '(T2,A,T61,F20.6)') &
123 'MD_PAR| Maximum time step [fs]', tmp_r1
124 tmp_r1 = cp_unit_from_cp2k(simpar%dr_tol, "angstrom")
125 WRITE (iw, '(T2,A,T61,F20.6)') &
126 'MD_PAR| Maximum atomic displacement permitted [A]', tmp_r1
127 ELSE
128 tmp_r1 = cp_unit_from_cp2k(simpar%dt, "fs")
129 WRITE (iw, '(T2,A,T61,F20.6)') &
130 'MD_PAR| Time step [fs]', tmp_r1
131 END IF
132 tmp_r1 = cp_unit_from_cp2k(simpar%temp_ext, "K")
133 WRITE (iw, '(T2,A,T61,F20.6)') &
134 'MD_PAR| Temperature [K]', tmp_r1
135 tmp_r1 = cp_unit_from_cp2k(simpar%temp_tol, "K")
136 WRITE (iw, '(T2,A,T61,F20.6)') &
137 'MD_PAR| Temperature tolerance [K]', tmp_r1
138
139 IF (simpar%annealing) THEN
140 WRITE (iw, '(T2,A,T61,F20.6)') &
141 'MD_PAR| Annealing ion factor', simpar%f_annealing
142 END IF
143 IF ((simpar%ensemble == npe_f_ensemble .OR. &
144 simpar%ensemble == npe_i_ensemble) .AND. &
145 simpar%annealing_cell) THEN
146 WRITE (iw, '(T2,A,T61,F20.6)') &
147 'MD_PAR| Annealing cell factor', simpar%f_annealing_cell
148 END IF
149 IF (simpar%ensemble == npt_i_ensemble .OR. &
150 simpar%ensemble == npt_ia_ensemble .OR. &
151 simpar%ensemble == npt_f_ensemble .OR. &
152 simpar%ensemble == npe_i_ensemble .OR. &
153 simpar%ensemble == npe_f_ensemble) THEN
154 tmp_r1 = cp_unit_from_cp2k(simpar%p_ext, "bar")
155 WRITE (iw, '(T2,A,T61,F20.6)') &
156 'MD_PAR| Pressure [bar]', tmp_r1
157 tmp_r1 = cp_unit_from_cp2k(simpar%tau_cell, "fs")
158 WRITE (iw, '(T2,A,T61,F20.6)') &
159 'MD_PAR| Barostat time constant [fs]', tmp_r1
160 END IF
161 IF (simpar%ensemble == isokin_ensemble) THEN
162 CALL cite_reference(evans1983)
163 CALL cite_reference(minary2003)
164 WRITE (iw, '(T2,A)') &
165 'MD_PAR| Simulation using the isokinetic ensemble'
166 END IF
167 IF (simpar%constraint) THEN
168 WRITE (iw, '(T2,A)') &
169 'MD_PAR| Constraints activated'
170 WRITE (iw, '(T2,A,T61,F20.6)') &
171 'MD_PAR| Tolerance for shake', simpar%shake_tol
172 END IF
173
174 print_key => section_vals_get_subs_vals(motion_section, "MD%PRINT%PROGRAM_RUN_INFO")
175 CALL section_vals_val_get(print_key, "EACH%MD", i_val=iprint)
176 WRITE (iw, '(T2,A,T63,I10,A)') &
177 'MD_PAR| Print MD information every', iprint, ' step(s)'
178 WRITE (iw, '(T2,A,T22,A,T71,A10)') &
179 'MD_PAR| File type', 'Print frequency [steps]', 'File names'
180
181 print_key => section_vals_get_subs_vals(motion_section, "PRINT%TRAJECTORY")
182 CALL section_vals_val_get(print_key, "EACH%MD", i_val=iprint)
183 filename = cp_print_key_generate_filename(logger, print_key, &
184 extension=".xyz", middle_name="pos", my_local=.false.)
185 WRITE (iw, '(T2,A,T22,I10,T33,A48)') &
186 'MD_PAR| Coordinates', iprint, adjustr(trim(filename))
187
188 IF ((simpar%ensemble == nph_uniaxial_ensemble) .OR. &
189 (simpar%ensemble == nph_uniaxial_damped_ensemble) .OR. &
190 (simpar%ensemble == npt_i_ensemble) .OR. &
191 (simpar%ensemble == npt_ia_ensemble) .OR. &
192 (simpar%ensemble == npt_f_ensemble) .OR. &
193 (simpar%ensemble == npe_i_ensemble) .OR. &
194 (simpar%ensemble == npe_f_ensemble)) THEN
195
196 print_key => section_vals_get_subs_vals(motion_section, "PRINT%CELL")
197 CALL section_vals_val_get(print_key, "EACH%MD", i_val=iprint)
198 filename = cp_print_key_generate_filename(logger, print_key, &
199 extension=".cell", my_local=.false.)
200 WRITE (iw, '(T2,A,T22,I10,T33,A48)') &
201 'MD_PAR| Cell', iprint, adjustr(trim(filename))
202 END IF
203
204 print_key => section_vals_get_subs_vals(motion_section, "PRINT%VELOCITIES")
205 CALL section_vals_val_get(print_key, "EACH%MD", i_val=iprint)
206 filename = cp_print_key_generate_filename(logger, print_key, &
207 extension=".xyz", middle_name="vel", my_local=.false.)
208 WRITE (iw, '(T2,A,T22,I10,T33,A48)') &
209 'MD_PAR| Velocities', iprint, adjustr(trim(filename))
210
211 print_key => section_vals_get_subs_vals(motion_section, "MD%PRINT%ENERGY")
212 CALL section_vals_val_get(print_key, "EACH%MD", i_val=iprint)
213 filename = cp_print_key_generate_filename(logger, print_key, &
214 extension=".ener", my_local=.false.)
215 WRITE (iw, '(T2,A,T22,I10,T33,A48)') &
216 'MD_PAR| Energies', iprint, adjustr(trim(filename))
217
218 print_key => section_vals_get_subs_vals(motion_section, "PRINT%RESTART")
219 CALL section_vals_val_get(print_key, "EACH%MD", i_val=iprint)
220 filename = cp_print_key_generate_filename(logger, print_key, &
221 extension=".restart", my_local=.false.)
222 WRITE (iw, '(T2,A,T22,I10,T33,A48)') &
223 'MD_PAR| Dump', iprint, adjustr(trim(filename))
224
225 IF ((simpar%ensemble == nph_uniaxial_ensemble) .OR. &
226 (simpar%ensemble == nph_uniaxial_damped_ensemble)) THEN
227 WRITE (iw, '(T2,A)') 'SHOCK| Uniaxial shock parameters: '
228 tmp_r1 = cp_unit_from_cp2k(simpar%v_shock, "m*s^-1")
229 WRITE (iw, '(T2,A,T61,F20.6)') &
230 'SHOCK| Shock velocity [m/s]', tmp_r1
231 tmp_r1 = cp_unit_from_cp2k(simpar%gamma_nph, "fs^-1")
232 WRITE (iw, '(T2,A,T61,F20.6)') &
233 'SHOCK| Damping coefficient [1/fs]', tmp_r1
234 tmp_r1 = cp_unit_from_cp2k(simpar%p0, "bar")
235 WRITE (iw, '(T2,A,T61,F20.6)') &
236 'SHOCK| Pressure [bar]', tmp_r1
237 WRITE (iw, '(T2,A,T61,F20.6)') &
238 'SHOCK| Barostat mass [a.u.]', simpar%cmass
239 END IF
240 ! Print warning for temp_tol
241 IF (simpar%temp_tol > 0.0_dp) THEN
242 CALL cp_warn(__location__, &
243 "A temperature tolerance (TEMP_TOL) is used during the MD. "// &
244 "Due to the velocity rescaling algorithm jumps may appear in the conserved quantity.")
245 END IF
246 ! Print warning for annealing
247 IF (simpar%annealing) THEN
248 IF ((simpar%ensemble == nvt_ensemble) .OR. &
249 (simpar%ensemble == npt_i_ensemble) .OR. &
250 (simpar%ensemble == npt_ia_ensemble) .OR. &
251 (simpar%ensemble == npt_f_ensemble)) THEN
252 CALL cp_abort(__location__, &
253 "Annealing of the ions has been required "// &
254 "even if the thermostat is active (nvt or npt_i or npt_ia or npt_f) "// &
255 "These two methods to control the temperature act one against the other.")
256 END IF
257 END IF
258 ! Print warning for variable time step
259 IF (simpar%variable_dt) THEN
260 IF ((simpar%ensemble == langevin_ensemble) .OR. &
261 (simpar%ensemble == reftraj_ensemble) .OR. &
262 simpar%do_respa) THEN
263 CALL cp_warn( &
264 __location__, &
265 "The variable timestep has been required, however "// &
266 "this option is not available either with the Langevin ensemble or with the multiple timestep schme. "// &
267 "The run will proceed with constant timestep, as read from input.")
268 END IF
269 END IF
270 END IF
271 CALL section_release(section)
272 CALL cp_print_key_finished_output(iw, logger, md_section, &
273 "PRINT%PROGRAM_RUN_INFO")
274
275 END SUBROUTINE read_md_section
276
277! **************************************************************************************************
278!> \brief Low Level: Parses the MD input section
279!> \param simpar ...
280!> \param motion_section ...
281!> \param md_section ...
282!> \author teo
283! **************************************************************************************************
284 SUBROUTINE read_md_low(simpar, motion_section, md_section)
285 TYPE(simpar_type), POINTER :: simpar
286 TYPE(section_vals_type), POINTER :: motion_section, md_section
287
288 LOGICAL :: explicit
289 TYPE(section_vals_type), POINTER :: tmp_section
290
291 NULLIFY (tmp_section)
292 CALL section_vals_val_get(md_section, "ENSEMBLE", i_val=simpar%ensemble)
293 CALL section_vals_val_get(md_section, "STEPS", i_val=simpar%nsteps)
294 CALL section_vals_val_get(md_section, "MAX_STEPS", i_val=simpar%max_steps)
295 CALL section_vals_val_get(md_section, "TEMPERATURE", r_val=simpar%temp_ext)
296 CALL section_vals_val_get(md_section, "TEMP_TOL", r_val=simpar%temp_tol)
297 CALL section_vals_val_get(md_section, "ANGVEL_ZERO", l_val=simpar%angvel_zero)
298 CALL section_vals_val_get(md_section, "TEMP_KIND", l_val=simpar%temperature_per_kind)
299 CALL section_vals_val_get(md_section, "SCALE_TEMP_KIND", l_val=simpar%scale_temperature_per_kind)
300 CALL section_vals_val_get(md_section, "ANNEALING", r_val=simpar%f_annealing, explicit=simpar%annealing)
301 CALL section_vals_val_get(md_section, "ANNEALING_CELL", r_val=simpar%f_annealing_cell, &
302 explicit=simpar%annealing_cell)
303 CALL section_vals_val_get(md_section, "TEMPERATURE_ANNEALING", r_val=simpar%f_temperature_annealing, &
304 explicit=simpar%temperature_annealing)
305 CALL section_vals_val_get(md_section, "DISPLACEMENT_TOL", r_val=simpar%dr_tol, &
306 explicit=simpar%variable_dt)
307 CALL section_vals_val_get(md_section, "TIMESTEP", r_val=simpar%dt)
308 CALL section_vals_val_get(md_section, "INITIALIZATION_METHOD", &
309 i_val=simpar%initialization_method)
310 ! Initialize dt_fact to 1.0
311 simpar%dt_fact = 1.0_dp
312
313 IF (simpar%ensemble == langevin_ensemble) THEN
314 CALL section_vals_val_get(md_section, "LANGEVIN%GAMMA", r_val=simpar%gamma)
315 CALL section_vals_val_get(md_section, "LANGEVIN%NOISY_GAMMA", r_val=simpar%noisy_gamma)
316 CALL section_vals_val_get(md_section, "LANGEVIN%SHADOW_GAMMA", r_val=simpar%shadow_gamma)
317 END IF
318
319 tmp_section => section_vals_get_subs_vals(motion_section, "CONSTRAINT")
320 CALL section_vals_get(tmp_section, explicit=simpar%constraint)
321 IF (simpar%constraint) THEN
322 CALL section_vals_val_get(tmp_section, "SHAKE_TOLERANCE", r_val=simpar%shake_tol)
323 IF (simpar%shake_tol <= epsilon(0.0_dp)*1000.0_dp) &
324 CALL cp_warn(__location__, &
325 "Shake tolerance lower than 1000*EPSILON, where EPSILON is the machine precision. "// &
326 "This may lead to numerical problems. Setting up shake_tol to 1000*EPSILON!")
327 simpar%shake_tol = max(epsilon(0.0_dp)*1000.0_dp, simpar%shake_tol)
328
329 CALL section_vals_val_get(tmp_section, "ROLL_TOLERANCE", r_val=simpar%roll_tol)
330 IF (simpar%roll_tol <= epsilon(0.0_dp)*1000.0_dp) &
331 CALL cp_warn(__location__, &
332 "Roll tolerance lower than 1000*EPSILON, where EPSILON is the machine precision. "// &
333 "This may lead to numerical problems. Setting up roll_tol to 1000*EPSILON!")
334 simpar%roll_tol = max(epsilon(0.0_dp)*1000.0_dp, simpar%roll_tol)
335 END IF
336
337 IF (simpar%ensemble == nph_uniaxial_ensemble .OR. simpar%ensemble == nph_uniaxial_damped_ensemble) THEN
338 tmp_section => section_vals_get_subs_vals(md_section, "MSST")
339 CALL section_vals_val_get(tmp_section, "PRESSURE", r_val=simpar%p0)
340 CALL section_vals_val_get(tmp_section, "ENERGY", r_val=simpar%e0)
341 CALL section_vals_val_get(tmp_section, "VOLUME", r_val=simpar%v0)
342 CALL section_vals_val_get(tmp_section, "GAMMA", r_val=simpar%gamma_nph)
343 IF (simpar%gamma_nph /= 0.0_dp) simpar%ensemble = nph_uniaxial_damped_ensemble
344 CALL section_vals_val_get(tmp_section, "CMASS", r_val=simpar%cmass)
345 CALL section_vals_val_get(tmp_section, "VSHOCK", r_val=simpar%v_shock)
346 END IF
347
348 SELECT CASE (simpar%ensemble)
351 tmp_section => section_vals_get_subs_vals(md_section, "BAROSTAT")
352 CALL section_vals_val_get(tmp_section, "PRESSURE", r_val=simpar%p_ext)
353 CALL section_vals_val_get(tmp_section, "TIMECON", r_val=simpar%tau_cell)
354 END SELECT
355
356 ! RESPA
357 tmp_section => section_vals_get_subs_vals(md_section, "RESPA")
358 CALL section_vals_get(tmp_section, explicit=simpar%do_respa)
359 CALL section_vals_val_get(tmp_section, "FREQUENCY", i_val=simpar%n_time_steps)
360 simpar%multi_time_switch = simpar%do_respa
361
362 ! CORE-SHELL MODEL
363 tmp_section => section_vals_get_subs_vals(md_section, "SHELL")
364 CALL section_vals_val_get(tmp_section, "TEMPERATURE", r_val=simpar%temp_sh_ext)
365 CALL section_vals_val_get(tmp_section, "TEMP_TOL", r_val=simpar%temp_sh_tol)
366
367 CALL section_vals_val_get(tmp_section, "DISPLACEMENT_SHELL_TOL", r_val=simpar%dsc_tol, &
368 explicit=explicit)
369 simpar%variable_dt = simpar%variable_dt .OR. explicit
370 ! ADIABATIC DYNAMICS
371 tmp_section => section_vals_get_subs_vals(md_section, "ADIABATIC_DYNAMICS")
372 CALL section_vals_val_get(tmp_section, "TEMP_FAST", r_val=simpar%temp_fast)
373 CALL section_vals_val_get(tmp_section, "TEMP_SLOW", r_val=simpar%temp_slow)
374 CALL section_vals_val_get(tmp_section, "TEMP_TOL_FAST", r_val=simpar%temp_tol_fast)
375 CALL section_vals_val_get(tmp_section, "TEMP_TOL_SLOW", r_val=simpar%temp_tol_slow)
376 CALL section_vals_val_get(tmp_section, "N_RESP_FAST", i_val=simpar%n_resp_fast)
377
378 ! VELOCITY SOFTENING
379 tmp_section => section_vals_get_subs_vals(md_section, "VELOCITY_SOFTENING")
380 CALL section_vals_val_get(tmp_section, "STEPS", i_val=simpar%soften_nsteps)
381 CALL section_vals_val_get(tmp_section, "ALPHA", r_val=simpar%soften_alpha)
382 CALL section_vals_val_get(tmp_section, "DELTA", r_val=simpar%soften_delta)
383 END SUBROUTINE read_md_low
384
385END MODULE simpar_methods
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public rengaraj2020
integer, save, public kuhne2007
integer, save, public ricci2003
integer, save, public minary2003
integer, save, public evans1983
various routines to log and control the output. The idea is that decisions about where to log should ...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer function, public cp_print_key_unit_nr(logger, basis_section, print_key_path, extension, middle_name, local, log_filename, ignore_should_output, file_form, file_position, file_action, file_status, do_backup, on_file, is_new_file, mpi_io, fout)
...
character(len=default_path_length) function, public cp_print_key_generate_filename(logger, print_key, middle_name, extension, my_local)
Utility function that returns a unit number to write the print key. Might open a file with a unique f...
subroutine, public cp_print_key_finished_output(unit_nr, logger, basis_section, print_key_path, local, ignore_should_output, on_file, mpi_io)
should be called after you finish working with a unit obtained with cp_print_key_unit_nr,...
unit conversion facility
Definition cp_units.F:30
real(kind=dp) function, public cp_unit_from_cp2k(value, unit_str, defaults, power)
converts from the internal cp2k units to the given unit
Definition cp_units.F:1179
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public nph_uniaxial_ensemble
integer, parameter, public npt_i_ensemble
integer, parameter, public isokin_ensemble
integer, parameter, public nph_uniaxial_damped_ensemble
integer, parameter, public npe_f_ensemble
integer, parameter, public langevin_ensemble
integer, parameter, public npe_i_ensemble
integer, parameter, public npt_ia_ensemble
integer, parameter, public npt_f_ensemble
integer, parameter, public reftraj_ensemble
integer, parameter, public nvt_ensemble
subroutine, public create_md_section(section)
...
represents an enumeration, i.e. a mapping between integers and strings
character(len=default_string_length) function, public enum_i2c(enum, i)
maps an integer to a string
represents keywords in an input
subroutine, public keyword_get(keyword, names, usage, description, type_of_var, n_var, default_value, lone_keyword_value, repeats, enum, citations)
...
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
recursive subroutine, public section_release(section)
releases the given keyword list (see doc/ReferenceCounting.html)
recursive type(keyword_type) function, pointer, public section_get_keyword(section, keyword_name)
returns the requested keyword
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
integer, parameter, public default_path_length
Definition kinds.F:58
Methods for storing MD parameters type.
subroutine, public read_md_section(simpar, motion_section, md_section)
Reads the MD section and setup the simulation parameters type.
Type for storing MD parameters.
type of a logger, at the moment it contains just a print level starting at which level it should be l...
represent a keyword in the input
represent a section of the input file
Simulation parameter type for molecular dynamics.