(git:34ef472)
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,&
17  minary2003,&
18  rengaraj2020,&
19  ricci2003,&
20  cite_reference
22  cp_logger_type
26  USE cp_units, ONLY: cp_unit_from_cp2k
27  USE input_constants, ONLY: &
33  enumeration_type
34  USE input_keyword_types, ONLY: keyword_get,&
35  keyword_type
38  section_type,&
41  section_vals_type,&
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 
54 CONTAINS
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 
385 END MODULE simpar_methods
collects all references to literature in CP2K as new algorithms / method are included from literature...
Definition: bibliography.F:28
integer, save, public rengaraj2020
Definition: bibliography.F:43
integer, save, public kuhne2007
Definition: bibliography.F:43
integer, save, public ricci2003
Definition: bibliography.F:43
integer, save, public minary2003
Definition: bibliography.F:43
integer, save, public evans1983
Definition: bibliography.F:43
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)
...
Definition: input_cp2k_md.F:69
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.
Definition: simpar_types.F:14