(git:4978e50)
Loading...
Searching...
No Matches
input_cp2k_motion_print.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2026 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8! **************************************************************************************************
9!> \par History
10!> - taken out of input_cp2k_motion
11!> \author Ole Schuett
12! **************************************************************************************************
19 USE input_constants, ONLY: dump_atomic,&
20 dump_dcd,&
23 dump_pdb,&
34 USE string_utilities, ONLY: s2a
35#include "./base/base_uses.f90"
36
37 IMPLICIT NONE
38 PRIVATE
39
40 LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .true.
41 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'input_cp2k_motion_print'
42
44
45CONTAINS
46
47! **************************************************************************************************
48!> \brief creates the motion%print section
49!> \param section the section to be created
50!> \author teo
51! **************************************************************************************************
52 SUBROUTINE create_motion_print_section(section)
53 TYPE(section_type), POINTER :: section
54
55 TYPE(keyword_type), POINTER :: keyword
56 TYPE(section_type), POINTER :: print_key
57
58 NULLIFY (keyword, section, print_key)
59
60 CALL section_create(section, __location__, name="print", &
61 description="Controls the printing properties during an MD/Optimization run", &
62 n_keywords=1, n_subsections=1, repeats=.true.)
63
64 CALL keyword_create(keyword, __location__, name="MEMORY_INFO", &
65 variants=["MEMORY"], &
66 description="Whether overall memory usage should be sampled and printed "// &
67 "at each MD/Optimization step.", &
68 usage="MEMORY_INFO LOGICAL", &
69 default_l_val=.true., lone_keyword_l_val=.true.)
70 CALL section_add_keyword(section, keyword)
71 CALL keyword_release(keyword)
72
73 CALL cp_print_key_section_create(print_key, __location__, "TRAJECTORY", &
74 description="Controls the output of the trajectory", &
75 print_level=low_print_level, common_iter_levels=1, &
76 filename="", unit_str="angstrom")
77 CALL add_format_keyword(keyword, print_key, pos=.true., &
78 description="Specifies the format of the output file for the trajectory.")
79 CALL section_add_subsection(section, print_key)
80 CALL section_release(print_key)
81
83 print_key, __location__, "SHELL_TRAJECTORY", &
84 description="Controls the output of the trajectory of shells when the shell-model is used ", &
85 print_level=high_print_level, common_iter_levels=1, &
86 filename="", unit_str="angstrom")
87 CALL add_format_keyword(keyword, print_key, pos=.true., &
88 description="Specifies the format of the output file for the trajectory of shells.")
89 CALL section_add_subsection(section, print_key)
90 CALL section_release(print_key)
91
92 CALL cp_print_key_section_create(print_key, __location__, "CORE_TRAJECTORY", &
93 description="Controls the output of the trajectory of cores when the shell-model is used ", &
94 print_level=high_print_level, common_iter_levels=1, &
95 filename="", unit_str="angstrom")
96 CALL add_format_keyword(keyword, print_key, pos=.true., &
97 description="Specifies the format of the output file for the trajectory of cores.")
98 CALL section_add_subsection(section, print_key)
99 CALL section_release(print_key)
100
101 CALL cp_print_key_section_create(print_key, __location__, "CELL", &
102 description="Controls the output of the simulation cell. "// &
103 "For later analysis of the trajectory it is recommendable that the "// &
104 "frequency of printing is the same as the one used for the trajectory file.", &
105 print_level=high_print_level, common_iter_levels=1, &
106 filename="")
107 CALL section_add_subsection(section, print_key)
108 CALL section_release(print_key)
109
110 CALL cp_print_key_section_create(print_key, __location__, "VELOCITIES", &
111 description="Controls the output of the atomic velocities. "// &
112 "The default unit for the atomic velocities $v$ is bohr/au_time. "// &
113 "The kinetic energy $K_i$ in [hartree] of an atom $i$ with mass $m_i$ in "// &
114 "atomic mass units [amu] (or just [u]) and velocity $v_i$ can be obtained by "// &
115 "$K_i = \frac{1}{2}f_u\,m_i\,v_i^2$ with $f_u = 1822.888$ as conversion factor "// &
116 "from [u] to [a.u.]. $f_u$ is printed in full precision in the top of the CP2K "// &
117 "output for print level MEDIUM or higher.", &
118 print_level=high_print_level, common_iter_levels=1, &
119 filename="", unit_str="bohr*au_t^-1")
120 CALL add_format_keyword(keyword, print_key, pos=.false., &
121 description="Specifies the format of the output file for the velocities.")
122 CALL section_add_subsection(section, print_key)
123 CALL section_release(print_key)
124
125 CALL cp_print_key_section_create(print_key, __location__, "SHELL_VELOCITIES", &
126 description="Controls the output of the velocities of shells when the shell model is used", &
127 print_level=high_print_level, common_iter_levels=1, &
128 filename="", unit_str="bohr*au_t^-1")
129 CALL add_format_keyword(keyword, print_key, pos=.false., &
130 description="Specifies the format of the output file for the velocities of shells.")
131 CALL section_add_subsection(section, print_key)
132 CALL section_release(print_key)
133
134 CALL cp_print_key_section_create(print_key, __location__, "CORE_VELOCITIES", &
135 description="controls the output of the velocities of cores when the shell model is used", &
136 print_level=high_print_level, common_iter_levels=1, &
137 filename="", unit_str="bohr*au_t^-1")
138 CALL add_format_keyword(keyword, print_key, pos=.false., &
139 description="Specifies the format of the output file for the velocities of cores.")
140 CALL section_add_subsection(section, print_key)
141 CALL section_release(print_key)
142
143 CALL create_structure_data_section(print_key)
144 CALL section_add_subsection(section, print_key)
145 CALL section_release(print_key)
146
147 CALL cp_print_key_section_create(print_key, __location__, "FINAL_STRUCTURE", &
148 description="Controls the dumping of the final geometry "// &
149 "and cell for optimization tasks. Currently CIF and XYZ "// &
150 "formats are available, as controlled independently by "// &
151 "PRINT_CIF and PRINT_XYZ respectively, with the same "// &
152 "file name except for extension suffix.", &
153 print_level=low_print_level, filename="FINAL")
154
155 CALL keyword_create(keyword, __location__, name="PRINT_CIF", &
156 description="Print the final structure as CIF. Currently "// &
157 "the structure will always be dumped with the asymmetric "// &
158 "space group `P 1` as a triclinic system with a single "// &
159 "symmetry-equivalent position `x, y, z` for all atoms. "// &
160 "All fractional coordinates are in the range [0,1] and "// &
161 "all occupancies are unity.", &
162 usage="PRINT_CIF T", default_l_val=.true., &
163 lone_keyword_l_val=.true.)
164 CALL section_add_keyword(print_key, keyword)
165 CALL keyword_release(keyword)
166
167 CALL keyword_create(keyword, __location__, name="PRINT_XYZ", &
168 description="Print the final structure as XYZ. The cell "// &
169 "information is available in the comment line according "// &
170 "to the extended XYZ specification as the `Lattice=...` "// &
171 "field, and the unit is angstrom for both the cell vectors "// &
172 "and the atomic coordinates.", &
173 usage="PRINT_XYZ T", default_l_val=.true., &
174 lone_keyword_l_val=.true.)
175 CALL section_add_keyword(print_key, keyword)
176 CALL keyword_release(keyword)
177
178 CALL keyword_create(keyword, __location__, name="PRINT_ATOM_KIND", &
179 description="Write the atom kind given in the subsys section instead "// &
180 "of the element symbol in the extended XYZ file.", &
181 usage="PRINT_ATOM_KIND {LOGICAL}", &
182 default_l_val=.false., lone_keyword_l_val=.true.)
183 CALL section_add_keyword(print_key, keyword)
184 CALL keyword_release(keyword)
185
186 CALL section_add_subsection(section, print_key)
187 CALL section_release(print_key)
188
190 print_key, __location__, "FORCE_MIXING_LABELS", &
191 description="Controls the output of the force mixing (FORCE_EVAL&QMMM&FORCE_MIXING) labels", &
192 print_level=high_print_level, common_iter_levels=1, &
193 filename="")
194 CALL add_format_keyword(keyword, print_key, pos=.false., &
195 description="Specifies the format of the output file for the force mixing labels.")
196 CALL section_add_subsection(section, print_key)
197 CALL section_release(print_key)
198
199 CALL cp_print_key_section_create(print_key, __location__, "FORCES", &
200 description="Controls the output of the forces", &
201 print_level=high_print_level, common_iter_levels=1, &
202 filename="", unit_str="hartree*bohr^-1")
203 CALL add_format_keyword(keyword, print_key, pos=.false., &
204 description="Specifies the format of the output file for the forces.")
205 CALL section_add_subsection(section, print_key)
206 CALL section_release(print_key)
207
208 CALL cp_print_key_section_create(print_key, __location__, "SHELL_FORCES", &
209 description="Controls the output of the forces on shells when shell-model is used", &
210 print_level=high_print_level, common_iter_levels=1, &
211 filename="", unit_str="hartree*bohr^-1")
212 CALL add_format_keyword(keyword, print_key, pos=.false., &
213 description="Specifies the format of the output file for the forces on shells.")
214 CALL section_add_subsection(section, print_key)
215 CALL section_release(print_key)
216
217 CALL cp_print_key_section_create(print_key, __location__, "CORE_FORCES", &
218 description="Controls the output of the forces on cores when shell-model is used", &
219 print_level=high_print_level, common_iter_levels=1, &
220 filename="", unit_str="hartree*bohr^-1")
221 CALL add_format_keyword(keyword, print_key, pos=.false., &
222 description="Specifies the format of the output file for the forces on cores.")
223 CALL section_add_subsection(section, print_key)
224 CALL section_release(print_key)
225
226 CALL cp_print_key_section_create(print_key, __location__, "MIXED_ENERGIES", &
227 description="Controls the output of the energies of the two "// &
228 "regular FORCE_EVALS in the MIXED method "// &
229 "printed is step,time,Etot,E_F1,E_F2,CONS_QNT", &
230 print_level=low_print_level, common_iter_levels=1, &
231 filename="")
232 CALL section_add_subsection(section, print_key)
233 CALL section_release(print_key)
234
235 CALL cp_print_key_section_create(print_key, __location__, "STRESS", &
236 description="Controls the output of the stress tensor", &
237 print_level=high_print_level, common_iter_levels=1, &
238 filename="")
239 CALL section_add_subsection(section, print_key)
240 CALL section_release(print_key)
241
242 CALL cp_print_key_section_create(print_key, __location__, "POLAR_MATRIX", &
243 description="Controls the output of the polarisability tensor during an MD run", &
244 print_level=low_print_level, common_iter_levels=1, &
245 filename="")
246 CALL section_add_subsection(section, print_key)
247 CALL section_release(print_key)
248
249 CALL cp_print_key_section_create(print_key, __location__, "RESTART", &
250 description="Controls the dumping of the latest motion restart file "// &
251 "during runs. The file suffix will be .restart by default, which is "// &
252 "ASCII plain-text in the same format as an input file, unless the "// &
253 "SPLIT_RESTART_FILE keyword is specified. A plain-text file can be "// &
254 "used directly or parsed by the EXT_RESTART section for fine controls "// &
255 "over the reuse of different information. See also RESTART_HISTORY.", &
256 each_iter_names=s2a("MD"), each_iter_values=[20], &
257 print_level=silent_print_level, common_iter_levels=1, &
258 add_last=add_last_numeric, filename="", do_backup=.true.)
259
260 CALL keyword_create(keyword, __location__, name="SPLIT_RESTART_FILE", &
261 description="If specified selected input sections, which are growing with the "// &
262 "number of atoms in the system, are written to another restart file "// &
263 "in binary format instead of the default restart file in human "// &
264 "readable ASCII format. This split of the restart file may "// &
265 "provide significant memory savings and an accelerated I/O for "// &
266 "systems with a very large number of atoms", &
267 usage="SPLIT_RESTART_FILE yes", &
268 default_l_val=.false., &
269 lone_keyword_l_val=.true.)
270 CALL section_add_keyword(print_key, keyword)
271 CALL keyword_release(keyword)
272
273 CALL section_add_subsection(section, print_key)
274 CALL section_release(print_key)
275
276 CALL cp_print_key_section_create(print_key, __location__, "RESTART_HISTORY", &
277 description="Dumps unique motion restart files during the run, "// &
278 "keeping all of them. Most useful if recovery is needed at a "// &
279 "later point. For the latest motion restart file, see RESTART.", &
280 print_level=low_print_level, common_iter_levels=0, &
281 each_iter_names=s2a("MD", "GEO_OPT", "ROT_OPT"), each_iter_values=[500, 500, 500], &
282 filename="")
283 CALL section_add_subsection(section, print_key)
284 CALL section_release(print_key)
285
286 CALL cp_print_key_section_create(print_key, __location__, "TRANSLATION_VECTOR", &
287 description="Dumps the translation vector applied along an MD (if any). Useful"// &
288 " for postprocessing of QMMM trajectories in which the QM fragment is continuously"// &
289 " centered in the QM box", &
290 print_level=high_print_level, common_iter_levels=1, &
291 filename="")
292 CALL section_add_subsection(section, print_key)
293 CALL section_release(print_key)
294
295 END SUBROUTINE create_motion_print_section
296
297! **************************************************************************************************
298!> \brief creates the FORMAT keyword
299!> \param keyword ...
300!> \param section will contain the pint section
301!> \param pos ...
302!> \param description ...
303!> \author Teodoro Laino 10.2008 [tlaino]
304! **************************************************************************************************
305 SUBROUTINE add_format_keyword(keyword, section, pos, description)
306 TYPE(keyword_type), POINTER :: keyword
307 TYPE(section_type), POINTER :: section
308 LOGICAL, INTENT(IN) :: pos
309 CHARACTER(LEN=*), INTENT(IN) :: description
310
311 cpassert(ASSOCIATED(section))
312 cpassert(.NOT. ASSOCIATED(keyword))
313
314 IF (pos) THEN
315
316 CALL keyword_create( &
317 keyword, __location__, name="FORMAT", &
318 description=description, usage="FORMAT (ATOMIC|DCD|PDB|XMOL|XYZ|EXTXYZ)", &
319 default_i_val=dump_xmol, &
320 enum_c_vals=s2a("ATOMIC", "DCD", "DCD_ALIGNED_CELL", "PDB", "XMOL", "XYZ", "EXTXYZ"), &
322 enum_desc=s2a("Write only the coordinates X,Y,Z without element symbols to a formatted file", &
323 "Write the coordinates (no element labels) and the cell information to a binary file", &
324 "Like DCD, but the dumped coordinates refer to an aligned cell following the common convention: "// &
325 "the cell vector **a** is aligned with the *x* axis and the cell vector **b** lies in "// &
326 "the *xy* plane. This allows the reconstruction of scaled coordinates from the DCD data only.", &
327 "Write the atomic information in PDB format to a formatted file", &
328 "Mostly known as XYZ format, provides in a formatted file: element_symbol X Y Z", &
329 "Alias name for XMOL", &
330 "Extended XYZ format including cell information. "// &
331 "For details see [ASE](https://ase-lib.org/ase/io/formatoptions.html#extxyz) "// &
332 "and [OVITO](https://www.ovito.org/manual/reference/file_formats/input/xyz.html)."))
333 CALL section_add_keyword(section, keyword)
334 CALL keyword_release(keyword)
335
336 CALL keyword_create(keyword, __location__, name="CHARGE_OCCUP", &
337 variants=["CHARGE_O"], &
338 description="Write the MM charges to the OCCUP field of the PDB file", &
339 usage="CHARGE_OCCUP logical", &
340 default_l_val=.false., lone_keyword_l_val=.true.)
341 CALL section_add_keyword(section, keyword)
342 CALL keyword_release(keyword)
343
344 CALL keyword_create(keyword, __location__, name="CHARGE_BETA", &
345 variants=["CHARGE_B"], &
346 description="Write the MM charges to the BETA field of the PDB file", &
347 usage="CHARGE_BETA logical", &
348 default_l_val=.false., lone_keyword_l_val=.true.)
349 CALL section_add_keyword(section, keyword)
350 CALL keyword_release(keyword)
351
352 CALL keyword_create(keyword, __location__, name="CHARGE_EXTENDED", &
353 description="Write the MM charges to the very last field of the PDB file (starting from column 81)", &
354 usage="CHARGE_EXTENDED logical", &
355 default_l_val=.false., lone_keyword_l_val=.true.)
356 CALL section_add_keyword(section, keyword)
357 CALL keyword_release(keyword)
358
359 ELSE
360
361 CALL keyword_create(keyword, __location__, name="FORMAT", &
362 description=description, usage="FORMAT (ATOMIC|DCD|XMOL|XYZ|EXTXYZ)", &
363 default_i_val=dump_xmol, &
364 enum_c_vals=s2a("ATOMIC", "DCD", "XMOL", "XYZ", "EXTXYZ"), &
366 enum_desc=s2a("Write only the coordinates X,Y,Z without element symbols to a formatted file", &
367 "Write the coordinates (no element labels) and the cell information to a binary file", &
368 "Mostly known as XYZ format, provides in a formatted file: element_symbol X Y Z", &
369 "Alias name for XMOL", &
370 "Extended XYZ format including cell information. "// &
371 "For details see [ASE](https://ase-lib.org/ase/io/formatoptions.html#extxyz) "// &
372 "and [OVITO](https://www.ovito.org/manual/reference/file_formats/input/xyz.html)."))
373 CALL section_add_keyword(section, keyword)
374 CALL keyword_release(keyword)
375
376 END IF
377
378 CALL keyword_create(keyword, __location__, name="PRINT_ATOM_KIND", &
379 description="Write the atom kind given in the subsys section instead of the element symbol. "// &
380 "Only valid for the XMOL and EXTXYZ format.", &
381 usage="PRINT_ATOM_KIND logical", &
382 default_l_val=.false., lone_keyword_l_val=.true.)
383 CALL section_add_keyword(section, keyword)
384 CALL keyword_release(keyword)
385
386 END SUBROUTINE add_format_keyword
387
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
subroutine, public cp_print_key_section_create(print_key_section, location, name, description, print_level, each_iter_names, each_iter_values, add_last, filename, common_iter_levels, citations, unit_str, do_backup)
creates a print_key section
integer, parameter, public low_print_level
integer, parameter, public high_print_level
integer, parameter, public add_last_numeric
integer, parameter, public silent_print_level
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public dump_xmol
integer, parameter, public dump_pdb
integer, parameter, public dump_extxyz
integer, parameter, public dump_atomic
integer, parameter, public dump_dcd_aligned_cell
integer, parameter, public dump_dcd
subroutine, public add_format_keyword(keyword, section, pos, description)
creates the FORMAT keyword
subroutine, public create_motion_print_section(section)
creates the motionprint section
builds the subsystem section of the input
subroutine, public create_structure_data_section(print_key)
creates structure data section for output.. both subsys (for initialization) and motion section....
represents keywords in an input
subroutine, public keyword_release(keyword)
releases the given keyword (see doc/ReferenceCounting.html)
subroutine, public keyword_create(keyword, location, name, description, usage, type_of_var, n_var, repeats, variants, default_val, default_l_val, default_r_val, default_lc_val, default_c_val, default_i_val, default_l_vals, default_r_vals, default_c_vals, default_i_vals, lone_keyword_val, lone_keyword_l_val, lone_keyword_r_val, lone_keyword_c_val, lone_keyword_i_val, lone_keyword_l_vals, lone_keyword_r_vals, lone_keyword_c_vals, lone_keyword_i_vals, enum_c_vals, enum_i_vals, enum, enum_strict, enum_desc, unit_str, citations, deprecation_notice, removed)
creates a keyword object
objects that represent the structure of input sections and the data contained in an input section
subroutine, public section_create(section, location, name, description, n_keywords, n_subsections, repeats, citations, deprecation_notice)
creates a list of keywords
subroutine, public section_add_keyword(section, keyword)
adds a keyword to the given section
subroutine, public section_add_subsection(section, subsection)
adds a subsection to the given section
recursive subroutine, public section_release(section)
releases the given keyword list (see doc/ReferenceCounting.html)
Utilities for string manipulations.
represent a keyword in the input
represent a section of the input file