(git:e8f5963)
Loading...
Searching...
No Matches
input_cp2k_as.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2026 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8! **************************************************************************************************
9!> \brief function that build the active space section of the input
10!> \par History
11!> 10.2005 moved out of input_cp2k [fawzi]
12!> 07.2024 moved out of input_cp2k_dft [JGH]
13!> \author fawzi
14! **************************************************************************************************
22 USE input_constants, ONLY: &
37 USE input_val_types, ONLY: char_t,&
38 integer_t,&
39 lchar_t,&
40 logical_t,&
41 real_t
42 USE kinds, ONLY: dp
44 USE string_utilities, ONLY: s2a
45#include "./base/base_uses.f90"
46
47 IMPLICIT NONE
48 PRIVATE
49
50 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'input_cp2k_as'
51
53
54CONTAINS
55
56! **************************************************************************************************
57!> \brief Create CP2K input section for the calculation of an active space Hamiltonian
58!> \param section ...
59!> \par History:
60!> - Creation 06.04.2016
61!> \author JHU
62! **************************************************************************************************
63 SUBROUTINE create_active_space_section(section)
64
65 TYPE(section_type), POINTER :: section
66
67 TYPE(keyword_type), POINTER :: keyword
68 TYPE(section_type), POINTER :: print_key, subsection
69
70 cpassert(.NOT. ASSOCIATED(section))
71
72 CALL section_create(section, __location__, name="ACTIVE_SPACE", &
73 description="Define parameters and method to calculate an electronic active space", &
74 n_keywords=1, n_subsections=0, repeats=.false.)
75
76 NULLIFY (keyword, subsection, print_key)
77
78 CALL keyword_create(keyword, __location__, &
79 name="_SECTION_PARAMETERS_", &
80 description="Controls the activation of the ACTIVE_SPACE section", &
81 usage="&ACTIVE_SPACE ON", &
82 default_l_val=.false., &
83 lone_keyword_l_val=.true.)
84 CALL section_add_keyword(section, keyword)
85 CALL keyword_release(keyword)
86
87 CALL keyword_create(keyword, __location__, name="ACTIVE_ELECTRONS", &
88 description="The number of active electrons in the CAS space", &
89 usage="ACTIVE_ELECTRONS 4", n_var=1, default_i_val=-1, type_of_var=integer_t)
90 CALL section_add_keyword(section, keyword)
91 CALL keyword_release(keyword)
92
93 CALL keyword_create(keyword, __location__, name="ACTIVE_ORBITALS", &
94 description="The number of active orbitals defining the CAS space.", &
95 usage="ACTIVE_ORBITALS 2", n_var=1, default_i_val=-1, type_of_var=integer_t)
96 CALL section_add_keyword(section, keyword)
97 CALL keyword_release(keyword)
98
99 CALL keyword_create(keyword, __location__, name="ACTIVE_ORBITAL_INDICES", &
100 description="The indices of the active orbitals. Requires ORBITAL_SELECTION MANUAL! "// &
101 "Need to be as many indices as active orbitals times the number of spin "// &
102 "channels (2 if ROKS or UKS/LSD else 1).", &
103 usage="ACTIVE_ORBITAL_INDICES 2 3 {...}", n_var=-1, default_i_vals=[-1], &
104 type_of_var=integer_t)
105 CALL section_add_keyword(section, keyword)
106 CALL keyword_release(keyword)
107
108 CALL cp_print_key_section_create(print_key, __location__, "FCIDUMP", &
109 description="Controls the writing of a file in FCIDUMP format.", &
110 print_level=high_print_level, filename="")
111 CALL section_add_subsection(section, print_key)
112 CALL section_release(print_key)
113
114 CALL keyword_create(keyword, __location__, name="ORBITAL_SELECTION", &
115 description="Method used to select active space orbitals.", &
116 usage="ORBITAL_SELECTION CANONICAL", &
117 default_i_val=casci_canonical, &
118 enum_c_vals=s2a("CANONICAL", "WANNIER_PROJECTION", "MAO", "MANUAL"), &
120 enum_desc=s2a("Select orbitals using energy ordering of canoncial orbitals", &
121 "Select orbitals from projected Wannier functions", &
122 "Select orbitals from modified atomic orbitals", &
123 "Select orbitals manually via ACTIVE_ORBITAL_INDICES"))
124
125 CALL section_add_keyword(section, keyword)
126 CALL keyword_release(keyword)
127
128 CALL keyword_create(keyword, __location__, name="SUBSPACE_ATOM", &
129 description="Number of atom that defines the subspace to be projected on.", &
130 usage="SUBSPACE_ATOM x", default_i_val=-1, &
131 type_of_var=integer_t)
132 CALL section_add_keyword(section, keyword)
133 CALL keyword_release(keyword)
134
135 CALL keyword_create(keyword, __location__, name="SUBSPACE_SHELL", &
136 description="Shell definition for subsapce.", &
137 usage="SUBSPACE_SHELL 3d4s", default_c_val="X", &
138 type_of_var=char_t)
139 CALL section_add_keyword(section, keyword)
140 CALL keyword_release(keyword)
141
142 CALL keyword_create(keyword, __location__, name="SCF_EMBEDDING", &
143 description="Whether to turn on the self-consistent embedding scheme", &
144 default_l_val=.false., lone_keyword_l_val=.false.)
145 CALL section_add_keyword(section, keyword)
146 CALL keyword_release(keyword)
147
148 CALL keyword_create(keyword, __location__, name="QCSCHEMA", &
149 description="Name of the QCSchema file, may include a path", &
150 usage="QCSCHEMA <FILENAME>", &
151 type_of_var=lchar_t, repeats=.false., &
152 default_lc_val="")
153 CALL section_add_keyword(section, keyword)
154 CALL keyword_release(keyword)
155
156 CALL keyword_create(keyword, __location__, name="AS_SOLVER", &
157 description="The active space solver for the embedding approach", &
158 usage="AS_SOLVER FCI", &
159 default_i_val=no_solver, &
160 enum_c_vals=s2a("NONE", "QISKIT", "FCI"), &
161 enum_i_vals=[no_solver, qiskit_solver, fci_solver], &
162 enum_desc=s2a("NO solver, used to produce FCIDUMP/QCSchema files", &
163 "QISKIT active space solver", &
164 "LibFCI full-CI active space solver"))
165 CALL section_add_keyword(section, keyword)
166 CALL keyword_release(keyword)
167
168 CALL keyword_create(keyword, __location__, name="EPS_ITER", &
169 description="Energy convergence threshold of the DFT embedding scheme.", &
170 usage="EPS_ITER 1.0E-6 ", type_of_var=real_t, &
171 default_r_val=1.0e-6_dp)
172 CALL section_add_keyword(section, keyword)
173 CALL keyword_release(keyword)
174
175 CALL keyword_create(keyword, __location__, name="ALPHA", &
176 description="Fraction of new density to be mixed with previous one in SCF embedding. "// &
177 "Kept for backwards compatibility; prefer ACTIVE_SPACE%MIXING%ALPHA.", &
178 usage="ALPHA 0.25", type_of_var=real_t, &
179 default_r_val=0.8_dp)
180 CALL section_add_keyword(section, keyword)
181 CALL keyword_release(keyword)
182
183 CALL keyword_create(keyword, __location__, name="MAX_ITER", &
184 description="Max number of iterations for the DFT embedding scheme.", &
185 usage="MAX_ITER 50", type_of_var=integer_t, &
186 default_i_val=50)
187 CALL section_add_keyword(section, keyword)
188 CALL keyword_release(keyword)
189
190 CALL create_print_orb_section(subsection)
191 CALL section_add_subsection(section, subsection)
192 CALL section_release(subsection)
193
194 CALL create_eri_section(subsection)
195 CALL section_add_subsection(section, subsection)
196 CALL section_release(subsection)
197
198 CALL create_eri_gpw(subsection)
199 CALL section_add_subsection(section, subsection)
200 CALL section_release(subsection)
201
202 CALL create_localize_section(subsection)
203 CALL section_add_subsection(section, subsection)
204 CALL section_release(subsection)
205
206 CALL create_mixing_section(subsection)
207 CALL section_add_subsection(section, subsection)
208 CALL section_release(subsection)
209
210 CALL create_socket_section(subsection)
211 CALL section_add_subsection(section, subsection)
212 CALL section_release(subsection)
213
214 CALL create_xc_section(subsection)
215 CALL section_add_subsection(section, subsection)
216 CALL section_release(subsection)
217
218 END SUBROUTINE create_active_space_section
219
220! **************************************************************************************************
221!> \brief ...
222!> \param section ...
223! **************************************************************************************************
224 SUBROUTINE create_socket_section(section)
225 TYPE(section_type), POINTER :: section
226
227 TYPE(keyword_type), POINTER :: keyword
228
229 cpassert(.NOT. ASSOCIATED(section))
230 CALL section_create(section, __location__, name="SOCKET", &
231 description="Parameters to set up the socket communicating to the external active space solver.", &
232 n_keywords=3, n_subsections=0, repeats=.false.)
233
234 NULLIFY (keyword)
235 CALL keyword_create(keyword, __location__, name="INET", &
236 description="Use an INET socket rather than a UNIX socket.", &
237 usage="INET <LOGICAL>", &
238 default_l_val=.false., lone_keyword_l_val=.true.)
239 CALL section_add_keyword(section, keyword)
240 CALL keyword_release(keyword)
241
242 CALL keyword_create(keyword, __location__, name="PORT", &
243 description="Port number for the socket client.", &
244 usage="port <INTEGER>", &
245 default_i_val=12345)
246 CALL section_add_keyword(section, keyword)
247 CALL keyword_release(keyword)
248
249 CALL keyword_create(keyword, __location__, name="HOST", &
250 description="Host name for the socket client.", &
251 usage="host <HOSTNAME>", &
252 default_c_val="embedding_socket")
253 CALL section_add_keyword(section, keyword)
254 CALL keyword_release(keyword)
255
256 END SUBROUTINE create_socket_section
257
258! **************************************************************************************************
259!> \brief ...
260!> \param section ...
261! **************************************************************************************************
262 SUBROUTINE create_print_orb_section(section)
263 TYPE(section_type), POINTER :: section
264
265 TYPE(keyword_type), POINTER :: keyword
266
267 cpassert(.NOT. ASSOCIATED(section))
268 CALL section_create(section, __location__, name="PRINT_ORBITAL_CUBES", &
269 description="Controls printing of active orbital cube files.", &
270 n_keywords=5, n_subsections=0, repeats=.false.)
271
272 NULLIFY (keyword)
273 CALL keyword_create(keyword, __location__, name="FILENAME", &
274 description="Body of Filename for the cube files.", &
275 usage="FILENAME {name}", default_c_val="ActiveOrbital", &
276 type_of_var=char_t)
277 CALL section_add_keyword(section, keyword)
278 CALL keyword_release(keyword)
279
280 CALL keyword_create(keyword, __location__, name="ALIST", &
281 description="List of alpha orbitals to be printed. -1 defaults to all values", &
282 usage="ALIST {1 2 3 ...}", n_var=-1, default_i_vals=[-1], &
283 lone_keyword_i_val=-1, type_of_var=integer_t)
284 CALL section_add_keyword(section, keyword)
285 CALL keyword_release(keyword)
286
287 CALL keyword_create(keyword, __location__, name="BLIST", &
288 description="List of beta orbitals to be printed. -1 defaults to all values", &
289 usage="BLIST {1 2 3 ...}", n_var=-1, default_i_vals=[-1], &
290 lone_keyword_i_val=-1, type_of_var=integer_t)
291 CALL section_add_keyword(section, keyword)
292 CALL keyword_release(keyword)
293
294 CALL keyword_create(keyword, __location__, name="STRIDE", &
295 description="The stride (X,Y,Z) used to write the cube file"// &
296 " (larger values result in smaller cube files)."// &
297 " You can provide 3 numbers (for X,Y,Z) or 1 number valid for all components", &
298 usage="STRIDE {2 2 2}", n_var=-1, default_i_vals=[2, 2, 2], &
299 type_of_var=integer_t)
300 CALL section_add_keyword(section, keyword)
301 CALL keyword_release(keyword)
302
303 CALL keyword_create(keyword, __location__, name="STOP_AFTER_CUBES", &
304 description="Whether to stop the computation after printing the cubes.", &
305 default_l_val=.false., lone_keyword_l_val=.false.)
306 CALL section_add_keyword(section, keyword)
307 CALL keyword_release(keyword)
308
309 END SUBROUTINE create_print_orb_section
310
311! **************************************************************************************************
312!> \brief ...
313!> \param section ...
314! **************************************************************************************************
315 SUBROUTINE create_eri_section(section)
316 TYPE(section_type), POINTER :: section
317
318 TYPE(keyword_type), POINTER :: keyword
319
320 cpassert(.NOT. ASSOCIATED(section))
321 CALL section_create(section, __location__, name="ERI", &
322 description="Parameters for the electron repulsion integrals.", &
323 n_keywords=5, n_subsections=0, repeats=.false.)
324
325 NULLIFY (keyword)
326 CALL keyword_create(keyword, __location__, name="METHOD", &
327 description="Method used in ERI calculation.", &
328 usage="METHOD FULL_GPW", &
329 enum_c_vals=s2a("FULL_GPW", "GPW_HALF_TRANSFORM"), &
330 enum_i_vals=[eri_method_full_gpw, eri_method_gpw_ht], &
331 enum_desc=s2a("Use the GPW approach with MOs", &
332 "Use the GPW approach for half-transformed MO ERIs"), &
333 default_i_val=eri_method_full_gpw)
334 CALL section_add_keyword(section, keyword)
335 CALL keyword_release(keyword)
336
337 CALL keyword_create(keyword, __location__, name="OPERATOR", &
338 description="Operator used in ERI calculation.", &
339 usage="OPERATOR LONGRANGE", &
340 enum_c_vals=s2a("COULOMB", "YUKAWA", "LONGRANGE", &
341 "SHORTRANGE", "GAUSSIAN", "TRUNCATED", "LR_TRUNC"), &
345 enum_desc=s2a("Coulomb operator: 1/r", &
346 "Yukawa operator: exp(-omega*R)/R", &
347 "Longrange operator: erf(omega*R)/R", &
348 "Shortrange operator: erfc(omega*R)/R", &
349 "Gaussian operator: exp(-omega*R2)/R", &
350 "Truncated Coulomb operator: if (R < R_c) 1/R else 0)", &
351 "Truncated longrange operator: if (R < R_c) erf(omega*R)/R else 0"), &
352 default_i_val=eri_operator_coulomb)
353 CALL section_add_keyword(section, keyword)
354 CALL keyword_release(keyword)
355
356 CALL keyword_create(keyword, __location__, name="PERIODICITY", &
357 description="Periodicity used for operators in ERI calclulation.", &
358 usage="PERIODICITY 1 1 1", n_var=-1, default_i_vals=[0, 0, 0], &
359 type_of_var=integer_t)
360 CALL section_add_keyword(section, keyword)
361 CALL keyword_release(keyword)
362
363 CALL keyword_create(keyword, __location__, name="OMEGA", &
364 description="Range-separation parameter for ERI operator.", &
365 usage="OMEGA 0.25", type_of_var=real_t, &
366 default_r_val=0.4_dp)
367 CALL section_add_keyword(section, keyword)
368 CALL keyword_release(keyword)
369
370 CALL keyword_create(keyword, __location__, name="CUTOFF_RADIUS", &
371 description="Cutoff radius (in Angstroms) for the truncated 1/r and "// &
372 "longrange potentials. "// &
373 "Only valid when doing truncated calculations.", &
374 usage="CUTOFF_RADIUS 10.0", type_of_var=real_t, &
375 unit_str="angstrom", default_r_val=0.0_dp)
376 CALL section_add_keyword(section, keyword)
377 CALL keyword_release(keyword)
378
379 CALL keyword_create( &
380 keyword, __location__, name="EPS_INTEGRAL", &
381 description="Accuracy of ERIs that will be stored.", &
382 usage="EPS_INTEGRAL 1.0E-10 ", type_of_var=real_t, &
383 default_r_val=1.0e-12_dp)
384 CALL section_add_keyword(section, keyword)
385 CALL keyword_release(keyword)
386
387 END SUBROUTINE create_eri_section
388
389! **************************************************************************************************
390!> \brief ...
391!> \param section ...
392! **************************************************************************************************
393 SUBROUTINE create_eri_gpw(section)
394 TYPE(section_type), POINTER :: section
395
396 TYPE(keyword_type), POINTER :: keyword
397
398 cpassert(.NOT. ASSOCIATED(section))
399 CALL section_create(section, __location__, name="ERI_GPW", &
400 description="Parameters for the GPW approach to electron repulsion integrals.", &
401 n_keywords=5, n_subsections=0, repeats=.false.)
402
403 NULLIFY (keyword)
404 CALL keyword_create(keyword, __location__, name="EPS_GRID", &
405 description="Determines a threshold for the GPW based integration", &
406 usage="EPS_GRID 1.0E-9 ", type_of_var=real_t, &
407 default_r_val=1.0e-8_dp)
408 CALL section_add_keyword(section, keyword)
409 CALL keyword_release(keyword)
410
411 CALL keyword_create(keyword, __location__, name="EPS_FILTER", &
412 description="Determines a threshold for the sparse matrix multiplications if METHOD "// &
413 "GPW_HALF_TRANSFORM is used", &
414 usage="EPS_FILTER 1.0E-9 ", type_of_var=real_t, &
415 default_r_val=1.0e-9_dp)
416 CALL section_add_keyword(section, keyword)
417 CALL keyword_release(keyword)
418
419 CALL keyword_create(keyword, __location__, name="CUTOFF", &
420 description="The cutoff of the finest grid level in the GPW integration.", &
421 usage="CUTOFF 300", type_of_var=real_t, &
422 default_r_val=300.0_dp)
423 CALL section_add_keyword(section, keyword)
424 CALL keyword_release(keyword)
425
426 CALL keyword_create(keyword, __location__, name="REL_CUTOFF", &
427 variants=["RELATIVE_CUTOFF"], &
428 description="Determines the grid at which a Gaussian is mapped.", &
429 usage="REL_CUTOFF 50", type_of_var=real_t, &
430 default_r_val=50.0_dp)
431 CALL section_add_keyword(section, keyword)
432 CALL keyword_release(keyword)
433
434 CALL keyword_create(keyword, __location__, name="STORE_WFN", &
435 variants=["STORE_WAVEFUNCTION"], &
436 description="Store wavefunction in real space representation for integration.", &
437 usage="STORE_WFN T", type_of_var=logical_t, &
438 default_l_val=.true., lone_keyword_l_val=.true.)
439 CALL section_add_keyword(section, keyword)
440 CALL keyword_release(keyword)
441
442 CALL keyword_create(keyword, __location__, name="GROUP_SIZE", &
443 description="Sets the size of a subgroup for ERI calculation, "// &
444 "each of which with a full set of work grids, arrays or orbitals "// &
445 "depending on the method of grids (work grids, arrays, orbitals). "// &
446 "Small numbers reduce communication but increase the memory demands. "// &
447 "A negative number indicates all processes (default).", &
448 usage="GROUP_SIZE 2", type_of_var=integer_t, &
449 default_i_val=-1)
450 CALL section_add_keyword(section, keyword)
451 CALL keyword_release(keyword)
452
453 CALL keyword_create(keyword, __location__, name="PRINT_LEVEL", &
454 variants=["IOLEVEL"], &
455 description="How much output is written by the individual groups.", &
456 usage="PRINT_LEVEL HIGH", &
457 default_i_val=silent_print_level, enum_c_vals= &
458 s2a("SILENT", "LOW", "MEDIUM", "HIGH", "DEBUG"), &
459 enum_desc=s2a("Almost no output", &
460 "Little output", "Quite some output", "Lots of output", &
461 "Everything is written out, useful for debugging purposes only"), &
464 CALL section_add_keyword(section, keyword)
465 CALL keyword_release(keyword)
466
467 END SUBROUTINE create_eri_gpw
468
469END MODULE input_cp2k_as
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer, parameter, public debug_print_level
integer, parameter, public low_print_level
integer, parameter, public medium_print_level
integer, parameter, public high_print_level
integer, parameter, public silent_print_level
subroutine, public cp_print_key_section_create(print_key_section, location, name, description, print_level, each_iter_names, each_iter_values, add_last, filename, common_iter_levels, citations, unit_str)
creates a print_key section
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public eri_operator_erf
integer, parameter, public qiskit_solver
integer, parameter, public no_solver
integer, parameter, public wannier_projection
integer, parameter, public mao_projection
integer, parameter, public eri_method_full_gpw
integer, parameter, public casci_canonical
integer, parameter, public manual_selection
integer, parameter, public eri_operator_gaussian
integer, parameter, public eri_method_gpw_ht
integer, parameter, public eri_operator_erfc
integer, parameter, public gaussian
integer, parameter, public eri_operator_trunc
integer, parameter, public eri_operator_coulomb
integer, parameter, public eri_operator_yukawa
integer, parameter, public eri_operator_lr_trunc
integer, parameter, public fci_solver
function that build the active space section of the input
subroutine, public create_active_space_section(section)
Create CP2K input section for the calculation of an active space Hamiltonian.
subroutine, public create_localize_section(section)
parameters fo the localization of wavefunctions
function that build the xc section of the input
subroutine, public create_xc_section(section)
creates the input section for the xc part
represents keywords in an input
subroutine, public keyword_release(keyword)
releases the given keyword (see doc/ReferenceCounting.html)
subroutine, public keyword_create(keyword, location, name, description, usage, type_of_var, n_var, repeats, variants, default_val, default_l_val, default_r_val, default_lc_val, default_c_val, default_i_val, default_l_vals, default_r_vals, default_c_vals, default_i_vals, lone_keyword_val, lone_keyword_l_val, lone_keyword_r_val, lone_keyword_c_val, lone_keyword_i_val, lone_keyword_l_vals, lone_keyword_r_vals, lone_keyword_c_vals, lone_keyword_i_vals, enum_c_vals, enum_i_vals, enum, enum_strict, enum_desc, unit_str, citations, deprecation_notice, removed)
creates a keyword object
objects that represent the structure of input sections and the data contained in an input section
subroutine, public section_create(section, location, name, description, n_keywords, n_subsections, repeats, citations, deprecation_notice)
creates a list of keywords
subroutine, public section_add_keyword(section, keyword)
adds a keyword to the given section
subroutine, public section_add_subsection(section, subsection)
adds a subsection to the given section
recursive subroutine, public section_release(section)
releases the given keyword list (see doc/ReferenceCounting.html)
a wrapper for basic fortran types.
integer, parameter, public real_t
integer, parameter, public lchar_t
integer, parameter, public logical_t
integer, parameter, public char_t
integer, parameter, public integer_t
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
module that contains the definitions of the scf types
subroutine, public create_mixing_section(section, ls_scf)
Create CP2K input section for the mixing of the density matrix to be used only with diagonalization m...
Utilities for string manipulations.
represent a keyword in the input
represent a section of the input file