Line data Source code
1 : !--------------------------------------------------------------------------------------------------!
2 : ! CP2K: A general program to perform molecular dynamics simulations !
3 : ! Copyright 2000-2024 CP2K developers group <https://cp2k.org> !
4 : ! !
5 : ! SPDX-License-Identifier: GPL-2.0-or-later !
6 : !--------------------------------------------------------------------------------------------------!
7 :
8 : ! **************************************************************************************************
9 : !> \par History
10 : !> 06.2013 split input_cp2k into smaller modules
11 : !> \author Mandes
12 : ! **************************************************************************************************
13 : MODULE input_cp2k_tmc
14 : USE bibliography, ONLY: Schonherr2014
15 : USE input_cp2k_mm, ONLY: create_CHARGE_section
16 : USE input_keyword_types, ONLY: keyword_create,&
17 : keyword_release,&
18 : keyword_type
19 : USE input_section_types, ONLY: section_add_keyword,&
20 : section_add_subsection,&
21 : section_create,&
22 : section_release,&
23 : section_type
24 : USE input_val_types, ONLY: char_t,&
25 : integer_t,&
26 : real_t
27 : USE kinds, ONLY: dp
28 : USE tmc_stati, ONLY: tmc_default_dot_file_name,&
29 : tmc_default_unspecified_name
30 : #include "../base/base_uses.f90"
31 :
32 : IMPLICIT NONE
33 : PRIVATE
34 :
35 : LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .TRUE.
36 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'input_cp2k_tmc'
37 :
38 : PUBLIC :: create_TMC_section
39 :
40 : CONTAINS
41 :
42 : ! **************************************************************************************************
43 : !> \brief creates the TreeMonteCarlo subsection
44 : !> \param section the section to be created
45 : !> \author Mandes
46 : ! **************************************************************************************************
47 8530 : SUBROUTINE create_TMC_section(section)
48 : TYPE(section_type), POINTER :: section
49 :
50 : TYPE(keyword_type), POINTER :: keyword
51 : TYPE(section_type), POINTER :: subsection
52 :
53 8530 : CPASSERT(.NOT. ASSOCIATED(section))
54 : CALL section_create( &
55 : section, __LOCATION__, name="TMC", &
56 : description="A parallelized MC algorithm, presampling the configurations, espacially the Markov chain elements", &
57 : citations=(/Schonherr2014/), &
58 17060 : n_keywords=1, n_subsections=1, repeats=.FALSE.)
59 :
60 8530 : NULLIFY (keyword, subsection)
61 :
62 : ! size of a group calculating the exact energy
63 : CALL keyword_create(keyword, __LOCATION__, &
64 : name="GROUP_ENERGY_SIZE", &
65 : description="amount of CPUs per group for energy calculation", &
66 : usage="GROUP_ENERGY_SIZE {INTEGER}", &
67 8530 : default_i_val=1)
68 8530 : CALL section_add_keyword(section, keyword)
69 8530 : CALL keyword_release(keyword)
70 :
71 : ! size of a group calculating the exact energy
72 : CALL keyword_create(keyword, __LOCATION__, &
73 : name="GROUP_ENERGY_NR", &
74 : description="amount of groups for exact energy calculation", &
75 : usage="GROUP_ENERGY_NR {INTEGER}", &
76 8530 : default_i_val=1)
77 8530 : CALL section_add_keyword(section, keyword)
78 8530 : CALL keyword_release(keyword)
79 :
80 : ! size of a group calculating the exact energy
81 : CALL keyword_create(keyword, __LOCATION__, &
82 : name="GROUP_CC_SIZE", &
83 : description="amount of of CPUs per group for configurational change", &
84 : usage="GROUP_CC_SIZE {INTEGER}", &
85 8530 : default_i_val=0)
86 8530 : CALL section_add_keyword(section, keyword)
87 8530 : CALL keyword_release(keyword)
88 :
89 : ! size of a group calculating the exact energy
90 : CALL keyword_create(keyword, __LOCATION__, &
91 : name="GROUP_ANLYSIS_NR", &
92 : description="amount of groups (cores) for analysing the configurations", &
93 : usage="GROUP_ANALYSIS_NR {INTEGER}", &
94 8530 : default_i_val=1, lone_keyword_i_val=1)
95 8530 : CALL section_add_keyword(section, keyword)
96 8530 : CALL keyword_release(keyword)
97 :
98 : CALL keyword_create(keyword, __LOCATION__, &
99 : name="NUM_MC_ELEM", &
100 : description="the minimum Markov Chain elements, to be sampled", &
101 : usage="NUM_MC_ELEM {INTEGER}", &
102 8530 : default_i_val=-1)
103 8530 : CALL section_add_keyword(section, keyword)
104 8530 : CALL keyword_release(keyword)
105 :
106 : ! the start value for the random number generator
107 : CALL keyword_create(keyword, __LOCATION__, &
108 : name="RND_DETERMINISTIC", &
109 : description="the initialisation number for the random number generator", &
110 : usage="RND_INIT {INTEGER}", &
111 8530 : default_i_val=-1)
112 8530 : CALL section_add_keyword(section, keyword)
113 8530 : CALL keyword_release(keyword)
114 :
115 : CALL keyword_create(keyword, __LOCATION__, &
116 : name="TASK_TYPE", &
117 : description="Select specialized types. Selectable: "// &
118 : "IDEAL_GAS (constant configuration energy E=0.0)", &
119 : usage="TASK_TYPE {OPTION}", &
120 8530 : default_c_val="", lone_keyword_c_val=tmc_default_unspecified_name)
121 8530 : CALL section_add_keyword(section, keyword)
122 8530 : CALL keyword_release(keyword)
123 :
124 : CALL keyword_create(keyword, __LOCATION__, &
125 : name="NR_TEMPERATURE", &
126 : description="the number of different temperature for parallel tempering", &
127 : usage="NR_TEMP {INTEGER}", &
128 8530 : default_i_val=1)
129 8530 : CALL section_add_keyword(section, keyword)
130 8530 : CALL keyword_release(keyword)
131 :
132 : CALL keyword_create(keyword, __LOCATION__, &
133 : name="TEMPERATURE", &
134 : description="one temperature OR for parallel tempering: "// &
135 : "Tmin Tmax or each temperature T1 T2 T3 ..."// &
136 : " If every single temperature is specified, "// &
137 : "do NOT use keyword NR_TEMPERATURE", &
138 : usage="TEMPERATURE {REAL} |OR| TEMPERATURE {REAL} {REAL} ...", &
139 : default_r_vals=(/330.0_dp/), &
140 8530 : n_var=-1, type_of_var=real_t)
141 8530 : CALL section_add_keyword(section, keyword)
142 8530 : CALL keyword_release(keyword)
143 :
144 : CALL keyword_create(keyword, __LOCATION__, &
145 : name="NUM_MV_ELEM_IN_CELL", &
146 : description="the number of elements (atoms or molecules) "// &
147 : "moves in cell or sub box. "// &
148 : "if 0 all elements are moved once in a MC move", &
149 : usage="NUM_MV_ELEM_IN_CELL {INTEGER}", &
150 8530 : default_i_val=0)
151 8530 : CALL section_add_keyword(section, keyword)
152 8530 : CALL keyword_release(keyword)
153 :
154 : ! CALL keyword_create(keyword, __LOCATION__,&
155 : ! name="NR_NMC_STEPS",&
156 : ! description="the number of Nested Mont Carlo moves with in one MC move "//&
157 : ! "should be huge enough to reach euilibrium state", &
158 : ! usage="NR_NMC_STEPS {INTEGER}",&
159 : ! default_i_val=-1)
160 : ! CALL section_add_keyword(section,keyword)
161 : ! CALL keyword_release(keyword)
162 :
163 : ! the moves MOVE_TYPE on exact potential
164 8530 : CALL create_TMC_move_type_section(subsection)
165 8530 : CALL section_add_subsection(section, subsection)
166 8530 : CALL section_release(subsection)
167 :
168 : ! the moves MOVE_TYPE on approx potential
169 8530 : CALL create_TMC_NMC_move_type_section(subsection)
170 8530 : CALL section_add_subsection(section, subsection)
171 8530 : CALL section_release(subsection)
172 :
173 : CALL keyword_create(keyword, __LOCATION__, &
174 : name="SUB_BOX", &
175 : description="specifies the size ot the sub box. "// &
176 : "Standard moves only within subbox of random position, "// &
177 : "to compensate the potential difference of the approximate potential.", &
178 : usage="SUB_BOX {REAL} {REAL} {REAL} OR SUB_BOX {REAL} for cubic", &
179 : default_r_vals=(/-1.0_dp/), &
180 8530 : n_var=-1, type_of_var=real_t)
181 8530 : CALL section_add_keyword(section, keyword)
182 8530 : CALL keyword_release(keyword)
183 :
184 : CALL keyword_create(keyword, __LOCATION__, &
185 : name="PRESSURE", &
186 : description="enables NPT calculation with specified constant pressure [bar]", &
187 : usage="PRESSURE {REAL}", &
188 8530 : default_r_val=-1.0_dp)
189 8530 : CALL section_add_keyword(section, keyword)
190 8530 : CALL keyword_release(keyword)
191 :
192 : CALL keyword_create(keyword, __LOCATION__, &
193 : name="VOLUME_ISOTROPIC", &
194 : description="volume move is equal in each direction", &
195 : usage="VOLUME_ISOTROPIC {LOGICAL}", &
196 8530 : default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
197 8530 : CALL section_add_keyword(section, keyword)
198 8530 : CALL keyword_release(keyword)
199 :
200 : CALL keyword_create(keyword, __LOCATION__, &
201 : name="MOVE_CENTER_OF_MASS", &
202 : description="Moves the center of mass of defined molecules (in volume moves)", &
203 : usage="MOVE_CENTER_OF_MASS {LOGICAL}", &
204 8530 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
205 8530 : CALL section_add_keyword(section, keyword)
206 8530 : CALL keyword_release(keyword)
207 :
208 : CALL keyword_create(keyword, __LOCATION__, &
209 : name="ESIMATE_ACC_PROB", &
210 : description="set the estimation of the acceptance probability using run time information of the energy", &
211 : usage="ESIMATE_ACC_PROB {LOGICAL}", &
212 8530 : default_l_val=.TRUE.)
213 8530 : CALL section_add_keyword(section, keyword)
214 8530 : CALL keyword_release(keyword)
215 :
216 : CALL keyword_create(keyword, __LOCATION__, &
217 : name="SPECULATIVE_CANCELING", &
218 : description="enables or disables the speculative canceling. If we have further knowledge of "// &
219 : "acceptance probabilities using parent acceptance or the estimated energy.", &
220 : usage="SPECULATIVE_CANCELING {LOGICAL}", &
221 8530 : default_l_val=.TRUE.)
222 8530 : CALL section_add_keyword(section, keyword)
223 8530 : CALL keyword_release(keyword)
224 :
225 : CALL keyword_create(keyword, __LOCATION__, &
226 : name="USE_SCF_ENERGY_INFO", &
227 : description="enables or disables the usage of SCF energy information for "// &
228 : "estimating the acceptance probability.", &
229 : usage="USE_SCF_ENERGY_INFO {LOGICAL}", &
230 8530 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
231 8530 : CALL section_add_keyword(section, keyword)
232 8530 : CALL keyword_release(keyword)
233 :
234 : CALL keyword_create(keyword, __LOCATION__, &
235 : name="RESULT_LIST_IN_MEMORY", &
236 : description="enables the storing of the whole Markov Chain", &
237 : usage="RESULT_LIST_IN_MEMORY {LOGICAL}", &
238 8530 : default_l_val=.FALSE.)
239 8530 : CALL section_add_keyword(section, keyword)
240 8530 : CALL keyword_release(keyword)
241 :
242 : CALL keyword_create(keyword, __LOCATION__, &
243 : name="INFO_OUT_STEP_SIZE", &
244 : description="the number the amount of calculated configurations between to output printings.", &
245 : usage="INFO_OUT_STEP_SIZE {INTEGER}", &
246 8530 : default_i_val=1)
247 8530 : CALL section_add_keyword(section, keyword)
248 8530 : CALL keyword_release(keyword)
249 :
250 : CALL keyword_create(keyword, __LOCATION__, &
251 : name="RESTART_IN", &
252 : description="if existing use the last restart file", &
253 : usage="RESTART or RSTART {FILENAME}", &
254 8530 : default_c_val="", lone_keyword_c_val=tmc_default_unspecified_name)
255 8530 : CALL section_add_keyword(section, keyword)
256 8530 : CALL keyword_release(keyword)
257 :
258 : CALL keyword_create(keyword, __LOCATION__, &
259 : name="RESTART_OUT", &
260 : description="Defines the frequency to write restart files. "// &
261 : "If no frequency is specified (lone keyword) "// &
262 : "the restart file is written at the end (only). "// &
263 : "If the value is 0, no restart file is written at all. "// &
264 : "The frequency specifies is related "// &
265 : "to the calculated Markov chain elements", &
266 : usage="RESTART or RESTART {INTEGER}", &
267 8530 : default_i_val=-1, lone_keyword_i_val=-9)
268 8530 : CALL section_add_keyword(section, keyword)
269 8530 : CALL keyword_release(keyword)
270 :
271 : CALL keyword_create(keyword, __LOCATION__, name="ENERGY_FILE_NAME", &
272 : description="input file name for the exact potential energy calculation.", &
273 : usage="ENERGY_FILE_NAME {filename}", &
274 8530 : default_c_val="")
275 8530 : CALL section_add_keyword(section, keyword)
276 8530 : CALL keyword_release(keyword)
277 :
278 : ! CALL keyword_create(keyword, __LOCATION__, name="NMC_FILE_NAME",&
279 : ! description="input file name for the approximate potential for Nested Monte Carlo.",&
280 : ! usage="NMC_FILE_NAME {filename}",&
281 : ! default_c_val="",lone_keyword_c_val=tmc_default_unspecified_name)
282 : ! CALL section_add_keyword(section,keyword)
283 : ! CALL keyword_release(keyword)
284 :
285 : CALL keyword_create(keyword, __LOCATION__, &
286 : name="PRINT_ONLY_ACC", &
287 : description="printing only accepted elements of the Markov Chain.", &
288 : usage="PRINT_ONLY_ACC {LOGICAL}", &
289 8530 : default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
290 8530 : CALL section_add_keyword(section, keyword)
291 8530 : CALL keyword_release(keyword)
292 :
293 : CALL keyword_create(keyword, __LOCATION__, &
294 : name="PRINT_COORDS", &
295 : description="printing coordinates of the Markov Chain elements", &
296 : usage="PRINT_COORDS {LOGICAL}", &
297 8530 : default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
298 8530 : CALL section_add_keyword(section, keyword)
299 8530 : CALL keyword_release(keyword)
300 :
301 : CALL keyword_create(keyword, __LOCATION__, &
302 : name="PRINT_FORCES", &
303 : description="printing forces of the Markov Chain elements", &
304 : usage="PRINT_FORCES {LOGICAL}", &
305 8530 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
306 8530 : CALL section_add_keyword(section, keyword)
307 8530 : CALL keyword_release(keyword)
308 :
309 : CALL keyword_create(keyword, __LOCATION__, &
310 : name="PRINT_DIPOLE", &
311 : description="enables the calculation and printing the exact cell dipoles"// &
312 : " (only for QS methods)", &
313 : usage="PRINT_DIPOLE {LOGICAL}", &
314 8530 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
315 8530 : CALL section_add_keyword(section, keyword)
316 8530 : CALL keyword_release(keyword)
317 :
318 : CALL keyword_create(keyword, __LOCATION__, &
319 : name="PRINT_CELL", &
320 : description="printing the cell vectors of the Markov Chain elements", &
321 : usage="PRINT_CELL {LOGICAL}", &
322 8530 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
323 8530 : CALL section_add_keyword(section, keyword)
324 8530 : CALL keyword_release(keyword)
325 :
326 : CALL keyword_create(keyword, __LOCATION__, &
327 : name="PRINT_ENERGIES", &
328 : description="printing the different calculated energies (approximated, scf and exact)", &
329 : usage="PRINT_ENERGIES {LOGICAL}", &
330 8530 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
331 8530 : CALL section_add_keyword(section, keyword)
332 8530 : CALL keyword_release(keyword)
333 :
334 : CALL keyword_create(keyword, __LOCATION__, name="DOT_TREE", &
335 : description="file name for GrapgViz dot file", &
336 : usage="DOT_TREE {filename}", &
337 8530 : default_c_val="", lone_keyword_c_val=tmc_default_dot_file_name)
338 8530 : CALL section_add_keyword(section, keyword)
339 8530 : CALL keyword_release(keyword)
340 :
341 : CALL keyword_create(keyword, __LOCATION__, name="ALL_CONF_FILE_NAME", &
342 : description="file name for printing every single calculated configuration (e.g. for fitting).", &
343 : usage="ALL_CONF_FILE_NAME {filename}", &
344 8530 : default_lc_val="")
345 8530 : CALL section_add_keyword(section, keyword)
346 8530 : CALL keyword_release(keyword)
347 :
348 : CALL keyword_create(keyword, __LOCATION__, &
349 : name="PRINT_TEST_OUTPUT", &
350 : description="printing different values for regtest comparison", &
351 : usage="PRINT_TEST_OUTPUT {LOGICAL}", &
352 8530 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
353 8530 : CALL section_add_keyword(section, keyword)
354 8530 : CALL keyword_release(keyword)
355 :
356 8530 : CALL create_TMC_ana_section(subsection)
357 8530 : CALL section_add_subsection(section, subsection)
358 8530 : CALL section_release(subsection)
359 :
360 8530 : CALL create_TMC_ana_files(subsection)
361 8530 : CALL section_add_subsection(section, subsection)
362 8530 : CALL section_release(subsection)
363 :
364 8530 : END SUBROUTINE create_TMC_section
365 :
366 : ! **************************************************************************************************
367 : !> \brief creates the TMC section to select the move types performed within the
368 : !> NMC (on approximate potential)
369 : !> \param section the section to be created
370 : !> \author Mandes
371 : ! **************************************************************************************************
372 8530 : SUBROUTINE create_TMC_NMC_move_type_section(section)
373 : TYPE(section_type), POINTER :: section
374 :
375 : TYPE(keyword_type), POINTER :: keyword
376 : TYPE(section_type), POINTER :: subsection
377 :
378 8530 : NULLIFY (subsection)
379 :
380 8530 : CPASSERT(.NOT. ASSOCIATED(section))
381 : CALL section_create(section, __LOCATION__, name="NMC_MOVES", &
382 : description="This section specifies the TMC move types, "// &
383 : "which are performed within the nested Monte Carlo (NMC). "// &
384 : "thus using the approximate potential.", &
385 8530 : n_keywords=1, n_subsections=0, repeats=.TRUE.)
386 :
387 8530 : NULLIFY (keyword)
388 :
389 : CALL keyword_create(keyword, __LOCATION__, &
390 : name="NR_NMC_STEPS", &
391 : description="the number of Nested Mont Carlo moves with in one MC move "// &
392 : "should be huge enough to reach euilibrium state", &
393 : usage="NR_NMC_STEPS {INTEGER}", &
394 8530 : default_i_val=-1)
395 8530 : CALL section_add_keyword(section, keyword)
396 8530 : CALL keyword_release(keyword)
397 :
398 : CALL keyword_create(keyword, __LOCATION__, name="NMC_FILE_NAME", &
399 : description="input file name for the approximate potential for Nested Monte Carlo.", &
400 : usage="NMC_FILE_NAME {filename}", &
401 8530 : default_c_val="", lone_keyword_c_val=tmc_default_unspecified_name)
402 8530 : CALL section_add_keyword(section, keyword)
403 8530 : CALL keyword_release(keyword)
404 :
405 : CALL keyword_create(keyword, __LOCATION__, name="PROB", &
406 : description="Defines the probability of the NMC move "// &
407 : "(considering the ration between the selected other moves) "// &
408 : "the probabilities of the move types in the NMC section "// &
409 : "defines only the weight within the NMC steps", &
410 : usage="PROB {real}", type_of_var=real_t, &
411 8530 : default_r_val=1.0_dp)
412 8530 : CALL section_add_keyword(section, keyword)
413 8530 : CALL keyword_release(keyword)
414 :
415 : CALL keyword_create(keyword, __LOCATION__, name="INIT_ACC_PROB", &
416 : description="Defines the initial probability of accepting the move. ", &
417 : usage="INIT_ACC_PROB {real}", type_of_var=real_t, &
418 8530 : default_r_val=0.5_dp, n_var=1)
419 8530 : CALL section_add_keyword(section, keyword)
420 8530 : CALL keyword_release(keyword)
421 :
422 : ! the moves types
423 8530 : CALL create_TMC_move_type_section(subsection)
424 8530 : CALL section_add_subsection(section, subsection)
425 8530 : CALL section_release(subsection)
426 8530 : END SUBROUTINE create_TMC_NMC_move_type_section
427 :
428 : ! **************************************************************************************************
429 : !> \brief creates the TMC section to select the move types
430 : !> \param section the section to be created
431 : !> \author Mandes
432 : ! **************************************************************************************************
433 17060 : SUBROUTINE create_TMC_move_type_section(section)
434 : TYPE(section_type), POINTER :: section
435 :
436 : TYPE(keyword_type), POINTER :: keyword
437 :
438 17060 : CPASSERT(.NOT. ASSOCIATED(section))
439 : CALL section_create(section, __LOCATION__, name="MOVE_TYPE", &
440 : description="This section specifies the TMC move type, "// &
441 : "and its properties. "// &
442 : "Selectable types are: "// &
443 : "ATOM_TRANS atom translation, "// &
444 : "MOL_TRANS molecule translation, "// &
445 : "MOL_ROT molecule rotation, "// &
446 : "PROT_REORDER proton reordering, "// &
447 : "PT_SWAP Parallel Tempering swap, "// &
448 : "VOL_MOVE volume change, "// &
449 : "ATOM_SWAP swaps two atoms of different type.", &
450 17060 : n_keywords=1, n_subsections=0, repeats=.TRUE.)
451 :
452 17060 : NULLIFY (keyword)
453 :
454 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
455 : description="The name of the move type described in this section.", &
456 17060 : usage="ATOM_TRANS", default_c_val="DEFAULT")
457 17060 : CALL section_add_keyword(section, keyword)
458 17060 : CALL keyword_release(keyword)
459 :
460 : CALL keyword_create(keyword, __LOCATION__, name="SIZE", &
461 : description="Defines the size of the move: "// &
462 : "ATOM_TRANS [A], "// &
463 : "MOL_TRANS [A], "// &
464 : "MOL_ROT [degree], "// &
465 : "PROT_REORDER [], "// &
466 : "VOL_MOVE [A], "// &
467 : "ATOM_SWAP", &
468 : usage="SIZE {real}", type_of_var=real_t, &
469 17060 : default_r_val=-1.0_dp, n_var=1)
470 17060 : CALL section_add_keyword(section, keyword)
471 17060 : CALL keyword_release(keyword)
472 :
473 : CALL keyword_create(keyword, __LOCATION__, name="PROB", &
474 : description="Defines the probability of the move "// &
475 : "(considering the ration between the selected moves)", &
476 : usage="PROB {real}", type_of_var=real_t, &
477 17060 : default_r_val=1.0_dp, n_var=1)
478 17060 : CALL section_add_keyword(section, keyword)
479 17060 : CALL keyword_release(keyword)
480 :
481 : CALL keyword_create(keyword, __LOCATION__, name="INIT_ACC_PROB", &
482 : description="Defines the initial probability of accepting the move. ", &
483 : usage="INIT_ACC_PROB {real}", type_of_var=real_t, &
484 17060 : default_r_val=0.23_dp, n_var=1)
485 17060 : CALL section_add_keyword(section, keyword)
486 17060 : CALL keyword_release(keyword)
487 :
488 : CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
489 : description="Defines the atomic kinds involved in the move. "// &
490 : "Up to now only used for the atom swap.", &
491 : usage="ATOMS {KIND1} {KIND2} ... ", type_of_var=char_t, &
492 17060 : n_var=-1, repeats=.TRUE.)
493 17060 : CALL section_add_keyword(section, keyword)
494 17060 : CALL keyword_release(keyword)
495 :
496 17060 : END SUBROUTINE create_TMC_move_type_section
497 :
498 : ! **************************************************************************************************
499 : !> \brief creates the TreeMonteCarlo subsection
500 : !> \param section the section to be created
501 : !> \author Mandes
502 : ! **************************************************************************************************
503 8530 : SUBROUTINE create_TMC_ana_section(section)
504 : TYPE(section_type), POINTER :: section
505 :
506 8530 : CPASSERT(.NOT. ASSOCIATED(section))
507 : CALL section_create(section, __LOCATION__, name="TMC_ANALYSIS", &
508 : description="Analysing the Markov Chain elements with the specified methods", &
509 8530 : n_keywords=1, n_subsections=1, repeats=.FALSE.)
510 :
511 8530 : CALL create_TMC_ana_kinds(section=section)
512 :
513 8530 : END SUBROUTINE create_TMC_ana_section
514 :
515 : ! **************************************************************************************************
516 : !> \brief creates the TreeMonteCarlo subsection
517 : !> \param section the section to be created
518 : !> \author Mandes
519 : ! **************************************************************************************************
520 8530 : SUBROUTINE create_TMC_ana_files(section)
521 : TYPE(section_type), POINTER :: section
522 :
523 : TYPE(keyword_type), POINTER :: keyword
524 :
525 8530 : NULLIFY (keyword)
526 :
527 8530 : CPASSERT(.NOT. ASSOCIATED(section))
528 : CALL section_create(section, __LOCATION__, name="TMC_ANALYSIS_FILES", &
529 : description="Analysing the Markov Chain elements with the specified methods, "// &
530 : "reading form default or specified files", &
531 8530 : n_keywords=1, n_subsections=1, repeats=.FALSE.)
532 :
533 8530 : CALL create_TMC_ana_kinds(section=section)
534 :
535 : CALL keyword_create(keyword, __LOCATION__, &
536 : name="NR_TEMPERATURE", &
537 : description="the number of different temperature for parallel tempering", &
538 : usage="NR_TEMP {INTEGER}", &
539 8530 : default_i_val=1)
540 8530 : CALL section_add_keyword(section, keyword)
541 8530 : CALL keyword_release(keyword)
542 :
543 : CALL keyword_create(keyword, __LOCATION__, &
544 : name="TEMPERATURE", &
545 : description="one temperature OR for parallel tempering: "// &
546 : "Tmin Tmax or each temperature T1 T2 T3 ..."// &
547 : " If every single temperature is specified, "// &
548 : "do NOT use keyword NR_TEMPERATURE", &
549 : usage="TEMPERATURE {REAL} |OR| TEMPERATURE {REAL} {REAL} ...", &
550 : default_r_vals=(/330.0_dp/), &
551 8530 : n_var=-1, type_of_var=real_t)
552 8530 : CALL section_add_keyword(section, keyword)
553 8530 : CALL keyword_release(keyword)
554 :
555 : CALL keyword_create(keyword, __LOCATION__, &
556 : name="DIRECTORIES", &
557 : description="Analysing multiple directories, "// &
558 : "created by standard parallel MC (e.g. using TMC farming ", &
559 : usage="DIRECTORIES {DIR1/} {DIR2/} ...", &
560 : default_c_vals=(/"./"/), &
561 17060 : n_var=-1, type_of_var=char_t)
562 8530 : CALL section_add_keyword(section, keyword)
563 8530 : CALL keyword_release(keyword)
564 :
565 : CALL keyword_create(keyword, __LOCATION__, name="FORCE_ENV_FILE", &
566 : description="input file name for force env, "// &
567 : "to get initial configuration with dimensions and cell", &
568 : usage="FORCE_ENV_FILE {filename}", &
569 8530 : default_c_val="", lone_keyword_c_val="")
570 8530 : CALL section_add_keyword(section, keyword)
571 8530 : CALL keyword_release(keyword)
572 :
573 : CALL keyword_create(keyword, __LOCATION__, name="POSITION_FILE", &
574 : description="file name for analysing the position file", &
575 : usage="POSITION_FILE {filename}", &
576 8530 : default_c_val="", lone_keyword_c_val="")
577 8530 : CALL section_add_keyword(section, keyword)
578 8530 : CALL keyword_release(keyword)
579 :
580 : CALL keyword_create(keyword, __LOCATION__, name="CELL_FILE", &
581 : description="file name for analysing the cell file", &
582 : usage="CELL_FILE {filename}", &
583 8530 : default_c_val="", lone_keyword_c_val="")
584 8530 : CALL section_add_keyword(section, keyword)
585 8530 : CALL keyword_release(keyword)
586 :
587 : CALL keyword_create(keyword, __LOCATION__, name="DIPOLE_FILE", &
588 : description="file name for analysing the dipole file", &
589 : usage="DIPOLE_FILE {filename}", &
590 8530 : default_c_val="", lone_keyword_c_val="")
591 8530 : CALL section_add_keyword(section, keyword)
592 8530 : CALL keyword_release(keyword)
593 :
594 : CALL keyword_create(keyword, __LOCATION__, &
595 : name="START_ELEM", &
596 : description="start analysis at element with number #", &
597 : usage="START_ELEM {INTEGER}", &
598 8530 : default_i_val=-1)
599 8530 : CALL section_add_keyword(section, keyword)
600 8530 : CALL keyword_release(keyword)
601 :
602 : CALL keyword_create(keyword, __LOCATION__, &
603 : name="END_ELEM", &
604 : description="end analysis at element with number #", &
605 : usage="END_ELEM {INTEGER}", &
606 8530 : default_i_val=-1)
607 8530 : CALL section_add_keyword(section, keyword)
608 8530 : CALL keyword_release(keyword)
609 :
610 8530 : END SUBROUTINE create_TMC_ana_files
611 :
612 : ! **************************************************************************************************
613 : !> \brief creates the TreeMonteCarlo subsection
614 : !> \param section the section to be created
615 : !> \author Mandes
616 : ! **************************************************************************************************
617 17060 : SUBROUTINE create_TMC_ana_kinds(section)
618 : TYPE(section_type), POINTER :: section
619 :
620 : TYPE(keyword_type), POINTER :: keyword
621 : TYPE(section_type), POINTER :: subsection
622 :
623 17060 : NULLIFY (subsection, keyword)
624 :
625 : CALL keyword_create(keyword, __LOCATION__, &
626 : name="RESTART", &
627 : description="Enables/disables the reading and writing of analysis restart files", &
628 : usage="RESTART {LOGICAL}", &
629 17060 : default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
630 17060 : CALL section_add_keyword(section, keyword)
631 17060 : CALL keyword_release(keyword)
632 :
633 : CALL keyword_create(keyword, __LOCATION__, name="PREFIX_ANA_FILES", &
634 : description="specifies a prefix for all analysis files.", &
635 : usage="ANA_FILES_PREFIX {prefix}", &
636 17060 : default_c_val="")
637 17060 : CALL section_add_keyword(section, keyword)
638 17060 : CALL keyword_release(keyword)
639 :
640 : CALL keyword_create(keyword, __LOCATION__, &
641 : name="DENSITY", &
642 : description="Mass density in the simulation cell, or if specified in sub cubes", &
643 : usage="DENSITY or DENSITY {INTEGER} {INTEGER} {INTEGER}", &
644 : default_i_vals=(/1/), &
645 17060 : n_var=-1, type_of_var=integer_t)
646 17060 : CALL section_add_keyword(section, keyword)
647 17060 : CALL keyword_release(keyword)
648 :
649 : CALL keyword_create(keyword, __LOCATION__, &
650 : name="G_R", &
651 : description="Radial Distribution Function for each pair of atoms "// &
652 : "using the amount of specified bins within MAX(cell_length)/2", &
653 : usage="G_R or G_R {INTEGER}", &
654 17060 : default_i_val=-1, lone_keyword_i_val=-1)
655 17060 : CALL section_add_keyword(section, keyword)
656 17060 : CALL keyword_release(keyword)
657 :
658 : CALL keyword_create(keyword, __LOCATION__, &
659 : name="CLASSICAL_DIPOLE_MOMENTS", &
660 : description="calculates the classical dipole Moment. "// &
661 : "Following flag specifies if they should be written. "// &
662 : "Class. Dip. Mom. are also used to unfold the exact dipole moment. ", &
663 : usage="CLASSICAL_DIPOLE_MOMENTS or CLASSICAL_DIPOLE_MOMENTS {LOGICAL}", &
664 17060 : default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
665 17060 : CALL section_add_keyword(section, keyword)
666 17060 : CALL keyword_release(keyword)
667 :
668 : ! for calculating the classical dipole moment we need charges
669 17060 : CALL create_CHARGE_section(subsection)
670 17060 : CALL section_add_subsection(section, subsection)
671 17060 : CALL section_release(subsection)
672 :
673 : CALL keyword_create(keyword, __LOCATION__, &
674 : name="DIPOLE_ANALYSIS", &
675 : description="Enables analysis of dipole moments, espacially dielectric constant. "// &
676 : "An additional type can be specified, e.g. analyzing ice structures. "// &
677 : "using SYM_XYZ also dipoles (-x,y,z) .. .. (-x,-y,z).... (-x,-y-z) "// &
678 : "are regarded, only use it if this configurations have "// &
679 : "all the same energy.", &
680 : usage="DIPOLE_ANALYSIS or DIPOLE_ANALYSIS {type}", &
681 17060 : default_c_val="", lone_keyword_c_val=tmc_default_unspecified_name)
682 17060 : CALL section_add_keyword(section, keyword)
683 17060 : CALL keyword_release(keyword)
684 :
685 : CALL keyword_create(keyword, __LOCATION__, &
686 : name="DEVIATION", &
687 : description="Calculates the deviation of the position from the last configuration", &
688 : usage="DEVIATION {LOGICAL}", &
689 17060 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
690 17060 : CALL section_add_keyword(section, keyword)
691 17060 : CALL keyword_release(keyword)
692 17060 : END SUBROUTINE create_TMC_ana_kinds
693 :
694 : END MODULE input_cp2k_tmc
|