Line data Source code
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 : !> 10.2005 split input_cp2k into smaller modules [fawzi]
11 : !> 01.2020 add keywords related to Space Groups [pcazade]
12 : !> \author teo & fawzi
13 : ! **************************************************************************************************
14 : MODULE input_cp2k_motion
15 : USE bibliography, ONLY: Brieuc2016, &
16 : Byrd1995, &
17 : Ceriotti2010, &
18 : Ceriotti2012, &
19 : Ceriotti2014, &
20 : Henkelman1999, &
21 : Henkelman2014, &
22 : Kapil2016, &
23 : Lindh1995
24 : USE cp_output_handling, ONLY: add_last_numeric, &
25 : cp_print_key_section_create, &
26 : debug_print_level, &
27 : high_print_level, &
28 : low_print_level, &
29 : medium_print_level
30 : USE cp_units, ONLY: cp_unit_to_cp2k
31 : USE input_constants, ONLY: &
32 : bfgs_direct, bfgs_inverse, debug_lbfgs, default_bfgs_method_id, default_cg_method_id, default_dimer_method_id, &
33 : default_lbfgs_method_id, default_minimization_method_id, default_ts_method_id, &
34 : dimer_init_molden, dimer_init_random, &
35 : do_mc_gemc_npt, do_mc_gemc_nvt, do_mc_traditional, do_mc_virial, fix_none, fix_x, fix_xy, &
36 : fix_xz, fix_y, fix_yz, fix_z, fmt_id_pdb, fmt_id_xyz, gaussian, helium_cell_shape_cube, &
37 : helium_cell_shape_octahedron, helium_forces_average, helium_forces_last, &
38 : helium_mdist_exponential, helium_mdist_gaussian, helium_mdist_linear, &
39 : helium_mdist_quadratic, helium_mdist_singlev, helium_mdist_uniform, &
40 : helium_sampling_ceperley, helium_sampling_worm, helium_solute_intpot_mwater, helium_solute_intpot_nnp, &
41 : helium_solute_intpot_none, high_lbfgs, integrate_exact, integrate_numeric, low_lbfgs, ls_2pnt, ls_3pnt, ls_fit, &
42 : ls_gold, ls_none, matrix_init_cholesky, matrix_init_diagonal, medium_lbfgs, numerical, perm_cycle, &
43 : perm_plain, propagator_pimd, propagator_rpmd, propagator_cmd, propagator_bcmd, silent_lbfgs, &
44 : transformation_normal, transformation_stage
45 : USE input_cp2k_constraints, ONLY: create_constraint_section
46 : USE input_cp2k_free_energy, ONLY: create_fe_section
47 : USE input_cp2k_md, ONLY: create_md_section
48 : USE input_cp2k_motion_print, ONLY: add_format_keyword, &
49 : create_motion_print_section
50 : USE input_cp2k_neb, ONLY: create_band_section
51 : USE input_cp2k_subsys, ONLY: create_rng_section
52 : USE input_cp2k_thermostats, ONLY: create_coord_section, &
53 : create_gle_section, &
54 : create_velocity_section
55 : USE input_cp2k_tmc, ONLY: create_TMC_section
56 : USE input_keyword_types, ONLY: keyword_create, &
57 : keyword_release, &
58 : keyword_type
59 : USE input_section_types, ONLY: section_add_keyword, &
60 : section_add_subsection, &
61 : section_create, &
62 : section_release, &
63 : section_type
64 : USE input_val_types, ONLY: integer_t, &
65 : lchar_t, &
66 : logical_t, &
67 : real_t, &
68 : char_t
69 : USE kinds, ONLY: dp
70 : USE string_utilities, ONLY: newline, &
71 : s2a
72 : #include "../base/base_uses.f90"
73 :
74 : IMPLICIT NONE
75 : PRIVATE
76 :
77 : LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .TRUE.
78 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'input_cp2k_motion'
79 :
80 : PUBLIC :: create_motion_section
81 :
82 : CONTAINS
83 :
84 : ! **************************************************************************************************
85 : !> \brief creates the motion section
86 : !> \param section the section to be created
87 : !> \author teo
88 : ! **************************************************************************************************
89 1380 : SUBROUTINE create_motion_section(section)
90 : TYPE(section_type), POINTER :: section
91 :
92 : TYPE(section_type), POINTER :: subsection
93 :
94 1380 : CPASSERT(.NOT. ASSOCIATED(section))
95 : CALL section_create(section, __LOCATION__, name="motion", &
96 : description="This section defines a set of tool connected with the motion of the nuclei.", &
97 1380 : n_keywords=1, n_subsections=1, repeats=.FALSE.)
98 :
99 1380 : NULLIFY (subsection)
100 :
101 : CALL create_geoopt_section(subsection, __LOCATION__, label="GEO_OPT", &
102 : description="This section sets the environment of the geometry optimizer.", &
103 : just_optimizers=.FALSE., &
104 1380 : use_model_hessian=.TRUE.)
105 1380 : CALL section_add_subsection(section, subsection)
106 1380 : CALL section_release(subsection)
107 :
108 1380 : CALL create_cell_opt_section(subsection)
109 1380 : CALL section_add_subsection(section, subsection)
110 1380 : CALL section_release(subsection)
111 :
112 1380 : CALL create_shellcore_opt_section(subsection)
113 1380 : CALL section_add_subsection(section, subsection)
114 1380 : CALL section_release(subsection)
115 :
116 1380 : CALL create_md_section(subsection)
117 1380 : CALL section_add_subsection(section, subsection)
118 1380 : CALL section_release(subsection)
119 :
120 1380 : CALL create_driver_section(subsection)
121 1380 : CALL section_add_subsection(section, subsection)
122 1380 : CALL section_release(subsection)
123 :
124 1380 : CALL create_fe_section(subsection)
125 1380 : CALL section_add_subsection(section, subsection)
126 1380 : CALL section_release(subsection)
127 :
128 1380 : CALL create_constraint_section(subsection)
129 1380 : CALL section_add_subsection(section, subsection)
130 1380 : CALL section_release(subsection)
131 :
132 1380 : CALL create_fp_section(subsection)
133 1380 : CALL section_add_subsection(section, subsection)
134 1380 : CALL section_release(subsection)
135 :
136 1380 : CALL create_mc_section(subsection)
137 1380 : CALL section_add_subsection(section, subsection)
138 1380 : CALL section_release(subsection)
139 :
140 1380 : CALL create_TMC_section(subsection)
141 1380 : CALL section_add_subsection(section, subsection)
142 1380 : CALL section_release(subsection)
143 :
144 1380 : CALL create_pint_section(subsection)
145 1380 : CALL section_add_subsection(section, subsection)
146 1380 : CALL section_release(subsection)
147 :
148 1380 : CALL create_band_section(subsection)
149 1380 : CALL section_add_subsection(section, subsection)
150 1380 : CALL section_release(subsection)
151 :
152 1380 : CALL create_motion_print_section(subsection)
153 1380 : CALL section_add_subsection(section, subsection)
154 1380 : CALL section_release(subsection)
155 :
156 1380 : END SUBROUTINE create_motion_section
157 :
158 : ! **************************************************************************************************
159 : !> \brief creates the Monte Carlo section
160 : !> \param section the section to be created
161 : !> \author matt
162 : ! **************************************************************************************************
163 1380 : SUBROUTINE create_mc_section(section)
164 : TYPE(section_type), POINTER :: section
165 :
166 : TYPE(keyword_type), POINTER :: keyword
167 : TYPE(section_type), POINTER :: subsection
168 :
169 1380 : CPASSERT(.NOT. ASSOCIATED(section))
170 : CALL section_create(section, __LOCATION__, name="mc", &
171 : description="This section sets parameters to set up a MonteCarlo calculation.", &
172 1380 : n_keywords=10, n_subsections=2, repeats=.FALSE.)
173 :
174 1380 : NULLIFY (keyword, subsection)
175 :
176 : CALL keyword_create(keyword, __LOCATION__, name="NSTEP", &
177 : description="Specifies the number of MC cycles.", &
178 : usage="NSTEP {integer}", &
179 1380 : default_i_val=100)
180 1380 : CALL section_add_keyword(section, keyword)
181 1380 : CALL keyword_release(keyword)
182 :
183 : CALL keyword_create(keyword, __LOCATION__, name="IPRINT", &
184 : description="Prints coordinate/cell/etc information every IPRINT steps.", &
185 : usage="IPRINT {integer}", &
186 1380 : default_i_val=1)
187 1380 : CALL section_add_keyword(section, keyword)
188 1380 : CALL keyword_release(keyword)
189 :
190 : CALL keyword_create(keyword, __LOCATION__, name="NMOVES", &
191 : description="Specifies the number of classical moves between energy evaluations. ", &
192 : usage="NMOVES {integer}", &
193 1380 : default_i_val=4)
194 1380 : CALL section_add_keyword(section, keyword)
195 1380 : CALL keyword_release(keyword)
196 :
197 : CALL keyword_create(keyword, __LOCATION__, name="NSWAPMOVES", &
198 : description="How many insertions to try per swap move.", &
199 : usage="NSWAPMOVES {integer}", &
200 1380 : default_i_val=16)
201 1380 : CALL section_add_keyword(section, keyword)
202 1380 : CALL keyword_release(keyword)
203 :
204 : CALL keyword_create(keyword, __LOCATION__, name="LBIAS", &
205 : description="Dictates if we presample moves with a different potential.", &
206 : usage="LBIAS {logical}", &
207 1380 : default_l_val=.FALSE.)
208 1380 : CALL section_add_keyword(section, keyword)
209 1380 : CALL keyword_release(keyword)
210 :
211 : CALL keyword_create(keyword, __LOCATION__, name="LSTOP", &
212 : description="Makes nstep in terms of steps, instead of cycles.", &
213 : usage="LSTOP {logical}", &
214 1380 : default_l_val=.FALSE.)
215 1380 : CALL section_add_keyword(section, keyword)
216 1380 : CALL keyword_release(keyword)
217 :
218 : CALL keyword_create(keyword, __LOCATION__, name="LDISCRETE", &
219 : description="Changes the volume of the box in discrete steps, one side at a time.", &
220 : usage="LDISCRETE {logical}", &
221 1380 : default_l_val=.FALSE.)
222 1380 : CALL section_add_keyword(section, keyword)
223 1380 : CALL keyword_release(keyword)
224 :
225 : CALL keyword_create(keyword, __LOCATION__, name="RCLUS", &
226 : description="The cluster cut off radius in angstroms.", &
227 : usage="RCLUS {real}", &
228 1380 : default_r_val=1.0E0_dp)
229 1380 : CALL section_add_keyword(section, keyword)
230 1380 : CALL keyword_release(keyword)
231 :
232 : CALL keyword_create(keyword, __LOCATION__, name="RESTART", &
233 : description="Read initial configuration from restart file.", &
234 : usage="RESTART {logical}", &
235 1380 : default_l_val=.FALSE.)
236 1380 : CALL section_add_keyword(section, keyword)
237 1380 : CALL keyword_release(keyword)
238 :
239 : CALL keyword_create( &
240 : keyword, __LOCATION__, name="NVIRIAL", &
241 : description="Use this many random orientations to compute the second virial coefficient (ENSEMBLE=VIRIAL)", &
242 : usage="NVIRIAL {integer}", &
243 1380 : default_i_val=1000)
244 1380 : CALL section_add_keyword(section, keyword)
245 1380 : CALL keyword_release(keyword)
246 :
247 : CALL keyword_create(keyword, __LOCATION__, name="ENSEMBLE", &
248 : description="Specify the type of simulation", &
249 : usage="ENSEMBLE (TRADITIONAL|GEMC_NVT|GEMC_NPT|VIRIAL)", &
250 : enum_c_vals=s2a("TRADITIONAL", "GEMC_NVT", "GEMC_NPT", "VIRIAL"), &
251 : enum_i_vals=[do_mc_traditional, do_mc_gemc_nvt, do_mc_gemc_npt, do_mc_virial], &
252 1380 : default_i_val=do_mc_traditional)
253 1380 : CALL section_add_keyword(section, keyword)
254 1380 : CALL keyword_release(keyword)
255 :
256 : CALL keyword_create(keyword, __LOCATION__, name="RESTART_FILE_NAME", &
257 : description="Name of the restart file for MC information.", &
258 : usage="RESTART_FILE_NAME {filename}", &
259 1380 : default_lc_val="")
260 1380 : CALL section_add_keyword(section, keyword)
261 1380 : CALL keyword_release(keyword)
262 :
263 : CALL keyword_create(keyword, __LOCATION__, name="MOVES_FILE_NAME", &
264 : description="The file to print the move statistics to.", &
265 : usage="MOVES_FILE_NAME {filename}", &
266 1380 : default_lc_val="")
267 1380 : CALL section_add_keyword(section, keyword)
268 1380 : CALL keyword_release(keyword)
269 :
270 : CALL keyword_create(keyword, __LOCATION__, name="MOLECULES_FILE_NAME", &
271 : description="The file to print the number of molecules to.", &
272 : usage="MOLECULES_FILE_NAME {filename}", &
273 1380 : default_lc_val="")
274 1380 : CALL section_add_keyword(section, keyword)
275 1380 : CALL keyword_release(keyword)
276 :
277 : CALL keyword_create(keyword, __LOCATION__, name="COORDINATE_FILE_NAME", &
278 : description="The file to print the current coordinates to.", &
279 : usage="COORDINATE_FILE_NAME {filename}", &
280 1380 : default_lc_val="")
281 1380 : CALL section_add_keyword(section, keyword)
282 1380 : CALL keyword_release(keyword)
283 :
284 : CALL keyword_create(keyword, __LOCATION__, name="ENERGY_FILE_NAME", &
285 : description="The file to print current energies to.", &
286 : usage="ENERGY_FILE_NAME {filename}", &
287 1380 : default_lc_val="")
288 1380 : CALL section_add_keyword(section, keyword)
289 1380 : CALL keyword_release(keyword)
290 :
291 : CALL keyword_create(keyword, __LOCATION__, name="DATA_FILE_NAME", &
292 : description="The file to print current configurational info to.", &
293 : usage="DATA_FILE_NAME {filename}", &
294 1380 : default_lc_val="")
295 1380 : CALL section_add_keyword(section, keyword)
296 1380 : CALL keyword_release(keyword)
297 :
298 : CALL keyword_create(keyword, __LOCATION__, name="CELL_FILE_NAME", &
299 : description="The file to print current cell length info to.", &
300 : usage="CELL_FILE_NAME {filename}", &
301 1380 : default_lc_val="")
302 1380 : CALL section_add_keyword(section, keyword)
303 1380 : CALL keyword_release(keyword)
304 :
305 : CALL keyword_create(keyword, __LOCATION__, name="MAX_DISP_FILE_NAME", &
306 : description="The file to print current maximum displacement info to.", &
307 : usage="MAX_DISP_FILE_NAME {filename}", &
308 1380 : default_lc_val="")
309 1380 : CALL section_add_keyword(section, keyword)
310 1380 : CALL keyword_release(keyword)
311 :
312 : CALL keyword_create(keyword, __LOCATION__, name="BOX2_FILE_NAME", &
313 : description="For GEMC, the name of the input file for the other box.", &
314 : usage="BOX2_FILE_NAME {filename}", &
315 1380 : default_lc_val="")
316 1380 : CALL section_add_keyword(section, keyword)
317 1380 : CALL keyword_release(keyword)
318 :
319 : CALL keyword_create(keyword, __LOCATION__, name="PRESSURE", &
320 : description="The pressure for NpT simulations, in bar.", &
321 : usage="PRESSURE {real}", &
322 1380 : type_of_var=real_t)
323 1380 : CALL section_add_keyword(section, keyword)
324 1380 : CALL keyword_release(keyword)
325 :
326 : CALL keyword_create(keyword, __LOCATION__, name="TEMPERATURE", &
327 : description="The temperature of the simulation, in Kelvin.", &
328 : usage="TEMPERATURE {real}", &
329 1380 : type_of_var=real_t)
330 1380 : CALL section_add_keyword(section, keyword)
331 1380 : CALL keyword_release(keyword)
332 :
333 : CALL keyword_create( &
334 : keyword, __LOCATION__, name="VIRIAL_TEMPS", &
335 : description="The temperatures you wish to compute the virial coefficient for. Only used if ensemble=VIRIAL.", &
336 : usage="VIRIAL_TEMPS {real} {real} ... ", &
337 1380 : n_var=-1, type_of_var=real_t)
338 1380 : CALL section_add_keyword(section, keyword)
339 1380 : CALL keyword_release(keyword)
340 :
341 : CALL keyword_create(keyword, __LOCATION__, name="DISCRETE_STEP", &
342 : description="The size of the discrete volume move step, in angstroms.", &
343 : usage="DISCRETE_STEP {real}", &
344 1380 : default_r_val=1.0E0_dp)
345 1380 : CALL section_add_keyword(section, keyword)
346 1380 : CALL keyword_release(keyword)
347 :
348 : CALL keyword_create(keyword, __LOCATION__, name="ETA", &
349 : description="The free energy bias (in Kelvin) for swapping a molecule of each type into this box.", &
350 : usage="ETA {real} {real} ... ", &
351 1380 : n_var=-1, type_of_var=real_t)
352 1380 : CALL section_add_keyword(section, keyword)
353 1380 : CALL keyword_release(keyword)
354 :
355 : CALL keyword_create(keyword, __LOCATION__, name="RANDOMTOSKIP", &
356 : description="Number of random numbers from the acceptance/rejection stream to skip", &
357 : usage="RANDOMTOSKIP {integer}", &
358 1380 : default_i_val=0)
359 1380 : CALL section_add_keyword(section, keyword)
360 1380 : CALL keyword_release(keyword)
361 :
362 1380 : CALL create_avbmc_section(subsection)
363 1380 : CALL section_add_subsection(section, subsection)
364 1380 : CALL section_release(subsection)
365 :
366 1380 : CALL create_move_prob_section(subsection)
367 1380 : CALL section_add_subsection(section, subsection)
368 1380 : CALL section_release(subsection)
369 :
370 1380 : CALL create_update_section(subsection)
371 1380 : CALL section_add_subsection(section, subsection)
372 1380 : CALL section_release(subsection)
373 :
374 1380 : CALL create_max_disp_section(subsection)
375 1380 : CALL section_add_subsection(section, subsection)
376 1380 : CALL section_release(subsection)
377 :
378 1380 : END SUBROUTINE create_mc_section
379 :
380 : ! **************************************************************************************************
381 : !> \brief ...
382 : !> \param section will contain the AVBMC parameters for MC
383 : !> \author matt
384 : ! **************************************************************************************************
385 1380 : SUBROUTINE create_avbmc_section(section)
386 : TYPE(section_type), POINTER :: section
387 :
388 : TYPE(keyword_type), POINTER :: keyword
389 :
390 1380 : CPASSERT(.NOT. ASSOCIATED(section))
391 :
392 : CALL section_create(section, __LOCATION__, name="avbmc", &
393 : description="Parameters for Aggregation Volume Bias Monte Carlo (AVBMC) "// &
394 : "which explores cluster formation and destruction. "// &
395 : "Chen and Siepmann, J. Phys. Chem. B 105, 11275-11282 (2001).", &
396 1380 : n_keywords=5, n_subsections=0, repeats=.FALSE.)
397 :
398 1380 : NULLIFY (keyword)
399 :
400 : CALL keyword_create( &
401 : keyword, __LOCATION__, name="PBIAS", &
402 : description="The probability of swapping to an inner region in an AVBMC swap move for each molecule type.", &
403 : usage="PBIAS {real} {real} ... ", &
404 1380 : n_var=-1, type_of_var=real_t)
405 1380 : CALL section_add_keyword(section, keyword)
406 1380 : CALL keyword_release(keyword)
407 :
408 : CALL keyword_create(keyword, __LOCATION__, name="AVBMC_ATOM", &
409 : description="The target atom for an AVBMC swap move for each molecule type.", &
410 : usage="AVBMC_ATOM {integer} {integer} ... ", &
411 1380 : n_var=-1, type_of_var=integer_t)
412 1380 : CALL section_add_keyword(section, keyword)
413 1380 : CALL keyword_release(keyword)
414 :
415 : CALL keyword_create(keyword, __LOCATION__, name="AVBMC_RMIN", &
416 : description="The inner radius for an AVBMC swap move, in angstroms for every molecule type.", &
417 : usage="AVBMC_RMIN {real} {real} ... ", &
418 1380 : n_var=-1, type_of_var=real_t)
419 1380 : CALL section_add_keyword(section, keyword)
420 1380 : CALL keyword_release(keyword)
421 :
422 : CALL keyword_create(keyword, __LOCATION__, name="AVBMC_RMAX", &
423 : description="The outer radius for an AVBMC swap move, in angstroms, for every molecule type.", &
424 : usage="AVBMC_RMAX {real} {real} ... ", &
425 1380 : n_var=-1, type_of_var=real_t)
426 1380 : CALL section_add_keyword(section, keyword)
427 1380 : CALL keyword_release(keyword)
428 :
429 1380 : END SUBROUTINE create_avbmc_section
430 :
431 : ! **************************************************************************************************
432 : !> \brief ...
433 : !> \param section will contain the probabilities for attempting each move
434 : !> type in Monte Carlo
435 : !> \author matt
436 : ! **************************************************************************************************
437 1380 : SUBROUTINE create_move_prob_section(section)
438 : TYPE(section_type), POINTER :: section
439 :
440 : TYPE(keyword_type), POINTER :: keyword
441 : TYPE(section_type), POINTER :: subsection
442 :
443 1380 : CPASSERT(.NOT. ASSOCIATED(section))
444 :
445 : CALL section_create(section, __LOCATION__, name="move_probabilities", &
446 : description="Parameters for fraction of moves performed for each move type.", &
447 1380 : n_keywords=5, n_subsections=2, repeats=.FALSE.)
448 :
449 1380 : NULLIFY (keyword, subsection)
450 :
451 : CALL keyword_create(keyword, __LOCATION__, name="PMHMC", &
452 : description="The probability of attempting a hybrid MC move.", &
453 : usage="PMHMC {real}", &
454 1380 : type_of_var=real_t, default_r_val=0.0E0_dp)
455 1380 : CALL section_add_keyword(section, keyword)
456 1380 : CALL keyword_release(keyword)
457 :
458 : CALL keyword_create(keyword, __LOCATION__, name="PMTRANS", &
459 : description="The probability of attempting a molecule translation.", &
460 : usage="PMTRANS {real}", &
461 1380 : type_of_var=real_t)
462 1380 : CALL section_add_keyword(section, keyword)
463 1380 : CALL keyword_release(keyword)
464 :
465 : CALL keyword_create(keyword, __LOCATION__, name="PMCLTRANS", &
466 : description="The probability of attempting a cluster translation.", &
467 : usage="PMCLTRANS {real}", &
468 1380 : type_of_var=real_t, default_r_val=0.0E0_dp)
469 1380 : CALL section_add_keyword(section, keyword)
470 1380 : CALL keyword_release(keyword)
471 :
472 : CALL keyword_create(keyword, __LOCATION__, name="PMAVBMC", &
473 : description="The probability of attempting an AVBMC swap move.", &
474 : usage="PMAVBMC {real}", &
475 1380 : default_r_val=0.0E0_dp)
476 1380 : CALL section_add_keyword(section, keyword)
477 1380 : CALL keyword_release(keyword)
478 :
479 : CALL keyword_create(keyword, __LOCATION__, name="PMTRAION", &
480 : description="The probability of attempting a conformational change.", &
481 : usage="PMTRAION {real}", &
482 1380 : type_of_var=real_t)
483 1380 : CALL section_add_keyword(section, keyword)
484 1380 : CALL keyword_release(keyword)
485 :
486 : CALL keyword_create(keyword, __LOCATION__, name="PMSWAP", &
487 : description="The probability of attempting a swap move.", &
488 : usage="PMSWAP {real}", &
489 1380 : type_of_var=real_t, default_r_val=0.0E0_dp)
490 1380 : CALL section_add_keyword(section, keyword)
491 1380 : CALL keyword_release(keyword)
492 :
493 : CALL keyword_create(keyword, __LOCATION__, name="PMVOLUME", &
494 : description="The probability of attempting a volume move.", &
495 : usage="PMVOLUME {real}", &
496 1380 : type_of_var=real_t, default_r_val=0.0E0_dp)
497 1380 : CALL section_add_keyword(section, keyword)
498 1380 : CALL keyword_release(keyword)
499 :
500 1380 : CALL create_mol_prob_section(subsection)
501 1380 : CALL section_add_subsection(section, subsection)
502 1380 : CALL section_release(subsection)
503 :
504 1380 : CALL create_box_prob_section(subsection)
505 1380 : CALL section_add_subsection(section, subsection)
506 1380 : CALL section_release(subsection)
507 :
508 1380 : END SUBROUTINE create_move_prob_section
509 :
510 : ! **************************************************************************************************
511 : !> \brief ...
512 : !> \param section will contain the probabilities for attempting various moves
513 : !> on the various molecule types present in the system
514 : !> \author matt
515 : ! **************************************************************************************************
516 1380 : SUBROUTINE create_mol_prob_section(section)
517 : TYPE(section_type), POINTER :: section
518 :
519 : TYPE(keyword_type), POINTER :: keyword
520 :
521 1380 : CPASSERT(.NOT. ASSOCIATED(section))
522 :
523 : CALL section_create(section, __LOCATION__, name="mol_probabilities", &
524 : description="Probabilities of attempting various moves types on "// &
525 : "the various molecular types present in the simulation.", &
526 1380 : n_keywords=5, n_subsections=0, repeats=.FALSE.)
527 :
528 1380 : NULLIFY (keyword)
529 :
530 : CALL keyword_create(keyword, __LOCATION__, name="PMAVBMC_MOL", &
531 : description="The probability of attempting an AVBMC swap move on each molecule type.", &
532 : usage="PMAVBMC_MOL {real} {real} ... ", &
533 1380 : n_var=-1, type_of_var=real_t)
534 1380 : CALL section_add_keyword(section, keyword)
535 1380 : CALL keyword_release(keyword)
536 :
537 : CALL keyword_create(keyword, __LOCATION__, name="PMSWAP_MOL", &
538 : description="The probability of attempting a molecule swap of a given molecule type.", &
539 : usage="PMSWAP_MOL {real} {real} ... ", &
540 1380 : n_var=-1, type_of_var=real_t)
541 1380 : CALL section_add_keyword(section, keyword)
542 1380 : CALL keyword_release(keyword)
543 :
544 : CALL keyword_create(keyword, __LOCATION__, name="PMROT_MOL", &
545 : description="The probability of attempting a molecule rotation of a given molecule type.", &
546 : usage="PMROT_MOL {real} {real} ... ", &
547 1380 : n_var=-1, type_of_var=real_t)
548 1380 : CALL section_add_keyword(section, keyword)
549 1380 : CALL keyword_release(keyword)
550 :
551 : CALL keyword_create(keyword, __LOCATION__, name="PMTRAION_MOL", &
552 : description="The probability of attempting a conformational change of a given molecule type.", &
553 : usage="PMTRAION_MOL {real} {real} ... ", &
554 1380 : n_var=-1, type_of_var=real_t)
555 1380 : CALL section_add_keyword(section, keyword)
556 1380 : CALL keyword_release(keyword)
557 :
558 : CALL keyword_create(keyword, __LOCATION__, name="PMTRANS_MOL", &
559 : description="The probability of attempting a molecule translation of a given molecule type.", &
560 : usage="PMTRANS_MOL {real} {real} ... ", &
561 1380 : n_var=-1, type_of_var=real_t)
562 1380 : CALL section_add_keyword(section, keyword)
563 1380 : CALL keyword_release(keyword)
564 :
565 1380 : END SUBROUTINE create_mol_prob_section
566 :
567 : ! **************************************************************************************************
568 : !> \brief ...
569 : !> \param section will contain the probabilities for attempting various moves
570 : !> on the box where the variable is present
571 : !> \author matt
572 : ! **************************************************************************************************
573 1380 : SUBROUTINE create_box_prob_section(section)
574 : TYPE(section_type), POINTER :: section
575 :
576 : TYPE(keyword_type), POINTER :: keyword
577 :
578 1380 : CPASSERT(.NOT. ASSOCIATED(section))
579 :
580 : CALL section_create(section, __LOCATION__, name="BOX_PROBABILITIES", &
581 : description="Probabilities of attempting various moves types on "// &
582 : "the box.", &
583 1380 : n_keywords=2, n_subsections=0, repeats=.FALSE.)
584 :
585 1380 : NULLIFY (keyword)
586 :
587 : CALL keyword_create(keyword, __LOCATION__, name="PMHMC_BOX", &
588 : description="The probability of attempting a HMC move on this box.", &
589 : usage="PMHMC_BOX {real}", &
590 1380 : type_of_var=real_t, default_r_val=1.0E0_dp)
591 1380 : CALL section_add_keyword(section, keyword)
592 1380 : CALL keyword_release(keyword)
593 :
594 : CALL keyword_create(keyword, __LOCATION__, name="PMVOL_BOX", &
595 : description="The probability of attempting a volume move on this box (GEMC_NpT).", &
596 : usage="PMVOL_BOX {real}", &
597 1380 : type_of_var=real_t, default_r_val=1.0E0_dp)
598 1380 : CALL section_add_keyword(section, keyword)
599 1380 : CALL keyword_release(keyword)
600 :
601 : CALL keyword_create(keyword, __LOCATION__, name="PMCLUS_BOX", &
602 : description="The probability of attempting a cluster move in this box", &
603 : usage="PMCLUS_BOX {real}", &
604 1380 : type_of_var=real_t, default_r_val=1.0E0_dp)
605 1380 : CALL section_add_keyword(section, keyword)
606 1380 : CALL keyword_release(keyword)
607 :
608 1380 : END SUBROUTINE create_box_prob_section
609 :
610 : ! **************************************************************************************************
611 : !> \brief ...
612 : !> \param section will contain the frequency for updating maximum
613 : !> displacements for various moves
614 : !> \author matt
615 : ! **************************************************************************************************
616 1380 : SUBROUTINE create_update_section(section)
617 : TYPE(section_type), POINTER :: section
618 :
619 : TYPE(keyword_type), POINTER :: keyword
620 :
621 1380 : CPASSERT(.NOT. ASSOCIATED(section))
622 :
623 : CALL section_create(section, __LOCATION__, name="MOVE_UPDATES", &
624 : description="Frequency for updating move maximum displacements.", &
625 1380 : n_keywords=2, n_subsections=0, repeats=.FALSE.)
626 :
627 1380 : NULLIFY (keyword)
628 :
629 : CALL keyword_create(keyword, __LOCATION__, name="IUPVOLUME", &
630 : description="Every iupvolume steps update maximum volume displacement.", &
631 : usage="IUPVOLUME {integer}", &
632 1380 : default_i_val=10000)
633 1380 : CALL section_add_keyword(section, keyword)
634 1380 : CALL keyword_release(keyword)
635 :
636 : CALL keyword_create(keyword, __LOCATION__, name="IUPTRANS", &
637 : description="Every iuptrans steps update maximum "// &
638 : "translation/rotation/configurational changes.", &
639 : usage="IUPTRANS {integer}", &
640 1380 : default_i_val=10000)
641 1380 : CALL section_add_keyword(section, keyword)
642 1380 : CALL keyword_release(keyword)
643 :
644 : CALL keyword_create(keyword, __LOCATION__, name="IUPCLTRANS", &
645 : description="Every iupcltrans steps update maximum cluster translation.", &
646 : usage="IUPCLTRANS {integer}", &
647 1380 : default_i_val=10000)
648 1380 : CALL section_add_keyword(section, keyword)
649 1380 : CALL keyword_release(keyword)
650 :
651 1380 : END SUBROUTINE create_update_section
652 :
653 : ! **************************************************************************************************
654 : !> \brief ...
655 : !> \param section will contain the maximum displacements for various moves
656 : !> \author matt
657 : ! **************************************************************************************************
658 1380 : SUBROUTINE create_max_disp_section(section)
659 : TYPE(section_type), POINTER :: section
660 :
661 : TYPE(section_type), POINTER :: subsection
662 :
663 1380 : CPASSERT(.NOT. ASSOCIATED(section))
664 :
665 : CALL section_create(section, __LOCATION__, name="max_displacements", &
666 : description="The maximum displacements for all attempted moves.", &
667 1380 : n_keywords=1, n_subsections=2, repeats=.FALSE.)
668 :
669 1380 : NULLIFY (subsection)
670 :
671 1380 : CALL create_mol_disp_section(subsection)
672 1380 : CALL section_add_subsection(section, subsection)
673 1380 : CALL section_release(subsection)
674 :
675 1380 : CALL create_box_disp_section(subsection)
676 1380 : CALL section_add_subsection(section, subsection)
677 1380 : CALL section_release(subsection)
678 :
679 1380 : END SUBROUTINE create_max_disp_section
680 :
681 : ! **************************************************************************************************
682 : !> \brief ...
683 : !> \param section will contain the maximum displacements for all moves which
684 : !> require a value for each molecule type
685 : !> \author matt
686 : ! **************************************************************************************************
687 1380 : SUBROUTINE create_mol_disp_section(section)
688 : TYPE(section_type), POINTER :: section
689 :
690 : TYPE(keyword_type), POINTER :: keyword
691 :
692 1380 : CPASSERT(.NOT. ASSOCIATED(section))
693 :
694 : CALL section_create(section, __LOCATION__, name="mol_displacements", &
695 : description="Maximum displacements for every move type that requires "// &
696 : "a value for each molecular type in the simulation.", &
697 1380 : n_keywords=5, n_subsections=0, repeats=.FALSE.)
698 :
699 1380 : NULLIFY (keyword)
700 :
701 : CALL keyword_create(keyword, __LOCATION__, name="RMBOND", &
702 : description="Maximum bond length displacement, in angstroms, for each molecule type.", &
703 : usage="RMBOND {real} {real} ... ", &
704 1380 : n_var=-1, type_of_var=real_t)
705 1380 : CALL section_add_keyword(section, keyword)
706 1380 : CALL keyword_release(keyword)
707 :
708 : CALL keyword_create(keyword, __LOCATION__, name="RMANGLE", &
709 : description="Maximum bond angle displacement, in degrees, for each molecule type.", &
710 : usage="RMANGLE {real} {real} ...", &
711 1380 : n_var=-1, type_of_var=real_t)
712 1380 : CALL section_add_keyword(section, keyword)
713 1380 : CALL keyword_release(keyword)
714 :
715 : CALL keyword_create(keyword, __LOCATION__, name="RMDIHEDRAL", &
716 : description="Maximum dihedral angle distplacement, in degrees, for each molecule type.", &
717 : usage="RMDIHEDRAL {real} {real} ... ", &
718 1380 : n_var=-1, type_of_var=real_t)
719 1380 : CALL section_add_keyword(section, keyword)
720 1380 : CALL keyword_release(keyword)
721 :
722 : CALL keyword_create(keyword, __LOCATION__, name="RMROT", &
723 : description="Maximum rotational displacement, in degrees, for each molecule type.", &
724 : usage="RMROT {real} {real} ... ", &
725 1380 : n_var=-1, type_of_var=real_t)
726 1380 : CALL section_add_keyword(section, keyword)
727 1380 : CALL keyword_release(keyword)
728 :
729 : CALL keyword_create(keyword, __LOCATION__, name="RMTRANS", &
730 : description="Maximum translational displacement, in angstroms, for each molecule type.", &
731 : usage="RMTRANS {real} {real} ...", &
732 1380 : n_var=-1, type_of_var=real_t)
733 1380 : CALL section_add_keyword(section, keyword)
734 1380 : CALL keyword_release(keyword)
735 :
736 1380 : END SUBROUTINE create_mol_disp_section
737 :
738 : ! **************************************************************************************************
739 : !> \brief ...
740 : !> \param section will contain the maximum displacements for any move that
741 : !> is done on each simulation box
742 : !> \author matt
743 : ! **************************************************************************************************
744 1380 : SUBROUTINE create_box_disp_section(section)
745 : TYPE(section_type), POINTER :: section
746 :
747 : TYPE(keyword_type), POINTER :: keyword
748 :
749 1380 : CPASSERT(.NOT. ASSOCIATED(section))
750 :
751 : CALL section_create(section, __LOCATION__, name="BOX_DISPLACEMENTS", &
752 : description="Maximum displacements for any move that is performed on each"// &
753 : " simulation box.", &
754 1380 : n_keywords=1, n_subsections=0, repeats=.FALSE.)
755 :
756 1380 : NULLIFY (keyword)
757 :
758 : CALL keyword_create(keyword, __LOCATION__, name="RMVOLUME", &
759 : description="Maximum volume displacement, in angstrom**3.", &
760 : usage="RMVOLUME {real}", &
761 1380 : type_of_var=real_t)
762 1380 : CALL section_add_keyword(section, keyword)
763 1380 : CALL keyword_release(keyword)
764 :
765 : CALL keyword_create(keyword, __LOCATION__, name="RMCLTRANS", &
766 : description="Maximum translational displacement, in angstroms, for each cluster.", &
767 : usage="RMCLTRANS {real}", &
768 1380 : default_r_val=1.0E0_dp)
769 1380 : CALL section_add_keyword(section, keyword)
770 1380 : CALL keyword_release(keyword)
771 :
772 1380 : END SUBROUTINE create_box_disp_section
773 :
774 : ! **************************************************************************************************
775 : !> \brief creates the geometry optimization section
776 : !> \param section the section to be created
777 : !> \param location ...
778 : !> \param label ...
779 : !> \param description ...
780 : !> \param just_optimizers ...
781 : !> \param use_model_hessian ...
782 : !> \par History
783 : !> 01.2020 keywords related to Space Group Symmetry added [pcazade]
784 : !> \author teo
785 : ! **************************************************************************************************
786 5520 : RECURSIVE SUBROUTINE create_geoopt_section(section, location, label, description, just_optimizers, use_model_hessian)
787 : TYPE(section_type), POINTER :: section
788 : CHARACTER(LEN=*), INTENT(IN) :: location, label, description
789 : LOGICAL, INTENT(IN) :: just_optimizers, use_model_hessian
790 :
791 : TYPE(keyword_type), POINTER :: keyword
792 : TYPE(section_type), POINTER :: print_key, subsection
793 :
794 5520 : CPASSERT(.NOT. ASSOCIATED(section))
795 : CALL section_create(section, location=location, name=label, description=description, &
796 5520 : n_keywords=1, n_subsections=1, repeats=.FALSE.)
797 :
798 5520 : NULLIFY (keyword)
799 5520 : IF (.NOT. just_optimizers) THEN
800 : CALL keyword_create(keyword, __LOCATION__, name="TYPE", &
801 : description="Specify which kind of geometry optimization to perform", &
802 : usage="TYPE (MINIMIZATION|TRANSITION_STATE)", &
803 : enum_c_vals=s2a("MINIMIZATION", "TRANSITION_STATE"), &
804 : enum_desc=s2a("Performs a geometry minimization.", &
805 : "Performs a transition state optimization."), &
806 : enum_i_vals=[default_minimization_method_id, default_ts_method_id], &
807 1380 : default_i_val=default_minimization_method_id)
808 1380 : CALL section_add_keyword(section, keyword)
809 1380 : CALL keyword_release(keyword)
810 : END IF
811 :
812 : CALL keyword_create( &
813 : keyword, __LOCATION__, name="OPTIMIZER", &
814 : variants=["MINIMIZER"], &
815 : citations=[Byrd1995], &
816 : description="Specify which method to use to perform a geometry optimization.", &
817 : usage="OPTIMIZER {BFGS|LBFGS|CG}", &
818 : enum_c_vals=s2a("BFGS", "LBFGS", "CG"), &
819 : enum_desc=s2a("Most efficient minimizer, but only for 'small' systems, "// &
820 : "as it relies on diagonalization of a full Hessian matrix", &
821 : "Limited-memory variant of BFGS suitable for large systems. "// &
822 : "Not as well fine-tuned but can be more robust.", &
823 : "conjugate gradients, robust minimizer (depending on the line search) also OK for large systems"), &
824 : enum_i_vals=[default_bfgs_method_id, default_lbfgs_method_id, default_cg_method_id], &
825 16560 : default_i_val=default_bfgs_method_id)
826 5520 : CALL section_add_keyword(section, keyword)
827 5520 : CALL keyword_release(keyword)
828 :
829 : CALL keyword_create(keyword, __LOCATION__, name="MAX_ITER", &
830 : description="Specifies the maximum number of geometry optimization steps. "// &
831 : "One step might imply several force evaluations for the CG and LBFGS optimizers.", &
832 : usage="MAX_ITER {integer}", &
833 5520 : default_i_val=200)
834 5520 : CALL section_add_keyword(section, keyword)
835 5520 : CALL keyword_release(keyword)
836 :
837 : CALL keyword_create(keyword, __LOCATION__, name="MAX_DR", &
838 : description="Convergence criterion for the maximum geometry change "// &
839 : "between the current and the last optimizer iteration.", &
840 : usage="MAX_DR {real}", &
841 5520 : default_r_val=0.0030_dp, unit_str="bohr")
842 5520 : CALL section_add_keyword(section, keyword)
843 5520 : CALL keyword_release(keyword)
844 :
845 : CALL keyword_create(keyword, __LOCATION__, name="MAX_FORCE", &
846 : description="Convergence criterion for the maximum force component of the current configuration.", &
847 : usage="MAX_FORCE {real}", &
848 5520 : default_r_val=0.00045_dp, unit_str="hartree/bohr")
849 5520 : CALL section_add_keyword(section, keyword)
850 5520 : CALL keyword_release(keyword)
851 :
852 : CALL keyword_create(keyword, __LOCATION__, name="RMS_DR", &
853 : description="Convergence criterion for the root mean square (RMS) geometry"// &
854 : " change between the current and the last optimizer iteration.", &
855 : usage="RMS_DR {real}", unit_str="bohr", &
856 5520 : default_r_val=0.0015_dp)
857 5520 : CALL section_add_keyword(section, keyword)
858 5520 : CALL keyword_release(keyword)
859 :
860 : CALL keyword_create(keyword, __LOCATION__, name="RMS_FORCE", &
861 : description="Convergence criterion for the root mean square (RMS) force of the current configuration.", &
862 : usage="RMS_FORCE {real}", unit_str="hartree/bohr", &
863 5520 : default_r_val=0.00030_dp)
864 5520 : CALL section_add_keyword(section, keyword)
865 5520 : CALL keyword_release(keyword)
866 :
867 : CALL keyword_create(keyword, __LOCATION__, name="step_start_val", &
868 : description="The starting step value for the "//TRIM(label)//" module.", &
869 5520 : usage="step_start_val <integer>", default_i_val=0)
870 5520 : CALL section_add_keyword(section, keyword)
871 5520 : CALL keyword_release(keyword)
872 :
873 : ! collects keywords related to Space Group Symmetry
874 : CALL keyword_create( &
875 : keyword, __LOCATION__, name="KEEP_SPACE_GROUP", &
876 : description="Detect space group of the system and preserve it during optimization. "// &
877 : "The space group symmetry is applied to coordinates, forces, the stress tensor, and "// &
878 : "the CELL_OPT cell metric. "// &
879 : "It works for supercell. It does not affect/reduce computational cost. "// &
880 : "Use EPS_SYMMETRY to adjust the detection threshold.", &
881 : usage="KEEP_SPACE_GROUP .TRUE.", &
882 5520 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE., repeats=.FALSE.)
883 5520 : CALL section_add_keyword(section, keyword)
884 5520 : CALL keyword_release(keyword)
885 :
886 : ! collects keywords related to Space Group Symmetry analysis
887 : CALL keyword_create( &
888 : keyword, __LOCATION__, name="SHOW_SPACE_GROUP", &
889 : description="Detect and show space group of the system after optimization. "// &
890 : "It works for supercell. It does not affect/reduce computational cost. "// &
891 : "Use EPS_SYMMETRY to adjust the detection threshold.", &
892 : usage="SHOW_SPACE_GROUP .TRUE.", &
893 5520 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE., repeats=.FALSE.)
894 5520 : CALL section_add_keyword(section, keyword)
895 5520 : CALL keyword_release(keyword)
896 :
897 : ! collects keywords related to precision for finding the space group
898 : CALL keyword_create( &
899 : keyword, __LOCATION__, name="EPS_SYMMETRY", &
900 : description="Accuracy for space group determination. EPS_SYMMETRY is dimensionless. "// &
901 : "Roughly speaking, two scaled (fractional) atomic positions v1, v2 are considered identical if |v1 - v2| < EPS_SYMMETRY. ", &
902 : usage="EPS_SYMMETRY {REAL}", &
903 5520 : default_r_val=1.e-4_dp, repeats=.FALSE.)
904 5520 : CALL section_add_keyword(section, keyword)
905 5520 : CALL keyword_release(keyword)
906 :
907 : ! collects keywords related to reduction of symmetry due to an external field
908 : CALL keyword_create( &
909 : keyword, __LOCATION__, name="SYMM_REDUCTION", &
910 : description="Direction of the external static electric field. "// &
911 : "Some symmetry operations are not compatible with the direction of an electric field. "// &
912 : "These operations are used when enforcing the space group.", &
913 : usage="SYMM_REDUCTION 0.0 0.0 0.0", &
914 : repeats=.FALSE., n_var=3, &
915 5520 : type_of_var=real_t, default_r_vals=[0.0_dp, 0.0_dp, 0.0_dp])
916 5520 : CALL section_add_keyword(section, keyword)
917 5520 : CALL keyword_release(keyword)
918 :
919 : ! collects keywords related to ranges of atoms to symmetrize
920 : CALL keyword_create( &
921 : keyword, __LOCATION__, name="SYMM_EXCLUDE_RANGE", &
922 : description="Range of atoms to exclude from space group symmetry. "// &
923 : "These atoms are excluded from both identification and enforcement. "// &
924 : "This keyword can be repeated.", &
925 5520 : repeats=.TRUE., usage="SYMM_EXCLUDE_RANGE {Int} {Int}", type_of_var=integer_t, n_var=2)
926 5520 : CALL section_add_keyword(section, keyword)
927 5520 : CALL keyword_release(keyword)
928 :
929 : CALL keyword_create( &
930 : keyword, __LOCATION__, name="SPGR_PRINT_ATOMS", &
931 : description="Print equivalent atoms list for each space group symmetry operation.", &
932 5520 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
933 5520 : CALL section_add_keyword(section, keyword)
934 5520 : CALL keyword_release(keyword)
935 :
936 5520 : CALL create_lbfgs_section(subsection)
937 5520 : CALL section_add_subsection(section, subsection)
938 5520 : CALL section_release(subsection)
939 :
940 5520 : CALL create_cg_section(subsection)
941 5520 : CALL section_add_subsection(section, subsection)
942 5520 : CALL section_release(subsection)
943 :
944 5520 : CALL create_bfgs_section(subsection, use_model_hessian)
945 5520 : CALL section_add_subsection(section, subsection)
946 5520 : CALL section_release(subsection)
947 :
948 5520 : IF (.NOT. just_optimizers) THEN
949 : ! Transition states section
950 1380 : CALL create_ts_section(subsection)
951 1380 : CALL section_add_subsection(section, subsection)
952 1380 : CALL section_release(subsection)
953 :
954 : ! Create the PRINT subsection
955 1380 : NULLIFY (subsection)
956 : CALL section_create(subsection, __LOCATION__, name="PRINT", &
957 : description="Controls the printing properties during a geometry optimization run", &
958 1380 : n_keywords=0, n_subsections=1, repeats=.TRUE.)
959 1380 : NULLIFY (print_key)
960 : CALL cp_print_key_section_create( &
961 : print_key, __LOCATION__, "program_run_info", &
962 : description="Controls the printing of basic information during the Geometry Optimization", &
963 1380 : print_level=low_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
964 1380 : CALL section_add_subsection(subsection, print_key)
965 1380 : CALL section_release(print_key)
966 1380 : CALL section_add_subsection(section, subsection)
967 1380 : CALL section_release(subsection)
968 : END IF
969 :
970 5520 : END SUBROUTINE create_geoopt_section
971 :
972 : ! **************************************************************************************************
973 : !> \brief creates the section for the shell-core optimization
974 : !> \param section the section to be created
975 : !> \author Caino
976 : ! **************************************************************************************************
977 1380 : SUBROUTINE create_shellcore_opt_section(section)
978 : TYPE(section_type), POINTER :: section
979 :
980 : TYPE(section_type), POINTER :: print_key, subsection
981 :
982 : CALL create_geoopt_section( &
983 : section, __LOCATION__, label="SHELL_OPT", &
984 : description="This section sets the environment for the optimization of the shell-core distances"// &
985 : " that might turn to be necessary along a MD run using a shell-model potential."// &
986 : " The optimization procedure is activated when at least one of the shell-core"// &
987 : " pairs becomes too elongated, i.e. when the assumption of point dipole is not longer valid.", &
988 : just_optimizers=.TRUE., &
989 1380 : use_model_hessian=.FALSE.)
990 :
991 1380 : NULLIFY (print_key, subsection)
992 :
993 : ! Create the PRINT subsection
994 : NULLIFY (subsection)
995 : CALL section_create(subsection, __LOCATION__, name="PRINT", &
996 : description="Controls the printing properties during a shell-core optimization procedure", &
997 1380 : n_keywords=0, n_subsections=1, repeats=.TRUE.)
998 1380 : NULLIFY (print_key)
999 : CALL cp_print_key_section_create(print_key, __LOCATION__, "program_run_info", &
1000 : description="Controls the printing of basic information during the Optimization", &
1001 1380 : print_level=low_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
1002 1380 : CALL section_add_subsection(subsection, print_key)
1003 1380 : CALL section_release(print_key)
1004 1380 : CALL section_add_subsection(section, subsection)
1005 1380 : CALL section_release(subsection)
1006 :
1007 1380 : END SUBROUTINE create_shellcore_opt_section
1008 :
1009 : ! **************************************************************************************************
1010 : !> \brief creates the section for the cell optimization
1011 : !> \param section the section to be created
1012 : !> \author Teodoro Laino [tlaino] - University of Zurich - 03.2008
1013 : ! **************************************************************************************************
1014 1380 : SUBROUTINE create_cell_opt_section(section)
1015 : TYPE(section_type), POINTER :: section
1016 :
1017 : TYPE(keyword_type), POINTER :: keyword
1018 : TYPE(section_type), POINTER :: print_key, subsection
1019 :
1020 : CALL create_geoopt_section(section, __LOCATION__, label="CELL_OPT", &
1021 : description="This section sets the environment for the optimization "// &
1022 : "of the simulation cell. As is noted in FORCE_EVAL/SUBSYS/CELL, the "// &
1023 : "program convention is that the first cell vector A lies along the "// &
1024 : "X-axis and the second cell vector B is in the XY plane, such that "// &
1025 : "the cell vector matrix is a lower triangle. There is no complete, "// &
1026 : "official algorithm support and/or tests for updating the three "// &
1027 : "upper triangular components during a cell optimization; please "// &
1028 : "prepare input accordingly with these three components precisely 0 "// &
1029 : "even for cases like the primitive rhombohedral cell of the FCC lattice.", &
1030 1380 : just_optimizers=.TRUE., use_model_hessian=.FALSE.)
1031 :
1032 1380 : NULLIFY (keyword, print_key, subsection)
1033 : CALL keyword_create( &
1034 : keyword, __LOCATION__, name="TYPE", removed=.TRUE., description="", &
1035 : deprecation_notice="The keyword MOTION/CELL_OPT/TYPE has been removed because "// &
1036 : "cell optimizations now always use DIRECT_CELL_OPT.", &
1037 : enum_c_vals=s2a("DIRECT_CELL_OPT", "GEO_OPT", "MD"), &
1038 1380 : enum_i_vals=[1, 2, 3], default_i_val=1)
1039 1380 : CALL section_add_keyword(section, keyword)
1040 1380 : CALL keyword_release(keyword)
1041 :
1042 : CALL keyword_create( &
1043 : keyword, __LOCATION__, name="EXTERNAL_PRESSURE", &
1044 : description="Specifies the external pressure (1 value or the full 9 components of the pressure tensor) "// &
1045 : "applied during the cell optimization.", &
1046 : usage="EXTERNAL_PRESSURE {REAL} .. {REAL}", unit_str="bar", &
1047 : default_r_vals=[cp_unit_to_cp2k(100.0_dp, "bar"), 0.0_dp, 0.0_dp, &
1048 : 0.0_dp, cp_unit_to_cp2k(100.0_dp, "bar"), 0.0_dp, &
1049 13800 : 0.0_dp, 0.0_dp, cp_unit_to_cp2k(100.0_dp, "bar")], n_var=-1)
1050 1380 : CALL section_add_keyword(section, keyword)
1051 1380 : CALL keyword_release(keyword)
1052 :
1053 : CALL keyword_create(keyword, __LOCATION__, name="KEEP_VOLUME", &
1054 : description="Keep the volume of the cell constant during cell optimization. "// &
1055 : "This is implemented by comparing the cell volumes and scaling the new "// &
1056 : "cell vectors just before updating the cell information, and can be "// &
1057 : "used together with KEEP_ANGLES or KEEP_SYMMETRY.", &
1058 1380 : usage="KEEP_VOLUME TRUE", default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1059 1380 : CALL section_add_keyword(section, keyword)
1060 1380 : CALL keyword_release(keyword)
1061 :
1062 : CALL keyword_create(keyword, __LOCATION__, name="KEEP_ANGLES", &
1063 : description="Keep angles between the cell vectors constant, but "// &
1064 : "allow the lengths of the cell vectors to change independently "// &
1065 : "during cell optimization. This is implemented by projecting out "// &
1066 : "the components of angles in the cell gradient before the cell "// &
1067 : "is updated. Albeit general, this is most useful for triclinic "// &
1068 : "cells; to enforce higher symmetry, see KEEP_SYMMETRY.", &
1069 1380 : usage="KEEP_ANGLES TRUE", default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1070 1380 : CALL section_add_keyword(section, keyword)
1071 1380 : CALL keyword_release(keyword)
1072 :
1073 : CALL keyword_create(keyword, __LOCATION__, name="KEEP_SYMMETRY", &
1074 : description="Keep the requested initial cell symmetry as specified "// &
1075 : "in the FORCE_EVAL/SUBSYS/CELL section during cell optimization. "// &
1076 : "This is implemented by removing symmetry-breaking components and "// &
1077 : "taking averages of components if necessary in the cell gradient "// &
1078 : "before the cell is updated. To enforce the space group (which "// &
1079 : "requires spglib package), see KEEP_SPACE_GROUP.", &
1080 1380 : usage="KEEP_SYMMETRY TRUE", default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1081 1380 : CALL section_add_keyword(section, keyword)
1082 1380 : CALL keyword_release(keyword)
1083 :
1084 : CALL keyword_create( &
1085 : keyword, __LOCATION__, name="CONSTRAINT", &
1086 : description="Imposes a constraint on the pressure tensor by fixing the specified cell components.", &
1087 : usage="CONSTRAINT (none|x|y|z|xy|xz|yz)", &
1088 : enum_desc=s2a("Fix nothing", &
1089 : "Fix only x component", &
1090 : "Fix only y component", &
1091 : "Fix only z component", &
1092 : "Fix x and y component", &
1093 : "Fix x and z component", &
1094 : "Fix y and z component"), &
1095 : enum_c_vals=s2a("NONE", "X", "Y", "Z", "XY", "XZ", "YZ"), &
1096 : enum_i_vals=[fix_none, fix_x, fix_y, fix_z, fix_xy, fix_xz, fix_yz], &
1097 1380 : default_i_val=fix_none)
1098 1380 : CALL section_add_keyword(section, keyword)
1099 1380 : CALL keyword_release(keyword)
1100 :
1101 : CALL keyword_create(keyword, __LOCATION__, name="PRESSURE_TOLERANCE", &
1102 : description="Specifies the Pressure tolerance (compared to the external pressure) to achieve "// &
1103 : "during the cell optimization.", &
1104 : usage="PRESSURE_TOLERANCE {REAL}", unit_str="bar", &
1105 1380 : default_r_val=cp_unit_to_cp2k(100.0_dp, "bar"))
1106 1380 : CALL section_add_keyword(section, keyword)
1107 1380 : CALL keyword_release(keyword)
1108 :
1109 : ! Create the PRINT subsection
1110 1380 : NULLIFY (subsection)
1111 : CALL section_create(subsection, __LOCATION__, name="PRINT", &
1112 : description="Controls the printing properties during a geometry optimization run", &
1113 1380 : n_keywords=0, n_subsections=1, repeats=.TRUE.)
1114 1380 : NULLIFY (print_key)
1115 : CALL cp_print_key_section_create(print_key, __LOCATION__, "program_run_info", &
1116 : description="Controls the printing of basic information during the Geometry Optimization", &
1117 1380 : print_level=low_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
1118 1380 : CALL section_add_subsection(subsection, print_key)
1119 1380 : CALL section_release(print_key)
1120 : CALL cp_print_key_section_create(print_key, __LOCATION__, "cell", &
1121 : description="Controls the printing of the cell eveytime a calculation using a new cell is started.", &
1122 : print_level=low_print_level, add_last=add_last_numeric, filename="__STD_OUT__", &
1123 1380 : unit_str="angstrom")
1124 1380 : CALL section_add_subsection(subsection, print_key)
1125 1380 : CALL section_release(print_key)
1126 1380 : CALL section_add_subsection(section, subsection)
1127 1380 : CALL section_release(subsection)
1128 :
1129 1380 : END SUBROUTINE create_cell_opt_section
1130 :
1131 : ! **************************************************************************************************
1132 : !> \brief creates the section for tuning transition states search
1133 : !> \param section the section to be created
1134 : !> \author Teodoro Laino [tlaino] - University of Zurich - 01.2008
1135 : ! **************************************************************************************************
1136 1380 : SUBROUTINE create_ts_section(section)
1137 : TYPE(section_type), POINTER :: section
1138 :
1139 : TYPE(keyword_type), POINTER :: keyword
1140 : TYPE(section_type), POINTER :: print_key, subsection, subsection2, &
1141 : subsection3
1142 :
1143 : ! Create the Transition State subsection
1144 :
1145 1380 : NULLIFY (section, keyword, subsection, subsection2)
1146 : CALL section_create(section, __LOCATION__, name="TRANSITION_STATE", &
1147 : description="Specifies parameters to perform a transition state search", &
1148 1380 : n_keywords=0, n_subsections=1, repeats=.FALSE.)
1149 :
1150 : CALL keyword_create(keyword, __LOCATION__, name="METHOD", &
1151 : description="Specify which kind of method to use for locating transition states", &
1152 : citations=[Henkelman1999], &
1153 : usage="METHOD (DIMER)", &
1154 : enum_c_vals=s2a("DIMER"), &
1155 : enum_desc=s2a("Uses the dimer method to optimize transition states."), &
1156 : enum_i_vals=[default_dimer_method_id], &
1157 2760 : default_i_val=default_dimer_method_id)
1158 1380 : CALL section_add_keyword(section, keyword)
1159 1380 : CALL keyword_release(keyword)
1160 :
1161 : CALL section_create(subsection, __LOCATION__, name="DIMER", &
1162 : description="Specifies parameters for Dimer Method", &
1163 1380 : n_keywords=0, n_subsections=1, repeats=.FALSE.)
1164 :
1165 : CALL keyword_create(keyword, __LOCATION__, name="DR", &
1166 : description="This keyword sets the value for the DR parameter.", &
1167 : usage="DR {real}", unit_str='angstrom', &
1168 1380 : default_r_val=cp_unit_to_cp2k(0.01_dp, "angstrom"))
1169 1380 : CALL section_add_keyword(subsection, keyword)
1170 1380 : CALL keyword_release(keyword)
1171 :
1172 : CALL keyword_create(keyword, __LOCATION__, name="INITIALIZATION_METHOD", &
1173 : description="Specify the initialization method of the dimer vector, "// &
1174 : "which is crucial for converging to the desired transition state. "// &
1175 : "If the DIMER_VECTOR section is defined explicitly, it will always "// &
1176 : "be parsed directly (e.g. in restart files); INITIALIZATION_METHOD "// &
1177 : "is only effective if the DIMER_VECTOR section is not explicit.", &
1178 : usage="INITIALIZATION_METHOD (RANDOM|MOLDEN)", &
1179 : enum_desc=s2a("Generate the initial dimer vector randomly. This is "// &
1180 : "the default for backwards compatibility; in practice "// &
1181 : "it may distort the structure and slow down convergence.", &
1182 : "Generate the initial dimer vector from one or more "// &
1183 : "vibrational normal modes as read from a MOLDEN file "// &
1184 : "produced by `VIBRATIONAL_ANALYSIS%PRINT%MOLDEN_VIB` "// &
1185 : "in a vibrational analysis task. Requires setting up "// &
1186 : "keywords `VIB_MOLDEN_NAME`, `VIB_INDEX` and `VIB_WEIGHT`."), &
1187 : enum_c_vals=s2a("RANDOM", "MOLDEN"), &
1188 : enum_i_vals=[dimer_init_random, dimer_init_molden], &
1189 1380 : default_i_val=dimer_init_random)
1190 1380 : CALL section_add_keyword(subsection, keyword)
1191 1380 : CALL keyword_release(keyword)
1192 :
1193 : CALL keyword_create(keyword, __LOCATION__, name="VIB_MOLDEN_NAME", &
1194 : description="The external molden file containing vibrational "// &
1195 : "normal modes for `INITIALIZATION_METHOD MOLDEN`.", &
1196 1380 : usage="VIB_MOLDEN_NAME <CHARACTER>", type_of_var=lchar_t)
1197 1380 : CALL section_add_keyword(subsection, keyword)
1198 1380 : CALL keyword_release(keyword)
1199 :
1200 : CALL keyword_create(keyword, __LOCATION__, name="VIB_INDEX", &
1201 : description="The index of one or more vibrational normal modes "// &
1202 : "from the file whose linear combination will form the initial "// &
1203 : "dimer vector.", &
1204 : usage="VIB_INDEX {integer} {integer} .. {integer}", repeats=.TRUE., &
1205 1380 : n_var=-1, default_i_vals=[1], type_of_var=integer_t)
1206 1380 : CALL section_add_keyword(subsection, keyword)
1207 1380 : CALL keyword_release(keyword)
1208 :
1209 : CALL keyword_create(keyword, __LOCATION__, name="VIB_WEIGHT", &
1210 : description="The weight of one or more vibrational normal modes "// &
1211 : "from the file whose linear combination will form the initial "// &
1212 : "dimer vector.", &
1213 : usage="VIB_WEIGHT {real} {real} .. {real}", repeats=.TRUE., &
1214 1380 : n_var=-1, default_r_vals=[1.0_dp], type_of_var=real_t)
1215 1380 : CALL section_add_keyword(subsection, keyword)
1216 1380 : CALL keyword_release(keyword)
1217 :
1218 : CALL keyword_create(keyword, __LOCATION__, name="INTERPOLATE_GRADIENT", &
1219 : description="This keyword controls the interpolation of the gradient whenever possible"// &
1220 : " during the optimization of the Dimer. The use of this keywords saves 1 evaluation"// &
1221 : " of energy/forces.", usage="INTERPOLATE_GRADIENT {logical}", default_l_val=.TRUE., &
1222 1380 : lone_keyword_l_val=.TRUE.)
1223 1380 : CALL section_add_keyword(subsection, keyword)
1224 1380 : CALL keyword_release(keyword)
1225 :
1226 : CALL keyword_create(keyword, __LOCATION__, name="ANGLE_TOLERANCE", &
1227 : description="This keyword sets the value of the tolerance angle for the line search"// &
1228 : " performed to optimize the orientation of the dimer.", &
1229 : usage="ANGLE_TOLERANCE {real}", unit_str='rad', &
1230 1380 : default_r_val=cp_unit_to_cp2k(5.0_dp, "deg"))
1231 1380 : CALL section_add_keyword(subsection, keyword)
1232 1380 : CALL keyword_release(keyword)
1233 :
1234 : CALL keyword_create(keyword, __LOCATION__, name="K-DIMER", &
1235 : description="This keyword activates the constrained k-dimer translation"// &
1236 : " J. Chem. Phys. 141, 164111 (2014).", &
1237 : citations=[Henkelman2014], &
1238 : usage="K-DIMER {logica}", &
1239 : default_l_val=.FALSE., &
1240 2760 : lone_keyword_l_val=.FALSE.)
1241 1380 : CALL section_add_keyword(subsection, keyword)
1242 1380 : CALL keyword_release(keyword)
1243 :
1244 : CALL keyword_create(keyword, __LOCATION__, name="BETA", &
1245 : description="Exponential factor for the switching function used in K-DIMER", &
1246 : usage="BETA {real}", &
1247 : default_r_val=5.0_dp, &
1248 1380 : lone_keyword_r_val=5.0_dp)
1249 1380 : CALL section_add_keyword(subsection, keyword)
1250 1380 : CALL keyword_release(keyword)
1251 :
1252 : CALL create_geoopt_section( &
1253 : subsection2, __LOCATION__, label="ROT_OPT", &
1254 : description="This section sets the environment for the optimization of the rotation of the Dimer.", &
1255 : just_optimizers=.TRUE., &
1256 1380 : use_model_hessian=.FALSE.)
1257 1380 : NULLIFY (subsection3)
1258 : CALL section_create(subsection3, __LOCATION__, name="PRINT", &
1259 : description="Controls the printing properties during the dimer rotation optimization run", &
1260 1380 : n_keywords=0, n_subsections=1, repeats=.TRUE.)
1261 1380 : NULLIFY (print_key)
1262 :
1263 : CALL cp_print_key_section_create(print_key, __LOCATION__, "PROGRAM_RUN_INFO", &
1264 : description="Controls the printing of basic information during the Geometry Optimization", &
1265 1380 : print_level=low_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
1266 1380 : CALL section_add_subsection(subsection3, print_key)
1267 1380 : CALL section_release(print_key)
1268 :
1269 : CALL cp_print_key_section_create(print_key, __LOCATION__, "ROTATIONAL_INFO", &
1270 : description="Controls the printing basic info during the cleaning of the "// &
1271 : "rotational degrees of freedom.", print_level=low_print_level, &
1272 1380 : add_last=add_last_numeric, filename="__STD_OUT__")
1273 : CALL keyword_create(keyword, __LOCATION__, name="COORDINATES", &
1274 : description="Prints atomic coordinates after rotation", &
1275 1380 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1276 1380 : CALL section_add_keyword(print_key, keyword)
1277 1380 : CALL keyword_release(keyword)
1278 1380 : CALL section_add_subsection(subsection3, print_key)
1279 1380 : CALL section_release(print_key)
1280 :
1281 1380 : CALL section_add_subsection(subsection2, subsection3)
1282 1380 : CALL section_release(subsection3)
1283 1380 : CALL section_add_subsection(subsection, subsection2)
1284 1380 : CALL section_release(subsection2)
1285 :
1286 : CALL section_create(subsection2, __LOCATION__, name="DIMER_VECTOR", &
1287 : description="Specifies the initial dimer vector. This "// &
1288 : "section overrides INITIALIZATION_METHOD, and will be "// &
1289 : "updated on each step for producing the restart files.", &
1290 1380 : n_keywords=0, n_subsections=1, repeats=.FALSE.)
1291 : CALL keyword_create(keyword, __LOCATION__, name="_DEFAULT_KEYWORD_", &
1292 : description="Specify on each line the components of the dimer vector.", repeats=.TRUE., &
1293 1380 : usage="{Real} {Real} {Real}", type_of_var=real_t, n_var=-1)
1294 1380 : CALL section_add_keyword(subsection2, keyword)
1295 1380 : CALL keyword_release(keyword)
1296 1380 : CALL section_add_subsection(subsection, subsection2)
1297 1380 : CALL section_release(subsection2)
1298 :
1299 1380 : CALL section_add_subsection(section, subsection)
1300 1380 : CALL section_release(subsection)
1301 :
1302 1380 : END SUBROUTINE create_ts_section
1303 :
1304 : ! **************************************************************************************************
1305 : !> \brief creates the BFGS section
1306 : !> \param section the section to be created
1307 : !> \param use_model_hessian ...
1308 : !> \author Teodoro Laino [tlaino] - University of Zurich - 01.2008
1309 : ! **************************************************************************************************
1310 5520 : SUBROUTINE create_bfgs_section(section, use_model_hessian)
1311 : TYPE(section_type), POINTER :: section
1312 : LOGICAL, INTENT(IN) :: use_model_hessian
1313 :
1314 : TYPE(keyword_type), POINTER :: keyword
1315 : TYPE(section_type), POINTER :: print_key
1316 :
1317 : ! create the BFGS subsection
1318 :
1319 5520 : NULLIFY (section, keyword, print_key)
1320 : CALL section_create(section, __LOCATION__, name="BFGS", &
1321 : description="Provides parameters to tune the BFGS optimization", &
1322 5520 : n_keywords=0, n_subsections=1, repeats=.FALSE.)
1323 :
1324 : CALL keyword_create(keyword, __LOCATION__, name="METHOD", &
1325 : description="Matrix updated by full-memory BFGS. DIRECT updates the Hessian; "// &
1326 : "INVERSE updates its inverse without a full diagonalization at each step.", &
1327 : usage="METHOD INVERSE", &
1328 : enum_c_vals=s2a("DIRECT", "INVERSE"), &
1329 5520 : enum_i_vals=[bfgs_direct, bfgs_inverse], default_i_val=bfgs_direct)
1330 5520 : CALL section_add_keyword(section, keyword)
1331 5520 : CALL keyword_release(keyword)
1332 :
1333 : CALL keyword_create(keyword, __LOCATION__, name="TRUST_RADIUS", &
1334 : description="Trust radius used in BFGS. Previously set to 0.1. "// &
1335 : "Large values can lead to instabilities", &
1336 : usage="TRUST_RADIUS {real}", unit_str='angstrom', &
1337 5520 : default_r_val=cp_unit_to_cp2k(0.25_dp, "angstrom"))
1338 5520 : CALL section_add_keyword(section, keyword)
1339 5520 : CALL keyword_release(keyword)
1340 :
1341 : CALL keyword_create(keyword, __LOCATION__, name="USE_MODEL_HESSIAN", &
1342 : description="Uses a model Hessian as initial guess instead of a unit matrix."// &
1343 : " Should lead in general to improved convergence might be switched off for exotic cases", &
1344 : usage="USE_MODEL_HESSIAN", &
1345 : citations=[Lindh1995], &
1346 11040 : default_l_val=use_model_hessian, lone_keyword_l_val=.TRUE.)
1347 5520 : CALL section_add_keyword(section, keyword)
1348 5520 : CALL keyword_release(keyword)
1349 :
1350 : CALL keyword_create(keyword, __LOCATION__, name="USE_RAT_FUN_OPT", &
1351 : description="Includes a rational function optimization to determine the step. "// &
1352 : "Previously default but did not improve convergence in many cases. "// &
1353 : "Not supported by inverse-Hessian update method.", &
1354 : usage="USE_RAT_FUN_OPT", &
1355 5520 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1356 5520 : CALL section_add_keyword(section, keyword)
1357 5520 : CALL keyword_release(keyword)
1358 :
1359 : CALL keyword_create(keyword, __LOCATION__, name="RESTART_HESSIAN", &
1360 : description="Reads the initial BFGS matrix from file. Hessian and inverse-Hessian "// &
1361 : "restarts are converted to the selected METHOD when necessary.", &
1362 : usage="RESTART_HESSIAN", &
1363 5520 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1364 5520 : CALL section_add_keyword(section, keyword)
1365 5520 : CALL keyword_release(keyword)
1366 :
1367 : CALL keyword_create(keyword, __LOCATION__, name="RESTART_FILE_NAME", &
1368 : description="Specifies the name of the file used to read the initial Hessian.", &
1369 : usage="RESTART_FILE_NAME {filename}", &
1370 5520 : default_lc_val="")
1371 5520 : CALL section_add_keyword(section, keyword)
1372 5520 : CALL keyword_release(keyword)
1373 :
1374 : CALL cp_print_key_section_create(print_key, __LOCATION__, "RESTART", &
1375 : description="Controls the printing of Hessian Restart file", &
1376 : print_level=low_print_level, add_last=add_last_numeric, filename="BFGS", &
1377 5520 : common_iter_levels=2)
1378 5520 : CALL section_add_subsection(section, print_key)
1379 5520 : CALL section_release(print_key)
1380 :
1381 5520 : END SUBROUTINE create_bfgs_section
1382 :
1383 : ! **************************************************************************************************
1384 : !> \brief creates the CG section
1385 : !> \param section the section to be created
1386 : !> \author Teodoro Laino [tlaino] - University of Zurich - 01.2008
1387 : ! **************************************************************************************************
1388 5520 : SUBROUTINE create_cg_section(section)
1389 : TYPE(section_type), POINTER :: section
1390 :
1391 : TYPE(keyword_type), POINTER :: keyword
1392 : TYPE(section_type), POINTER :: subsection, subsubsection
1393 :
1394 : ! create the CG subsection
1395 :
1396 5520 : NULLIFY (section, subsection, subsubsection, keyword)
1397 : CALL section_create(section, __LOCATION__, name="CG", &
1398 : description="Provides parameters to tune the conjugate gradient optimization", &
1399 5520 : n_keywords=0, n_subsections=1, repeats=.FALSE.)
1400 :
1401 : CALL keyword_create(keyword, __LOCATION__, name="MAX_STEEP_STEPS", &
1402 : description="Maximum number of steepest descent steps before starting the"// &
1403 : " conjugate gradients optimization.", &
1404 : usage="MAX_STEEP_STEPS {integer}", &
1405 5520 : default_i_val=0)
1406 5520 : CALL section_add_keyword(section, keyword)
1407 5520 : CALL keyword_release(keyword)
1408 :
1409 : CALL keyword_create(keyword, __LOCATION__, name="RESTART_LIMIT", &
1410 : description="Cosine of the angle between two consecutive searching directions."// &
1411 : " If the angle during a CG optimization is less than the one corresponding to"// &
1412 : " to the RESTART_LIMIT the CG is reset and one step of steepest descent is"// &
1413 : " performed.", &
1414 : usage="RESTART_LIMIT {real}", &
1415 5520 : default_r_val=0.9_dp)
1416 5520 : CALL section_add_keyword(section, keyword)
1417 5520 : CALL keyword_release(keyword)
1418 :
1419 : CALL keyword_create(keyword, __LOCATION__, name="FLETCHER_REEVES", &
1420 : description="Uses FLETCHER-REEVES instead of POLAK-RIBIERE when using Conjugate Gradients", &
1421 : usage="FLETCHER_REEVES", &
1422 5520 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1423 5520 : CALL section_add_keyword(section, keyword)
1424 5520 : CALL keyword_release(keyword)
1425 :
1426 : ! Line Search section
1427 : CALL section_create(subsection, __LOCATION__, name="LINE_SEARCH", &
1428 : description="Provides parameters to tune the line search during the conjugate gradient optimization", &
1429 5520 : n_keywords=0, n_subsections=1, repeats=.FALSE.)
1430 :
1431 : CALL keyword_create(keyword, __LOCATION__, name="TYPE", &
1432 : description="1D line search algorithm to be used with the CG optimizer,"// &
1433 : " in increasing order of robustness and cost. ", &
1434 : usage="TYPE GOLD", &
1435 : default_i_val=ls_gold, &
1436 : enum_c_vals=s2a("2PNT", "GOLD", "FIT"), &
1437 : enum_desc=s2a("extrapolate based on 2 points", &
1438 : "perform 1D golden section search of the minimum (very expensive)", &
1439 : "perform 1D fit of a parabola on several evaluation of energy "// &
1440 : "(very expensive and more robust vs numerical noise)"), &
1441 5520 : enum_i_vals=[ls_2pnt, ls_gold, ls_fit])
1442 5520 : CALL section_add_keyword(subsection, keyword)
1443 5520 : CALL keyword_release(keyword)
1444 :
1445 : ! 2PNT
1446 5520 : NULLIFY (subsubsection)
1447 : CALL section_create(subsubsection, __LOCATION__, name="2PNT", &
1448 : description="Provides parameters to tune the line search for the two point based line search.", &
1449 5520 : n_keywords=0, n_subsections=1, repeats=.FALSE.)
1450 :
1451 : CALL keyword_create(keyword, __LOCATION__, name="MAX_ALLOWED_STEP", &
1452 : description="Max allowed value for the line search step.", &
1453 : usage="MAX_ALLOWED_STEP {real}", unit_str="internal_cp2k", &
1454 5520 : default_r_val=0.25_dp)
1455 5520 : CALL section_add_keyword(subsubsection, keyword)
1456 5520 : CALL keyword_release(keyword)
1457 :
1458 : CALL keyword_create( &
1459 : keyword, __LOCATION__, name="LINMIN_GRAD_ONLY", &
1460 : description="Use only the gradient, not the energy for line minimizations (e.g. in conjugate gradients).", &
1461 : usage="LINMIN_GRAD_ONLY T", &
1462 5520 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1463 5520 : CALL section_add_keyword(subsubsection, keyword)
1464 5520 : CALL keyword_release(keyword)
1465 :
1466 5520 : CALL section_add_subsection(subsection, subsubsection)
1467 5520 : CALL section_release(subsubsection)
1468 :
1469 : ! GOLD
1470 5520 : NULLIFY (subsubsection)
1471 : CALL section_create(subsubsection, __LOCATION__, name="GOLD", &
1472 : description="Provides parameters to tune the line search for the gold search.", &
1473 5520 : n_keywords=0, n_subsections=1, repeats=.FALSE.)
1474 :
1475 : CALL keyword_create(keyword, __LOCATION__, name="INITIAL_STEP", &
1476 : description="Initial step size used, e.g. for bracketing or minimizers. "// &
1477 : "Might need to be reduced for systems with close contacts", &
1478 : usage="INITIAL_STEP {real}", unit_str="internal_cp2k", &
1479 5520 : default_r_val=0.2_dp)
1480 5520 : CALL section_add_keyword(subsubsection, keyword)
1481 5520 : CALL keyword_release(keyword)
1482 :
1483 : CALL keyword_create(keyword, __LOCATION__, name="BRACK_LIMIT", &
1484 : description="Limit in 1D bracketing during line search in Conjugate Gradients Optimization.", &
1485 : usage="BRACK_LIMIT {real}", unit_str="internal_cp2k", &
1486 5520 : default_r_val=100.0_dp)
1487 5520 : CALL section_add_keyword(subsubsection, keyword)
1488 5520 : CALL keyword_release(keyword)
1489 :
1490 : CALL keyword_create(keyword, __LOCATION__, name="BRENT_TOL", &
1491 : description="Tolerance requested during Brent line search in Conjugate Gradients Optimization.", &
1492 : usage="BRENT_TOL {real}", unit_str="internal_cp2k", &
1493 5520 : default_r_val=0.01_dp)
1494 5520 : CALL section_add_keyword(subsubsection, keyword)
1495 5520 : CALL keyword_release(keyword)
1496 :
1497 : CALL keyword_create(keyword, __LOCATION__, name="BRENT_MAX_ITER", &
1498 : description="Maximum number of iterations in brent algorithm "// &
1499 : "(used for the line search in Conjugated Gradients Optimization)", &
1500 : usage="BRENT_MAX_ITER {integer}", &
1501 5520 : default_i_val=100)
1502 5520 : CALL section_add_keyword(subsubsection, keyword)
1503 5520 : CALL keyword_release(keyword)
1504 5520 : CALL section_add_subsection(subsection, subsubsection)
1505 5520 : CALL section_release(subsubsection)
1506 :
1507 5520 : CALL section_add_subsection(section, subsection)
1508 5520 : CALL section_release(subsection)
1509 5520 : END SUBROUTINE create_cg_section
1510 :
1511 : ! **************************************************************************************************
1512 : !> \brief creates the LBFGS section
1513 : !> \param section the section to be created
1514 : !> \author Teodoro Laino [tlaino] - University of Zurich - 01.2008
1515 : ! **************************************************************************************************
1516 5520 : SUBROUTINE create_lbfgs_section(section)
1517 : TYPE(section_type), POINTER :: section
1518 :
1519 : TYPE(keyword_type), POINTER :: keyword
1520 :
1521 : ! create the LBFGS section
1522 :
1523 5520 : NULLIFY (section, keyword)
1524 : CALL section_create(section, __LOCATION__, name="LBFGS", &
1525 : description="Provides parameters to tune the limited memory BFGS (LBFGS) optimization", &
1526 : n_keywords=0, n_subsections=1, repeats=.FALSE., &
1527 11040 : citations=[Byrd1995])
1528 :
1529 : CALL keyword_create(keyword, __LOCATION__, name="MAX_H_RANK", &
1530 : description="Maximum rank (and consequently size) of the "// &
1531 : "approximate Hessian matrix used by the LBFGS optimizer. "// &
1532 : "Larger values (e.g. 30) will accelerate the convergence behaviour "// &
1533 : "at the cost of a larger memory consumption.", &
1534 : usage="MAX_H_RANK {integer}", &
1535 5520 : default_i_val=5)
1536 5520 : CALL section_add_keyword(section, keyword)
1537 5520 : CALL keyword_release(keyword)
1538 :
1539 : CALL keyword_create(keyword, __LOCATION__, name="MAX_F_PER_ITER", &
1540 : description="Maximum number of force evaluations per iteration"// &
1541 : " (used for the line search)", &
1542 : usage="MAX_F_PER_ITER {integer}", &
1543 5520 : default_i_val=20)
1544 5520 : CALL section_add_keyword(section, keyword)
1545 5520 : CALL keyword_release(keyword)
1546 :
1547 : CALL keyword_create(keyword, __LOCATION__, name="PRINT_LEVEL", &
1548 : description="How much output is written out by the LBFGS algorithm. "// &
1549 : "Currently this is independent of the &GLOBAL/PRINT_LEVEL setting.", &
1550 : usage="PRINT_LEVEL MEDIUM", &
1551 : enum_c_vals=s2a("SILENT", "LOW", "MEDIUM", "HIGH", "DEBUG"), &
1552 : enum_desc=s2a("Almost no output", &
1553 : "Little output about f and |proj g| every iteration", &
1554 : "Quite some output about details every iteration", &
1555 : "Lots of output about changes of active set and final x", &
1556 : "Everything is written out, useful for debugging purposes only"), &
1557 : enum_i_vals=[silent_lbfgs, low_lbfgs, medium_lbfgs, &
1558 : high_lbfgs, debug_lbfgs], &
1559 5520 : default_i_val=low_print_level)
1560 5520 : CALL section_add_keyword(section, keyword)
1561 5520 : CALL keyword_release(keyword)
1562 :
1563 : CALL keyword_create(keyword, __LOCATION__, name="WANTED_PROJ_GRADIENT", &
1564 : description="Convergence criterion (overrides the general ones):"// &
1565 : " Requested norm threshold of the gradient multiplied"// &
1566 : " by the approximate Hessian.", &
1567 : usage="WANTED_PROJ_GRADIENT {real}", unit_str="internal_cp2k", &
1568 5520 : default_r_val=1.0E-16_dp)
1569 5520 : CALL section_add_keyword(section, keyword)
1570 5520 : CALL keyword_release(keyword)
1571 :
1572 : CALL keyword_create(keyword, __LOCATION__, name="WANTED_REL_F_ERROR", &
1573 : description="Convergence criterion (overrides the general ones):"// &
1574 : " Requested relative error on the objective function"// &
1575 : " of the optimizer (the energy)", &
1576 : usage="WANTED_REL_F_ERROR {real}", unit_str="internal_cp2k", &
1577 5520 : default_r_val=1.0E-16_dp)
1578 5520 : CALL section_add_keyword(section, keyword)
1579 5520 : CALL keyword_release(keyword)
1580 :
1581 : CALL keyword_create( &
1582 : keyword, __LOCATION__, name="TRUST_RADIUS", &
1583 : description="Trust radius used in LBFGS. Not completely in depth tested. Negativ values means no trust radius is used.", &
1584 : usage="TRUST_RADIUS {real}", unit_str='angstrom', &
1585 5520 : default_r_val=-1.0_dp)
1586 5520 : CALL section_add_keyword(section, keyword)
1587 5520 : CALL keyword_release(keyword)
1588 :
1589 : CALL keyword_create(keyword, __LOCATION__, name="__CONTROL_VAL", &
1590 : description="Hidden parameter that controls the printing behavior "// &
1591 : "of the LBFGS optimizer for advanced debug purposes. This option "// &
1592 : "overrides PRINT_LEVEL setting if explicit.", &
1593 5520 : default_i_val=-1)
1594 5520 : CALL section_add_keyword(section, keyword)
1595 5520 : CALL keyword_release(keyword)
1596 :
1597 5520 : END SUBROUTINE create_lbfgs_section
1598 :
1599 : ! **************************************************************************************************
1600 : !> \brief creates the flexible_partitioning section
1601 : !> \param section the section to be created
1602 : !> \author Joost VandeVondele [04.2006]
1603 : ! **************************************************************************************************
1604 1380 : SUBROUTINE create_fp_section(section)
1605 : TYPE(section_type), POINTER :: section
1606 :
1607 : TYPE(keyword_type), POINTER :: keyword
1608 : TYPE(section_type), POINTER :: print_key
1609 :
1610 1380 : CPASSERT(.NOT. ASSOCIATED(section))
1611 : CALL section_create(section, __LOCATION__, name="FLEXIBLE_PARTITIONING", &
1612 : description="This section sets up flexible_partitioning", &
1613 1380 : n_keywords=1, n_subsections=1, repeats=.FALSE.)
1614 :
1615 1380 : NULLIFY (keyword, print_key)
1616 :
1617 : CALL keyword_create(keyword, __LOCATION__, name="CENTRAL_ATOM", &
1618 : description="Specifies the central atom.", &
1619 : usage="CENTRAL_ATOM {integer}", &
1620 1380 : n_var=1, type_of_var=integer_t)
1621 1380 : CALL section_add_keyword(section, keyword)
1622 1380 : CALL keyword_release(keyword)
1623 :
1624 : CALL keyword_create(keyword, __LOCATION__, name="INNER_ATOMS", &
1625 : description="Specifies the list of atoms that should remain close to the central atom.", &
1626 : usage="INNER_ATOMS {integer} {integer} .. {integer}", &
1627 1380 : n_var=-1, type_of_var=integer_t)
1628 1380 : CALL section_add_keyword(section, keyword)
1629 1380 : CALL keyword_release(keyword)
1630 :
1631 : CALL keyword_create(keyword, __LOCATION__, name="OUTER_ATOMS", &
1632 : description="Specifies the list of atoms that should remain far from the central atom.", &
1633 : usage="OUTER_ATOMS {integer} {integer} .. {integer}", &
1634 1380 : n_var=-1, type_of_var=integer_t)
1635 1380 : CALL section_add_keyword(section, keyword)
1636 1380 : CALL keyword_release(keyword)
1637 :
1638 : CALL keyword_create(keyword, __LOCATION__, name="INNER_RADIUS", &
1639 : description="radius of the inner wall", &
1640 : usage="INNER_RADIUS {real} ", type_of_var=real_t, &
1641 1380 : n_var=1, unit_str="angstrom")
1642 1380 : CALL section_add_keyword(section, keyword)
1643 1380 : CALL keyword_release(keyword)
1644 :
1645 : CALL keyword_create(keyword, __LOCATION__, name="OUTER_RADIUS", &
1646 : description="radius of the outer wall", &
1647 : usage="OUTER_RADIUS {real} ", type_of_var=real_t, &
1648 1380 : n_var=1, unit_str="angstrom")
1649 1380 : CALL section_add_keyword(section, keyword)
1650 1380 : CALL keyword_release(keyword)
1651 :
1652 : CALL keyword_create(keyword, __LOCATION__, name="STRENGTH", &
1653 : description="Sets the force constant of the repulsive harmonic potential", &
1654 1380 : usage="STRENGTH 1.0", default_r_val=1.0_dp)
1655 1380 : CALL section_add_keyword(section, keyword)
1656 1380 : CALL keyword_release(keyword)
1657 :
1658 : CALL keyword_create(keyword, __LOCATION__, name="BIAS", &
1659 : description="If a bias potential counter-acting the weight term should be applied (recommended).", &
1660 1380 : usage="BIAS F", default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
1661 1380 : CALL section_add_keyword(section, keyword)
1662 1380 : CALL keyword_release(keyword)
1663 :
1664 : CALL keyword_create(keyword, __LOCATION__, name="TEMPERATURE", &
1665 : description="Sets the temperature parameter that is used in the baising potential."// &
1666 : " It is recommended to use the actual simulation temperature", &
1667 1380 : usage="TEMPERATURE 300", default_r_val=300.0_dp, unit_str='K')
1668 1380 : CALL section_add_keyword(section, keyword)
1669 1380 : CALL keyword_release(keyword)
1670 :
1671 : CALL keyword_create(keyword, __LOCATION__, name="SMOOTH_WIDTH", &
1672 : description="Sets the width of the smooth counting function.", &
1673 1380 : usage="SMOOTH_WIDTH 0.2", default_r_val=0.02_dp, unit_str='angstrom')
1674 1380 : CALL section_add_keyword(section, keyword)
1675 1380 : CALL keyword_release(keyword)
1676 :
1677 : CALL cp_print_key_section_create(print_key, __LOCATION__, "WEIGHTS", &
1678 : description="Controls the printing of FP info during flexible partitioning simulations.", &
1679 : print_level=low_print_level, common_iter_levels=1, &
1680 1380 : filename="FLEXIBLE_PARTIONING")
1681 1380 : CALL section_add_subsection(section, print_key)
1682 1380 : CALL section_release(print_key)
1683 :
1684 : CALL cp_print_key_section_create(print_key, __LOCATION__, "CONTROL", &
1685 : description="Controls the printing of FP info at startup", &
1686 : print_level=low_print_level, common_iter_levels=1, &
1687 1380 : filename="__STD_OUT__")
1688 1380 : CALL section_add_subsection(section, print_key)
1689 1380 : CALL section_release(print_key)
1690 :
1691 1380 : END SUBROUTINE create_fp_section
1692 :
1693 : ! **************************************************************************************************
1694 : !> \brief ...
1695 : !> \param section will contain the driver section
1696 : !> \author mceriotti
1697 : ! **************************************************************************************************
1698 1380 : SUBROUTINE create_driver_section(section)
1699 : TYPE(section_type), POINTER :: section
1700 :
1701 : TYPE(keyword_type), POINTER :: keyword
1702 :
1703 1380 : CPASSERT(.NOT. ASSOCIATED(section))
1704 : CALL section_create(section, __LOCATION__, name="DRIVER", &
1705 : description="This section defines the parameters needed to run in i-PI driver mode.", &
1706 : citations=[Ceriotti2014, Kapil2016], &
1707 4140 : n_keywords=4, n_subsections=0, repeats=.FALSE.)
1708 :
1709 1380 : NULLIFY (keyword)
1710 : CALL keyword_create(keyword, __LOCATION__, name="unix", &
1711 : description="Use a UNIX socket rather than an INET socket.", &
1712 : usage="unix LOGICAL", &
1713 1380 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1714 1380 : CALL section_add_keyword(section, keyword)
1715 1380 : CALL keyword_release(keyword)
1716 :
1717 : CALL keyword_create(keyword, __LOCATION__, name="port", &
1718 : description="Port number for the i-PI server.", &
1719 : usage="port <INTEGER>", &
1720 1380 : default_i_val=12345)
1721 1380 : CALL section_add_keyword(section, keyword)
1722 1380 : CALL keyword_release(keyword)
1723 :
1724 : CALL keyword_create(keyword, __LOCATION__, name="host", &
1725 : description="Host name for the i-PI server.", &
1726 : usage="host <HOSTNAME>", &
1727 1380 : default_c_val="localhost")
1728 1380 : CALL section_add_keyword(section, keyword)
1729 1380 : CALL keyword_release(keyword)
1730 :
1731 : CALL keyword_create(keyword, __LOCATION__, name="PREFIX", &
1732 : description="Prefix used to build the path of the UNIX socket file, "// &
1733 : "as /tmp/<PREFIX>_<HOST>. Only relevant if UNIX is set to true.", &
1734 : usage="PREFIX ipi", &
1735 1380 : default_c_val="ipi")
1736 1380 : CALL section_add_keyword(section, keyword)
1737 1380 : CALL keyword_release(keyword)
1738 :
1739 : CALL keyword_create(keyword, __LOCATION__, name="SLEEP_TIME", &
1740 : description="Sleeping time while waiting for for driver commands [s].", &
1741 : usage="SLEEP_TIME 0.1", &
1742 1380 : default_r_val=0.01_dp)
1743 1380 : CALL section_add_keyword(section, keyword)
1744 1380 : CALL keyword_release(keyword)
1745 :
1746 1380 : END SUBROUTINE create_driver_section
1747 :
1748 : ! **************************************************************************************************
1749 : !> \brief creates the section for a path integral run
1750 : !> \param section will contain the pint section
1751 : !> \author fawzi
1752 : ! **************************************************************************************************
1753 1380 : SUBROUTINE create_pint_section(section)
1754 : TYPE(section_type), POINTER :: section
1755 :
1756 : TYPE(keyword_type), POINTER :: keyword
1757 : TYPE(section_type), POINTER :: print_key, subsection, subsubsection
1758 :
1759 1380 : CPASSERT(.NOT. ASSOCIATED(section))
1760 : CALL section_create(section, __LOCATION__, name="PINT", &
1761 : description="The section that controls a path integral run", &
1762 1380 : n_keywords=13, n_subsections=9, repeats=.FALSE.)
1763 1380 : NULLIFY (keyword)
1764 :
1765 : CALL keyword_create(keyword, __LOCATION__, name="p", &
1766 : description="Specify number beads to use", repeats=.FALSE., &
1767 1380 : default_i_val=3)
1768 1380 : CALL section_add_keyword(section, keyword)
1769 1380 : CALL keyword_release(keyword)
1770 : CALL keyword_create(keyword, __LOCATION__, name="proc_per_replica", &
1771 : description="Specify number of processors to use for each replica", &
1772 1380 : repeats=.FALSE., default_i_val=0)
1773 1380 : CALL section_add_keyword(section, keyword)
1774 1380 : CALL keyword_release(keyword)
1775 : CALL keyword_create(keyword, __LOCATION__, name="num_steps", &
1776 : description="Number of steps (if MAX_STEP is not explicitly given"// &
1777 : " the program will perform this number of steps)", repeats=.FALSE., &
1778 1380 : default_i_val=3)
1779 1380 : CALL section_add_keyword(section, keyword)
1780 1380 : CALL keyword_release(keyword)
1781 : CALL keyword_create(keyword, __LOCATION__, name="MAX_STEP", &
1782 : description="Maximum step number (the program will stop if"// &
1783 : " ITERATION >= MAX_STEP even if NUM_STEPS has not been reached)", &
1784 1380 : repeats=.FALSE., default_i_val=10)
1785 1380 : CALL section_add_keyword(section, keyword)
1786 1380 : CALL keyword_release(keyword)
1787 : CALL keyword_create(keyword, __LOCATION__, name="iteration", &
1788 : description="Specify the iteration number from which it should be "// &
1789 1380 : "counted", default_i_val=0)
1790 1380 : CALL section_add_keyword(section, keyword)
1791 1380 : CALL keyword_release(keyword)
1792 : CALL keyword_create(keyword, __LOCATION__, name="Temp", &
1793 : description="The temperature you want to simulate", &
1794 : default_r_val=cp_unit_to_cp2k(300._dp, "K"), &
1795 1380 : unit_str="K")
1796 1380 : CALL section_add_keyword(section, keyword)
1797 1380 : CALL keyword_release(keyword)
1798 : CALL keyword_create(keyword, __LOCATION__, name="kT_CORRECTION", &
1799 : description="Corrects for the loss of temperature due to constrained "// &
1800 : "degrees of freedom for Nose-Hover chains and numeric integration", &
1801 1380 : repeats=.FALSE., default_l_val=.FALSE.)
1802 1380 : CALL section_add_keyword(section, keyword)
1803 1380 : CALL keyword_release(keyword)
1804 : CALL keyword_create(keyword, __LOCATION__, name="T_tol", variants=["temp_to"], &
1805 : description="threshold for the oscillations of the temperature "// &
1806 : "excedeed which the temperature is rescaled. 0 means no rescaling.", &
1807 2760 : default_r_val=0._dp, unit_str="K")
1808 1380 : CALL section_add_keyword(section, keyword)
1809 1380 : CALL keyword_release(keyword)
1810 : CALL keyword_create(keyword, __LOCATION__, name="dt", &
1811 : description="timestep (might be subdivised in nrespa subtimesteps", &
1812 : repeats=.FALSE., &
1813 : default_r_val=cp_unit_to_cp2k(1.0_dp, "fs"), &
1814 1380 : usage="dt 1.0", unit_str="fs")
1815 1380 : CALL section_add_keyword(section, keyword)
1816 1380 : CALL keyword_release(keyword)
1817 : CALL keyword_create(keyword, __LOCATION__, name="HARM_INT", &
1818 : description="integrator scheme for integrating the harmonic bead springs.", &
1819 : usage="HARM_INT (NUMERIC|EXACT)", &
1820 : default_i_val=integrate_numeric, &
1821 : enum_c_vals=s2a("NUMERIC", "EXACT"), &
1822 1380 : enum_i_vals=[integrate_numeric, integrate_exact])
1823 1380 : CALL section_add_keyword(section, keyword)
1824 1380 : CALL keyword_release(keyword)
1825 : CALL keyword_create(keyword, __LOCATION__, name="nrespa", &
1826 : description="number of respa steps for the bead for each md step", &
1827 1380 : repeats=.FALSE., default_i_val=5)
1828 1380 : CALL section_add_keyword(section, keyword)
1829 1380 : CALL keyword_release(keyword)
1830 :
1831 : CALL keyword_create(keyword, __LOCATION__, name="transformation", &
1832 : description="Specifies the coordinate transformation to use", &
1833 : usage="TRANSFORMATION (NORMAL|STAGE)", &
1834 : default_i_val=transformation_normal, &
1835 : enum_c_vals=s2a("NORMAL", "STAGE"), &
1836 1380 : enum_i_vals=[transformation_normal, transformation_stage])
1837 :
1838 1380 : CALL section_add_keyword(section, keyword)
1839 1380 : CALL keyword_release(keyword)
1840 : CALL keyword_create(keyword, __LOCATION__, name="propagator", &
1841 : description="Specifies the real time propagator to use", &
1842 : usage="PROPAGATOR (PIMD|RPMD|CMD|BCMD)", &
1843 : default_i_val=propagator_pimd, &
1844 : enum_c_vals=s2a("PIMD", "RPMD", "CMD", "BCMD"), &
1845 1380 : enum_i_vals=[propagator_pimd, propagator_rpmd, propagator_cmd, propagator_bcmd])
1846 1380 : CALL section_add_keyword(section, keyword)
1847 1380 : CALL keyword_release(keyword)
1848 : CALL keyword_create(keyword, __LOCATION__, name="FIX_CENTROID_POS", &
1849 : description="Propagate all DOF but the centroid - "// &
1850 : "useful for equilibration of the non-centroid modes "// &
1851 : "(activated only if TRANSFORMATION==NORMAL)", &
1852 : repeats=.FALSE., default_l_val=.FALSE., &
1853 1380 : lone_keyword_l_val=.TRUE.)
1854 1380 : CALL section_add_keyword(section, keyword)
1855 1380 : CALL keyword_release(keyword)
1856 :
1857 1380 : NULLIFY (subsection, subsubsection)
1858 : CALL section_create(subsection, __LOCATION__, name="NORMALMODE", &
1859 : description="Controls the normal mode transformation", &
1860 1380 : n_keywords=3, n_subsections=0, repeats=.FALSE.)
1861 : CALL keyword_create(keyword, __LOCATION__, name="Q_CENTROID", &
1862 : description="Value of the thermostat mass of centroid degree of freedom", &
1863 1380 : repeats=.FALSE., default_r_val=-1.0_dp)
1864 1380 : CALL section_add_keyword(subsection, keyword)
1865 1380 : CALL keyword_release(keyword)
1866 : CALL keyword_create(keyword, __LOCATION__, name="Q_BEAD", &
1867 : description="Value of the thermostat mass of non-centroid degrees of freedom", &
1868 1380 : repeats=.FALSE., default_r_val=-1.0_dp)
1869 1380 : CALL section_add_keyword(subsection, keyword)
1870 1380 : CALL keyword_release(keyword)
1871 : CALL keyword_create(keyword, __LOCATION__, name="MODEFACTOR", &
1872 : description="mass scale factor for non-centroid degrees of freedom", &
1873 1380 : repeats=.FALSE., default_r_val=1.0_dp)
1874 1380 : CALL section_add_keyword(subsection, keyword)
1875 1380 : CALL keyword_release(keyword)
1876 : CALL keyword_create(keyword, __LOCATION__, name="GAMMA", &
1877 : description="mass scale factor for non-centroid degrees of freedom, &
1878 : & naming convention according to Witt, 2008, <https://doi.org/10.1063/1.3125009>.", &
1879 1380 : repeats=.FALSE., default_r_val=8.0_dp)
1880 1380 : CALL section_add_keyword(subsection, keyword)
1881 1380 : CALL keyword_release(keyword)
1882 :
1883 1380 : CALL section_add_subsection(section, subsection)
1884 1380 : CALL section_release(subsection)
1885 :
1886 : CALL section_create(subsection, __LOCATION__, name="staging", &
1887 : description="The section that controls the staging transformation", &
1888 1380 : n_keywords=2, n_subsections=0, repeats=.FALSE.)
1889 : CALL keyword_create(keyword, __LOCATION__, name="j", &
1890 : description="Value of the j parameter for the staging transformation", &
1891 1380 : repeats=.FALSE., default_i_val=2)
1892 1380 : CALL section_add_keyword(subsection, keyword)
1893 1380 : CALL keyword_release(keyword)
1894 : CALL keyword_create(keyword, __LOCATION__, name="Q_END", &
1895 : description="Value of the nose-hoover mass for the endbead (Q_end)", &
1896 1380 : repeats=.FALSE., default_i_val=2)
1897 1380 : CALL section_add_keyword(subsection, keyword)
1898 1380 : CALL keyword_release(keyword)
1899 1380 : CALL section_add_subsection(section, subsection)
1900 1380 : CALL section_release(subsection)
1901 :
1902 : CALL section_create(subsection, __LOCATION__, name="BEADS", &
1903 : description="Sets positions and velocities of the beads", &
1904 : n_keywords=0, n_subsections=2, &
1905 1380 : repeats=.FALSE.)
1906 1380 : CALL create_coord_section(subsubsection, "BEADS")
1907 1380 : CALL section_add_subsection(subsection, subsubsection)
1908 1380 : CALL section_release(subsubsection)
1909 1380 : CALL create_velocity_section(subsubsection, "BEADS")
1910 1380 : CALL section_add_subsection(subsection, subsubsection)
1911 1380 : CALL section_release(subsubsection)
1912 1380 : CALL section_add_subsection(section, subsection)
1913 1380 : CALL section_release(subsection)
1914 :
1915 : CALL section_create(subsection, __LOCATION__, name="NOSE", &
1916 : description="Controls the Nose-Hoover thermostats", &
1917 : n_keywords=1, n_subsections=2, &
1918 1380 : repeats=.FALSE.)
1919 : CALL keyword_create(keyword, __LOCATION__, name="nnos", &
1920 : description="length of nose-hoover chain. 0 means no thermostat", &
1921 1380 : repeats=.FALSE., default_i_val=2)
1922 1380 : CALL section_add_keyword(subsection, keyword)
1923 1380 : CALL keyword_release(keyword)
1924 1380 : CALL create_coord_section(subsubsection, "NOSE")
1925 1380 : CALL section_add_subsection(subsection, subsubsection)
1926 1380 : CALL section_release(subsubsection)
1927 1380 : CALL create_velocity_section(subsubsection, "NOSE")
1928 1380 : CALL section_add_subsection(subsection, subsubsection)
1929 1380 : CALL section_release(subsubsection)
1930 1380 : CALL section_add_subsection(section, subsection)
1931 1380 : CALL section_release(subsection)
1932 :
1933 1380 : CALL create_gle_section(subsection)
1934 1380 : CALL section_add_subsection(section, subsection)
1935 1380 : CALL section_release(subsection)
1936 :
1937 : CALL section_create(subsection, __LOCATION__, name="PILE", &
1938 : description="Controls the PI Langevin Equation thermostat."// &
1939 : " Needs the exact harmonic integrator."// &
1940 : " May lead to unphysical motions if constraint e.g. FIXED_ATOMS, is applied."// &
1941 : " RESTART_HELIUM section has to be .FALSE. when restarting the PIGLET job.", &
1942 : citations=[Ceriotti2010], &
1943 : n_keywords=3, n_subsections=1, &
1944 2760 : repeats=.FALSE.)
1945 1380 : CALL create_rng_section(subsubsection)
1946 1380 : CALL section_add_subsection(subsection, subsubsection)
1947 1380 : CALL section_release(subsubsection)
1948 : CALL keyword_create(keyword, __LOCATION__, name="TAU", &
1949 : description="Time constant for centroid motion. "// &
1950 : "If zero or negative the centroid is not thermostated.", &
1951 : usage="TAU {real}", type_of_var=real_t, &
1952 1380 : unit_str="fs", n_var=1, default_r_val=1000.0_dp)
1953 1380 : CALL section_add_keyword(subsection, keyword)
1954 1380 : CALL keyword_release(keyword)
1955 : CALL keyword_create(keyword, __LOCATION__, name="LAMBDA", &
1956 : description="Scaling of friction to mode coupling", &
1957 : usage="LAMBDA {real}", type_of_var=real_t, &
1958 1380 : n_var=1, default_r_val=0.5_dp)
1959 1380 : CALL section_add_keyword(subsection, keyword)
1960 1380 : CALL keyword_release(keyword)
1961 : CALL keyword_create(keyword, __LOCATION__, name="THERMOSTAT_ENERGY", &
1962 : description="Thermostat energy for conserved quantity. "// &
1963 : "Only useful in restart files.", &
1964 : usage="THERMOSTAT_ENERGY {real}", type_of_var=real_t, &
1965 1380 : n_var=1, default_r_val=0.0_dp)
1966 1380 : CALL section_add_keyword(subsection, keyword)
1967 1380 : CALL keyword_release(keyword)
1968 1380 : CALL section_add_subsection(section, subsection)
1969 1380 : CALL section_release(subsection)
1970 :
1971 : CALL section_create(subsection, __LOCATION__, name="PIGLET", &
1972 : description="Controls the PI Generalized Langevin Equation thermostat."// &
1973 : " Needs the exact harmonic integrator", &
1974 : citations=[Ceriotti2012], &
1975 : n_keywords=4, n_subsections=2, &
1976 2760 : repeats=.FALSE.)
1977 1380 : CALL create_rng_section(subsubsection)
1978 1380 : CALL section_add_subsection(subsection, subsubsection)
1979 1380 : CALL section_release(subsubsection)
1980 : CALL section_create(subsubsection, __LOCATION__, name="EXTRA_DOF", &
1981 : description="Additional degrees of freedom to ensure Markovian Dynamics.", &
1982 1380 : n_keywords=1, n_subsections=0, repeats=.FALSE.)
1983 : CALL keyword_create(keyword, __LOCATION__, name="_DEFAULT_KEYWORD_", &
1984 : description="Restart values for additional degrees of freedom" &
1985 : //" (only for restarts, do not set explicitly)", &
1986 : repeats=.FALSE., &
1987 1380 : type_of_var=real_t, n_var=-1)
1988 1380 : CALL section_add_keyword(subsubsection, keyword)
1989 1380 : CALL keyword_release(keyword)
1990 1380 : CALL section_add_subsection(subsection, subsubsection)
1991 1380 : CALL section_release(subsubsection)
1992 : CALL keyword_create(keyword, __LOCATION__, name="NEXTRA_DOF", &
1993 : description="Number of extra degrees of freedom to ensure markovian dynamics", &
1994 1380 : repeats=.FALSE., default_i_val=8)
1995 1380 : CALL section_add_keyword(subsection, keyword)
1996 1380 : CALL keyword_release(keyword)
1997 : CALL keyword_create(keyword, __LOCATION__, name="MATRICES_FILE_NAME", &
1998 : description="Filename containig the raw matrices from "// &
1999 : "<https://gle4md.org/index.html?page=matrix>.", &
2000 1380 : repeats=.FALSE., default_lc_val="PIGLET.MAT")
2001 1380 : CALL section_add_keyword(subsection, keyword)
2002 1380 : CALL keyword_release(keyword)
2003 : CALL keyword_create(keyword, __LOCATION__, name="SMATRIX_INIT", &
2004 : description="Select algorithm to initialize piglet S-matrices", &
2005 : usage="SMATRIX_INIT (CHOLESKY|DIAGONAL)", &
2006 : default_i_val=matrix_init_cholesky, &
2007 : enum_c_vals=s2a("CHOLESKY", "DIAGONAL"), &
2008 1380 : enum_i_vals=[matrix_init_cholesky, matrix_init_diagonal])
2009 1380 : CALL section_add_keyword(subsection, keyword)
2010 1380 : CALL keyword_release(keyword)
2011 : CALL keyword_create(keyword, __LOCATION__, name="THERMOSTAT_ENERGY", &
2012 : description="Thermostat energy for conserved quantity. "// &
2013 : "Only useful in restart files.", &
2014 : usage="THERMOSTAT_ENERGY {real}", type_of_var=real_t, &
2015 1380 : n_var=1, default_r_val=0.0_dp)
2016 1380 : CALL section_add_keyword(subsection, keyword)
2017 1380 : CALL keyword_release(keyword)
2018 1380 : CALL section_add_subsection(section, subsection)
2019 1380 : CALL section_release(subsection)
2020 :
2021 : CALL section_create(subsection, __LOCATION__, name="QTB", &
2022 : description="Controls the QTB-PILE thermostat."// &
2023 : " Needs the exact harmonic integrator", &
2024 : citations=[Brieuc2016], &
2025 : n_keywords=7, n_subsections=1, &
2026 2760 : repeats=.FALSE.)
2027 1380 : CALL create_rng_section(subsubsection)
2028 1380 : CALL section_add_subsection(subsection, subsubsection)
2029 1380 : CALL section_release(subsubsection)
2030 : CALL keyword_create(keyword, __LOCATION__, name="TAU", &
2031 : description="Time constant for centroid motion. ", &
2032 : usage="TAU {real}", type_of_var=real_t, &
2033 1380 : unit_str="fs", n_var=1, default_r_val=1000.0_dp)
2034 1380 : CALL section_add_keyword(subsection, keyword)
2035 1380 : CALL keyword_release(keyword)
2036 : CALL keyword_create(keyword, __LOCATION__, name="LAMBDA", &
2037 : description="Scaling of friction to ring polymer NM freq.", &
2038 : usage="LAMBDA {real}", type_of_var=real_t, &
2039 1380 : n_var=1, default_r_val=0.5_dp)
2040 1380 : CALL section_add_keyword(subsection, keyword)
2041 1380 : CALL keyword_release(keyword)
2042 : CALL keyword_create(keyword, __LOCATION__, name="FP", &
2043 : description="Defines which version to use "// &
2044 : "0: f_P^(0), 1: f_P^(1)", &
2045 : usage="FP {integer}", type_of_var=integer_t, &
2046 1380 : n_var=1, default_i_val=1)
2047 1380 : CALL section_add_keyword(subsection, keyword)
2048 1380 : CALL keyword_release(keyword)
2049 : CALL keyword_create(keyword, __LOCATION__, name="TAUCUT", &
2050 : description="Inverse of cutoff freq. for the centroid mode", &
2051 : usage="TAUCUT {real}", type_of_var=real_t, &
2052 1380 : unit_str="fs", n_var=1, default_r_val=0.5_dp)
2053 1380 : CALL section_add_keyword(subsection, keyword)
2054 1380 : CALL keyword_release(keyword)
2055 : CALL keyword_create(keyword, __LOCATION__, name="LAMBCUT", &
2056 : description="Scaling of cutoff freq. to ring polymer NM freq.", &
2057 : usage="LAMBCUT {real}", type_of_var=real_t, &
2058 1380 : n_var=1, default_r_val=2.0_dp)
2059 1380 : CALL section_add_keyword(subsection, keyword)
2060 1380 : CALL keyword_release(keyword)
2061 : CALL keyword_create(keyword, __LOCATION__, name="NF", &
2062 : description="Number of points used for the convolution product.", &
2063 : usage="NF {integer}", type_of_var=integer_t, &
2064 1380 : n_var=1, default_i_val=128)
2065 1380 : CALL section_add_keyword(subsection, keyword)
2066 1380 : CALL keyword_release(keyword)
2067 : CALL keyword_create(keyword, __LOCATION__, name="THERMOSTAT_ENERGY", &
2068 : description="Thermostat energy for conserved quantity. "// &
2069 : "Only useful in restart files.", &
2070 : usage="THERMOSTAT_ENERGY {real}", type_of_var=real_t, &
2071 1380 : n_var=1, default_r_val=0.0_dp)
2072 1380 : CALL section_add_keyword(subsection, keyword)
2073 1380 : CALL keyword_release(keyword)
2074 1380 : CALL section_add_subsection(section, subsection)
2075 1380 : CALL section_release(subsection)
2076 :
2077 : CALL section_create(subsection, __LOCATION__, name="INIT", &
2078 : description="Controls the initialization if the beads are not present", &
2079 1380 : repeats=.FALSE.)
2080 :
2081 : CALL keyword_create(keyword, __LOCATION__, name="LEVY_POS_SAMPLE", &
2082 : description="Sample bead positions assuming free particle "// &
2083 : "behavior (performs a Levy random walk of length P around "// &
2084 : "the classical position of each atom at the physical "// &
2085 : "temperature defined in PINT%TEMP)", &
2086 : repeats=.FALSE., default_l_val=.FALSE., &
2087 1380 : lone_keyword_l_val=.TRUE.)
2088 1380 : CALL section_add_keyword(subsection, keyword)
2089 1380 : CALL keyword_release(keyword)
2090 : CALL keyword_create(keyword, __LOCATION__, name="LEVY_CORRELATED", &
2091 : description="Use the same Levy path for all atoms, though "// &
2092 : "with mass-dependent variances (might help at very low T)", &
2093 : repeats=.FALSE., default_l_val=.FALSE., &
2094 1380 : lone_keyword_l_val=.TRUE.)
2095 1380 : CALL section_add_keyword(subsection, keyword)
2096 1380 : CALL keyword_release(keyword)
2097 : CALL keyword_create(keyword, __LOCATION__, name="LEVY_TEMP_FACTOR", &
2098 : description="Multiplicative correction factor for the "// &
2099 : "temperature at which the Levy walk is performed "// &
2100 : "(correction is due to the interactions that modify "// &
2101 : "the spread of a free particle)", &
2102 1380 : repeats=.FALSE., default_r_val=1.0_dp)
2103 1380 : CALL section_add_keyword(subsection, keyword)
2104 1380 : CALL keyword_release(keyword)
2105 : CALL keyword_create(keyword, __LOCATION__, name="LEVY_SEED", &
2106 : description="Initial seed for the (pseudo)random number "// &
2107 : "generator that controls Levy walk for bead positions.", &
2108 : usage="LEVY_SEED <INTEGER>", default_i_val=1234, &
2109 1380 : repeats=.FALSE.)
2110 1380 : CALL section_add_keyword(subsection, keyword)
2111 1380 : CALL keyword_release(keyword)
2112 : CALL keyword_create(keyword, __LOCATION__, name="THERMOSTAT_SEED", &
2113 : description="Initial seed for the (pseudo)random number "// &
2114 : "generator that controls the PILE and PIGLET thermostats.", &
2115 : usage="THERMOSTAT_SEED <INTEGER>", default_i_val=12345, &
2116 1380 : repeats=.FALSE.)
2117 1380 : CALL section_add_keyword(subsection, keyword)
2118 1380 : CALL keyword_release(keyword)
2119 : CALL keyword_create(keyword, __LOCATION__, name="RANDOMIZE_POS", &
2120 : description="add gaussian noise to the positions of the beads", &
2121 1380 : repeats=.FALSE., default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
2122 1380 : CALL section_add_keyword(subsection, keyword)
2123 1380 : CALL keyword_release(keyword)
2124 :
2125 : CALL keyword_create(keyword, __LOCATION__, name="CENTROID_SPEED", &
2126 : description="adds random velocity component to the centroid modes "// &
2127 : "(useful to correct for the averaging out of the speed of various beads)", &
2128 1380 : repeats=.FALSE., default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
2129 1380 : CALL section_add_keyword(subsection, keyword)
2130 1380 : CALL keyword_release(keyword)
2131 :
2132 : CALL keyword_create(keyword, __LOCATION__, name="VELOCITY_QUENCH", &
2133 : description="set the initial velocities to zero", &
2134 1380 : repeats=.FALSE., default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
2135 1380 : CALL section_add_keyword(subsection, keyword)
2136 1380 : CALL keyword_release(keyword)
2137 : CALL keyword_create(keyword, __LOCATION__, name="VELOCITY_SCALE", &
2138 : description="scale initial velocities to the temperature given in MOTION%PINT%TEMP", &
2139 1380 : repeats=.FALSE., default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
2140 1380 : CALL section_add_keyword(subsection, keyword)
2141 1380 : CALL keyword_release(keyword)
2142 :
2143 1380 : CALL section_add_subsection(section, subsection)
2144 1380 : CALL section_release(subsection)
2145 :
2146 1380 : CALL create_helium_section(subsection)
2147 1380 : CALL section_add_subsection(section, subsection)
2148 1380 : CALL section_release(subsection)
2149 :
2150 : CALL section_create(subsection, __LOCATION__, name="PRINT", &
2151 : description="Controls the path integral-specific output", &
2152 1380 : n_keywords=2, n_subsections=0, repeats=.FALSE.)
2153 :
2154 1380 : NULLIFY (print_key)
2155 :
2156 : CALL cp_print_key_section_create(print_key, __LOCATION__, "ENERGY", &
2157 : description="Controls the output of the path integral energies", &
2158 1380 : print_level=low_print_level, common_iter_levels=1)
2159 1380 : CALL section_add_subsection(subsection, print_key)
2160 1380 : CALL section_release(print_key)
2161 :
2162 : CALL cp_print_key_section_create(print_key, __LOCATION__, "ACTION", &
2163 : description="Controls the output of the path integral action", &
2164 1380 : print_level=medium_print_level, common_iter_levels=1)
2165 1380 : CALL section_add_subsection(subsection, print_key)
2166 1380 : CALL section_release(print_key)
2167 :
2168 : CALL cp_print_key_section_create(print_key, __LOCATION__, "CENTROID_POS", &
2169 : description="Controls the output of the centroid's position", &
2170 : unit_str="angstrom", &
2171 1380 : print_level=low_print_level, common_iter_levels=1)
2172 : CALL add_format_keyword(keyword, print_key, pos=.TRUE., &
2173 1380 : description="Output file format for the positions of centroid")
2174 1380 : CALL section_add_subsection(subsection, print_key)
2175 1380 : CALL section_release(print_key)
2176 :
2177 : CALL cp_print_key_section_create(print_key, __LOCATION__, "CENTROID_VEL", &
2178 : description="Controls the output of the centroid's velocity", &
2179 : unit_str="bohr*au_t^-1", &
2180 1380 : print_level=low_print_level, common_iter_levels=1)
2181 : CALL add_format_keyword(keyword, print_key, pos=.FALSE., &
2182 1380 : description="Output file format for the velocity of centroid")
2183 1380 : CALL section_add_subsection(subsection, print_key)
2184 1380 : CALL section_release(print_key)
2185 :
2186 : CALL cp_print_key_section_create(print_key, __LOCATION__, "CENTROID_GYR", &
2187 : description="Controls the output of the centroid's radii of gyration", &
2188 : unit_str="angstrom", &
2189 1380 : print_level=low_print_level, common_iter_levels=1)
2190 1380 : CALL section_add_subsection(subsection, print_key)
2191 1380 : CALL section_release(print_key)
2192 :
2193 : CALL cp_print_key_section_create(print_key, __LOCATION__, "COM", &
2194 : description="Controls the output of the center of mass", &
2195 1380 : print_level=high_print_level, common_iter_levels=1)
2196 1380 : CALL section_add_subsection(subsection, print_key)
2197 1380 : CALL section_release(print_key)
2198 :
2199 : CALL keyword_create(keyword, __LOCATION__, name="IMAGINARY_TIME_STRIDE", &
2200 : description="Prints only every nth bead trajectory", &
2201 1380 : repeats=.FALSE., default_i_val=1)
2202 1380 : CALL section_add_keyword(subsection, keyword)
2203 1380 : CALL keyword_release(keyword)
2204 :
2205 1380 : CALL section_add_subsection(section, subsection)
2206 1380 : CALL section_release(subsection)
2207 :
2208 1380 : END SUBROUTINE create_pint_section
2209 :
2210 : ! ***************************************************************************
2211 : !> \brief Create the input section for superfluid helium solvent.
2212 : !> \author Lukasz Walewski
2213 : ! ***************************************************************************
2214 : ! **************************************************************************************************
2215 : !> \brief ...
2216 : !> \param section ...
2217 : ! **************************************************************************************************
2218 1380 : SUBROUTINE create_helium_section(section)
2219 : TYPE(section_type), POINTER :: section
2220 :
2221 : TYPE(keyword_type), POINTER :: keyword
2222 : TYPE(section_type), POINTER :: print_key, subsection, subsubsection
2223 :
2224 1380 : CPASSERT(.NOT. ASSOCIATED(section))
2225 :
2226 : CALL section_create(section, __LOCATION__, name="HELIUM", &
2227 : description="The section that controls optional helium solvent"// &
2228 : " environment (highly experimental, not for general use yet)", &
2229 1380 : n_keywords=31, n_subsections=11, repeats=.FALSE.)
2230 :
2231 1380 : NULLIFY (keyword)
2232 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
2233 : description="Whether or not to actually use this section", &
2234 1380 : usage="silent", default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
2235 1380 : CALL section_add_keyword(section, keyword)
2236 1380 : CALL keyword_release(keyword)
2237 :
2238 : CALL keyword_create(keyword, __LOCATION__, name="HELIUM_ONLY", &
2239 : description="Simulate helium solvent only, "// &
2240 : "disregard solute entirely", &
2241 : repeats=.FALSE., default_l_val=.FALSE., &
2242 1380 : lone_keyword_l_val=.TRUE.)
2243 1380 : CALL section_add_keyword(section, keyword)
2244 1380 : CALL keyword_release(keyword)
2245 :
2246 : CALL keyword_create(keyword, __LOCATION__, name="INTERACTION_POT_SCAN", &
2247 : description="Scan solute-helium interaction potential, "// &
2248 : "cubefile parameters set in subsection RHO", &
2249 : repeats=.FALSE., default_l_val=.FALSE., &
2250 1380 : lone_keyword_l_val=.TRUE.)
2251 1380 : CALL section_add_keyword(section, keyword)
2252 1380 : CALL keyword_release(keyword)
2253 :
2254 : CALL keyword_create(keyword, __LOCATION__, name="NUM_ENV", &
2255 : description="Number of independent helium environments", &
2256 1380 : repeats=.FALSE., default_i_val=1)
2257 1380 : CALL section_add_keyword(section, keyword)
2258 1380 : CALL keyword_release(keyword)
2259 :
2260 : CALL keyword_create(keyword, __LOCATION__, name="POTENTIAL_FILE_NAME", &
2261 : description="Name of the Helium interaction potential file", &
2262 1380 : repeats=.FALSE., default_lc_val="HELIUM.POT")
2263 1380 : CALL section_add_keyword(section, keyword)
2264 1380 : CALL keyword_release(keyword)
2265 :
2266 : CALL keyword_create(keyword, __LOCATION__, name="GET_FORCES", &
2267 : description="Get average MC forces or last MC forces to propagate MD", &
2268 : usage="GET_FORCES (AVERAGE|LAST)", &
2269 : default_i_val=helium_forces_average, &
2270 : enum_c_vals=s2a("AVERAGE", "LAST"), &
2271 1380 : enum_i_vals=[helium_forces_average, helium_forces_last])
2272 1380 : CALL section_add_keyword(section, keyword)
2273 1380 : CALL keyword_release(keyword)
2274 :
2275 : CALL keyword_create(keyword, __LOCATION__, name="SOLUTE_INTERACTION", &
2276 : description="Interaction potential between helium and the solute", &
2277 : usage="SOLUTE_INTERACTION (NONE | MWATER | NNP)", &
2278 : default_i_val=helium_solute_intpot_none, &
2279 : enum_c_vals=s2a("NONE", "MWATER", "NNP"), &
2280 : enum_i_vals=[ &
2281 : helium_solute_intpot_none, &
2282 : helium_solute_intpot_mwater, &
2283 : helium_solute_intpot_nnp], &
2284 : enum_desc=s2a( &
2285 : "No interaction with solute", &
2286 : "Test interaction with wrong Water", &
2287 1380 : "Interaction with NNP"))
2288 1380 : CALL section_add_keyword(section, keyword)
2289 1380 : CALL keyword_release(keyword)
2290 :
2291 : CALL keyword_create(keyword, __LOCATION__, name="NATOMS", &
2292 : description="Number of helium atoms", &
2293 1380 : repeats=.FALSE., default_i_val=64)
2294 1380 : CALL section_add_keyword(section, keyword)
2295 1380 : CALL keyword_release(keyword)
2296 :
2297 : CALL keyword_create(keyword, __LOCATION__, name="NBEADS", &
2298 : description="Number of helium path integral beads", &
2299 1380 : repeats=.FALSE., default_i_val=25)
2300 1380 : CALL section_add_keyword(section, keyword)
2301 1380 : CALL keyword_release(keyword)
2302 :
2303 : CALL keyword_create(keyword, __LOCATION__, name="RNG_SEED", &
2304 : description="Initial seed for the (pseudo)random number "// &
2305 : "generator that controls helium coordinate generation and propagation.", &
2306 : usage="RNG_SEED <INTEGER>", default_i_val=12345, &
2307 1380 : repeats=.FALSE.)
2308 1380 : CALL section_add_keyword(section, keyword)
2309 1380 : CALL keyword_release(keyword)
2310 :
2311 : CALL keyword_create(keyword, __LOCATION__, name="N_INNER", &
2312 : variants=s2a("INOROT"), &
2313 : description="Number of MC iterations at the same time slice(s) "// &
2314 : "(number of inner MC loop iterations)", &
2315 1380 : repeats=.FALSE., default_i_val=6600)
2316 1380 : CALL section_add_keyword(section, keyword)
2317 1380 : CALL keyword_release(keyword)
2318 :
2319 : CALL keyword_create(keyword, __LOCATION__, name="N_OUTER", &
2320 : variants=s2a("IROT"), &
2321 : description="how often to reselect the time slice(s) to work on "// &
2322 : "(number of outer MC loop iterations)", &
2323 1380 : repeats=.FALSE., default_i_val=300)
2324 1380 : CALL section_add_keyword(section, keyword)
2325 1380 : CALL keyword_release(keyword)
2326 :
2327 : CALL keyword_create(keyword, __LOCATION__, name="SAMPLING_METHOD", &
2328 : description="Choose between Ceperley or the worm algorithm", &
2329 : usage="SAMPLING_METHOD (CEPERLEY|WORM)", &
2330 : default_i_val=helium_sampling_ceperley, &
2331 : enum_c_vals=s2a("CEPERLEY", "WORM"), &
2332 1380 : enum_i_vals=[helium_sampling_ceperley, helium_sampling_worm])
2333 1380 : CALL section_add_keyword(section, keyword)
2334 1380 : CALL keyword_release(keyword)
2335 :
2336 : CALL keyword_create(keyword, __LOCATION__, name="COORD_INIT_TEMP", &
2337 : description="Temperature for thermal gaussian initialization of the helium."// &
2338 : " Negative values correspond to a hot start.", &
2339 : default_r_val=cp_unit_to_cp2k(300._dp, "K"), &
2340 1380 : unit_str="K")
2341 1380 : CALL section_add_keyword(section, keyword)
2342 1380 : CALL keyword_release(keyword)
2343 :
2344 : CALL keyword_create(keyword, __LOCATION__, name="SOLUTE_RADIUS", &
2345 : description="Radius of the solute molecule for prevention of"// &
2346 : " coordinate collision during initialization", &
2347 : default_r_val=cp_unit_to_cp2k(0.0_dp, "angstrom"), &
2348 1380 : repeats=.FALSE., type_of_var=real_t, unit_str="angstrom")
2349 1380 : CALL section_add_keyword(section, keyword)
2350 1380 : CALL keyword_release(keyword)
2351 :
2352 : ! Helium-solute interaction NNP
2353 1380 : NULLIFY (subsection)
2354 : CALL section_create(subsection, __LOCATION__, name="NNP", &
2355 : description="This section contains all information to run an helium-solute "// &
2356 : "interaction Neural Network Potential (NNP) calculation.", &
2357 1380 : n_keywords=4, n_subsections=3, repeats=.FALSE.)
2358 :
2359 : CALL keyword_create(keyword, __LOCATION__, name="NNP_INPUT_FILE_NAME", &
2360 : description="File containing the input information for the setup "// &
2361 : "of the NNP (n2p2/RuNNer format). ", &
2362 1380 : repeats=.FALSE., default_lc_val="input.nn")
2363 1380 : CALL section_add_keyword(subsection, keyword)
2364 1380 : CALL keyword_release(keyword)
2365 :
2366 : CALL keyword_create(keyword, __LOCATION__, name="SCALE_FILE_NAME", &
2367 : description="File containing the scaling information for the symmetry "// &
2368 : "functions of the NNP. ", &
2369 1380 : repeats=.FALSE., default_lc_val="scaling.data")
2370 1380 : CALL section_add_keyword(subsection, keyword)
2371 1380 : CALL keyword_release(keyword)
2372 :
2373 : CALL keyword_create(keyword, __LOCATION__, name="RAD_SPLINE_N", &
2374 : description="Number of knots per radial group in the cubic-Hermite "// &
2375 : "spline tables that tabulate the radial symmetry-function product "// &
2376 : "y(r) = exp(-eta*(r-rs)^2) * fcut(r). Cubic-Hermite per-evaluation "// &
2377 : "error scales as O(1/n^4); the default keeps the spline residual "// &
2378 : "inside the NNP regression tolerance for a radial cutoff of "// &
2379 : "~12 bohr. Models with larger cutoffs or stricter tolerances may "// &
2380 : "need a larger n. Memory cost scales linearly in n per radial group.", &
2381 : repeats=.FALSE., &
2382 : n_var=1, &
2383 : type_of_var=integer_t, &
2384 : default_i_val=8192, &
2385 1380 : usage="RAD_SPLINE_N 8192")
2386 1380 : CALL section_add_keyword(subsection, keyword)
2387 1380 : CALL keyword_release(keyword)
2388 :
2389 : CALL keyword_create(keyword, __LOCATION__, name="VERLET_SKIN", &
2390 : description="Verlet skin distance for the NNP descriptor neighbour "// &
2391 : "cell-list. The neighbour-list cutoff is (symmetry-function cutoff "// &
2392 : "+ skin); the cell-list chain is rebuilt only when an atom drifts "// &
2393 : "more than skin/2 from its rebuild-time position, analogous to the "// &
2394 : "LAMMPS 'neighbor <skin> bin' command. Larger skin reduces the "// &
2395 : "rebuild rate but enlarges the per-atom neighbour list. A negative "// &
2396 : "value (default) selects the automatic heuristic "// &
2397 : "MIN(0.5 bohr, 0.1*cutoff). Useful upper bound is half the smallest "// &
2398 : "perpendicular cell width.", &
2399 : repeats=.FALSE., &
2400 : n_var=1, &
2401 : type_of_var=real_t, &
2402 : default_r_val=-1.0_dp, &
2403 : unit_str="bohr", &
2404 1380 : usage="VERLET_SKIN [bohr] 0.5")
2405 1380 : CALL section_add_keyword(subsection, keyword)
2406 1380 : CALL keyword_release(keyword)
2407 :
2408 1380 : NULLIFY (subsubsection)
2409 : CALL section_create(subsubsection, __LOCATION__, name="SR_CUTOFF", &
2410 : description="Section for failsafe short range cutoffs for the NNPs, "// &
2411 : "if the distance between solvent and specified solute element becomes "// &
2412 : "smaller than the given cutoff, an artifical repulsive potential is "// &
2413 : "introduced. Note this is only meant to prevent such configurations, "// &
2414 : "not to physically sample them.", &
2415 1380 : n_keywords=2, n_subsections=0, repeats=.TRUE.)
2416 :
2417 : CALL keyword_create(keyword, __LOCATION__, name="ELEMENT", &
2418 : description="Solute element for which the short range cutoff is in effect", &
2419 1380 : repeats=.FALSE., default_c_val="none")
2420 1380 : CALL section_add_keyword(subsubsection, keyword)
2421 1380 : CALL keyword_release(keyword)
2422 :
2423 : CALL keyword_create(keyword, __LOCATION__, name="RADIUS", &
2424 : description="Short range cutoff in Angstrom, below this cutoff, the energy "// &
2425 : "is replaced by a sizable positive value plus a 1/r**2 term to guide particles "// &
2426 : "away from each other.", &
2427 : default_r_val=cp_unit_to_cp2k(0.0_dp, "angstrom"), &
2428 1380 : repeats=.FALSE., type_of_var=real_t, unit_str="angstrom")
2429 1380 : CALL section_add_keyword(subsubsection, keyword)
2430 1380 : CALL keyword_release(keyword)
2431 1380 : CALL section_add_subsection(subsection, subsubsection)
2432 1380 : CALL section_release(subsubsection)
2433 :
2434 1380 : NULLIFY (subsubsection)
2435 : CALL section_create(subsubsection, __LOCATION__, name="MODEL", &
2436 : description="Section for a single NNP model. If this section is repeated, "// &
2437 : "a committee model (C-NNP)is used where the NNP members share the same "// &
2438 : "symmetry functions. ", &
2439 1380 : n_keywords=1, n_subsections=0, repeats=.TRUE.)
2440 :
2441 : CALL keyword_create(keyword, __LOCATION__, name="WEIGHTS", &
2442 : description="File containing the weights for the artificial neural "// &
2443 : "networks of the NNP. The specified name is extended by .XXX.data ", &
2444 1380 : repeats=.FALSE., default_lc_val="weights")
2445 1380 : CALL section_add_keyword(subsubsection, keyword)
2446 1380 : CALL keyword_release(keyword)
2447 1380 : CALL section_add_subsection(subsection, subsubsection)
2448 1380 : CALL section_release(subsubsection)
2449 :
2450 : ! Create the PRINT subsection
2451 1380 : NULLIFY (subsubsection)
2452 : CALL section_create(subsubsection, __LOCATION__, name="PRINT", &
2453 : description="Section of possible print options in NNP code.", &
2454 1380 : n_keywords=0, n_subsections=3, repeats=.FALSE.)
2455 1380 : NULLIFY (print_key, keyword)
2456 :
2457 : CALL cp_print_key_section_create(print_key, __LOCATION__, "ENERGIES", &
2458 : description="Controls the printing of the NNP energies.", &
2459 1380 : print_level=medium_print_level, common_iter_levels=1)
2460 1380 : CALL section_add_subsection(subsubsection, print_key)
2461 1380 : CALL section_release(print_key)
2462 :
2463 : CALL cp_print_key_section_create(print_key, __LOCATION__, "FORCES_SIGMA", &
2464 : description="Controls the printing of the STD per atom of the NNP forces.", &
2465 1380 : print_level=medium_print_level, common_iter_levels=1)
2466 1380 : CALL section_add_subsection(subsubsection, print_key)
2467 1380 : CALL section_release(print_key)
2468 :
2469 : CALL cp_print_key_section_create(print_key, __LOCATION__, "EXTRAPOLATION", &
2470 : description="If activated, output structures with extrapolation "// &
2471 : "warning in xyz-format", &
2472 1380 : print_level=medium_print_level, common_iter_levels=1)
2473 1380 : CALL section_add_subsection(subsubsection, print_key)
2474 1380 : CALL section_release(print_key)
2475 1380 : CALL section_add_subsection(subsection, subsubsection)
2476 1380 : CALL section_release(subsubsection)
2477 :
2478 1380 : CALL section_add_subsection(section, subsection)
2479 1380 : CALL section_release(subsection) ! release NNP subsection
2480 :
2481 : ! Ceperley's sampling algorithm
2482 1380 : NULLIFY (subsection)
2483 : CALL section_create(subsection, __LOCATION__, name="CEPERLEY", &
2484 : description="Enables sampling with Ceperley's algorithm", &
2485 1380 : n_keywords=2, n_subsections=1, repeats=.FALSE.)
2486 :
2487 : CALL keyword_create(keyword, __LOCATION__, name="BISECTION", &
2488 : description="how many time slices to change at once (+1). "// &
2489 : "Must be a power of 2 currently", &
2490 1380 : repeats=.FALSE., default_i_val=8)
2491 1380 : CALL section_add_keyword(subsection, keyword)
2492 1380 : CALL keyword_release(keyword)
2493 :
2494 : CALL keyword_create(keyword, __LOCATION__, name="MAX_PERM_CYCLE", &
2495 : description="how large cyclic permutations to try", &
2496 1380 : repeats=.FALSE., default_i_val=6)
2497 1380 : CALL section_add_keyword(subsection, keyword)
2498 1380 : CALL keyword_release(keyword)
2499 :
2500 1380 : NULLIFY (subsubsection)
2501 : CALL section_create(subsubsection, __LOCATION__, name="M-SAMPLING", &
2502 : description="Permutation cycle length sampling settings", &
2503 1380 : n_keywords=3, n_subsections=0, repeats=.FALSE.)
2504 : CALL keyword_create(keyword, __LOCATION__, name="DISTRIBUTION-TYPE", &
2505 : description="Distribution from which the cycle length m is sampled", &
2506 : usage="DISTRIBUTION-TYPE (SINGLEV|UNIFORM|LINEAR|QUADRATIC|EXPONENTIAL|GAUSSIAN)", &
2507 : default_i_val=helium_mdist_uniform, &
2508 : enum_c_vals=s2a( &
2509 : "SINGLEV", &
2510 : "UNIFORM", &
2511 : "LINEAR", &
2512 : "QUADRATIC", &
2513 : "EXPONENTIAL", &
2514 : "GAUSSIAN"), &
2515 : enum_i_vals=[ &
2516 : helium_mdist_singlev, &
2517 : helium_mdist_uniform, &
2518 : helium_mdist_linear, &
2519 : helium_mdist_quadratic, &
2520 : helium_mdist_exponential, &
2521 1380 : helium_mdist_gaussian])
2522 1380 : CALL section_add_keyword(subsubsection, keyword)
2523 1380 : CALL keyword_release(keyword)
2524 : CALL keyword_create(keyword, __LOCATION__, name="M-VALUE", &
2525 : description="Value of m treated in a special way "// &
2526 : "(specific behavior depends on the distribution type chosen)", &
2527 : repeats=.FALSE., &
2528 1380 : default_i_val=1)
2529 1380 : CALL section_add_keyword(subsubsection, keyword)
2530 1380 : CALL keyword_release(keyword)
2531 : CALL keyword_create(keyword, __LOCATION__, name="M-RATIO", &
2532 : description="Probability ratio betw M-VALUE and other cycle lengths", &
2533 : repeats=.FALSE., &
2534 1380 : default_r_val=1.0_dp)
2535 1380 : CALL section_add_keyword(subsubsection, keyword)
2536 1380 : CALL keyword_release(keyword)
2537 1380 : CALL section_add_subsection(subsection, subsubsection)
2538 1380 : CALL section_release(subsubsection)
2539 1380 : CALL section_add_subsection(section, subsection)
2540 1380 : CALL section_release(subsection) ! release CEPERLEY subsection
2541 :
2542 : ! worm algorithm parameters:
2543 1380 : NULLIFY (subsection)
2544 : CALL section_create(subsection, __LOCATION__, name="WORM", &
2545 : description="Enables sampling via the canonical worm algorithm adapted from Bonisegni", &
2546 1380 : n_keywords=12, n_subsections=0, repeats=.FALSE.)
2547 :
2548 : CALL keyword_create(keyword, __LOCATION__, name="CENTROID_DRMAX", &
2549 : description="Maximum displacement allowed for the centroid moves", &
2550 1380 : repeats=.FALSE., default_r_val=0.5_dp)
2551 1380 : CALL section_add_keyword(subsection, keyword)
2552 1380 : CALL keyword_release(keyword)
2553 :
2554 : CALL keyword_create(keyword, __LOCATION__, name="STAGING_L", &
2555 : description="From 2 up to max. L-1 beads will be moved", &
2556 1380 : repeats=.FALSE., default_i_val=5)
2557 1380 : CALL section_add_keyword(subsection, keyword)
2558 1380 : CALL keyword_release(keyword)
2559 :
2560 : CALL keyword_create(keyword, __LOCATION__, name="OPEN_CLOSE_SCALE", &
2561 : description="Open/Close acceptance adjustment parameter", &
2562 1380 : repeats=.FALSE., default_r_val=0.01_dp)
2563 1380 : CALL section_add_keyword(subsection, keyword)
2564 1380 : CALL keyword_release(keyword)
2565 :
2566 : CALL keyword_create(keyword, __LOCATION__, name="ALLOW_OPEN", &
2567 : description="Enable bosonic exchange sampling", &
2568 1380 : repeats=.FALSE., default_l_val=.TRUE.)
2569 1380 : CALL section_add_keyword(subsection, keyword)
2570 1380 : CALL keyword_release(keyword)
2571 :
2572 : CALL keyword_create(keyword, __LOCATION__, name="MAX_OPEN_CYCLES", &
2573 : description="If > 0 then reset positions and permutations to the previous closed &
2574 : & state if staying more than this amount of MC cycles in open state to avoid staying &
2575 : & trapped in open state for too long. Use with caution as it can potentially introduce &
2576 : & a bias in the sampling.", &
2577 1380 : repeats=.FALSE., default_i_val=0)
2578 1380 : CALL section_add_keyword(subsection, keyword)
2579 1380 : CALL keyword_release(keyword)
2580 :
2581 : CALL keyword_create(keyword, __LOCATION__, name="SHOW_STATISTICS", &
2582 : description="Show sampling statistics in output", &
2583 1380 : repeats=.FALSE., default_l_val=.TRUE.)
2584 1380 : CALL section_add_keyword(subsection, keyword)
2585 1380 : CALL keyword_release(keyword)
2586 :
2587 : CALL keyword_create(keyword, __LOCATION__, name="CENTROID_WEIGHT", &
2588 : description="Absolute weight of the centroid move", &
2589 1380 : repeats=.FALSE., default_i_val=10)
2590 1380 : CALL section_add_keyword(subsection, keyword)
2591 1380 : CALL keyword_release(keyword)
2592 :
2593 : CALL keyword_create(keyword, __LOCATION__, name="STAGING_WEIGHT", &
2594 : description="Absolute weight of the staging move", &
2595 1380 : repeats=.FALSE., default_i_val=30)
2596 1380 : CALL section_add_keyword(subsection, keyword)
2597 1380 : CALL keyword_release(keyword)
2598 :
2599 : CALL keyword_create(keyword, __LOCATION__, name="OPEN_CLOSE_WEIGHT", &
2600 : description="Absolute weight of the open/close move", &
2601 1380 : repeats=.FALSE., default_i_val=10)
2602 1380 : CALL section_add_keyword(subsection, keyword)
2603 1380 : CALL keyword_release(keyword)
2604 :
2605 : CALL keyword_create(keyword, __LOCATION__, name="HEAD_TAIL_WEIGHT", &
2606 : description="Absolute weight of the head/tail moves (both)", &
2607 1380 : repeats=.FALSE., default_i_val=10)
2608 1380 : CALL section_add_keyword(subsection, keyword)
2609 1380 : CALL keyword_release(keyword)
2610 :
2611 : CALL keyword_create(keyword, __LOCATION__, name="CRAWL_WEIGHT", &
2612 : description="Absolute weight of the crawl bwd/fwd moves (both)", &
2613 1380 : repeats=.FALSE., default_i_val=10)
2614 1380 : CALL section_add_keyword(subsection, keyword)
2615 1380 : CALL keyword_release(keyword)
2616 :
2617 : CALL keyword_create(keyword, __LOCATION__, name="CRAWL_REPETITION", &
2618 : description="Number of repeated crawl moves", &
2619 1380 : repeats=.FALSE., default_i_val=4)
2620 1380 : CALL section_add_keyword(subsection, keyword)
2621 1380 : CALL keyword_release(keyword)
2622 :
2623 : CALL keyword_create(keyword, __LOCATION__, name="SWAP_WEIGHT", &
2624 : description="Absolute weight of the crawl move", &
2625 1380 : repeats=.FALSE., default_i_val=10)
2626 1380 : CALL section_add_keyword(subsection, keyword)
2627 1380 : CALL keyword_release(keyword)
2628 :
2629 1380 : CALL section_add_subsection(section, subsection)
2630 1380 : CALL section_release(subsection) ! release WORM subsection
2631 :
2632 : ! end of worm parameters
2633 :
2634 : CALL keyword_create(keyword, __LOCATION__, name="PERIODIC", &
2635 : description="Use periodic boundary conditions for helium", &
2636 1380 : repeats=.FALSE., default_l_val=.FALSE.)
2637 1380 : CALL section_add_keyword(section, keyword)
2638 1380 : CALL keyword_release(keyword)
2639 :
2640 : CALL keyword_create(keyword, __LOCATION__, name="CELL_SIZE", &
2641 : description="PBC unit cell size (NOTE 1: density, number of atoms"// &
2642 : " and volume are interdependent - give only two of them; "// &
2643 : "NOTE 2: for small cell sizes specify NATOMS instead)", &
2644 1380 : repeats=.FALSE., type_of_var=real_t, unit_str="angstrom")
2645 1380 : CALL section_add_keyword(section, keyword)
2646 1380 : CALL keyword_release(keyword)
2647 :
2648 : CALL keyword_create(keyword, __LOCATION__, name="CELL_SHAPE", &
2649 : description="PBC unit cell shape for helium", &
2650 : usage="CELL_SHAPE (CUBE|OCTAHEDRON)", &
2651 : default_i_val=helium_cell_shape_cube, &
2652 : enum_c_vals=s2a("CUBE", "OCTAHEDRON"), &
2653 1380 : enum_i_vals=[helium_cell_shape_cube, helium_cell_shape_octahedron])
2654 1380 : CALL section_add_keyword(section, keyword)
2655 1380 : CALL keyword_release(keyword)
2656 :
2657 : CALL keyword_create(keyword, __LOCATION__, name="DROPLET_RADIUS", &
2658 : description="Reject a move if any of the new positions does not lie within"// &
2659 : " this range from the center of gravity", &
2660 : repeats=.FALSE., type_of_var=real_t, default_r_val=HUGE(1.0_dp), &
2661 1380 : unit_str="angstrom")
2662 1380 : CALL section_add_keyword(section, keyword)
2663 1380 : CALL keyword_release(keyword)
2664 :
2665 : CALL keyword_create(keyword, __LOCATION__, name="DENSITY", &
2666 : description="trial density of helium for determining the helium "// &
2667 : "box size", &
2668 : repeats=.FALSE., &
2669 : default_r_val=cp_unit_to_cp2k(0.02186_dp, "angstrom^-3"), &
2670 1380 : unit_str="angstrom^-3")
2671 1380 : CALL section_add_keyword(section, keyword)
2672 1380 : CALL keyword_release(keyword)
2673 :
2674 : CALL keyword_create(keyword, __LOCATION__, name="PRESAMPLE", &
2675 : description="Presample He coordinates before first PIMD step", &
2676 1380 : repeats=.FALSE., default_l_val=.FALSE.)
2677 1380 : CALL section_add_keyword(section, keyword)
2678 1380 : CALL keyword_release(keyword)
2679 :
2680 : CALL section_create(subsection, __LOCATION__, name="RDF", &
2681 : description="Radial distribution settings", &
2682 1380 : n_keywords=5, n_subsections=0, repeats=.FALSE.)
2683 :
2684 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
2685 : description="Whether or not to actually calculate this property", &
2686 1380 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
2687 1380 : CALL section_add_keyword(subsection, keyword)
2688 1380 : CALL keyword_release(keyword)
2689 :
2690 : CALL keyword_create(keyword, __LOCATION__, name="MAXR", &
2691 : description="Maximum RDF range, defaults to unit cell size", &
2692 : repeats=.FALSE., type_of_var=real_t, &
2693 1380 : unit_str="angstrom")
2694 1380 : CALL section_add_keyword(subsection, keyword)
2695 1380 : CALL keyword_release(keyword)
2696 :
2697 : CALL keyword_create(keyword, __LOCATION__, name="NBIN", &
2698 : description="Number of bins", &
2699 : repeats=.FALSE., &
2700 1380 : default_i_val=250)
2701 1380 : CALL section_add_keyword(subsection, keyword)
2702 1380 : CALL keyword_release(keyword)
2703 :
2704 : CALL keyword_create(keyword, __LOCATION__, name="SOLUTE_HE", &
2705 : description="Whether or not to calculate solute-He RDFs (if solute is present)", &
2706 1380 : default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
2707 1380 : CALL section_add_keyword(subsection, keyword)
2708 1380 : CALL keyword_release(keyword)
2709 :
2710 : CALL keyword_create(keyword, __LOCATION__, name="HE_HE", &
2711 : description="Whether or not to calculate He-He RDFs", &
2712 1380 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
2713 1380 : CALL section_add_keyword(subsection, keyword)
2714 1380 : CALL keyword_release(keyword)
2715 :
2716 1380 : CALL section_add_subsection(section, subsection)
2717 1380 : CALL section_release(subsection)
2718 :
2719 1380 : NULLIFY (subsection)
2720 : CALL section_create(subsection, __LOCATION__, name="RHO", &
2721 : description="Spatial distribution settings", &
2722 1380 : n_keywords=10, n_subsections=0, repeats=.FALSE.)
2723 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
2724 : description="Whether or not to actually calculate densities "// &
2725 : "(requires significant amount of memory, depending on the value of NBIN)", &
2726 1380 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
2727 1380 : CALL section_add_keyword(subsection, keyword)
2728 1380 : CALL keyword_release(keyword)
2729 : CALL keyword_create(keyword, __LOCATION__, name="NBIN", &
2730 : description="Number of grid points in each direction for density binning", &
2731 : repeats=.FALSE., &
2732 1380 : default_i_val=100)
2733 1380 : CALL section_add_keyword(subsection, keyword)
2734 1380 : CALL keyword_release(keyword)
2735 : !
2736 : CALL keyword_create(keyword, __LOCATION__, name="MIN_CYCLE_LENGTHS_WDG", &
2737 : description="Density of winding paths "// &
2738 : "not shorter than the given length", &
2739 : repeats=.FALSE., usage="MIN_CYCLE_LENGTHS_WDG <INT> <INT> .. <INT>", &
2740 1380 : type_of_var=integer_t, n_var=-1)
2741 1380 : CALL section_add_keyword(subsection, keyword)
2742 1380 : CALL keyword_release(keyword)
2743 : !
2744 : CALL keyword_create(keyword, __LOCATION__, name="MIN_CYCLE_LENGTHS_NON", &
2745 : description="Density of non-winding paths "// &
2746 : "not shorter than the given length", &
2747 : repeats=.FALSE., usage="MIN_CYCLE_LENGTHS_NON <INT> <INT> .. <INT>", &
2748 1380 : type_of_var=integer_t, n_var=-1)
2749 1380 : CALL section_add_keyword(subsection, keyword)
2750 1380 : CALL keyword_release(keyword)
2751 : !
2752 : CALL keyword_create(keyword, __LOCATION__, name="MIN_CYCLE_LENGTHS_ALL", &
2753 : description="Density of all paths "// &
2754 : "not shorter than the given length", &
2755 : repeats=.FALSE., usage="MIN_CYCLE_LENGTHS_ALL <INT> <INT> .. <INT>", &
2756 1380 : type_of_var=integer_t, n_var=-1)
2757 1380 : CALL section_add_keyword(subsection, keyword)
2758 1380 : CALL keyword_release(keyword)
2759 : !
2760 : CALL keyword_create(keyword, __LOCATION__, name="ATOM_NUMBER", &
2761 : description="Atom number density", &
2762 : repeats=.FALSE., &
2763 : type_of_var=logical_t, &
2764 : default_l_val=.TRUE., &
2765 1380 : lone_keyword_l_val=.TRUE.)
2766 1380 : CALL section_add_keyword(subsection, keyword)
2767 1380 : CALL keyword_release(keyword)
2768 : !
2769 : CALL keyword_create(keyword, __LOCATION__, name="PROJECTED_AREA_2", &
2770 : description="Projected area squared density, A*A(r)", &
2771 : repeats=.FALSE., &
2772 : type_of_var=logical_t, &
2773 : default_l_val=.FALSE., &
2774 1380 : lone_keyword_l_val=.TRUE.)
2775 1380 : CALL section_add_keyword(subsection, keyword)
2776 1380 : CALL keyword_release(keyword)
2777 : !
2778 : CALL keyword_create(keyword, __LOCATION__, name="WINDING_NUMBER_2", &
2779 : description="Winding number squared density, W*W(r)", &
2780 : repeats=.FALSE., &
2781 : type_of_var=logical_t, &
2782 : default_l_val=.FALSE., &
2783 1380 : lone_keyword_l_val=.TRUE.)
2784 1380 : CALL section_add_keyword(subsection, keyword)
2785 1380 : CALL keyword_release(keyword)
2786 : !
2787 : CALL keyword_create(keyword, __LOCATION__, name="WINDING_CYCLE_2", &
2788 : description="Winding number squared density, W^2(r)", &
2789 : repeats=.FALSE., &
2790 : type_of_var=logical_t, &
2791 : default_l_val=.FALSE., &
2792 1380 : lone_keyword_l_val=.TRUE.)
2793 1380 : CALL section_add_keyword(subsection, keyword)
2794 1380 : CALL keyword_release(keyword)
2795 : !
2796 : CALL keyword_create(keyword, __LOCATION__, name="MOMENT_OF_INERTIA", &
2797 : description="Moment of inertia density", &
2798 : repeats=.FALSE., &
2799 : type_of_var=logical_t, &
2800 : default_l_val=.FALSE., &
2801 1380 : lone_keyword_l_val=.TRUE.)
2802 1380 : CALL section_add_keyword(subsection, keyword)
2803 1380 : CALL keyword_release(keyword)
2804 :
2805 1380 : CALL section_add_subsection(section, subsection)
2806 1380 : CALL section_release(subsection)
2807 : ! end of subsection RHO
2808 :
2809 1380 : CALL create_coord_section(subsection, "HELIUM")
2810 1380 : CALL section_add_subsection(section, subsection)
2811 1380 : CALL section_release(subsection)
2812 :
2813 : CALL section_create(subsection, __LOCATION__, name="PERM", &
2814 : description="Permutation state used for restart", &
2815 1380 : n_keywords=1, n_subsections=0, repeats=.FALSE.)
2816 : CALL keyword_create(keyword, __LOCATION__, name="_DEFAULT_KEYWORD_", &
2817 : description="Specify particle index permutation for every "// &
2818 : "helium atom", repeats=.TRUE., usage="<INT> <INT> .. <INT>", &
2819 1380 : type_of_var=integer_t, n_var=-1)
2820 1380 : CALL section_add_keyword(subsection, keyword)
2821 1380 : CALL keyword_release(keyword)
2822 1380 : CALL section_add_subsection(section, subsection)
2823 1380 : CALL section_release(subsection)
2824 :
2825 : CALL section_create(subsection, __LOCATION__, name="AVERAGES", &
2826 : description="Average properties (used for restarts)", &
2827 1380 : n_keywords=7, n_subsections=0, repeats=.FALSE.)
2828 : CALL keyword_create(keyword, __LOCATION__, name="PROJECTED_AREA", &
2829 : description="Projected area vector for all environments", &
2830 : repeats=.TRUE., usage="PROJECTED_AREA <REAL> <REAL> .. <REAL>", &
2831 1380 : type_of_var=real_t, n_var=-1)
2832 1380 : CALL section_add_keyword(subsection, keyword)
2833 1380 : CALL keyword_release(keyword)
2834 : CALL keyword_create(keyword, __LOCATION__, name="PROJECTED_AREA_2", &
2835 : description="Projected area vector squared for all environments", &
2836 : repeats=.TRUE., usage="PROJECTED_AREA_2 <REAL> <REAL> .. <REAL>", &
2837 1380 : type_of_var=real_t, n_var=-1)
2838 1380 : CALL section_add_keyword(subsection, keyword)
2839 1380 : CALL keyword_release(keyword)
2840 : CALL keyword_create(keyword, __LOCATION__, name="WINDING_NUMBER_2", &
2841 : description="Winding number vector squared for all environments", &
2842 : repeats=.TRUE., usage="WINDING_NUMBER_2 <REAL> <REAL> .. <REAL>", &
2843 1380 : type_of_var=real_t, n_var=-1)
2844 1380 : CALL section_add_keyword(subsection, keyword)
2845 1380 : CALL keyword_release(keyword)
2846 : CALL keyword_create(keyword, __LOCATION__, name="MOMENT_OF_INERTIA", &
2847 : description="Moment of inertia vector for all environments", &
2848 : repeats=.TRUE., usage="MOMENT_OF_INERTIA <REAL> <REAL> .. <REAL>", &
2849 1380 : type_of_var=real_t, n_var=-1)
2850 1380 : CALL section_add_keyword(subsection, keyword)
2851 1380 : CALL keyword_release(keyword)
2852 : CALL keyword_create(keyword, __LOCATION__, name="RDF", &
2853 : description="Radial distributions averaged over all environments", &
2854 : repeats=.TRUE., usage="RDF <REAL> <REAL> .. <REAL>", &
2855 1380 : type_of_var=real_t, n_var=-1)
2856 1380 : CALL section_add_keyword(subsection, keyword)
2857 1380 : CALL keyword_release(keyword)
2858 : CALL keyword_create(keyword, __LOCATION__, name="RHO", &
2859 : description="Spatial distributions averaged over all environments", &
2860 : repeats=.TRUE., usage="RHO <REAL> <REAL> .. <REAL>", &
2861 1380 : type_of_var=real_t, n_var=-1)
2862 1380 : CALL section_add_keyword(subsection, keyword)
2863 1380 : CALL keyword_release(keyword)
2864 : CALL keyword_create(keyword, __LOCATION__, name="IWEIGHT", &
2865 : description="Weight for the restarted quantities "// &
2866 : "(number of MC steps used to calculate the accumulated averages)", &
2867 : repeats=.FALSE., &
2868 1380 : default_i_val=0)
2869 1380 : CALL section_add_keyword(subsection, keyword)
2870 1380 : CALL keyword_release(keyword)
2871 1380 : CALL section_add_subsection(section, subsection)
2872 1380 : CALL section_release(subsection)
2873 :
2874 : CALL section_create(subsection, __LOCATION__, name="FORCE", &
2875 : description="Forces exerted by the helium on the solute system"// &
2876 : " (used for restarts)", &
2877 1380 : n_keywords=1, n_subsections=0, repeats=.FALSE.)
2878 : CALL keyword_create(keyword, __LOCATION__, name="_DEFAULT_KEYWORD_", &
2879 : description="Number of real values should be 3 * "// &
2880 : "<num_solute_atoms> * <num_solute_beads>", repeats=.TRUE., &
2881 : usage="<REAL> <REAL> .. <REAL>", type_of_var=real_t, &
2882 1380 : n_var=-1)
2883 1380 : CALL section_add_keyword(subsection, keyword)
2884 1380 : CALL keyword_release(keyword)
2885 1380 : CALL section_add_subsection(section, subsection)
2886 1380 : CALL section_release(subsection)
2887 :
2888 : CALL section_create(subsection, __LOCATION__, name="RNG_STATE", &
2889 : description="Random number generator state for all processors", &
2890 1380 : n_keywords=1, n_subsections=0, repeats=.FALSE.)
2891 : CALL keyword_create(keyword, __LOCATION__, name="_DEFAULT_KEYWORD_", &
2892 : description="Three real arrays of DIMENSION(3,2) times two RNG "// &
2893 : "streams - 36 real values per processor", &
2894 : repeats=.TRUE., usage="automatically filled, do not edit by hand", &
2895 1380 : type_of_var=real_t, n_var=-1)
2896 1380 : CALL section_add_keyword(subsection, keyword)
2897 1380 : CALL keyword_release(keyword)
2898 1380 : CALL section_add_subsection(section, subsection)
2899 1380 : CALL section_release(subsection)
2900 :
2901 : CALL section_create(subsection, __LOCATION__, name="PRINT", &
2902 : description="The section that controls the output of the helium code", &
2903 1380 : n_keywords=16, n_subsections=0, repeats=.FALSE.)
2904 :
2905 : ! *************************************************************************
2906 : !> Printkeys for properties output
2907 : ! *************************************************************************
2908 1380 : NULLIFY (print_key)
2909 :
2910 : ! Properties printed at SILENT print level
2911 : !
2912 :
2913 : ! Properties printed at LOW print level
2914 : !
2915 : CALL cp_print_key_section_create(print_key, __LOCATION__, "ENERGY", &
2916 : description="Controls the output of helium energies"// &
2917 : " (averaged over MC step)", &
2918 1380 : print_level=low_print_level, common_iter_levels=1)
2919 1380 : CALL section_add_subsection(subsection, print_key)
2920 1380 : CALL section_release(print_key)
2921 : !
2922 : CALL cp_print_key_section_create(print_key, __LOCATION__, "PROJECTED_AREA_2_AVG", &
2923 : description="Controls the output of the average projected area squared vector", &
2924 1380 : print_level=low_print_level, common_iter_levels=1)
2925 1380 : CALL section_add_subsection(subsection, print_key)
2926 1380 : CALL section_release(print_key)
2927 : !
2928 : CALL cp_print_key_section_create(print_key, __LOCATION__, "WINDING_NUMBER_2_AVG", &
2929 : description="Controls the output of the average winding number vector squared", &
2930 1380 : print_level=low_print_level, common_iter_levels=1)
2931 1380 : CALL section_add_subsection(subsection, print_key)
2932 1380 : CALL section_release(print_key)
2933 : !
2934 : CALL cp_print_key_section_create(print_key, __LOCATION__, "MOMENT_OF_INERTIA_AVG", &
2935 : description="Controls the output of the average moment of inertia vector", &
2936 1380 : print_level=low_print_level, common_iter_levels=1)
2937 1380 : CALL section_add_subsection(subsection, print_key)
2938 1380 : CALL section_release(print_key)
2939 :
2940 : ! Properties printed at MEDIUM print level
2941 : !
2942 : CALL cp_print_key_section_create(print_key, __LOCATION__, "RDF", &
2943 : description="Controls the output of helium radial distribution functions", &
2944 1380 : print_level=medium_print_level, common_iter_levels=1)
2945 1380 : CALL section_add_subsection(subsection, print_key)
2946 1380 : CALL section_release(print_key)
2947 :
2948 : CALL cp_print_key_section_create(print_key, __LOCATION__, "RHO", &
2949 : description="Controls the output of the helium density "// &
2950 : "(Gaussian cube file format)", &
2951 : each_iter_names=s2a("PINT"), each_iter_values=[100], &
2952 : print_level=medium_print_level, common_iter_levels=1, &
2953 1380 : add_last=add_last_numeric)
2954 : CALL keyword_create(keyword, __LOCATION__, name="BACKUP_COPIES", &
2955 : description="Specifies the maximum number of backup copies.", &
2956 : usage="BACKUP_COPIES {int}", &
2957 1380 : default_i_val=1)
2958 1380 : CALL section_add_keyword(print_key, keyword)
2959 1380 : CALL keyword_release(keyword)
2960 1380 : CALL section_add_subsection(subsection, print_key)
2961 1380 : CALL section_release(print_key)
2962 : !
2963 : CALL cp_print_key_section_create(print_key, __LOCATION__, "PROJECTED_AREA", &
2964 : description="Controls the output of the projected area vector", &
2965 1380 : print_level=medium_print_level, common_iter_levels=1)
2966 1380 : CALL section_add_subsection(subsection, print_key)
2967 1380 : CALL section_release(print_key)
2968 : !
2969 : CALL cp_print_key_section_create(print_key, __LOCATION__, "WINDING_NUMBER", &
2970 : description="Controls the output of the winding number vector", &
2971 1380 : print_level=medium_print_level, common_iter_levels=1)
2972 1380 : CALL section_add_subsection(subsection, print_key)
2973 1380 : CALL section_release(print_key)
2974 : !
2975 : CALL cp_print_key_section_create(print_key, __LOCATION__, "MOMENT_OF_INERTIA", &
2976 : description="Controls the output of the moment of inertia vector", &
2977 1380 : print_level=medium_print_level, common_iter_levels=1)
2978 1380 : CALL section_add_subsection(subsection, print_key)
2979 1380 : CALL section_release(print_key)
2980 : !
2981 : CALL cp_print_key_section_create(print_key, __LOCATION__, "PLENGTH", &
2982 : description="Controls the output of the helium permutation length", &
2983 1380 : print_level=medium_print_level, common_iter_levels=1)
2984 1380 : CALL section_add_subsection(subsection, print_key)
2985 1380 : CALL section_release(print_key)
2986 :
2987 : CALL cp_print_key_section_create(print_key, __LOCATION__, "ACTION", &
2988 : description="Controls the output of the total helium action", &
2989 1380 : print_level=medium_print_level, common_iter_levels=1)
2990 1380 : CALL section_add_subsection(subsection, print_key)
2991 1380 : CALL section_release(print_key)
2992 :
2993 : ! Properties printed at HIGH print level
2994 : !
2995 : CALL cp_print_key_section_create(print_key, __LOCATION__, "COORDINATES", &
2996 : description="Controls the output of helium coordinates", &
2997 1380 : print_level=high_print_level, common_iter_levels=1)
2998 : CALL keyword_create(keyword, __LOCATION__, name="FORMAT", &
2999 : description="Output file format for the coordinates", &
3000 : usage="FORMAT (PDB|XYZ)", &
3001 : default_i_val=fmt_id_pdb, &
3002 : enum_c_vals=s2a("PDB", "XYZ"), &
3003 : enum_i_vals=[fmt_id_pdb, fmt_id_xyz], &
3004 : enum_desc=s2a("Bead coordinates and connectivity is written in PDB format", &
3005 1380 : "Only bead coordinates are written in XYZ format"))
3006 1380 : CALL section_add_keyword(print_key, keyword)
3007 1380 : CALL keyword_release(keyword)
3008 1380 : CALL section_add_subsection(subsection, print_key)
3009 1380 : CALL section_release(print_key)
3010 : !
3011 : CALL cp_print_key_section_create(print_key, __LOCATION__, "PERM", &
3012 : description="Controls the output of the helium permutation state", &
3013 1380 : print_level=high_print_level, common_iter_levels=1)
3014 : CALL keyword_create(keyword, __LOCATION__, name="FORMAT", &
3015 : description="Output format for the permutation", &
3016 : usage="FORMAT (CYCLE|PLAIN)", &
3017 : default_i_val=perm_cycle, &
3018 : enum_c_vals=s2a("CYCLE", "PLAIN"), &
3019 : enum_i_vals=[perm_cycle, perm_plain], &
3020 : enum_desc=s2a( &
3021 : "Cycle notation with winding cycles enclosed"// &
3022 : " in '[...]' and non-winding ones enclosed in '(...)'", &
3023 1380 : "Plain permutation output, i.e. P(1) ... P(N)"))
3024 1380 : CALL section_add_keyword(print_key, keyword)
3025 1380 : CALL keyword_release(keyword)
3026 1380 : CALL section_add_subsection(subsection, print_key)
3027 1380 : CALL section_release(print_key)
3028 :
3029 : CALL cp_print_key_section_create(print_key, __LOCATION__, "FORCES", &
3030 : description="Controls the output of the helium forces on the solute", &
3031 1380 : print_level=high_print_level, common_iter_levels=1)
3032 1380 : CALL section_add_subsection(subsection, print_key)
3033 1380 : CALL section_release(print_key)
3034 :
3035 : ! Properties printed at DEBUG print level
3036 : !
3037 : CALL cp_print_key_section_create(print_key, __LOCATION__, "ACCEPTS", &
3038 : description="Controls the output of the helium acceptance data", &
3039 1380 : print_level=debug_print_level, common_iter_levels=1)
3040 1380 : CALL section_add_subsection(subsection, print_key)
3041 1380 : CALL section_release(print_key)
3042 : !
3043 : CALL cp_print_key_section_create(print_key, __LOCATION__, "FORCES_INST", &
3044 : description="Controls the output of the instantaneous helium forces on the solute", &
3045 1380 : print_level=debug_print_level, common_iter_levels=1)
3046 1380 : CALL section_add_subsection(subsection, print_key)
3047 1380 : CALL section_release(print_key)
3048 :
3049 1380 : CALL section_add_subsection(section, subsection)
3050 1380 : CALL section_release(subsection)
3051 :
3052 1380 : RETURN
3053 : END SUBROUTINE create_helium_section
3054 :
3055 : END MODULE input_cp2k_motion
|