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 : !> \brief function that build the dft section of the input
10 : !> \par History
11 : !> 10.2005 moved out of input_cp2k [fawzi]
12 : !> \author fawzi
13 : ! **************************************************************************************************
14 : MODULE input_cp2k_opt
15 : USE cp_output_handling, ONLY: add_last_numeric,&
16 : cp_print_key_section_create,&
17 : high_print_level,&
18 : silent_print_level
19 : USE input_constants, ONLY: &
20 : do_lri_opt_all, do_lri_opt_coeff, do_lri_opt_exps, embed_diff, embed_fa, &
21 : embed_grid_angstrom, embed_grid_bohr, embed_level_shift, embed_none, embed_quasi_newton, &
22 : embed_resp, embed_steep_desc, gaussian
23 : USE input_keyword_types, ONLY: keyword_create,&
24 : keyword_release,&
25 : keyword_type
26 : USE input_section_types, ONLY: section_add_keyword,&
27 : section_add_subsection,&
28 : section_create,&
29 : section_release,&
30 : section_type
31 : USE input_val_types, ONLY: integer_t,&
32 : lchar_t,&
33 : logical_t
34 : USE kinds, ONLY: dp
35 : USE string_utilities, ONLY: s2a
36 : #include "./base/base_uses.f90"
37 :
38 : IMPLICIT NONE
39 : PRIVATE
40 :
41 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'input_cp2k_opt'
42 :
43 : PUBLIC :: create_optimize_lri_basis_section
44 : PUBLIC :: create_optimize_embed
45 : PUBLIC :: create_optimize_dmfet
46 :
47 : CONTAINS
48 :
49 : ! **************************************************************************************************
50 : !> \brief input section for optimization of the auxililary basis for LRIGPW
51 : !> \param section the section to create
52 : !> \author Dorothea Golze [05.2014]
53 : ! **************************************************************************************************
54 8444 : SUBROUTINE create_optimize_lri_basis_section(section)
55 : TYPE(section_type), POINTER :: section
56 :
57 : TYPE(keyword_type), POINTER :: keyword
58 : TYPE(section_type), POINTER :: subsection
59 :
60 8444 : CPASSERT(.NOT. ASSOCIATED(section))
61 : CALL section_create(section, __LOCATION__, name="OPTIMIZE_LRI_BASIS", &
62 : description="This section specifies the parameters for optimizing "// &
63 : "the lri auxiliary basis sets for LRIGPW. The Powell optimizer is used.", &
64 8444 : n_keywords=1, n_subsections=0, repeats=.FALSE.)
65 :
66 8444 : NULLIFY (keyword, subsection)
67 :
68 : CALL keyword_create(keyword, __LOCATION__, name="ACCURACY", &
69 : description="Target accuracy for the objective function (RHOEND)", &
70 8444 : usage="ACCURACY 5.0E-4", default_r_val=1.0E-5_dp)
71 8444 : CALL section_add_keyword(section, keyword)
72 8444 : CALL keyword_release(keyword)
73 :
74 : CALL keyword_create(keyword, __LOCATION__, name="MAX_FUN", &
75 : description="Maximum number of function evaluations", &
76 8444 : usage="MAX_FUN 200", default_i_val=4000)
77 8444 : CALL section_add_keyword(section, keyword)
78 8444 : CALL keyword_release(keyword)
79 :
80 : CALL keyword_create(keyword, __LOCATION__, name="STEP_SIZE", &
81 : description="Initial step size for search algorithm (RHOBEG)", &
82 8444 : usage="STEP_SIZE 1.0E-1", default_r_val=5.0E-2_dp)
83 8444 : CALL section_add_keyword(section, keyword)
84 8444 : CALL keyword_release(keyword)
85 :
86 : CALL keyword_create(keyword, __LOCATION__, name="CONDITION_WEIGHT", &
87 : description="This keyword allows to give different weight "// &
88 : "factors to the condition number (LOG(cond) is used).", &
89 8444 : usage="CONDITION_WEIGHT 1.0E-4", default_r_val=1.0E-6_dp)
90 8444 : CALL section_add_keyword(section, keyword)
91 8444 : CALL keyword_release(keyword)
92 :
93 : CALL keyword_create(keyword, __LOCATION__, name="USE_CONDITION_NUMBER", &
94 : description="Determines whether condition number should be part "// &
95 : "of optimization or not", &
96 : usage="USE_CONDITION_NUMBER", &
97 8444 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
98 8444 : CALL section_add_keyword(section, keyword)
99 8444 : CALL keyword_release(keyword)
100 :
101 : CALL keyword_create(keyword, __LOCATION__, name="GEOMETRIC_SEQUENCE", &
102 : description="Exponents are assumed to be a geometric sequence. "// &
103 : "Only the minimal and maximal exponents of one set are optimized and "// &
104 : "the other exponents are obtained by geometric progression.", &
105 : usage="GEOMETRIC_SEQUENCE", &
106 8444 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
107 8444 : CALL section_add_keyword(section, keyword)
108 8444 : CALL keyword_release(keyword)
109 :
110 : CALL keyword_create(keyword, __LOCATION__, name="DEGREES_OF_FREEDOM", &
111 : description="Specifies the degrees of freedom in the basis "// &
112 : "optimization.", &
113 : usage="DEGREES_OF_FREEDOM ALL", &
114 : enum_c_vals=s2a("ALL", "COEFFICIENTS", "EXPONENTS"), &
115 : enum_desc=s2a("Set all parameters in the basis to be variable.", &
116 : "Set all coefficients in the basis set to be variable.", &
117 : "Set all exponents in the basis to be variable."), &
118 : enum_i_vals=(/do_lri_opt_all, do_lri_opt_coeff, do_lri_opt_exps/), &
119 8444 : default_i_val=do_lri_opt_exps)
120 8444 : CALL section_add_keyword(section, keyword)
121 8444 : CALL keyword_release(keyword)
122 :
123 8444 : CALL create_constrain_exponents_section(subsection)
124 8444 : CALL section_add_subsection(section, subsection)
125 8444 : CALL section_release(subsection)
126 :
127 8444 : END SUBROUTINE create_optimize_lri_basis_section
128 :
129 : ! **************************************************************************************************
130 : !> \brief Input for DFT embedding
131 : !> \param section ...
132 : !> \author Vladimir Rybkin [08.2017]
133 : ! **************************************************************************************************
134 8444 : SUBROUTINE create_optimize_embed(section)
135 : TYPE(section_type), POINTER :: section
136 :
137 : TYPE(keyword_type), POINTER :: keyword
138 :
139 8444 : CPASSERT(.NOT. ASSOCIATED(section))
140 : CALL section_create(section, __LOCATION__, name="OPT_EMBED", &
141 : description="This section specifies optional parameters for DFT embedding potential optimization.", &
142 8444 : n_keywords=19, n_subsections=4, repeats=.FALSE.)
143 :
144 8444 : NULLIFY (keyword)
145 :
146 : CALL keyword_create(keyword, __LOCATION__, name="REG_LAMBDA", &
147 : description="Parameter for Yang's regularization "// &
148 : "involving kinetic matrix.", &
149 8444 : usage="REG_LAMBDA 0.0001", default_r_val=0.0001_dp)
150 8444 : CALL section_add_keyword(section, keyword)
151 8444 : CALL keyword_release(keyword)
152 :
153 : CALL keyword_create(keyword, __LOCATION__, name="N_ITER", &
154 : description="Maximum number of iterations "// &
155 : "in the optimization procedure.", &
156 8444 : usage="N_ITER 75", default_i_val=50)
157 8444 : CALL section_add_keyword(section, keyword)
158 8444 : CALL keyword_release(keyword)
159 :
160 : CALL keyword_create(keyword, __LOCATION__, name="TRUST_RAD", &
161 : description="Maximum number of iterations "// &
162 : "in the optimization procedure.", &
163 8444 : usage="TRUST_RAD 0.5", default_r_val=0.5_dp)
164 8444 : CALL section_add_keyword(section, keyword)
165 8444 : CALL keyword_release(keyword)
166 :
167 : CALL keyword_create(keyword, __LOCATION__, name="DENS_CONV_MAX", &
168 : description="Convergence criterion for "// &
169 : "the maximum electron density difference.", &
170 8444 : usage="DENS_CONV_MAX 0.01", default_r_val=0.01_dp)
171 8444 : CALL section_add_keyword(section, keyword)
172 8444 : CALL keyword_release(keyword)
173 :
174 : CALL keyword_create(keyword, __LOCATION__, name="DENS_CONV_INT", &
175 : description="Convergence criterion for "// &
176 : "the integrated electron density difference.", &
177 8444 : usage="DENS_CONV_INT 0.1", default_r_val=0.1_dp)
178 8444 : CALL section_add_keyword(section, keyword)
179 8444 : CALL keyword_release(keyword)
180 :
181 : CALL keyword_create(keyword, __LOCATION__, name="SPIN_DENS_CONV_MAX", &
182 : description="Convergence criterion for "// &
183 : "the maximum electron density difference.", &
184 8444 : usage="DENS_CONV_MAX 0.01", default_r_val=0.01_dp)
185 8444 : CALL section_add_keyword(section, keyword)
186 8444 : CALL keyword_release(keyword)
187 :
188 : CALL keyword_create(keyword, __LOCATION__, name="SPIN_DENS_CONV_INT", &
189 : description="Convergence criterion for "// &
190 : "the integrated electron density difference.", &
191 8444 : usage="DENS_CONV_INT 0.1", default_r_val=0.1_dp)
192 8444 : CALL section_add_keyword(section, keyword)
193 8444 : CALL keyword_release(keyword)
194 :
195 : CALL keyword_create(keyword, __LOCATION__, name="OPTIMIZER", &
196 : description="Optimize embedding potential.", &
197 : usage="OPTIMIZER LEVEL_SHIFT", &
198 : default_i_val=embed_steep_desc, &
199 : enum_c_vals=s2a("STEEPEST_DESCENT", "QUASI_NEWTON", "LEVEL_SHIFT"), &
200 : enum_desc=s2a("Steepest descent.", "Quasi-Newton.", "Level shift."), &
201 8444 : enum_i_vals=(/embed_steep_desc, embed_quasi_newton, embed_level_shift/))
202 8444 : CALL section_add_keyword(section, keyword)
203 8444 : CALL keyword_release(keyword)
204 :
205 : CALL keyword_create(keyword, __LOCATION__, name="GRID_OPT", &
206 : description="Optimize embedding potential on the grid. ", &
207 : usage="GRID_OPT .TRUE.", &
208 8444 : default_l_val=.TRUE.)
209 8444 : CALL section_add_keyword(section, keyword)
210 8444 : CALL keyword_release(keyword)
211 :
212 : CALL keyword_create(keyword, __LOCATION__, name="LEEUWEN-BAERENDS", &
213 : description="Van Leeuwen-Baerends iterative update. Alternative to Wu-Yang "// &
214 : "optimizer. Use only with ADD_CONTST_POT.", &
215 : usage="LEEUWEN-BAERENDS .TRUE.", &
216 8444 : default_l_val=.FALSE.)
217 8444 : CALL section_add_keyword(section, keyword)
218 8444 : CALL keyword_release(keyword)
219 :
220 : CALL keyword_create(keyword, __LOCATION__, name="FAB", &
221 : description="Finzel-Ayers-Bultinck iterative update. Generally, not reliable. ", &
222 : usage="FAB .TRUE.", &
223 8444 : default_l_val=.FALSE.)
224 8444 : CALL section_add_keyword(section, keyword)
225 8444 : CALL keyword_release(keyword)
226 :
227 : CALL keyword_create(keyword, __LOCATION__, name="VW_CUTOFF", &
228 : description="Cutoff for von Weizsacker potential in "// &
229 : "the FAB optimization procedure.", &
230 8444 : usage="VW_CUTOFF 0.01", default_r_val=0.01_dp)
231 8444 : CALL section_add_keyword(section, keyword)
232 8444 : CALL keyword_release(keyword)
233 :
234 : CALL keyword_create(keyword, __LOCATION__, name="VW_SMOOTH_CUT_RANGE", &
235 : description="Smooth cutoff range for von Weizsacker potential in "// &
236 : "the FAB optimization procedure.", &
237 8444 : usage="VW_CUTOFF 1.0", default_r_val=1.0_dp)
238 8444 : CALL section_add_keyword(section, keyword)
239 8444 : CALL keyword_release(keyword)
240 :
241 : CALL keyword_create(keyword, __LOCATION__, name="POT_GUESS", &
242 : description="Specifies the guess of the embedding "// &
243 : "potential. For optimization in finite basis (not grid optimization) "// &
244 : "in is a constant part to be added to the one in finite basis. ", &
245 : usage="DEGREES_OF_FREEDOM ALL", &
246 : enum_c_vals=s2a("NONE", "DIFF", "Fermi_Amaldi", "RESP"), &
247 : enum_desc=s2a("Initial guess is zero grid.", &
248 : "Initial density difference. A euristic but working approach.", &
249 : "Fermi-Amaldi potential. More rigorous than DIFF, although less efficient.", &
250 : "Coulomb interaction between the subsystem using RESP charges)"// &
251 : " on the total system."), &
252 : enum_i_vals=(/embed_none, embed_diff, embed_fa, embed_resp/), &
253 8444 : default_i_val=embed_none)
254 8444 : CALL section_add_keyword(section, keyword)
255 8444 : CALL keyword_release(keyword)
256 :
257 : CALL keyword_create(keyword, __LOCATION__, name="CHARGE_DISTR_WIDTH", &
258 : description="Width of the Gaussian representing "// &
259 : "point charges. To be used with ADD_COULOMB_POT.", &
260 8444 : usage="CHARGE_DISTR_WIDTH 3.000", default_r_val=1.12490_dp)
261 8444 : CALL section_add_keyword(section, keyword)
262 8444 : CALL keyword_release(keyword)
263 :
264 : CALL keyword_create(keyword, __LOCATION__, name="READ_EMBED_POT", &
265 : description="Read the embedding potential "// &
266 : "restart vector as a guess.", &
267 8444 : usage="READ_EMBED_POT .FALSE.", default_l_val=.FALSE.)
268 8444 : CALL section_add_keyword(section, keyword)
269 8444 : CALL keyword_release(keyword)
270 :
271 : CALL keyword_create(keyword, __LOCATION__, name="READ_EMBED_POT_CUBE", &
272 : description="Read the embedding potential "// &
273 : "(restart) from the cube file.", &
274 8444 : usage="READ_EMBED_POT_CUBE .FALSE.", default_l_val=.FALSE.)
275 8444 : CALL section_add_keyword(section, keyword)
276 8444 : CALL keyword_release(keyword)
277 :
278 : CALL keyword_create(keyword, __LOCATION__, name="EMBED_RESTART_FILE_NAME", &
279 : description="Root of the file name where to read the embedding "// &
280 : "potential guess.", &
281 : usage="EMBED_RESTART_FILE_NAME <FILENAME>", &
282 8444 : type_of_var=lchar_t)
283 8444 : CALL section_add_keyword(section, keyword)
284 8444 : CALL keyword_release(keyword)
285 :
286 : CALL keyword_create(keyword, __LOCATION__, name="EMBED_CUBE_FILE_NAME", &
287 : description="Root of the file name where to read the embedding "// &
288 : "potential (guess) as a cube.", &
289 : usage="EMBED_CUBE_FILE_NAME <FILENAME>", &
290 8444 : type_of_var=lchar_t)
291 8444 : CALL section_add_keyword(section, keyword)
292 8444 : CALL keyword_release(keyword)
293 :
294 : CALL keyword_create(keyword, __LOCATION__, name="EMBED_SPIN_CUBE_FILE_NAME", &
295 : description="Root of the file name where to read the spin part "// &
296 : "of the embedding potential (guess) as a cube.", &
297 : usage="EMBED_SPIN_CUBE_FILE_NAME <FILENAME>", &
298 8444 : type_of_var=lchar_t)
299 8444 : CALL section_add_keyword(section, keyword)
300 8444 : CALL keyword_release(keyword)
301 :
302 8444 : CALL create_print_embed_diff(section)
303 :
304 8444 : CALL create_print_embed_pot_cube(section)
305 :
306 8444 : CALL create_print_embed_restart_vec(section)
307 :
308 8444 : CALL create_print_simple_grid(section)
309 :
310 8444 : END SUBROUTINE create_optimize_embed
311 :
312 : ! **************************************************************************************************
313 : !> \brief Input for density matrix functional embedding, DMFET
314 : !> \param section ...
315 : !> \author Vladimir Rybkin [08.2018]
316 : ! **************************************************************************************************
317 8444 : SUBROUTINE create_optimize_dmfet(section)
318 : TYPE(section_type), POINTER :: section
319 :
320 : TYPE(keyword_type), POINTER :: keyword
321 :
322 8444 : CPASSERT(.NOT. ASSOCIATED(section))
323 : CALL section_create(section, __LOCATION__, name="OPT_DMFET", &
324 : description="This section specifies optional parameters for DMFET matrix potential optimization.", &
325 8444 : n_keywords=8, n_subsections=4, repeats=.FALSE.)
326 :
327 8444 : NULLIFY (keyword)
328 :
329 : CALL keyword_create(keyword, __LOCATION__, name="N_ITER", &
330 : description="Maximum number of iterations "// &
331 : "in the optimization procedure.", &
332 8444 : usage="N_ITER 75", default_i_val=50)
333 8444 : CALL section_add_keyword(section, keyword)
334 8444 : CALL keyword_release(keyword)
335 :
336 : CALL keyword_create(keyword, __LOCATION__, name="TRUST_RAD", &
337 : description="Step length "// &
338 : "in the optimization procedure.", &
339 8444 : usage="TRUST_RAD 0.5", default_r_val=0.5_dp)
340 8444 : CALL section_add_keyword(section, keyword)
341 8444 : CALL keyword_release(keyword)
342 :
343 : CALL keyword_create(keyword, __LOCATION__, name="DM_CONV_MAX", &
344 : description="Convergence criterion for "// &
345 : "the maximum element of density matrix difference.", &
346 8444 : usage="DM_CONV_MAX 0.01", default_r_val=0.01_dp)
347 8444 : CALL section_add_keyword(section, keyword)
348 8444 : CALL keyword_release(keyword)
349 :
350 : CALL keyword_create(keyword, __LOCATION__, name="DM_CONV_INT", &
351 : description="Convergence criterion for "// &
352 : "the total density matrix difference.", &
353 8444 : usage="DM_CONV_INT 0.1", default_r_val=0.1_dp)
354 8444 : CALL section_add_keyword(section, keyword)
355 8444 : CALL keyword_release(keyword)
356 :
357 : CALL keyword_create(keyword, __LOCATION__, name="BETA_DM_CONV_MAX", &
358 : description="Convergence criterion for "// &
359 : "the maximum element of the beta-spin density "// &
360 : "matrix difference.", &
361 8444 : usage="DM_CONV_MAX 0.01", default_r_val=0.01_dp)
362 8444 : CALL section_add_keyword(section, keyword)
363 8444 : CALL keyword_release(keyword)
364 :
365 : CALL keyword_create(keyword, __LOCATION__, name="BETA_DM_CONV_INT", &
366 : description="Convergence criterion for "// &
367 : "the total beta-spin density matrix difference.", &
368 8444 : usage="DM_CONV_INT 0.1", default_r_val=0.1_dp)
369 8444 : CALL section_add_keyword(section, keyword)
370 8444 : CALL keyword_release(keyword)
371 :
372 : CALL keyword_create(keyword, __LOCATION__, name="READ_DMFET_POT", &
373 : description="Read the matrix embedding potential "// &
374 : "(restart) from the cube file.", &
375 8444 : usage="READ_DMFET_POT .FALSE.", default_l_val=.FALSE.)
376 8444 : CALL section_add_keyword(section, keyword)
377 8444 : CALL keyword_release(keyword)
378 :
379 : CALL keyword_create(keyword, __LOCATION__, name="DMFET_RESTART_FILE_NAME", &
380 : description="Root of the file name where to read the matrix "// &
381 : "potential guess.", &
382 : usage="DMFET_RESTART_FILE_NAME <FILENAME>", &
383 8444 : type_of_var=lchar_t)
384 8444 : CALL section_add_keyword(section, keyword)
385 8444 : CALL keyword_release(keyword)
386 :
387 8444 : END SUBROUTINE create_optimize_dmfet
388 :
389 : ! **************************************************************************************************
390 : !> \brief ...
391 : !> \param section ...
392 : ! **************************************************************************************************
393 8444 : SUBROUTINE create_print_embed_diff(section)
394 : TYPE(section_type), POINTER :: section
395 :
396 : TYPE(keyword_type), POINTER :: keyword
397 : TYPE(section_type), POINTER :: print_key
398 :
399 8444 : NULLIFY (print_key, keyword)
400 : CALL cp_print_key_section_create(print_key, __LOCATION__, "EMBED_DENS_DIFF", &
401 : description="Controls the printing of cube files with "// &
402 : "embedding densisty differences", &
403 8444 : print_level=high_print_level, add_last=add_last_numeric, filename="")
404 : CALL keyword_create(keyword, __LOCATION__, name="stride", &
405 : description="The stride (X,Y,Z) used to write the cube file "// &
406 : "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
407 : " 1 number valid for all components.", &
408 8444 : usage="STRIDE 2 2 2", n_var=-1, default_i_vals=(/2, 2, 2/), type_of_var=integer_t)
409 8444 : CALL section_add_keyword(print_key, keyword)
410 8444 : CALL keyword_release(keyword)
411 :
412 8444 : CALL section_add_subsection(section, print_key)
413 8444 : CALL section_release(print_key)
414 :
415 8444 : END SUBROUTINE create_print_embed_diff
416 :
417 : ! **************************************************************************************************
418 : !> \brief ...
419 : !> \param section ...
420 : ! **************************************************************************************************
421 8444 : SUBROUTINE create_print_embed_pot_cube(section)
422 : TYPE(section_type), POINTER :: section
423 :
424 : TYPE(keyword_type), POINTER :: keyword
425 : TYPE(section_type), POINTER :: print_key
426 :
427 8444 : NULLIFY (print_key, keyword)
428 : CALL cp_print_key_section_create(print_key, __LOCATION__, "EMBED_POT_CUBE", &
429 : description="Controls the printing of cube files with "// &
430 : "with embedding potential", &
431 8444 : print_level=high_print_level, add_last=add_last_numeric, filename="")
432 : CALL keyword_create(keyword, __LOCATION__, name="stride", &
433 : description="The stride (X,Y,Z) used to write the cube file "// &
434 : "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
435 : " 1 number valid for all components.", &
436 8444 : usage="STRIDE 1 1 1", n_var=-1, default_i_vals=(/1, 1, 1/), type_of_var=integer_t)
437 8444 : CALL section_add_keyword(print_key, keyword)
438 8444 : CALL keyword_release(keyword)
439 :
440 8444 : CALL section_add_subsection(section, print_key)
441 8444 : CALL section_release(print_key)
442 :
443 8444 : END SUBROUTINE create_print_embed_pot_cube
444 :
445 : ! **************************************************************************************************
446 : !> \brief ...
447 : !> \param section ...
448 : ! **************************************************************************************************
449 8444 : SUBROUTINE create_print_embed_restart_vec(section)
450 : TYPE(section_type), POINTER :: section
451 :
452 : TYPE(section_type), POINTER :: print_key
453 :
454 8444 : NULLIFY (print_key)
455 : CALL cp_print_key_section_create(print_key, __LOCATION__, "EMBED_POT_VECTOR", &
456 : description="Controls the printing of cube files with "// &
457 : "with embedding potential", &
458 8444 : print_level=silent_print_level, add_last=add_last_numeric, filename="")
459 8444 : CALL section_add_subsection(section, print_key)
460 8444 : CALL section_release(print_key)
461 :
462 8444 : END SUBROUTINE create_print_embed_restart_vec
463 :
464 : ! **************************************************************************************************
465 : !> \brief ...
466 : !> \param section ...
467 : ! **************************************************************************************************
468 8444 : SUBROUTINE create_print_simple_grid(section)
469 : TYPE(section_type), POINTER :: section
470 :
471 : TYPE(keyword_type), POINTER :: keyword
472 : TYPE(section_type), POINTER :: print_key
473 :
474 8444 : NULLIFY (print_key, keyword)
475 : CALL cp_print_key_section_create(print_key, __LOCATION__, "WRITE_SIMPLE_GRID", &
476 : description="Controls the printing of simple grid "// &
477 : "files with embedding potential: X Y Z value", &
478 8444 : print_level=high_print_level, add_last=add_last_numeric, filename="")
479 :
480 : CALL keyword_create(keyword, __LOCATION__, name="STRIDE", &
481 : description="The stride (X,Y,Z) used to write the cube file "// &
482 : "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
483 : " 1 number valid for all components.", &
484 8444 : usage="STRIDE 1 1 1", n_var=-1, default_i_vals=(/1, 1, 1/), type_of_var=integer_t)
485 8444 : CALL section_add_keyword(print_key, keyword)
486 8444 : CALL keyword_release(keyword)
487 :
488 : CALL keyword_create(keyword, __LOCATION__, name="UNITS", &
489 : description="Units of the volumetric file: Angstrom or Bohr.", &
490 : usage="UNITS BOHR", &
491 : default_i_val=embed_grid_bohr, &
492 : enum_c_vals=s2a("BOHR", "ANGSTROM"), &
493 : enum_desc=s2a("Atomic units: Bohr", "Metric units: Angstrom."), &
494 8444 : enum_i_vals=(/embed_grid_bohr, embed_grid_angstrom/))
495 8444 : CALL section_add_keyword(print_key, keyword)
496 8444 : CALL keyword_release(keyword)
497 :
498 : CALL keyword_create(keyword, __LOCATION__, name="FOLD_COORD", &
499 : description="Activates printing folded coordinates corresponding "// &
500 : "to the simple grid. Used as input for external programs.", &
501 : usage="FOLD_COORD .TRUE.", n_var=1, type_of_var=logical_t, &
502 8444 : default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
503 8444 : CALL section_add_keyword(print_key, keyword)
504 :
505 8444 : CALL keyword_release(keyword)
506 8444 : CALL section_add_subsection(section, print_key)
507 8444 : CALL section_release(print_key)
508 :
509 8444 : END SUBROUTINE create_print_simple_grid
510 :
511 : ! **************************************************************************************************
512 : !> \brief input section for constraints for auxiliary basis set optimization
513 : !> \param section the section to create
514 : !> \author Dorothea Golze [11.2014]
515 : ! **************************************************************************************************
516 8444 : SUBROUTINE create_constrain_exponents_section(section)
517 : TYPE(section_type), POINTER :: section
518 :
519 : TYPE(keyword_type), POINTER :: keyword
520 :
521 : CALL section_create(section, __LOCATION__, name="CONSTRAIN_EXPONENTS", &
522 : description="specifies constraints for the exponents of the "// &
523 : "lri auxiliary basis sets in the optimization.", &
524 8444 : n_keywords=1, n_subsections=0, repeats=.FALSE.)
525 :
526 8444 : NULLIFY (keyword)
527 :
528 : CALL keyword_create(keyword, __LOCATION__, name="SCALE", &
529 : description="Defines the upper and lower boundaries as "// &
530 : "(1+scale)*exp and (1-scale)*exp. Fermi-like constraint "// &
531 : "function", &
532 8444 : usage="SCALE 0.3", default_r_val=0.3_dp)
533 8444 : CALL section_add_keyword(section, keyword)
534 8444 : CALL keyword_release(keyword)
535 :
536 : CALL keyword_create(keyword, __LOCATION__, name="FERMI_EXP", &
537 : description="Exponent in the fermi-like constraint function. ", &
538 8444 : usage="FERMI_EXP 2.63", default_r_val=2.63391_dp)
539 8444 : CALL section_add_keyword(section, keyword)
540 8444 : CALL keyword_release(keyword)
541 :
542 8444 : END SUBROUTINE create_constrain_exponents_section
543 :
544 : END MODULE input_cp2k_opt
|