(git:ce05c02)
Loading...
Searching...
No Matches
pao_input.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
9 USE bibliography, ONLY: berghold2011,&
30 USE input_val_types, ONLY: lchar_t,&
31 real_t
32 USE kinds, ONLY: dp
34 USE pao_types, ONLY: pao_env_type
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 = 'pao_input'
42
44
45 INTEGER, PARAMETER, PUBLIC :: pao_rotinv_param = 101, &
46 pao_fock_param = 102, &
47 pao_exp_param = 103, &
48 pao_gth_param = 104, &
49 pao_equi_param = 105, &
50 pao_opt_cg = 301, &
51 pao_opt_bfgs = 302, &
52 pao_ml_gp = 401, &
53 pao_ml_nn = 402, &
54 pao_ml_lazy = 403, &
55 pao_ml_prior_zero = 501, &
56 pao_ml_prior_mean = 502, &
57 pao_ml_desc_pot = 601, &
58 pao_ml_desc_overlap = 602, &
59 pao_ml_desc_r12 = 603
60
61CONTAINS
62
63! **************************************************************************************************
64!> \brief Declare the PAO input section
65!> \param pao ...
66!> \param input ...
67! **************************************************************************************************
68 SUBROUTINE parse_pao_section(pao, input)
69 TYPE(pao_env_type), POINTER :: pao
70 TYPE(section_vals_type), POINTER :: input
71
72 INTEGER :: i, n_rep, ntrainfiles
73 TYPE(cp_logger_type), POINTER :: logger
74 TYPE(section_vals_type), POINTER :: pao_section, training_set_section
75
76 pao_section => section_vals_get_subs_vals(input, "DFT%LS_SCF%PAO")
77
78 ! open main logger
79 logger => cp_get_default_logger()
80 pao%iw = cp_print_key_unit_nr(logger, pao_section, "PRINT%RUN_INFO", extension=".paolog")
81 pao%iw_atoms = cp_print_key_unit_nr(logger, pao_section, "PRINT%ATOM_INFO", extension=".paolog")
82 pao%iw_gap = cp_print_key_unit_nr(logger, pao_section, "PRINT%FOCK_GAP", extension=".paolog")
83 pao%iw_fockev = cp_print_key_unit_nr(logger, pao_section, "PRINT%FOCK_EIGENVALUES", extension=".paolog")
84 pao%iw_opt = cp_print_key_unit_nr(logger, pao_section, "PRINT%OPT_INFO", extension=".paolog")
85 pao%iw_mlvar = cp_print_key_unit_nr(logger, pao_section, "PRINT%ML_VARIANCE", extension=".paolog")
86 pao%iw_mldata = cp_print_key_unit_nr(logger, pao_section, "PRINT%ML_TRAINING_DATA", extension=".paolog")
87
88 IF (pao%iw > 0) WRITE (pao%iw, *) "" ! an empty separator line
89
90 ! parse input and print
91
92 CALL section_vals_val_get(pao_section, "EPS_PAO", r_val=pao%eps_pao)
93 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "EPS_PAO", pao%eps_pao
94
95 CALL section_vals_val_get(pao_section, "MIXING", r_val=pao%mixing)
96 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "MIXING", pao%mixing
97
98 CALL section_vals_val_get(pao_section, "MAX_PAO", i_val=pao%max_pao)
99 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,I11)") " PAO|", "MAX_PAO", pao%max_pao
100
101 CALL section_vals_val_get(pao_section, "MAX_CYCLES", i_val=pao%max_cycles)
102 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,I11)") " PAO|", "MAX_CYCLES", pao%max_cycles
103
104 CALL section_vals_val_get(pao_section, "IGNORE_CONVERGENCE_FAILURE", l_val=pao%ignore_convergence_failure)
105 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,L11)") " PAO|", "IGNORE_CONVERGENCE_FAILURE", pao%ignore_convergence_failure
106
107 CALL section_vals_val_get(pao_section, "PARAMETERIZATION", i_val=pao%parameterization)
108 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,A11)") " PAO|", "PARAMETERIZATION", id2str(pao%parameterization)
109
110 CALL section_vals_val_get(pao_section, "PRECONDITION", l_val=pao%precondition)
111 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,L11)") " PAO|", "PRECONDITION", pao%precondition
112
113 CALL section_vals_val_get(pao_section, "REGULARIZATION", r_val=pao%regularization)
114 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "REGULARIZATION", pao%regularization
115 IF (pao%regularization < 0.0_dp) cpabort("PAO: REGULARIZATION < 0")
116
117 CALL section_vals_val_get(input, "DFT%QS%EPS_DEFAULT", r_val=pao%eps_pgf) ! default value
118 CALL section_vals_val_get(pao_section, "EPS_PGF", n_rep_val=n_rep)
119 IF (n_rep /= 0) CALL section_vals_val_get(pao_section, "EPS_PGF", r_val=pao%eps_pgf)
120 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "EPS_PGF", pao%eps_pgf
121 IF (pao%eps_pgf < 0.0_dp) cpabort("PAO: EPS_PGF < 0")
122
123 CALL section_vals_val_get(pao_section, "PENALTY_DISTANCE", r_val=pao%penalty_dist)
124 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "PENALTY_DISTANCE", pao%penalty_dist
125 IF (pao%penalty_dist < 0.0_dp) cpabort("PAO: PENALTY_DISTANCE < 0")
126
127 CALL section_vals_val_get(pao_section, "PENALTY_STRENGTH", r_val=pao%penalty_strength)
128 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "PENALTY_STRENGTH", pao%penalty_strength
129 IF (pao%penalty_strength < 0.0_dp) cpabort("PAO: PENALTY_STRENGTH < 0")
130
131 CALL section_vals_val_get(pao_section, "LINPOT_PRECONDITION_DELTA", r_val=pao%linpot_precon_delta)
132 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "LINPOT_PRECONDITION_DELTA", pao%linpot_precon_delta
133 IF (pao%linpot_precon_delta < 0.0_dp) cpabort("PAO: LINPOT_PRECONDITION_DELTA < 0")
134
135 CALL section_vals_val_get(pao_section, "LINPOT_INITGUESS_DELTA", r_val=pao%linpot_init_delta)
136 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "LINPOT_INITGUESS_DELT", pao%linpot_init_delta
137 IF (pao%linpot_init_delta < 0.0_dp) cpabort("PAO: LINPOT_INITGUESS_DELTA < 0")
138
139 CALL section_vals_val_get(pao_section, "LINPOT_REGULARIZATION_DELTA", r_val=pao%linpot_regu_delta)
140 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "LINPOT_REGULARIZATION_DELTA", pao%linpot_regu_delta
141 IF (pao%linpot_regu_delta < 0.0_dp) cpabort("PAO: LINPOT_REGULARIZATION_DELTA < 0")
142
143 CALL section_vals_val_get(pao_section, "LINPOT_REGULARIZATION_STRENGTH", r_val=pao%linpot_regu_strength)
144 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "LINPOT_REGULARIZATION_STRENGTH", pao%linpot_regu_strength
145 IF (pao%linpot_regu_strength < 0.0_dp) cpabort("PAO: LINPOT_REGULARIZATION_STRENGTH < 0")
146
147 CALL section_vals_val_get(pao_section, "OPTIMIZER", i_val=pao%optimizer)
148 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,A11)") " PAO|", "OPTIMIZER", id2str(pao%optimizer)
149
150 CALL section_vals_val_get(pao_section, "CG_INIT_STEPS", i_val=pao%cg_init_steps)
151 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,I11)") " PAO|", "CG_INIT_STEPS", pao%cg_init_steps
152 IF (pao%cg_init_steps < 1) cpabort("PAO: CG_INIT_STEPS < 1")
153
154 CALL section_vals_val_get(pao_section, "CG_RESET_LIMIT", r_val=pao%cg_reset_limit)
155 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "CG_RESET_LIMIT", pao%cg_reset_limit
156 IF (pao%cg_reset_limit < 0.0_dp) cpabort("PAO: CG_RESET_LIMIT < 0")
157
158 CALL section_vals_val_get(pao_section, "CHECK_UNITARY_TOL", r_val=pao%check_unitary_tol)
159 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "CHECK_UNITARY_TOL", pao%check_unitary_tol
160
161 CALL section_vals_val_get(pao_section, "CHECK_GRADIENT_TOL", r_val=pao%check_grad_tol)
162 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "CHECK_GRADIENT_TOL", pao%check_grad_tol
163
164 CALL section_vals_val_get(pao_section, "NUM_GRADIENT_ORDER", i_val=pao%num_grad_order)
165 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,I11)") " PAO|", "NUM_GRADIENT_ORDER", pao%num_grad_order
166
167 CALL section_vals_val_get(pao_section, "NUM_GRADIENT_EPS", r_val=pao%num_grad_eps)
168 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "NUM_GRADIENT_EPS", pao%num_grad_eps
169 IF (pao%num_grad_eps < 0.0_dp) cpabort("PAO: NUM_GRADIENT_EPS < 0")
170
171 CALL section_vals_val_get(pao_section, "PRINT%RESTART%WRITE_CYCLES", i_val=pao%write_cycles)
172 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,I11)") " PAO|", "PRINT%RESTART%WRITE_CYCLES", pao%write_cycles
173
174 CALL section_vals_val_get(pao_section, "RESTART_FILE", c_val=pao%restart_file)
175 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,A)") " PAO|", "RESTART_FILE ", trim(pao%restart_file)
176
177 CALL section_vals_val_get(pao_section, "PREOPT_DM_FILE", c_val=pao%preopt_dm_file)
178 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,A)") " PAO|", "PREOPT_DM_FILE ", trim(pao%preopt_dm_file)
179
180 CALL section_vals_val_get(pao_section, "MACHINE_LEARNING%METHOD", i_val=pao%ml_method)
181 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,A11)") " PAO|", "MACHINE_LEARNING%METHOD", id2str(pao%ml_method)
182
183 CALL section_vals_val_get(pao_section, "MACHINE_LEARNING%PRIOR", i_val=pao%ml_prior)
184 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,A11)") " PAO|", "MACHINE_LEARNING%PRIOR", id2str(pao%ml_prior)
185
186 CALL section_vals_val_get(pao_section, "MACHINE_LEARNING%DESCRIPTOR", i_val=pao%ml_descriptor)
187 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,A11)") " PAO|", "MACHINE_LEARNING%DESCRIPTOR", id2str(pao%ml_descriptor)
188
189 CALL section_vals_val_get(pao_section, "MACHINE_LEARNING%TOLERANCE", r_val=pao%ml_tolerance)
190 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "MACHINE_LEARNING%TOLERANCE", pao%ml_tolerance
191
192 CALL section_vals_val_get(pao_section, "MACHINE_LEARNING%GP_NOISE_VAR", r_val=pao%gp_noise_var)
193 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "MACHINE_LEARNING%GP_NOISE_VAR", pao%gp_noise_var
194
195 CALL section_vals_val_get(pao_section, "MACHINE_LEARNING%GP_SCALE", r_val=pao%gp_scale)
196 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "MACHINE_LEARNING%GP_SCALE", pao%gp_scale
197
198 ! parse MACHINE_LEARNING%TRAINING_SET section
199 training_set_section => section_vals_get_subs_vals(pao_section, "MACHINE_LEARNING%TRAINING_SET")
200 CALL section_vals_val_get(training_set_section, "_DEFAULT_KEYWORD_", n_rep_val=ntrainfiles)
201 ALLOCATE (pao%ml_training_set(ntrainfiles))
202 DO i = 1, ntrainfiles
203 CALL section_vals_val_get(training_set_section, "_DEFAULT_KEYWORD_", &
204 i_rep_val=i, c_val=pao%ml_training_set(i)%fn)
205 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,A)") " PAO|", "MACHINE_LEARNING%TRAINING_SET", &
206 trim(pao%ml_training_set(i)%fn)
207 END DO
208
209 IF (pao%iw > 0) WRITE (pao%iw, *) "" ! an empty separator line
210
211 END SUBROUTINE parse_pao_section
212
213! **************************************************************************************************
214!> \brief Helper routine
215!> \param id ...
216!> \return ...
217! **************************************************************************************************
218 FUNCTION id2str(id) RESULT(s)
219 INTEGER :: id
220 CHARACTER(LEN=20) :: s
221
222 SELECT CASE (id)
223 CASE (pao_gth_param)
224 s = "GTH"
225 CASE (pao_rotinv_param)
226 s = "ROTINV"
227 CASE (pao_fock_param)
228 s = "FOCK"
229 CASE (pao_exp_param)
230 s = "EXP"
231 CASE (pao_equi_param)
232 s = "EQUIVARIANT"
233 CASE (pao_opt_cg)
234 s = "CG"
235 CASE (pao_opt_bfgs)
236 s = "BFGS"
237 CASE (pao_ml_gp)
238 s = "GAUSSIAN_PROCESS"
239 CASE (pao_ml_nn)
240 s = "NEURAL_NETWORK"
241 CASE (pao_ml_lazy)
242 s = "LAZY"
243 CASE (pao_ml_prior_zero)
244 s = "ZERO"
245 CASE (pao_ml_prior_mean)
246 s = "MEAN"
247 CASE (pao_ml_desc_pot)
248 s = "POTENTIAL"
250 s = "OVERLAP"
251 CASE (pao_ml_desc_r12)
252 s = "R12"
253 CASE DEFAULT
254 cpabort("PAO: unknown id")
255 END SELECT
256 s = adjustr(s)
257 END FUNCTION id2str
258
259! **************************************************************************************************
260!> \brief Creates the PAO subsection of the linear scaling section.
261!> \param section ...
262!> \author Ole Schuett
263! **************************************************************************************************
264 SUBROUTINE create_pao_section(section)
265 TYPE(section_type), POINTER :: section
266
267 TYPE(keyword_type), POINTER :: keyword
268 TYPE(section_type), POINTER :: printkey, subsection, subsubsection
269
270 NULLIFY (keyword, subsection, subsubsection, printkey)
271
272 cpassert(.NOT. ASSOCIATED(section))
273 CALL section_create(section, __location__, name="PAO", repeats=.false., &
274 description="Polarized Atomic Orbital Method", &
275 citations=[schuett2018, berghold2011])
276
277 ! Convergence Criteria *****************************************************
278 CALL keyword_create(keyword, __location__, name="EPS_PAO", &
279 description="Convergence criteria for PAO optimization.", &
280 default_r_val=1.e-5_dp)
281 CALL section_add_keyword(section, keyword)
282 CALL keyword_release(keyword)
283
284 CALL keyword_create(keyword, __location__, name="MIXING", &
285 description="Mixing fraction of new and old optimizied solutions.", &
286 default_r_val=0.5_dp)
287 CALL section_add_keyword(section, keyword)
288 CALL keyword_release(keyword)
289
290 CALL keyword_create(keyword, __location__, name="MAX_PAO", &
291 description="Maximum number of PAO basis optimization steps.", &
292 default_i_val=1000)
293 CALL section_add_keyword(section, keyword)
294 CALL keyword_release(keyword)
295
296 CALL keyword_create(keyword, __location__, name="MAX_CYCLES", &
297 description="Maximum number of PAO line search cycles for a given hamiltonian.", &
298 default_i_val=75)
299 CALL section_add_keyword(section, keyword)
300 CALL keyword_release(keyword)
301
302 CALL keyword_create(keyword, __location__, name="IGNORE_CONVERGENCE_FAILURE", &
303 description="If true, only a warning is issued if a PAO "// &
304 "optimization has not converged. By default, a run is aborted "// &
305 "if the required convergence criteria have not been achieved.", &
306 usage="IGNORE_CONVERGENCE_FAILURE logical_value", &
307 default_l_val=.false., lone_keyword_l_val=.true.)
308 CALL section_add_keyword(section, keyword)
309 CALL keyword_release(keyword)
310
311 ! Parametrization **********************************************************
312 CALL keyword_create(keyword, __location__, name="PARAMETERIZATION", &
313 description="Parametrization of the mapping between the primary and the PAO basis.", &
314 enum_c_vals=s2a("ROTINV", "FOCK", "GTH", "EXP", "EQUIVARIANT"), &
316 enum_desc=s2a("Rotational invariant parametrization (machine learnable)", &
317 "Fock matrix parametrization", &
318 "Parametrization based on GTH pseudo potentials", &
319 "Original matrix exponential parametrization", &
320 "Equivariant parametrization"), &
321 default_i_val=pao_rotinv_param)
322 CALL section_add_keyword(section, keyword)
323 CALL keyword_release(keyword)
324
325 CALL keyword_create(keyword, __location__, name="REGULARIZATION", &
326 description="Strength of regularization term which ensures parameters remain small.", &
327 default_r_val=0.0_dp)
328 CALL section_add_keyword(section, keyword)
329 CALL keyword_release(keyword)
330
331 CALL keyword_create(keyword, __location__, name="PENALTY_DISTANCE", &
332 description="Distance at which approaching eigenvalues are penalized to prevent degeneration.", &
333 default_r_val=0.1_dp)
334 CALL section_add_keyword(section, keyword)
335 CALL keyword_release(keyword)
336
337 CALL keyword_create(keyword, __location__, name="PENALTY_STRENGTH", &
338 description="Strength of the penalty term which prevents degenerate eigenvalues.", &
339 default_r_val=0.005_dp)
340 CALL section_add_keyword(section, keyword)
341 CALL keyword_release(keyword)
342
343 CALL keyword_create(keyword, __location__, name="PRECONDITION", &
344 description="Apply a preconditioner to the parametrization.", &
345 default_l_val=.false., lone_keyword_l_val=.true.)
346 CALL section_add_keyword(section, keyword)
347 CALL keyword_release(keyword)
348
349 CALL keyword_create(keyword, __location__, name="EPS_PGF", &
350 description="Sets precision for potential and descriptor matrix elements. "// &
351 "Overrides DFT/QS/EPS_DEFAULT value.", type_of_var=real_t)
352 CALL section_add_keyword(section, keyword)
353 CALL keyword_release(keyword)
354
355 ! Preopt ******************************************************************
356 CALL keyword_create(keyword, __location__, name="PREOPT_DM_FILE", &
357 description="Read pre-optimized density matrix from given file.", &
358 repeats=.false., default_c_val="")
359 CALL section_add_keyword(section, keyword)
360 CALL keyword_release(keyword)
361
362 ! Misc ********************************************************************
363 CALL keyword_create(keyword, __location__, name="RESTART_FILE", &
364 description="Reads given files as restart for PAO basis", &
365 repeats=.false., default_c_val="")
366 CALL section_add_keyword(section, keyword)
367 CALL keyword_release(keyword)
368
369 CALL keyword_create(keyword, __location__, name="CHECK_GRADIENT_TOL", &
370 description="Tolerance for check of full analytic gradient against the numeric one."// &
371 " Negative values mean don't check at all.", &
372 default_r_val=-1.0_dp)
373 CALL section_add_keyword(section, keyword)
374 CALL keyword_release(keyword)
375
376 CALL keyword_create(keyword, __location__, name="NUM_GRADIENT_EPS", &
377 description="Step length used for the numeric derivative when checking the gradient.", &
378 default_r_val=1e-8_dp)
379 CALL section_add_keyword(section, keyword)
380 CALL keyword_release(keyword)
381
382 CALL keyword_create(keyword, __location__, name="NUM_GRADIENT_ORDER", &
383 description="Order of the numeric derivative when checking the gradient. "// &
384 "Possible values are 2, 4, and 6.", &
385 default_i_val=2)
386 CALL section_add_keyword(section, keyword)
387 CALL keyword_release(keyword)
388
389 CALL keyword_create(keyword, __location__, name="CHECK_UNITARY_TOL", &
390 description="Check if rotation matrix is unitary."// &
391 " Negative values mean don't check at all.", &
392 default_r_val=-1.0_dp)
393 CALL section_add_keyword(section, keyword)
394 CALL keyword_release(keyword)
395
396 ! Linpot settings *********************************************************
397 CALL keyword_create(keyword, __location__, name="LINPOT_PRECONDITION_DELTA", &
398 description="Eigenvalue threshold used for preconditioning.", &
399 default_r_val=0.0_dp)
400 CALL section_add_keyword(section, keyword)
401 CALL keyword_release(keyword)
402
403 CALL keyword_create(keyword, __location__, name="LINPOT_INITGUESS_DELTA", &
404 description="Eigenvalue threshold used for calculating initial guess.", &
405 default_r_val=0.0_dp)
406 CALL section_add_keyword(section, keyword)
407 CALL keyword_release(keyword)
408
409 CALL keyword_create(keyword, __location__, name="LINPOT_REGULARIZATION_DELTA", &
410 description="Eigenvalue threshold used for regularization.", &
411 default_r_val=0.0_dp)
412 CALL section_add_keyword(section, keyword)
413 CALL keyword_release(keyword)
414
415 CALL keyword_create(keyword, __location__, name="LINPOT_REGULARIZATION_STRENGTH", &
416 description="Strength of regularization on linpot layer.", &
417 default_r_val=0.0_dp)
418 CALL section_add_keyword(section, keyword)
419 CALL keyword_release(keyword)
420
421 ! Machine Learning *********************************************************
422 CALL section_create(subsection, __location__, name="MACHINE_LEARNING", description="Machine learning section")
423
424 CALL keyword_create(keyword, __location__, name="METHOD", &
425 description="Machine learning scheme used to predict PAO basis sets.", &
426 enum_c_vals=s2a("GAUSSIAN_PROCESS", "NEURAL_NETWORK", "LAZY"), &
427 enum_i_vals=[pao_ml_gp, pao_ml_nn, pao_ml_lazy], &
428 enum_desc=s2a("Gaussian Process", "Neural Network", "Just rely on prior"), &
429 default_i_val=pao_ml_gp)
430 CALL section_add_keyword(subsection, keyword)
431 CALL keyword_release(keyword)
432
433 CALL keyword_create(keyword, __location__, name="PRIOR", &
434 description="Prior used for predictions.", &
435 enum_c_vals=s2a("ZERO", "MEAN"), &
436 enum_i_vals=[pao_ml_prior_zero, pao_ml_prior_mean], &
437 enum_desc=s2a("Simply use zero", "Use average of training-set"), &
438 default_i_val=pao_ml_prior_zero)
439 CALL section_add_keyword(subsection, keyword)
440 CALL keyword_release(keyword)
441
442 CALL keyword_create(keyword, __location__, name="DESCRIPTOR", &
443 description="Descriptor used as input for machine learning.", &
444 enum_c_vals=s2a("POTENTIAL", "OVERLAP", "R12"), &
446 enum_desc=s2a("Eigenvalues of local potential matrix", &
447 "Eigenvalues of local overlap matrix", &
448 "Distance between two atoms (just for testing)"), &
449 citations=[zhu2016], &
450 default_i_val=pao_ml_desc_pot)
451 CALL section_add_keyword(subsection, keyword)
452 CALL keyword_release(keyword)
453
454 CALL keyword_create(keyword, __location__, name="TOLERANCE", &
455 description="Maximum variance tolerated when making predictions.", &
456 default_r_val=1.0e-2_dp)
457 CALL section_add_keyword(subsection, keyword)
458 CALL keyword_release(keyword)
459
460 CALL keyword_create(keyword, __location__, name="GP_NOISE_VAR", &
461 description="Variance of noise used for Gaussian Process machine learning.", &
462 default_r_val=0.1_dp)
463 CALL section_add_keyword(subsection, keyword)
464 CALL keyword_release(keyword)
465
466 CALL keyword_create(keyword, __location__, name="GP_SCALE", &
467 description="Length scale used for Gaussian Process machine learning.", &
468 default_r_val=0.05_dp)
469 CALL section_add_keyword(subsection, keyword)
470 CALL keyword_release(keyword)
471
472 ! special free-text section similar to SUBSYS%COORD
473 CALL section_create(subsubsection, __location__, name="TRAINING_SET", &
474 description="Lists PAO-restart file used for training")
475 CALL keyword_create(keyword, __location__, name="_DEFAULT_KEYWORD_", &
476 description="One file name per line.", &
477 repeats=.true., type_of_var=lchar_t)
478 CALL section_add_keyword(subsubsection, keyword)
479 CALL keyword_release(keyword)
480 CALL section_add_subsection(subsection, subsubsection)
481 CALL section_release(subsubsection)
482
483 CALL section_add_subsection(section, subsection)
484 CALL section_release(subsection)
485
486 ! Output *******************************************************************
487 CALL section_create(subsection, __location__, name="PRINT", &
488 description="Printkey section", &
489 n_keywords=0, n_subsections=1, repeats=.true.)
490
491 CALL cp_print_key_section_create(printkey, __location__, "RUN_INFO", &
492 description="Normal output by PAO", &
493 print_level=low_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
494 CALL section_add_subsection(subsection, printkey)
495 CALL section_release(printkey)
496
497 CALL cp_print_key_section_create(printkey, __location__, "ATOM_INFO", &
498 description="One line summary for each atom", &
499 print_level=high_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
500 CALL section_add_subsection(subsection, printkey)
501 CALL section_release(printkey)
502
503 CALL cp_print_key_section_create(printkey, __location__, "FOCK_GAP", &
504 description="Gap of the fock matrix for each atom", &
505 print_level=high_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
506 CALL section_add_subsection(subsection, printkey)
507 CALL section_release(printkey)
508
509 CALL cp_print_key_section_create(printkey, __location__, "FOCK_EIGENVALUES", &
510 description="Eigenvalues of the fock matrix for each atom", &
511 print_level=high_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
512 CALL section_add_subsection(subsection, printkey)
513 CALL section_release(printkey)
514
515 CALL cp_print_key_section_create(printkey, __location__, "ML_VARIANCE", &
516 description="Variances of machine learning predictions for each atom", &
517 print_level=high_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
518 CALL section_add_subsection(subsection, printkey)
519 CALL section_release(printkey)
520
521 CALL cp_print_key_section_create(printkey, __location__, "ML_TRAINING_DATA", &
522 description="Dumps training data used for machine learning", &
523 print_level=high_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
524 CALL section_add_subsection(subsection, printkey)
525 CALL section_release(printkey)
526
527 CALL cp_print_key_section_create(printkey, __location__, "OPT_INFO", &
528 description="Output by the optimizer", &
529 print_level=low_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
530 CALL section_add_subsection(subsection, printkey)
531 CALL section_release(printkey)
532
533 CALL cp_print_key_section_create(printkey, __location__, "RESTART", &
534 description="Restart file of PAO basis", &
535 print_level=high_print_level, add_last=add_last_numeric, filename="")
536
537 CALL keyword_create(keyword, __location__, name="BACKUP_COPIES", &
538 description="Specifies the maximum number of backup copies.", &
539 usage="BACKUP_COPIES {int}", &
540 default_i_val=1)
541 CALL section_add_keyword(printkey, keyword)
542 CALL keyword_release(keyword)
543
544 CALL keyword_create(keyword, __location__, name="WRITE_CYCLES", &
545 description="Maximum number of PAO line search cycles until a restart is written.", &
546 default_i_val=100)
547 CALL section_add_keyword(printkey, keyword)
548 CALL keyword_release(keyword)
549
550 CALL section_add_subsection(subsection, printkey)
551 CALL section_release(printkey)
552
553 CALL section_add_subsection(section, subsection)
554 CALL section_release(subsection)
555
556 ! OPT stuff ****************************************************************
557 CALL keyword_create(keyword, __location__, name="OPTIMIZER", &
558 description="Optimizer used to find PAO basis.", &
559 enum_c_vals=s2a("CG", "BFGS"), &
560 enum_i_vals=[pao_opt_cg, pao_opt_bfgs], &
561 enum_desc=s2a("Conjugate gradient algorithm", &
562 "Broyden-Fletcher-Goldfarb-Shanno algorithm"), &
563 default_i_val=pao_opt_cg)
564 CALL section_add_keyword(section, keyword)
565 CALL keyword_release(keyword)
566
567 CALL keyword_create(keyword, __location__, name="CG_INIT_STEPS", &
568 description="Number of steepest descent steps before starting the"// &
569 " conjugate gradients optimization.", &
570 default_i_val=2)
571 CALL section_add_keyword(section, keyword)
572 CALL keyword_release(keyword)
573
574 CALL keyword_create(keyword, __location__, name="CG_RESET_LIMIT", &
575 description="The CG is reseted if the cosine of the angle between the last "// &
576 "search direction and the new gradient is larger that the limit.", &
577 default_r_val=0.1_dp)
578 CALL section_add_keyword(section, keyword)
579 CALL keyword_release(keyword)
580
581 CALL linesearch_create_section(subsection)
582 CALL section_add_subsection(section, subsection)
583
584 CALL section_release(subsection)
585 END SUBROUTINE create_pao_section
586
587END MODULE pao_input
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public schuett2018
integer, save, public berghold2011
integer, save, public zhu2016
various routines to log and control the output. The idea is that decisions about where to log should ...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer function, public cp_print_key_unit_nr(logger, basis_section, print_key_path, extension, middle_name, local, log_filename, ignore_should_output, file_form, file_position, file_action, file_status, do_backup, on_file, is_new_file, mpi_io, fout)
...
integer, parameter, public low_print_level
integer, parameter, public high_print_level
integer, parameter, public add_last_numeric
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
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 type(section_vals_type) function, pointer, public section_vals_get_subs_vals(section_vals, subsection_name, i_rep_section, can_return_null)
returns the values of the requested subsection
recursive subroutine, public section_release(section)
releases the given keyword list (see doc/ReferenceCounting.html)
subroutine, public section_vals_val_get(section_vals, keyword_name, i_rep_section, i_rep_val, n_rep_val, val, l_val, i_val, r_val, c_val, l_vals, i_vals, r_vals, c_vals, explicit)
returns the requested value
a wrapper for basic fortran types.
integer, parameter, public real_t
integer, parameter, public lchar_t
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
A generic framework to calculate step lengths for 1D line search.
Definition linesearch.F:12
subroutine, public linesearch_create_section(section)
Declare the line search input section.
Definition linesearch.F:122
integer, parameter, public pao_equi_param
Definition pao_input.F:45
integer, parameter, public pao_ml_desc_pot
Definition pao_input.F:45
integer, parameter, public pao_opt_cg
Definition pao_input.F:45
integer, parameter, public pao_opt_bfgs
Definition pao_input.F:45
integer, parameter, public pao_ml_desc_r12
Definition pao_input.F:45
integer, parameter, public pao_ml_gp
Definition pao_input.F:45
integer, parameter, public pao_ml_prior_mean
Definition pao_input.F:45
integer, parameter, public pao_ml_lazy
Definition pao_input.F:45
integer, parameter, public pao_fock_param
Definition pao_input.F:45
integer, parameter, public pao_rotinv_param
Definition pao_input.F:45
integer, parameter, public pao_gth_param
Definition pao_input.F:45
integer, parameter, public pao_ml_desc_overlap
Definition pao_input.F:45
subroutine, public parse_pao_section(pao, input)
Declare the PAO input section.
Definition pao_input.F:69
integer, parameter, public pao_ml_prior_zero
Definition pao_input.F:45
integer, parameter, public pao_ml_nn
Definition pao_input.F:45
character(len=20) function, public id2str(id)
Helper routine.
Definition pao_input.F:219
subroutine, public create_pao_section(section)
Creates the PAO subsection of the linear scaling section.
Definition pao_input.F:265
integer, parameter, public pao_exp_param
Definition pao_input.F:45
Types used by the PAO machinery.
Definition pao_types.F:12
Utilities for string manipulations.
type of a logger, at the moment it contains just a print level starting at which level it should be l...
represent a keyword in the input
represent a section of the input file