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