(git:374b731)
Loading...
Searching...
No Matches
averages_types.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 Handles the type to compute averages during an MD
10!> \author Teodoro Laino [tlaino] - 03.2008 - University of Zurich
11! **************************************************************************************************
13 USE cell_types, ONLY: cell_type
14 USE colvar_utils, ONLY: get_clv_force,&
27 USE kinds, ONLY: default_string_length,&
28 dp
30 USE virial_types, ONLY: virial_type
31#include "../base/base_uses.f90"
32
33 IMPLICIT NONE
34
35 PRIVATE
36
37! **************************************************************************************************
39 INTEGER :: ref_count = 0, itimes_start = -1
40 LOGICAL :: do_averages = .false.
41 TYPE(section_vals_type), POINTER :: averages_section => null()
42 ! Real Scalar Quantities
43 REAL(kind=dp) :: avetemp = 0.0_dp, avepot = 0.0_dp, avekin = 0.0_dp, &
44 avevol = 0.0_dp, aveca = 0.0_dp, avecb = 0.0_dp, avecc = 0.0_dp
45 REAL(kind=dp) :: avetemp_baro = 0.0_dp, avehugoniot = 0.0_dp, avecpu = 0.0_dp
46 REAL(kind=dp) :: aveal = 0.0_dp, avebe = 0.0_dp, avega = 0.0_dp, avepress = 0.0_dp, &
47 avekinc = 0.0_dp, avetempc = 0.0_dp, avepxx = 0.0_dp
48 REAL(kind=dp) :: avetemp_qm = 0.0_dp, avekin_qm = 0.0_dp, econs = 0.0_dp
49 ! Virial
50 TYPE(virial_type), POINTER :: virial => null()
51 ! Colvar
52 REAL(kind=dp), POINTER, DIMENSION(:) :: avecolvar => null()
53 REAL(kind=dp), POINTER, DIMENSION(:) :: avemmatrix => null()
55
56! **************************************************************************************************
57 INTERFACE get_averages
58 MODULE PROCEDURE get_averages_rs, get_averages_rv, get_averages_rm
59 END INTERFACE get_averages
60
61! *** Public subroutines and data types ***
64
65! *** Global parameters ***
66 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'averages_types'
67
68CONTAINS
69
70! **************************************************************************************************
71!> \brief Creates averages environment
72!> \param averages ...
73!> \param averages_section ...
74!> \param virial_avg ...
75!> \param force_env ...
76!> \author Teodoro Laino [tlaino] - 03.2008 - University of Zurich
77! **************************************************************************************************
78 SUBROUTINE create_averages(averages, averages_section, virial_avg, force_env)
79 TYPE(average_quantities_type), POINTER :: averages
80 TYPE(section_vals_type), POINTER :: averages_section
81 LOGICAL, INTENT(IN), OPTIONAL :: virial_avg
82 TYPE(force_env_type), POINTER :: force_env
83
84 INTEGER :: i, nint
85 LOGICAL :: do_colvars
86
87 ALLOCATE (averages)
88 ! Point to the averages section
89 averages%averages_section => averages_section
90 averages%ref_count = 1
91 CALL section_vals_val_get(averages_section, "_SECTION_PARAMETERS_", l_val=averages%do_averages)
92 IF (averages%do_averages) THEN
93 ! Setup Virial if requested
94 IF (PRESENT(virial_avg)) THEN
95 IF (virial_avg) THEN
96 ALLOCATE (averages%virial)
97 END IF
98 END IF
99 CALL section_vals_val_get(averages_section, "AVERAGE_COLVAR", l_val=do_colvars)
100 ! Total number of COLVARs
101 nint = 0
102 IF (do_colvars) nint = number_of_colvar(force_env)
103 ALLOCATE (averages%avecolvar(nint))
104 ALLOCATE (averages%aveMmatrix(nint*nint))
105 DO i = 1, nint
106 averages%avecolvar(i) = 0.0_dp
107 END DO
108 DO i = 1, nint*nint
109 averages%aveMmatrix(i) = 0.0_dp
110 END DO
111 END IF
112 END SUBROUTINE create_averages
113
114! **************************************************************************************************
115!> \brief retains the given averages env
116!> \param averages ...
117!> \author Teodoro Laino [tlaino] - 03.2008 - University of Zurich
118! **************************************************************************************************
119 SUBROUTINE retain_averages(averages)
120 TYPE(average_quantities_type), POINTER :: averages
121
122 cpassert(ASSOCIATED(averages))
123 cpassert(averages%ref_count > 0)
124 averages%ref_count = averages%ref_count + 1
125 END SUBROUTINE retain_averages
126
127! **************************************************************************************************
128!> \brief releases the given averages env
129!> \param averages ...
130!> \author Teodoro Laino [tlaino] - 03.2008 - University of Zurich
131! **************************************************************************************************
132 SUBROUTINE release_averages(averages)
133 TYPE(average_quantities_type), POINTER :: averages
134
135 TYPE(section_vals_type), POINTER :: work_section
136
137 IF (ASSOCIATED(averages)) THEN
138 cpassert(averages%ref_count > 0)
139 averages%ref_count = averages%ref_count - 1
140 IF (averages%ref_count == 0) THEN
141 IF (ASSOCIATED(averages%virial)) DEALLOCATE (averages%virial)
142 IF (ASSOCIATED(averages%avecolvar)) THEN
143 DEALLOCATE (averages%avecolvar)
144 END IF
145 IF (ASSOCIATED(averages%aveMmatrix)) THEN
146 DEALLOCATE (averages%aveMmatrix)
147 END IF
148 ! Removes restart values from the corresponding restart section..
149 work_section => section_vals_get_subs_vals(averages%averages_section, "RESTART_AVERAGES")
150 CALL section_vals_remove_values(work_section)
151 NULLIFY (averages%averages_section)
152 !
153 DEALLOCATE (averages)
154 END IF
155 END IF
156
157 END SUBROUTINE release_averages
158
159! **************************************************************************************************
160!> \brief computes the averages
161!> \param averages ...
162!> \param force_env ...
163!> \param md_ener ...
164!> \param cell ...
165!> \param virial ...
166!> \param pv_scalar ...
167!> \param pv_xx ...
168!> \param used_time ...
169!> \param hugoniot ...
170!> \param abc ...
171!> \param cell_angle ...
172!> \param nat ...
173!> \param itimes ...
174!> \param time ...
175!> \param my_pos ...
176!> \param my_act ...
177!> \author Teodoro Laino [tlaino] - 03.2008 - University of Zurich
178! **************************************************************************************************
179 SUBROUTINE compute_averages(averages, force_env, md_ener, cell, virial, &
180 pv_scalar, pv_xx, used_time, hugoniot, abc, cell_angle, nat, itimes, &
181 time, my_pos, my_act)
182 TYPE(average_quantities_type), POINTER :: averages
183 TYPE(force_env_type), POINTER :: force_env
184 TYPE(md_ener_type), POINTER :: md_ener
185 TYPE(cell_type), POINTER :: cell
186 TYPE(virial_type), POINTER :: virial
187 REAL(kind=dp), INTENT(IN) :: pv_scalar, pv_xx
188 REAL(kind=dp), POINTER :: used_time
189 REAL(kind=dp), INTENT(IN) :: hugoniot
190 REAL(kind=dp), DIMENSION(3), INTENT(IN) :: abc, cell_angle
191 INTEGER, INTENT(IN) :: nat, itimes
192 REAL(kind=dp), INTENT(IN) :: time
193 CHARACTER(LEN=default_string_length), INTENT(IN) :: my_pos, my_act
194
195 CHARACTER(len=*), PARAMETER :: routinen = 'compute_averages'
196
197 CHARACTER(LEN=default_string_length) :: ctmp
198 INTEGER :: delta_t, handle, i, nint, output_unit
199 LOGICAL :: restart_averages
200 REAL(kind=dp) :: start_time
201 REAL(kind=dp), DIMENSION(:), POINTER :: cvalues, mmatrix, tmp
202 TYPE(cp_logger_type), POINTER :: logger
203 TYPE(section_vals_type), POINTER :: restart_section
204
205 CALL timeset(routinen, handle)
206 CALL section_vals_val_get(averages%averages_section, "ACQUISITION_START_TIME", &
207 r_val=start_time)
208 IF (averages%do_averages) THEN
209 NULLIFY (cvalues, mmatrix, logger)
210 logger => cp_get_default_logger()
211 ! Determine the nr. of internal colvar (if any/requested)
212 nint = 0
213 IF (ASSOCIATED(averages%avecolvar)) nint = SIZE(averages%avecolvar)
214
215 ! Evaluate averages if we collected enough statistics (user defined)
216 IF (time >= start_time) THEN
217
218 ! Handling properly the restart
219 IF (averages%itimes_start == -1) THEN
220 restart_section => section_vals_get_subs_vals(averages%averages_section, "RESTART_AVERAGES")
221 CALL section_vals_get(restart_section, explicit=restart_averages)
222 IF (restart_averages) THEN
223 CALL section_vals_val_get(restart_section, "ITIMES_START", i_val=averages%itimes_start)
224 CALL section_vals_val_get(restart_section, "AVECPU", r_val=averages%avecpu)
225 CALL section_vals_val_get(restart_section, "AVEHUGONIOT", r_val=averages%avehugoniot)
226 CALL section_vals_val_get(restart_section, "AVETEMP_BARO", r_val=averages%avetemp_baro)
227 CALL section_vals_val_get(restart_section, "AVEPOT", r_val=averages%avepot)
228 CALL section_vals_val_get(restart_section, "AVEKIN", r_val=averages%avekin)
229 CALL section_vals_val_get(restart_section, "AVETEMP", r_val=averages%avetemp)
230 CALL section_vals_val_get(restart_section, "AVEKIN_QM", r_val=averages%avekin_qm)
231 CALL section_vals_val_get(restart_section, "AVETEMP_QM", r_val=averages%avetemp_qm)
232 CALL section_vals_val_get(restart_section, "AVEVOL", r_val=averages%avevol)
233 CALL section_vals_val_get(restart_section, "AVECELL_A", r_val=averages%aveca)
234 CALL section_vals_val_get(restart_section, "AVECELL_B", r_val=averages%avecb)
235 CALL section_vals_val_get(restart_section, "AVECELL_C", r_val=averages%avecc)
236 CALL section_vals_val_get(restart_section, "AVEALPHA", r_val=averages%aveal)
237 CALL section_vals_val_get(restart_section, "AVEBETA", r_val=averages%avebe)
238 CALL section_vals_val_get(restart_section, "AVEGAMMA", r_val=averages%avega)
239 CALL section_vals_val_get(restart_section, "AVE_ECONS", r_val=averages%econs)
240 ! Virial
241 IF (virial%pv_availability) THEN
242 CALL section_vals_val_get(restart_section, "AVE_PRESS", r_val=averages%avepress)
243 CALL section_vals_val_get(restart_section, "AVE_PXX", r_val=averages%avepxx)
244 IF (ASSOCIATED(averages%virial)) THEN
245 CALL section_vals_val_get(restart_section, "AVE_PV_TOT", r_vals=tmp)
246 averages%virial%pv_total = reshape(tmp, (/3, 3/))
247 CALL section_vals_val_get(restart_section, "AVE_PV_VIR", r_vals=tmp)
248 averages%virial%pv_virial = reshape(tmp, (/3, 3/))
249 CALL section_vals_val_get(restart_section, "AVE_PV_KIN", r_vals=tmp)
250 averages%virial%pv_kinetic = reshape(tmp, (/3, 3/))
251 CALL section_vals_val_get(restart_section, "AVE_PV_CNSTR", r_vals=tmp)
252 averages%virial%pv_constraint = reshape(tmp, (/3, 3/))
253 CALL section_vals_val_get(restart_section, "AVE_PV_XC", r_vals=tmp)
254 averages%virial%pv_xc = reshape(tmp, (/3, 3/))
255 CALL section_vals_val_get(restart_section, "AVE_PV_FOCK_4C", r_vals=tmp)
256 averages%virial%pv_fock_4c = reshape(tmp, (/3, 3/))
257 END IF
258 END IF
259 ! Colvars
260 IF (nint > 0) THEN
261 CALL section_vals_val_get(restart_section, "AVE_COLVARS", r_vals=cvalues)
262 CALL section_vals_val_get(restart_section, "AVE_MMATRIX", r_vals=mmatrix)
263 cpassert(nint == SIZE(cvalues))
264 cpassert(nint*nint == SIZE(mmatrix))
265 averages%avecolvar = cvalues
266 averages%aveMmatrix = mmatrix
267 END IF
268 ELSE
269 averages%itimes_start = itimes
270 END IF
271 END IF
272 delta_t = itimes - averages%itimes_start + 1
273
274 ! Perform averages
275 SELECT CASE (delta_t)
276 CASE (1)
277 averages%avecpu = used_time
278 averages%avehugoniot = hugoniot
279 averages%avetemp_baro = md_ener%temp_baro
280 averages%avepot = md_ener%epot
281 averages%avekin = md_ener%ekin
282 averages%avetemp = md_ener%temp_part
283 averages%avekin_qm = md_ener%ekin_qm
284 averages%avetemp_qm = md_ener%temp_qm
285 averages%avevol = cell%deth
286 averages%aveca = abc(1)
287 averages%avecb = abc(2)
288 averages%avecc = abc(3)
289 averages%aveal = cell_angle(3)
290 averages%avebe = cell_angle(2)
291 averages%avega = cell_angle(1)
292 averages%econs = 0._dp
293 ! Virial
294 IF (virial%pv_availability) THEN
295 averages%avepress = pv_scalar
296 averages%avepxx = pv_xx
297 IF (ASSOCIATED(averages%virial)) THEN
298 averages%virial%pv_total = virial%pv_total
299 averages%virial%pv_virial = virial%pv_virial
300 averages%virial%pv_kinetic = virial%pv_kinetic
301 averages%virial%pv_constraint = virial%pv_constraint
302 averages%virial%pv_xc = virial%pv_xc
303 averages%virial%pv_fock_4c = virial%pv_fock_4c
304 END IF
305 END IF
306 ! Colvars
307 IF (nint > 0) THEN
308 CALL get_clv_force(force_env, nsize_xyz=nat*3, nsize_int=nint, &
309 cvalues=averages%avecolvar, mmatrix=averages%aveMmatrix)
310 END IF
311 CASE DEFAULT
312 CALL get_averages(averages%avecpu, used_time, delta_t)
313 CALL get_averages(averages%avehugoniot, hugoniot, delta_t)
314 CALL get_averages(averages%avetemp_baro, md_ener%temp_baro, delta_t)
315 CALL get_averages(averages%avepot, md_ener%epot, delta_t)
316 CALL get_averages(averages%avekin, md_ener%ekin, delta_t)
317 CALL get_averages(averages%avetemp, md_ener%temp_part, delta_t)
318 CALL get_averages(averages%avekin_qm, md_ener%ekin_qm, delta_t)
319 CALL get_averages(averages%avetemp_qm, md_ener%temp_qm, delta_t)
320 CALL get_averages(averages%avevol, cell%deth, delta_t)
321 CALL get_averages(averages%aveca, abc(1), delta_t)
322 CALL get_averages(averages%avecb, abc(2), delta_t)
323 CALL get_averages(averages%avecc, abc(3), delta_t)
324 CALL get_averages(averages%aveal, cell_angle(3), delta_t)
325 CALL get_averages(averages%avebe, cell_angle(2), delta_t)
326 CALL get_averages(averages%avega, cell_angle(1), delta_t)
327 CALL get_averages(averages%econs, md_ener%delta_cons, delta_t)
328 ! Virial
329 IF (virial%pv_availability) THEN
330 CALL get_averages(averages%avepress, pv_scalar, delta_t)
331 CALL get_averages(averages%avepxx, pv_xx, delta_t)
332 IF (ASSOCIATED(averages%virial)) THEN
333 CALL get_averages(averages%virial%pv_total, virial%pv_total, delta_t)
334 CALL get_averages(averages%virial%pv_virial, virial%pv_virial, delta_t)
335 CALL get_averages(averages%virial%pv_kinetic, virial%pv_kinetic, delta_t)
336 CALL get_averages(averages%virial%pv_constraint, virial%pv_constraint, delta_t)
337 CALL get_averages(averages%virial%pv_xc, virial%pv_xc, delta_t)
338 CALL get_averages(averages%virial%pv_fock_4c, virial%pv_fock_4c, delta_t)
339 END IF
340 END IF
341 ! Colvars
342 IF (nint > 0) THEN
343 ALLOCATE (cvalues(nint))
344 ALLOCATE (mmatrix(nint*nint))
345 CALL get_clv_force(force_env, nsize_xyz=nat*3, nsize_int=nint, cvalues=cvalues, &
346 mmatrix=mmatrix)
347 CALL get_averages(averages%avecolvar, cvalues, delta_t)
348 CALL get_averages(averages%aveMmatrix, mmatrix, delta_t)
349 DEALLOCATE (cvalues)
350 DEALLOCATE (mmatrix)
351 END IF
352 END SELECT
353 END IF
354
355 ! Possibly print averages
356 output_unit = cp_print_key_unit_nr(logger, averages%averages_section, "PRINT_AVERAGES", &
357 extension=".avg", file_position=my_pos, file_action=my_act)
358 IF (output_unit > 0) THEN
359 WRITE (output_unit, fmt='(A15,1X,"=",1X,G15.9," NSTEP #",I15)') &
360 "AVECPU", averages%avecpu, itimes, &
361 "AVEHUGONIOT", averages%avehugoniot, itimes, &
362 "AVETEMP_BARO", averages%avetemp_baro, itimes, &
363 "AVEPOT", averages%avepot, itimes, &
364 "AVEKIN", averages%avekin, itimes, &
365 "AVETEMP", averages%avetemp, itimes, &
366 "AVEKIN_QM", averages%avekin_qm, itimes, &
367 "AVETEMP_QM", averages%avetemp_qm, itimes, &
368 "AVEVOL", averages%avevol, itimes, &
369 "AVECELL_A", averages%aveca, itimes, &
370 "AVECELL_B", averages%avecb, itimes, &
371 "AVECELL_C", averages%avecc, itimes, &
372 "AVEALPHA", averages%aveal, itimes, &
373 "AVEBETA", averages%avebe, itimes, &
374 "AVEGAMMA", averages%avega, itimes, &
375 "AVE_ECONS", averages%econs, itimes
376 ! Print the virial
377 IF (virial%pv_availability) THEN
378 WRITE (output_unit, fmt='(A15,1X,"=",1X,G15.9," NSTEP #",I15)') &
379 "AVE_PRESS", averages%avepress, itimes, &
380 "AVE_PXX", averages%avepxx, itimes
381 IF (ASSOCIATED(averages%virial)) THEN
382 WRITE (output_unit, fmt='(A15,1X,"=",1X,G15.9," NSTEP #",I15)') &
383 "AVE_PV_TOT", averages%virial%pv_total, itimes, &
384 "AVE_PV_VIR", averages%virial%pv_virial, itimes, &
385 "AVE_PV_KIN", averages%virial%pv_kinetic, itimes, &
386 "AVE_PV_CNSTR", averages%virial%pv_constraint, itimes, &
387 "AVE_PV_XC", averages%virial%pv_xc, itimes, &
388 "AVE_PV_FOCK_4C", averages%virial%pv_fock_4c, itimes
389 END IF
390 END IF
391 DO i = 1, nint
392 ctmp = cp_to_string(i)
393 WRITE (output_unit, fmt='(A15,1X,"=",1X,G15.9," NSTEP #",I15)') &
394 trim("AVE_CV-"//adjustl(ctmp)), averages%avecolvar(i), itimes
395 END DO
396 WRITE (output_unit, fmt='(/)')
397 END IF
398 CALL cp_print_key_finished_output(output_unit, logger, averages%averages_section, &
399 "PRINT_AVERAGES")
400 END IF
401 CALL timestop(handle)
402 END SUBROUTINE compute_averages
403
404! **************************************************************************************************
405!> \brief computes the averages - low level for REAL
406!> \param avg ...
407!> \param add ...
408!> \param delta_t ...
409!> \author Teodoro Laino [tlaino] - 03.2008 - University of Zurich
410! **************************************************************************************************
411 SUBROUTINE get_averages_rs(avg, add, delta_t)
412 REAL(KIND=dp), INTENT(INOUT) :: avg
413 REAL(KIND=dp), INTENT(IN) :: add
414 INTEGER, INTENT(IN) :: delta_t
415
416 avg = (avg*real(delta_t - 1, dp) + add)/real(delta_t, dp)
417 END SUBROUTINE get_averages_rs
418
419! **************************************************************************************************
420!> \brief computes the averages - low level for REAL vector
421!> \param avg ...
422!> \param add ...
423!> \param delta_t ...
424!> \author Teodoro Laino [tlaino] - 10.2008 - University of Zurich
425! **************************************************************************************************
426 SUBROUTINE get_averages_rv(avg, add, delta_t)
427 REAL(KIND=dp), DIMENSION(:), INTENT(INOUT) :: avg
428 REAL(KIND=dp), DIMENSION(:), INTENT(IN) :: add
429 INTEGER, INTENT(IN) :: delta_t
430
431 INTEGER :: i
432 LOGICAL :: check
433
434 check = SIZE(avg) == SIZE(add)
435 cpassert(check)
436 DO i = 1, SIZE(avg)
437 avg(i) = (avg(i)*real(delta_t - 1, dp) + add(i))/real(delta_t, dp)
438 END DO
439 END SUBROUTINE get_averages_rv
440
441! **************************************************************************************************
442!> \brief computes the averages - low level for REAL matrix
443!> \param avg ...
444!> \param add ...
445!> \param delta_t ...
446!> \author Teodoro Laino [tlaino] - 10.2008 - University of Zurich
447! **************************************************************************************************
448 SUBROUTINE get_averages_rm(avg, add, delta_t)
449 REAL(KIND=dp), DIMENSION(:, :), INTENT(INOUT) :: avg
450 REAL(KIND=dp), DIMENSION(:, :), INTENT(IN) :: add
451 INTEGER, INTENT(IN) :: delta_t
452
453 INTEGER :: i, j
454 LOGICAL :: check
455
456 check = SIZE(avg, 1) == SIZE(add, 1)
457 cpassert(check)
458 check = SIZE(avg, 2) == SIZE(add, 2)
459 cpassert(check)
460 DO i = 1, SIZE(avg, 2)
461 DO j = 1, SIZE(avg, 1)
462 avg(j, i) = (avg(j, i)*real(delta_t - 1, dp) + add(j, i))/real(delta_t, dp)
463 END DO
464 END DO
465 END SUBROUTINE get_averages_rm
466
467END MODULE averages_types
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 compute_averages(averages, force_env, md_ener, cell, virial, pv_scalar, pv_xx, used_time, hugoniot, abc, cell_angle, nat, itimes, time, my_pos, my_act)
computes the averages
subroutine, public retain_averages(averages)
retains the given averages env
subroutine, public release_averages(averages)
releases the given averages env
Handles all functions related to the CELL.
Definition cell_types.F:15
evaluations of colvar for internal coordinates schemes
integer function, public number_of_colvar(force_env, only_intra_colvar, unique)
Gives back the number of colvar defined for a force_eval.
subroutine, public get_clv_force(force_env, forces, coords, nsize_xyz, nsize_int, cvalues, mmatrix)
Computes the forces in the frame of collective variables, and additional also the local metric tensor...
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)
...
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,...
Interface for the force calculations.
objects that represent the structure of input sections and the data contained in an input section
subroutine, public section_vals_remove_values(section_vals)
removes the values of a repetition of the 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
integer, parameter, public default_string_length
Definition kinds.F:57
Split md_ener module from md_environment_type.
Type defining parameters related to the simulation cell.
Definition cell_types.F:55
type of a logger, at the moment it contains just a print level starting at which level it should be l...
wrapper to abstract the force evaluation of the various methods