(git:374b731)
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-2024 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, "PARAMETERIZATION", i_val=pao%parameterization)
105 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,A11)") " PAO|", "PARAMETERIZATION", id2str(pao%parameterization)
106
107 CALL section_vals_val_get(pao_section, "PRECONDITION", l_val=pao%precondition)
108 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,L11)") " PAO|", "PRECONDITION", pao%precondition
109
110 CALL section_vals_val_get(pao_section, "REGULARIZATION", r_val=pao%regularization)
111 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "REGULARIZATION", pao%regularization
112 IF (pao%regularization < 0.0_dp) cpabort("PAO: REGULARIZATION < 0")
113
114 CALL section_vals_val_get(input, "DFT%QS%EPS_DEFAULT", r_val=pao%eps_pgf) ! default value
115 CALL section_vals_val_get(pao_section, "EPS_PGF", n_rep_val=n_rep)
116 IF (n_rep /= 0) CALL section_vals_val_get(pao_section, "EPS_PGF", r_val=pao%eps_pgf)
117 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "EPS_PGF", pao%eps_pgf
118 IF (pao%eps_pgf < 0.0_dp) cpabort("PAO: EPS_PGF < 0")
119
120 CALL section_vals_val_get(pao_section, "PENALTY_DISTANCE", r_val=pao%penalty_dist)
121 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "PENALTY_DISTANCE", pao%penalty_dist
122 IF (pao%penalty_dist < 0.0_dp) cpabort("PAO: PENALTY_DISTANCE < 0")
123
124 CALL section_vals_val_get(pao_section, "PENALTY_STRENGTH", r_val=pao%penalty_strength)
125 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "PENALTY_STRENGTH", pao%penalty_strength
126 IF (pao%penalty_strength < 0.0_dp) cpabort("PAO: PENALTY_STRENGTH < 0")
127
128 CALL section_vals_val_get(pao_section, "LINPOT_PRECONDITION_DELTA", r_val=pao%linpot_precon_delta)
129 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "LINPOT_PRECONDITION_DELTA", pao%linpot_precon_delta
130 IF (pao%linpot_precon_delta < 0.0_dp) cpabort("PAO: LINPOT_PRECONDITION_DELTA < 0")
131
132 CALL section_vals_val_get(pao_section, "LINPOT_INITGUESS_DELTA", r_val=pao%linpot_init_delta)
133 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "LINPOT_INITGUESS_DELT", pao%linpot_init_delta
134 IF (pao%linpot_init_delta < 0.0_dp) cpabort("PAO: LINPOT_INITGUESS_DELTA < 0")
135
136 CALL section_vals_val_get(pao_section, "LINPOT_REGULARIZATION_DELTA", r_val=pao%linpot_regu_delta)
137 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "LINPOT_REGULARIZATION_DELTA", pao%linpot_regu_delta
138 IF (pao%linpot_regu_delta < 0.0_dp) cpabort("PAO: LINPOT_REGULARIZATION_DELTA < 0")
139
140 CALL section_vals_val_get(pao_section, "LINPOT_REGULARIZATION_STRENGTH", r_val=pao%linpot_regu_strength)
141 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "LINPOT_REGULARIZATION_STRENGTH", pao%linpot_regu_strength
142 IF (pao%linpot_regu_strength < 0.0_dp) cpabort("PAO: LINPOT_REGULARIZATION_STRENGTH < 0")
143
144 CALL section_vals_val_get(pao_section, "OPTIMIZER", i_val=pao%optimizer)
145 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,A11)") " PAO|", "OPTIMIZER", id2str(pao%optimizer)
146
147 CALL section_vals_val_get(pao_section, "CG_INIT_STEPS", i_val=pao%cg_init_steps)
148 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,I11)") " PAO|", "CG_INIT_STEPS", pao%cg_init_steps
149 IF (pao%cg_init_steps < 1) cpabort("PAO: CG_INIT_STEPS < 1")
150
151 CALL section_vals_val_get(pao_section, "CG_RESET_LIMIT", r_val=pao%cg_reset_limit)
152 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "CG_RESET_LIMIT", pao%cg_reset_limit
153 IF (pao%cg_reset_limit < 0.0_dp) cpabort("PAO: CG_RESET_LIMIT < 0")
154
155 CALL section_vals_val_get(pao_section, "CHECK_UNITARY_TOL", r_val=pao%check_unitary_tol)
156 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "CHECK_UNITARY_TOL", pao%check_unitary_tol
157
158 CALL section_vals_val_get(pao_section, "CHECK_GRADIENT_TOL", r_val=pao%check_grad_tol)
159 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "CHECK_GRADIENT_TOL", pao%check_grad_tol
160
161 CALL section_vals_val_get(pao_section, "NUM_GRADIENT_ORDER", i_val=pao%num_grad_order)
162 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,I11)") " PAO|", "NUM_GRADIENT_ORDER", pao%num_grad_order
163
164 CALL section_vals_val_get(pao_section, "NUM_GRADIENT_EPS", r_val=pao%num_grad_eps)
165 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "NUM_GRADIENT_EPS", pao%num_grad_eps
166 IF (pao%num_grad_eps < 0.0_dp) cpabort("PAO: NUM_GRADIENT_EPS < 0")
167
168 CALL section_vals_val_get(pao_section, "PRINT%RESTART%WRITE_CYCLES", i_val=pao%write_cycles)
169 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,I11)") " PAO|", "PRINT%RESTART%WRITE_CYCLES", pao%write_cycles
170
171 CALL section_vals_val_get(pao_section, "RESTART_FILE", c_val=pao%restart_file)
172 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,A)") " PAO|", "RESTART_FILE ", trim(pao%restart_file)
173
174 CALL section_vals_val_get(pao_section, "PREOPT_DM_FILE", c_val=pao%preopt_dm_file)
175 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,A)") " PAO|", "PREOPT_DM_FILE ", trim(pao%preopt_dm_file)
176
177 CALL section_vals_val_get(pao_section, "MACHINE_LEARNING%METHOD", i_val=pao%ml_method)
178 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,A11)") " PAO|", "MACHINE_LEARNING%METHOD", id2str(pao%ml_method)
179
180 CALL section_vals_val_get(pao_section, "MACHINE_LEARNING%PRIOR", i_val=pao%ml_prior)
181 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,A11)") " PAO|", "MACHINE_LEARNING%PRIOR", id2str(pao%ml_prior)
182
183 CALL section_vals_val_get(pao_section, "MACHINE_LEARNING%DESCRIPTOR", i_val=pao%ml_descriptor)
184 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,A11)") " PAO|", "MACHINE_LEARNING%DESCRIPTOR", id2str(pao%ml_descriptor)
185
186 CALL section_vals_val_get(pao_section, "MACHINE_LEARNING%TOLERANCE", r_val=pao%ml_tolerance)
187 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "MACHINE_LEARNING%TOLERANCE", pao%ml_tolerance
188
189 CALL section_vals_val_get(pao_section, "MACHINE_LEARNING%GP_NOISE_VAR", r_val=pao%gp_noise_var)
190 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "MACHINE_LEARNING%GP_NOISE_VAR", pao%gp_noise_var
191
192 CALL section_vals_val_get(pao_section, "MACHINE_LEARNING%GP_SCALE", r_val=pao%gp_scale)
193 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,E11.1)") " PAO|", "MACHINE_LEARNING%GP_SCALE", pao%gp_scale
194
195 ! parse MACHINE_LEARNING%TRAINING_SET section
196 training_set_section => section_vals_get_subs_vals(pao_section, "MACHINE_LEARNING%TRAINING_SET")
197 CALL section_vals_val_get(training_set_section, "_DEFAULT_KEYWORD_", n_rep_val=ntrainfiles)
198 ALLOCATE (pao%ml_training_set(ntrainfiles))
199 DO i = 1, ntrainfiles
200 CALL section_vals_val_get(training_set_section, "_DEFAULT_KEYWORD_", &
201 i_rep_val=i, c_val=pao%ml_training_set(i)%fn)
202 IF (pao%iw > 0) WRITE (pao%iw, "(A,T40,A,T70,A)") " PAO|", "MACHINE_LEARNING%TRAINING_SET", &
203 trim(pao%ml_training_set(i)%fn)
204 END DO
205
206 IF (pao%iw > 0) WRITE (pao%iw, *) "" ! an empty separator line
207
208 END SUBROUTINE parse_pao_section
209
210! **************************************************************************************************
211!> \brief Helper routine
212!> \param id ...
213!> \return ...
214! **************************************************************************************************
215 FUNCTION id2str(id) RESULT(s)
216 INTEGER :: id
217 CHARACTER(LEN=11) :: s
218
219 SELECT CASE (id)
220 CASE (pao_gth_param)
221 s = "GTH"
222 CASE (pao_rotinv_param)
223 s = "ROTINV"
224 CASE (pao_fock_param)
225 s = "FOCK"
226 CASE (pao_exp_param)
227 s = "EXP"
228 CASE (pao_equi_param)
229 s = "EQUIVARIANT"
230 CASE (pao_opt_cg)
231 s = "CG"
232 CASE (pao_opt_bfgs)
233 s = "BFGS"
234 CASE (pao_ml_gp)
235 s = "GAUSSIAN_PROCESS"
236 CASE (pao_ml_nn)
237 s = "NEURAL_NETWORK"
238 CASE (pao_ml_lazy)
239 s = "LAZY"
240 CASE (pao_ml_prior_zero)
241 s = "ZERO"
242 CASE (pao_ml_prior_mean)
243 s = "MEAN"
244 CASE (pao_ml_desc_pot)
245 s = "POTENTIAL"
247 s = "OVERLAP"
248 CASE (pao_ml_desc_r12)
249 s = "R12"
250 CASE DEFAULT
251 cpabort("PAO: unknown id")
252 END SELECT
253 s = adjustr(s)
254 END FUNCTION id2str
255
256! **************************************************************************************************
257!> \brief Creates the PAO subsection of the linear scaling section.
258!> \param section ...
259!> \author Ole Schuett
260! **************************************************************************************************
261 SUBROUTINE create_pao_section(section)
262 TYPE(section_type), POINTER :: section
263
264 TYPE(keyword_type), POINTER :: keyword
265 TYPE(section_type), POINTER :: printkey, subsection, subsubsection
266
267 NULLIFY (keyword, subsection, subsubsection, printkey)
268
269 cpassert(.NOT. ASSOCIATED(section))
270 CALL section_create(section, __location__, name="PAO", repeats=.false., &
271 description="Polarized Atomic Orbital Method", &
272 citations=(/schuett2018, berghold2011/))
273
274 ! Convergence Criteria *****************************************************
275 CALL keyword_create(keyword, __location__, name="EPS_PAO", &
276 description="Convergence criteria for PAO optimization.", &
277 default_r_val=1.e-5_dp)
278 CALL section_add_keyword(section, keyword)
279 CALL keyword_release(keyword)
280
281 CALL keyword_create(keyword, __location__, name="MIXING", &
282 description="Mixing fraction of new and old optimizied solutions.", &
283 default_r_val=0.5_dp)
284 CALL section_add_keyword(section, keyword)
285 CALL keyword_release(keyword)
286
287 CALL keyword_create(keyword, __location__, name="MAX_PAO", &
288 description="Maximum number of PAO basis optimization steps.", &
289 default_i_val=1000)
290 CALL section_add_keyword(section, keyword)
291 CALL keyword_release(keyword)
292
293 CALL keyword_create(keyword, __location__, name="MAX_CYCLES", &
294 description="Maximum number of PAO line search cycles for a given hamiltonian.", &
295 default_i_val=1000)
296 CALL section_add_keyword(section, keyword)
297 CALL keyword_release(keyword)
298
299 ! Parametrization **********************************************************
300 CALL keyword_create(keyword, __location__, name="PARAMETERIZATION", &
301 description="Parametrization of the mapping between the primary and the PAO basis.", &
302 enum_c_vals=s2a("ROTINV", "FOCK", "GTH", "EXP", "EQUIVARIANT"), &
304 enum_desc=s2a("Rotational invariant parametrization (machine learnable)", &
305 "Fock matrix parametrization", &
306 "Parametrization based on GTH pseudo potentials", &
307 "Original matrix exponential parametrization", &
308 "Equivariant parametrization"), &
309 default_i_val=pao_rotinv_param)
310 CALL section_add_keyword(section, keyword)
311 CALL keyword_release(keyword)
312
313 CALL keyword_create(keyword, __location__, name="REGULARIZATION", &
314 description="Strength of regularization term which ensures parameters remain small.", &
315 default_r_val=0.0_dp)
316 CALL section_add_keyword(section, keyword)
317 CALL keyword_release(keyword)
318
319 CALL keyword_create(keyword, __location__, name="PENALTY_DISTANCE", &
320 description="Distance at which approaching eigenvalues are penalized to prevent degeneration.", &
321 default_r_val=0.1_dp)
322 CALL section_add_keyword(section, keyword)
323 CALL keyword_release(keyword)
324
325 CALL keyword_create(keyword, __location__, name="PENALTY_STRENGTH", &
326 description="Strength of the penalty term which prevents degenerate eigenvalues.", &
327 default_r_val=0.005_dp)
328 CALL section_add_keyword(section, keyword)
329 CALL keyword_release(keyword)
330
331 CALL keyword_create(keyword, __location__, name="PRECONDITION", &
332 description="Apply a preconditioner to the parametrization.", &
333 default_l_val=.false., lone_keyword_l_val=.true.)
334 CALL section_add_keyword(section, keyword)
335 CALL keyword_release(keyword)
336
337 CALL keyword_create(keyword, __location__, name="EPS_PGF", &
338 description="Sets precision for potential and descriptor matrix elements. "// &
339 "Overrides DFT/QS/EPS_DEFAULT value.", type_of_var=real_t)
340 CALL section_add_keyword(section, keyword)
341 CALL keyword_release(keyword)
342
343 ! Preopt ******************************************************************
344 CALL keyword_create(keyword, __location__, name="PREOPT_DM_FILE", &
345 description="Read pre-optimized density matrix from given file.", &
346 repeats=.false., default_c_val="")
347 CALL section_add_keyword(section, keyword)
348 CALL keyword_release(keyword)
349
350 ! Misc ********************************************************************
351 CALL keyword_create(keyword, __location__, name="RESTART_FILE", &
352 description="Reads given files as restart for PAO basis", &
353 repeats=.false., default_c_val="")
354 CALL section_add_keyword(section, keyword)
355 CALL keyword_release(keyword)
356
357 CALL keyword_create(keyword, __location__, name="CHECK_GRADIENT_TOL", &
358 description="Tolerance for check of full analytic gradient against the numeric one."// &
359 " Negative values mean don't check at all.", &
360 default_r_val=-1.0_dp)
361 CALL section_add_keyword(section, keyword)
362 CALL keyword_release(keyword)
363
364 CALL keyword_create(keyword, __location__, name="NUM_GRADIENT_EPS", &
365 description="Step length used for the numeric derivative when checking the gradient.", &
366 default_r_val=1e-8_dp)
367 CALL section_add_keyword(section, keyword)
368 CALL keyword_release(keyword)
369
370 CALL keyword_create(keyword, __location__, name="NUM_GRADIENT_ORDER", &
371 description="Order of the numeric derivative when checking the gradient. "// &
372 "Possible values are 2, 4, and 6.", &
373 default_i_val=2)
374 CALL section_add_keyword(section, keyword)
375 CALL keyword_release(keyword)
376
377 CALL keyword_create(keyword, __location__, name="CHECK_UNITARY_TOL", &
378 description="Check if rotation matrix is unitary."// &
379 " Negative values mean don't check at all.", &
380 default_r_val=-1.0_dp)
381 CALL section_add_keyword(section, keyword)
382 CALL keyword_release(keyword)
383
384 ! Linpot settings *********************************************************
385 CALL keyword_create(keyword, __location__, name="LINPOT_PRECONDITION_DELTA", &
386 description="Eigenvalue threshold used for preconditioning.", &
387 default_r_val=0.0_dp)
388 CALL section_add_keyword(section, keyword)
389 CALL keyword_release(keyword)
390
391 CALL keyword_create(keyword, __location__, name="LINPOT_INITGUESS_DELTA", &
392 description="Eigenvalue threshold used for calculating initial guess.", &
393 default_r_val=0.0_dp)
394 CALL section_add_keyword(section, keyword)
395 CALL keyword_release(keyword)
396
397 CALL keyword_create(keyword, __location__, name="LINPOT_REGULARIZATION_DELTA", &
398 description="Eigenvalue threshold used for regularization.", &
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_REGULARIZATION_STRENGTH", &
404 description="Strength of regularization on linpot layer.", &
405 default_r_val=0.0_dp)
406 CALL section_add_keyword(section, keyword)
407 CALL keyword_release(keyword)
408
409 ! Machine Learning *********************************************************
410 CALL section_create(subsection, __location__, name="MACHINE_LEARNING", description="Machine learning section")
411
412 CALL keyword_create(keyword, __location__, name="METHOD", &
413 description="Machine learning scheme used to predict PAO basis sets.", &
414 enum_c_vals=s2a("GAUSSIAN_PROCESS", "NEURAL_NETWORK", "LAZY"), &
415 enum_i_vals=(/pao_ml_gp, pao_ml_nn, pao_ml_lazy/), &
416 enum_desc=s2a("Gaussian Process", "Neural Network", "Just rely on prior"), &
417 default_i_val=pao_ml_gp)
418 CALL section_add_keyword(subsection, keyword)
419 CALL keyword_release(keyword)
420
421 CALL keyword_create(keyword, __location__, name="PRIOR", &
422 description="Prior used for predictions.", &
423 enum_c_vals=s2a("ZERO", "MEAN"), &
424 enum_i_vals=(/pao_ml_prior_zero, pao_ml_prior_mean/), &
425 enum_desc=s2a("Simply use zero", "Use average of training-set"), &
426 default_i_val=pao_ml_prior_zero)
427 CALL section_add_keyword(subsection, keyword)
428 CALL keyword_release(keyword)
429
430 CALL keyword_create(keyword, __location__, name="DESCRIPTOR", &
431 description="Descriptor used as input for machine learning.", &
432 enum_c_vals=s2a("POTENTIAL", "OVERLAP", "R12"), &
434 enum_desc=s2a("Eigenvalues of local potential matrix", &
435 "Eigenvalues of local overlap matrix", &
436 "Distance between two atoms (just for testing)"), &
437 citations=(/zhu2016/), &
438 default_i_val=pao_ml_desc_pot)
439 CALL section_add_keyword(subsection, keyword)
440 CALL keyword_release(keyword)
441
442 CALL keyword_create(keyword, __location__, name="TOLERANCE", &
443 description="Maximum variance tolerated when making predictions.", &
444 default_r_val=1.0e-2_dp)
445 CALL section_add_keyword(subsection, keyword)
446 CALL keyword_release(keyword)
447
448 CALL keyword_create(keyword, __location__, name="GP_NOISE_VAR", &
449 description="Variance of noise used for Gaussian Process machine learning.", &
450 default_r_val=0.1_dp)
451 CALL section_add_keyword(subsection, keyword)
452 CALL keyword_release(keyword)
453
454 CALL keyword_create(keyword, __location__, name="GP_SCALE", &
455 description="Length scale used for Gaussian Process machine learning.", &
456 default_r_val=0.05_dp)
457 CALL section_add_keyword(subsection, keyword)
458 CALL keyword_release(keyword)
459
460 ! special free-text section similar to SUBSYS%COORD
461 CALL section_create(subsubsection, __location__, name="TRAINING_SET", &
462 description="Lists PAO-restart file used for training")
463 CALL keyword_create(keyword, __location__, name="_DEFAULT_KEYWORD_", &
464 description="One file name per line.", &
465 repeats=.true., type_of_var=lchar_t)
466 CALL section_add_keyword(subsubsection, keyword)
467 CALL keyword_release(keyword)
468 CALL section_add_subsection(subsection, subsubsection)
469 CALL section_release(subsubsection)
470
471 CALL section_add_subsection(section, subsection)
472 CALL section_release(subsection)
473
474 ! Output *******************************************************************
475 CALL section_create(subsection, __location__, name="PRINT", &
476 description="Printkey section", &
477 n_keywords=0, n_subsections=1, repeats=.true.)
478
479 CALL cp_print_key_section_create(printkey, __location__, "RUN_INFO", &
480 description="Normal output by PAO", &
481 print_level=low_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
482 CALL section_add_subsection(subsection, printkey)
483 CALL section_release(printkey)
484
485 CALL cp_print_key_section_create(printkey, __location__, "ATOM_INFO", &
486 description="One line summary for each atom", &
487 print_level=high_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
488 CALL section_add_subsection(subsection, printkey)
489 CALL section_release(printkey)
490
491 CALL cp_print_key_section_create(printkey, __location__, "FOCK_GAP", &
492 description="Gap of the fock matrix for each atom", &
493 print_level=high_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__, "FOCK_EIGENVALUES", &
498 description="Eigenvalues of the fock matrix 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__, "ML_VARIANCE", &
504 description="Variances of machine learning predictions 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__, "ML_TRAINING_DATA", &
510 description="Dumps training data used for machine learning", &
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__, "OPT_INFO", &
516 description="Output by the optimizer", &
517 print_level=low_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__, "RESTART", &
522 description="Restart file of PAO basis", &
523 print_level=high_print_level, add_last=add_last_numeric, filename="")
524
525 CALL keyword_create(keyword, __location__, name="BACKUP_COPIES", &
526 description="Specifies the maximum number of backup copies.", &
527 usage="BACKUP_COPIES {int}", &
528 default_i_val=1)
529 CALL section_add_keyword(printkey, keyword)
530 CALL keyword_release(keyword)
531
532 CALL keyword_create(keyword, __location__, name="WRITE_CYCLES", &
533 description="Maximum number of PAO line search cycles until a restart is written.", &
534 default_i_val=100)
535 CALL section_add_keyword(printkey, keyword)
536 CALL keyword_release(keyword)
537
538 CALL section_add_subsection(subsection, printkey)
539 CALL section_release(printkey)
540
541 CALL section_add_subsection(section, subsection)
542 CALL section_release(subsection)
543
544 ! OPT stuff ****************************************************************
545 CALL keyword_create(keyword, __location__, name="OPTIMIZER", &
546 description="Optimizer used to find PAO basis.", &
547 enum_c_vals=s2a("CG", "BFGS"), &
548 enum_i_vals=(/pao_opt_cg, pao_opt_bfgs/), &
549 enum_desc=s2a("Conjugate gradient algorithm", &
550 "Broyden-Fletcher-Goldfarb-Shanno algorithm"), &
551 default_i_val=pao_opt_cg)
552 CALL section_add_keyword(section, keyword)
553 CALL keyword_release(keyword)
554
555 CALL keyword_create(keyword, __location__, name="CG_INIT_STEPS", &
556 description="Number of steepest descent steps before starting the"// &
557 " conjugate gradients optimization.", &
558 default_i_val=2)
559 CALL section_add_keyword(section, keyword)
560 CALL keyword_release(keyword)
561
562 CALL keyword_create(keyword, __location__, name="CG_RESET_LIMIT", &
563 description="The CG is reseted if the cosine of the angle between the last "// &
564 "search direction and the new gradient is larger that the limit.", &
565 default_r_val=0.1_dp)
566 CALL section_add_keyword(section, keyword)
567 CALL keyword_release(keyword)
568
569 CALL linesearch_create_section(subsection)
570 CALL section_add_subsection(section, subsection)
571
572 CALL section_release(subsection)
573 END SUBROUTINE create_pao_section
574
575END 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)
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
character(len=11) function, public id2str(id)
Helper routine.
Definition pao_input.F:216
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
subroutine, public create_pao_section(section)
Creates the PAO subsection of the linear scaling section.
Definition pao_input.F:262
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