(git:374b731)
Loading...
Searching...
No Matches
qs_interactions.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
8! **************************************************************************************************
9!> \brief Calculate the interaction radii for the operator matrix calculation.
10!> \par History
11!> Joost VandeVondele : added exp_radius_very_extended
12!> 24.09.2002 overloaded init_interaction_radii for KG use (gt)
13!> 27.02.2004 integrated KG into QS version of init_interaction_radii (jgh)
14!> 07.03.2006 new routine to extend kind interaction radius for semi-empiric (jgh)
15!> \author MK (12.07.2000)
16! **************************************************************************************************
18
19 USE ao_util, ONLY: exp_radius
39 USE kinds, ONLY: default_string_length,&
40 dp
44 USE qs_kind_types, ONLY: get_qs_kind,&
47#include "./base/base_uses.f90"
48
49 IMPLICIT NONE
50
51 PRIVATE
52
53! *** Global parameters (only in this module)
54
55 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_interactions'
56
57! *** Public subroutines ***
58
60
63
64CONTAINS
65
66! **************************************************************************************************
67!> \brief Initialize all the atomic kind radii for a given threshold value.
68!> \param qs_control ...
69!> \param qs_kind_set ...
70!> \date 24.09.2002
71!> \author GT
72!> \version 1.0
73! **************************************************************************************************
74 SUBROUTINE init_interaction_radii(qs_control, qs_kind_set)
75
76 TYPE(qs_control_type), INTENT(IN) :: qs_control
77 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
78
79 CHARACTER(len=*), PARAMETER :: routinen = 'init_interaction_radii'
80
81 INTEGER :: handle, i, iexp_ppl, ikind, ip, iprj_ppnl, j, l, lppl, lppnl, lppsl, lprj, &
82 lprj_ppnl, maxl, n_local, nexp_lpot, nexp_lsd, nexp_ppl, nkind, nloc
83 INTEGER, DIMENSION(0:10) :: npot
84 INTEGER, DIMENSION(1:10) :: nrloc
85 INTEGER, DIMENSION(1:15, 0:10) :: nrpot
86 INTEGER, DIMENSION(:), POINTER :: nct_lpot, nct_lsd, nprj, nprj_ppnl
87 LOGICAL :: ecp_local, ecp_semi_local, llsd, lpot, &
88 paw_atom
89 LOGICAL, DIMENSION(0:5) :: is_nonlocal
90 REAL(kind=dp) :: alpha_core_charge, alpha_ppl, ccore_charge, cerf_ppl, core_charge_radius, &
91 cval, ppl_radius, ppnl_radius, rcprj, zeta
92 REAL(kind=dp), DIMENSION(1:10) :: aloc, bloc
93 REAL(kind=dp), DIMENSION(1:15, 0:10) :: apot, bpot
94 REAL(kind=dp), DIMENSION(:), POINTER :: a_local, a_nonlocal, alpha_lpot, &
95 alpha_lsd, alpha_ppnl, c_local, &
96 cexp_ppl
97 REAL(kind=dp), DIMENSION(:, :), POINTER :: cprj_ppnl, cval_lpot, cval_lsd, rzetprj, &
98 zet
99 REAL(kind=dp), DIMENSION(:, :, :), POINTER :: c_nonlocal
100 TYPE(all_potential_type), POINTER :: all_potential
101 TYPE(gth_potential_type), POINTER :: gth_potential
102 TYPE(gto_basis_set_type), POINTER :: aux_basis_set, aux_fit_basis_set, aux_gw_basis, &
103 aux_opt_basis_set, gapw_1c_basis, harris_basis, lri_basis, mao_basis, min_basis_set, &
104 orb_basis_set, p_lri_basis, ri_aux_basis_set, ri_basis, ri_xas_basis, soft_basis, &
105 tda_k_basis
106 TYPE(paw_proj_set_type), POINTER :: paw_proj_set
107 TYPE(sgp_potential_type), POINTER :: sgp_potential
108
109 CALL timeset(routinen, handle)
110
111 NULLIFY (all_potential, gth_potential, sgp_potential)
112 NULLIFY (aux_basis_set, aux_fit_basis_set, aux_gw_basis, tda_k_basis, &
113 harris_basis, lri_basis, mao_basis, orb_basis_set, p_lri_basis, ri_aux_basis_set, &
114 ri_basis, ri_xas_basis, soft_basis, gapw_1c_basis, aux_opt_basis_set, min_basis_set)
115 NULLIFY (nprj_ppnl, nprj)
116 NULLIFY (alpha_ppnl, cexp_ppl, cprj_ppnl, zet)
117
118 nkind = SIZE(qs_kind_set)
119 nexp_ppl = 0
120
121 DO ikind = 1, nkind
122
123 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set, basis_type="ORB")
124 CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_basis_set, basis_type="AUX")
125 CALL get_qs_kind(qs_kind_set(ikind), basis_set=min_basis_set, basis_type="MIN")
126 CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_fit_basis_set, basis_type="AUX_FIT")
127 CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_opt_basis_set, basis_type="AUX_OPT")
128 CALL get_qs_kind(qs_kind_set(ikind), basis_set=lri_basis, basis_type="LRI_AUX")
129 CALL get_qs_kind(qs_kind_set(ikind), basis_set=p_lri_basis, basis_type="P_LRI_AUX")
130 CALL get_qs_kind(qs_kind_set(ikind), basis_set=ri_basis, basis_type="RI_HXC")
131 CALL get_qs_kind(qs_kind_set(ikind), basis_set=ri_aux_basis_set, basis_type="RI_AUX")
132 CALL get_qs_kind(qs_kind_set(ikind), basis_set=mao_basis, basis_type="MAO")
133 CALL get_qs_kind(qs_kind_set(ikind), basis_set=harris_basis, basis_type="HARRIS")
134 CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_gw_basis, basis_type="AUX_GW")
135 CALL get_qs_kind(qs_kind_set(ikind), basis_set=ri_xas_basis, basis_type="RI_XAS")
136 CALL get_qs_kind(qs_kind_set(ikind), basis_set=soft_basis, basis_type="ORB_SOFT")
137 CALL get_qs_kind(qs_kind_set(ikind), basis_set=gapw_1c_basis, basis_type="GAPW_1C")
138 CALL get_qs_kind(qs_kind_set(ikind), basis_set=tda_k_basis, basis_type="TDA_HFX")
139 CALL get_qs_kind(qs_kind_set(ikind), &
140 paw_proj_set=paw_proj_set, &
141 paw_atom=paw_atom, &
142 all_potential=all_potential, &
143 gth_potential=gth_potential, &
144 sgp_potential=sgp_potential)
145
146 ! Calculate the orbital basis function radii ***
147 ! For ALL electron this has to come before the calculation of the
148 ! radii used to calculate the 3c lists.
149 ! Indeed, there the radii of the GTO primitives are needed
150 IF (ASSOCIATED(orb_basis_set)) THEN
151 CALL init_interaction_radii_orb_basis(orb_basis_set, qs_control%eps_pgf_orb, &
152 qs_control%eps_kg_orb)
153 END IF
154
155 IF (ASSOCIATED(all_potential)) THEN
156
157 CALL get_potential(potential=all_potential, &
158 alpha_core_charge=alpha_core_charge, &
159 ccore_charge=ccore_charge)
160
161 ! Calculate the radius of the core charge distribution
162
163 core_charge_radius = exp_radius(0, alpha_core_charge, &
164 qs_control%eps_core_charge, &
165 ccore_charge)
166
167 CALL set_potential(potential=all_potential, &
168 core_charge_radius=core_charge_radius)
169
170 ELSE IF (ASSOCIATED(gth_potential)) THEN
171
172 CALL get_potential(potential=gth_potential, &
173 alpha_core_charge=alpha_core_charge, &
174 ccore_charge=ccore_charge, &
175 alpha_ppl=alpha_ppl, &
176 cerf_ppl=cerf_ppl, &
177 nexp_ppl=nexp_ppl, &
178 cexp_ppl=cexp_ppl, &
179 lpot_present=lpot, &
180 lsd_present=llsd, &
181 lppnl=lppnl, &
182 alpha_ppnl=alpha_ppnl, &
183 nprj_ppnl=nprj_ppnl, &
184 cprj_ppnl=cprj_ppnl)
185
186 ! Calculate the radius of the core charge distribution
187 core_charge_radius = exp_radius(0, alpha_core_charge, &
188 qs_control%eps_core_charge, &
189 ccore_charge)
190
191 ! Calculate the radii of the local part
192 ! of the Goedecker pseudopotential (GTH)
193 ppl_radius = exp_radius(0, alpha_ppl, qs_control%eps_ppl, cerf_ppl)
194
195 DO iexp_ppl = 1, nexp_ppl
196 lppl = 2*(iexp_ppl - 1)
197 ppl_radius = max(ppl_radius, &
198 exp_radius(lppl, alpha_ppl, &
199 qs_control%eps_ppl, &
200 cexp_ppl(iexp_ppl), &
201 rlow=ppl_radius))
202 END DO
203 IF (lpot) THEN
204 ! extended local potential
205 CALL get_potential(potential=gth_potential, &
206 nexp_lpot=nexp_lpot, &
207 alpha_lpot=alpha_lpot, &
208 nct_lpot=nct_lpot, &
209 cval_lpot=cval_lpot)
210 DO j = 1, nexp_lpot
211 DO i = 1, nct_lpot(j)
212 lppl = 2*(i - 1)
213 ppl_radius = max(ppl_radius, &
214 exp_radius(lppl, alpha_lpot(j), qs_control%eps_ppl, &
215 cval_lpot(i, j), rlow=ppl_radius))
216 END DO
217 END DO
218 END IF
219 IF (llsd) THEN
220 ! lsd local potential
221 CALL get_potential(potential=gth_potential, &
222 nexp_lsd=nexp_lsd, &
223 alpha_lsd=alpha_lsd, &
224 nct_lsd=nct_lsd, &
225 cval_lsd=cval_lsd)
226 DO j = 1, nexp_lsd
227 DO i = 1, nct_lsd(j)
228 lppl = 2*(i - 1)
229 ppl_radius = max(ppl_radius, &
230 exp_radius(lppl, alpha_lsd(j), qs_control%eps_ppl, &
231 cval_lsd(i, j), rlow=ppl_radius))
232 END DO
233 END DO
234 END IF
235
236 ! Calculate the radii of the non-local part
237 ! of the Goedecker pseudopotential (GTH)
238 ppnl_radius = 0.0_dp
239 DO l = 0, lppnl
240 DO iprj_ppnl = 1, nprj_ppnl(l)
241 lprj_ppnl = l + 2*(iprj_ppnl - 1)
242 ppnl_radius = max(ppnl_radius, &
243 exp_radius(lprj_ppnl, alpha_ppnl(l), &
244 qs_control%eps_pgf_orb, &
245 cprj_ppnl(iprj_ppnl, l), &
246 rlow=ppnl_radius))
247 END DO
248 END DO
249 CALL set_potential(potential=gth_potential, &
250 core_charge_radius=core_charge_radius, &
251 ppl_radius=ppl_radius, &
252 ppnl_radius=ppnl_radius)
253
254 ELSE IF (ASSOCIATED(sgp_potential)) THEN
255
256 ! Calculate the radius of the core charge distribution
257 CALL get_potential(potential=sgp_potential, &
258 alpha_core_charge=alpha_core_charge, &
259 ccore_charge=ccore_charge)
260 core_charge_radius = exp_radius(0, alpha_core_charge, &
261 qs_control%eps_core_charge, &
262 ccore_charge)
263 ! Calculate the radii of the local part
264 ppl_radius = core_charge_radius
265 CALL get_potential(potential=sgp_potential, ecp_local=ecp_local)
266 IF (ecp_local) THEN
267 CALL get_potential(potential=sgp_potential, nloc=nloc, nrloc=nrloc, aloc=aloc, bloc=bloc)
268 DO i = 1, nloc
269 lppl = max(0, nrloc(i) - 2)
270 ppl_radius = max(ppl_radius, &
271 exp_radius(lppl, bloc(i), qs_control%eps_ppl, aloc(i), rlow=ppl_radius))
272 END DO
273 ELSE
274 CALL get_potential(potential=sgp_potential, n_local=n_local, a_local=a_local, c_local=c_local)
275 DO i = 1, n_local
276 ppl_radius = max(ppl_radius, &
277 exp_radius(0, a_local(i), qs_control%eps_ppl, c_local(i), rlow=ppl_radius))
278 END DO
279 END IF
280 ! Calculate the radii of the semi-local part
281 CALL get_potential(potential=sgp_potential, ecp_semi_local=ecp_semi_local)
282 IF (ecp_semi_local) THEN
283 CALL get_potential(potential=sgp_potential, sl_lmax=lppsl, npot=npot, nrpot=nrpot, &
284 apot=apot, bpot=bpot)
285 DO l = 0, lppsl
286 DO i = 1, npot(l)
287 lppl = max(0, nrpot(i, l) - 2)
288 ppl_radius = max(ppl_radius, &
289 exp_radius(lppl, bpot(i, l), qs_control%eps_ppl, apot(i, l), &
290 rlow=ppl_radius))
291 END DO
292 END DO
293 END IF
294 ! Calculate the radii of the non-local part
295 ppnl_radius = 0.0_dp
296 CALL get_potential(potential=sgp_potential, lmax=lppnl, n_nonlocal=nloc)
297 CALL get_potential(potential=sgp_potential, is_nonlocal=is_nonlocal, &
298 a_nonlocal=a_nonlocal, c_nonlocal=c_nonlocal)
299 DO l = 0, lppnl
300 IF (is_nonlocal(l)) THEN
301 DO i = 1, nloc
302 cval = maxval(abs(c_nonlocal(i, :, l)))
303 ppnl_radius = max(ppnl_radius, &
304 exp_radius(l, a_nonlocal(i), qs_control%eps_pgf_orb, cval, rlow=ppnl_radius))
305 END DO
306 END IF
307 END DO
308 CALL set_potential(potential=sgp_potential, &
309 core_charge_radius=core_charge_radius, &
310 ppl_radius=ppl_radius, &
311 ppnl_radius=ppnl_radius)
312 END IF
313
314 ! Calculate the aux fit orbital basis function radii
315 IF (ASSOCIATED(aux_fit_basis_set)) THEN
316 CALL init_interaction_radii_orb_basis(aux_fit_basis_set, qs_control%eps_pgf_orb, &
317 qs_control%eps_kg_orb)
318 END IF
319
320 ! Calculate the aux opt orbital basis function radii
321 IF (ASSOCIATED(aux_opt_basis_set)) THEN
322 CALL init_interaction_radii_orb_basis(aux_opt_basis_set, qs_control%eps_pgf_orb)
323 END IF
324
325 ! Calculate the minimal basis function radii
326 IF (ASSOCIATED(min_basis_set)) THEN
327 CALL init_interaction_radii_orb_basis(min_basis_set, qs_control%eps_pgf_orb)
328 END IF
329
330 ! Calculate the aux orbital basis function radii
331 IF (ASSOCIATED(aux_basis_set)) THEN
332 CALL init_interaction_radii_orb_basis(aux_basis_set, qs_control%eps_pgf_orb)
333 END IF
334
335 ! Calculate the RI aux orbital basis function radii
336 IF (ASSOCIATED(ri_aux_basis_set)) THEN
337 CALL init_interaction_radii_orb_basis(ri_aux_basis_set, qs_control%eps_pgf_orb)
338 END IF
339
340 ! Calculate the MAO orbital basis function radii
341 IF (ASSOCIATED(mao_basis)) THEN
342 CALL init_interaction_radii_orb_basis(mao_basis, qs_control%eps_pgf_orb)
343 END IF
344
345 ! Calculate the HARRIS orbital basis function radii
346 IF (ASSOCIATED(harris_basis)) THEN
347 CALL init_interaction_radii_orb_basis(harris_basis, qs_control%eps_pgf_orb)
348 END IF
349
350 ! Calculate the AUX_GW orbital basis function radii
351 IF (ASSOCIATED(aux_gw_basis)) THEN
352 CALL init_interaction_radii_orb_basis(aux_gw_basis, qs_control%eps_pgf_orb)
353 END IF
354
355 ! Calculate the soft orbital basis function radii
356 IF (ASSOCIATED(soft_basis)) THEN
357 CALL init_interaction_radii_orb_basis(soft_basis, qs_control%eps_pgf_orb)
358 END IF
359
360 ! Calculate the GAPW 1 center basis function radii
361 IF (ASSOCIATED(gapw_1c_basis)) THEN
362 CALL init_interaction_radii_orb_basis(gapw_1c_basis, qs_control%eps_pgf_orb)
363 END IF
364
365 ! Calculate the HFX SR basis for TDA
366 IF (ASSOCIATED(tda_k_basis)) THEN
367 CALL init_interaction_radii_orb_basis(tda_k_basis, qs_control%eps_pgf_orb)
368 END IF
369
370 ! Calculate the lri basis function radii
371 IF (ASSOCIATED(lri_basis)) THEN
372 CALL init_interaction_radii_orb_basis(lri_basis, qs_control%eps_pgf_orb)
373 END IF
374 IF (ASSOCIATED(ri_basis)) THEN
375 CALL init_interaction_radii_orb_basis(ri_basis, qs_control%eps_pgf_orb)
376 END IF
377 IF (ASSOCIATED(ri_xas_basis)) THEN
378 CALL init_interaction_radii_orb_basis(ri_xas_basis, qs_control%eps_pgf_orb)
379 END IF
380 IF (ASSOCIATED(p_lri_basis)) THEN
381 CALL init_interaction_radii_orb_basis(p_lri_basis, qs_control%eps_pgf_orb)
382 END IF
383
384 ! Calculate the paw projector basis function radii
385 IF (ASSOCIATED(paw_proj_set)) THEN
386 CALL get_paw_proj_set(paw_proj_set=paw_proj_set, &
387 nprj=nprj, &
388 maxl=maxl, &
389 zetprj=zet, &
390 rzetprj=rzetprj)
391 rcprj = 0.0_dp
392 rzetprj = 0.0_dp
393 DO lprj = 0, maxl
394 DO ip = 1, nprj(lprj)
395 zeta = zet(ip, lprj)
396 rzetprj(ip, lprj) = max(rzetprj(ip, lprj), &
397 exp_radius(lprj, zeta, qs_control%eps_pgf_orb, &
398 1.0_dp, rlow=rzetprj(ip, lprj)))
399 rcprj = max(rcprj, rzetprj(ip, lprj))
400 END DO
401 END DO
402 CALL set_paw_proj_set(paw_proj_set=paw_proj_set, &
403 rzetprj=rzetprj, &
404 rcprj=rcprj)
405
406 END IF
407 END DO ! ikind
408
409 CALL timestop(handle)
410
411 END SUBROUTINE init_interaction_radii
412
413! **************************************************************************************************
414!> \brief ...
415!> \param orb_basis_set ...
416!> \param eps_pgf_orb ...
417!> \param eps_pgf_short ...
418! **************************************************************************************************
419 SUBROUTINE init_interaction_radii_orb_basis(orb_basis_set, eps_pgf_orb, eps_pgf_short)
420
421 TYPE(gto_basis_set_type), POINTER :: orb_basis_set
422 REAL(kind=dp), INTENT(IN) :: eps_pgf_orb
423 REAL(kind=dp), INTENT(IN), OPTIONAL :: eps_pgf_short
424
425 INTEGER :: ipgf, iset, ishell, l, nset
426 INTEGER, DIMENSION(:), POINTER :: npgf, nshell
427 INTEGER, DIMENSION(:, :), POINTER :: lshell
428 REAL(kind=dp) :: eps_short, gcca, kind_radius, &
429 short_radius, zeta
430 REAL(kind=dp), DIMENSION(:), POINTER :: set_radius
431 REAL(kind=dp), DIMENSION(:, :), POINTER :: pgf_radius, zet
432 REAL(kind=dp), DIMENSION(:, :, :), POINTER :: gcc
433
434 IF (ASSOCIATED(orb_basis_set)) THEN
435
436 IF (PRESENT(eps_pgf_short)) THEN
437 eps_short = eps_pgf_short
438 ELSE
439 eps_short = eps_pgf_orb
440 END IF
441
442 CALL get_gto_basis_set(gto_basis_set=orb_basis_set, &
443 nset=nset, &
444 nshell=nshell, &
445 npgf=npgf, &
446 l=lshell, &
447 zet=zet, &
448 gcc=gcc, &
449 pgf_radius=pgf_radius, &
450 set_radius=set_radius)
451
452 kind_radius = 0.0_dp
453 short_radius = 0.0_dp
454
455 DO iset = 1, nset
456 set_radius(iset) = 0.0_dp
457 DO ipgf = 1, npgf(iset)
458 pgf_radius(ipgf, iset) = 0.0_dp
459 DO ishell = 1, nshell(iset)
460 l = lshell(ishell, iset)
461 gcca = gcc(ipgf, ishell, iset)
462 zeta = zet(ipgf, iset)
463 pgf_radius(ipgf, iset) = max(pgf_radius(ipgf, iset), &
464 exp_radius(l, zeta, eps_pgf_orb, gcca, &
465 rlow=pgf_radius(ipgf, iset)))
466 short_radius = max(short_radius, &
467 exp_radius(l, zeta, eps_short, gcca, &
468 rlow=short_radius))
469 END DO
470 set_radius(iset) = max(set_radius(iset), pgf_radius(ipgf, iset))
471 END DO
472 kind_radius = max(kind_radius, set_radius(iset))
473 END DO
474
475 CALL set_gto_basis_set(gto_basis_set=orb_basis_set, &
476 pgf_radius=pgf_radius, &
477 set_radius=set_radius, &
478 kind_radius=kind_radius, &
479 short_kind_radius=short_radius)
480
481 END IF
482
484
485! **************************************************************************************************
486!> \brief ...
487!> \param se_control ...
488!> \param atomic_kind_set ...
489!> \param qs_kind_set ...
490!> \param subsys_section ...
491! **************************************************************************************************
492 SUBROUTINE init_se_nlradius(se_control, atomic_kind_set, qs_kind_set, &
493 subsys_section)
494
495 TYPE(semi_empirical_control_type), POINTER :: se_control
496 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
497 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
498 TYPE(section_vals_type), POINTER :: subsys_section
499
500 INTEGER :: ikind, nkind
501 REAL(kind=dp) :: kind_radius
502 TYPE(gto_basis_set_type), POINTER :: orb_basis_set
503 TYPE(qs_kind_type), POINTER :: qs_kind
504
505 NULLIFY (orb_basis_set, qs_kind)
506
507 nkind = SIZE(qs_kind_set)
508
509 DO ikind = 1, nkind
510
511 qs_kind => qs_kind_set(ikind)
512
513 CALL get_qs_kind(qs_kind=qs_kind, basis_set=orb_basis_set)
514
515 IF (ASSOCIATED(orb_basis_set)) THEN
516
517 CALL get_gto_basis_set(gto_basis_set=orb_basis_set, &
518 kind_radius=kind_radius)
519
520 kind_radius = max(kind_radius, se_control%cutoff_exc)
521
522 CALL set_gto_basis_set(gto_basis_set=orb_basis_set, &
523 kind_radius=kind_radius)
524
525 END IF
526
527 END DO
528
529 CALL write_kind_radii(atomic_kind_set, qs_kind_set, subsys_section)
530
531 END SUBROUTINE init_se_nlradius
532
533! **************************************************************************************************
534!> \brief ...
535!> \param atomic_kind_set ...
536!> \param qs_kind_set ...
537!> \param subsys_section ...
538! **************************************************************************************************
539 SUBROUTINE write_kind_radii(atomic_kind_set, qs_kind_set, subsys_section)
540
541 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
542 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
543 TYPE(section_vals_type), POINTER :: subsys_section
544
545 CHARACTER(LEN=10) :: bas
546 CHARACTER(LEN=default_string_length) :: name, unit_str
547 INTEGER :: ikind, nkind, output_unit
548 REAL(kind=dp) :: conv, kind_radius
549 TYPE(cp_logger_type), POINTER :: logger
550 TYPE(gto_basis_set_type), POINTER :: orb_basis_set
551
552 NULLIFY (logger)
553 logger => cp_get_default_logger()
554 NULLIFY (orb_basis_set)
555 bas = "ORBITAL "
556
557 nkind = SIZE(atomic_kind_set)
558! *** Print the kind radii ***
559 output_unit = cp_print_key_unit_nr(logger, subsys_section, &
560 "PRINT%RADII/KIND_RADII", extension=".Log")
561 CALL section_vals_val_get(subsys_section, "PRINT%RADII%UNIT", c_val=unit_str)
562 conv = cp_unit_from_cp2k(1.0_dp, trim(unit_str))
563 IF (output_unit > 0) THEN
564 WRITE (unit=output_unit, fmt="(/,T2,A,T56,A,T63,A,T75,A)") &
565 "RADII: "//trim(bas)//" BASIS in "//trim(unit_str), &
566 "Kind", "Label", "Radius"
567 DO ikind = 1, nkind
568 CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
569 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set)
570 IF (ASSOCIATED(orb_basis_set)) THEN
571 CALL get_gto_basis_set(gto_basis_set=orb_basis_set, &
572 kind_radius=kind_radius)
573 WRITE (unit=output_unit, fmt="(T55,I5,T63,A5,T69,F12.6)") &
574 ikind, name, kind_radius*conv
575 ELSE
576 WRITE (unit=output_unit, fmt="(T55,I5,T63,A5,T72,A9)") &
577 ikind, name, "no basis"
578 END IF
579 END DO
580 END IF
581 CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
582 "PRINT%RADII/KIND_RADII")
583
584 END SUBROUTINE write_kind_radii
585
586! **************************************************************************************************
587!> \brief Write the radii of the core charge distributions to the output
588!> unit.
589!> \param atomic_kind_set ...
590!> \param qs_kind_set ...
591!> \param subsys_section ...
592!> \date 15.09.2000
593!> \author MK
594!> \version 1.0
595! **************************************************************************************************
596 SUBROUTINE write_core_charge_radii(atomic_kind_set, qs_kind_set, subsys_section)
597 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
598 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
599 TYPE(section_vals_type), POINTER :: subsys_section
600
601 CHARACTER(LEN=default_string_length) :: name, unit_str
602 INTEGER :: ikind, nkind, output_unit
603 REAL(kind=dp) :: conv, core_charge_radius
604 TYPE(all_potential_type), POINTER :: all_potential
605 TYPE(cp_logger_type), POINTER :: logger
606 TYPE(gth_potential_type), POINTER :: gth_potential
607
608 NULLIFY (logger)
609 logger => cp_get_default_logger()
610 output_unit = cp_print_key_unit_nr(logger, subsys_section, &
611 "PRINT%RADII/CORE_CHARGE_RADII", extension=".Log")
612 CALL section_vals_val_get(subsys_section, "PRINT%RADII%UNIT", c_val=unit_str)
613 conv = cp_unit_from_cp2k(1.0_dp, trim(unit_str))
614 IF (output_unit > 0) THEN
615 nkind = SIZE(atomic_kind_set)
616 WRITE (unit=output_unit, fmt="(/,T2,A,T56,A,T63,A,T75,A)") &
617 "RADII: CORE CHARGE DISTRIBUTIONS in "// &
618 trim(unit_str), "Kind", "Label", "Radius"
619 DO ikind = 1, nkind
620 CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
621 CALL get_qs_kind(qs_kind_set(ikind), &
622 all_potential=all_potential, gth_potential=gth_potential)
623
624 IF (ASSOCIATED(all_potential)) THEN
625 CALL get_potential(potential=all_potential, &
626 core_charge_radius=core_charge_radius)
627 WRITE (unit=output_unit, fmt="(T55,I5,T63,A5,T69,F12.6)") &
628 ikind, name, core_charge_radius*conv
629 ELSE IF (ASSOCIATED(gth_potential)) THEN
630 CALL get_potential(potential=gth_potential, &
631 core_charge_radius=core_charge_radius)
632 WRITE (unit=output_unit, fmt="(T55,I5,T63,A5,T69,F12.6)") &
633 ikind, name, core_charge_radius*conv
634 END IF
635 END DO
636 END IF
637 CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
638 "PRINT%RADII/CORE_CHARGE_RADII")
639 END SUBROUTINE write_core_charge_radii
640
641! **************************************************************************************************
642!> \brief Write the orbital basis function radii to the output unit.
643!> \param basis ...
644!> \param atomic_kind_set ...
645!> \param qs_kind_set ...
646!> \param subsys_section ...
647!> \date 05.06.2000
648!> \author MK
649!> \version 1.0
650! **************************************************************************************************
651 SUBROUTINE write_pgf_orb_radii(basis, atomic_kind_set, qs_kind_set, subsys_section)
652
653 CHARACTER(len=*) :: basis
654 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
655 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
656 TYPE(section_vals_type), POINTER :: subsys_section
657
658 CHARACTER(LEN=10) :: bas
659 CHARACTER(LEN=default_string_length) :: name, unit_str
660 INTEGER :: ikind, ipgf, iset, nkind, nset, &
661 output_unit
662 INTEGER, DIMENSION(:), POINTER :: npgf
663 REAL(kind=dp) :: conv, kind_radius, short_kind_radius
664 REAL(kind=dp), DIMENSION(:), POINTER :: set_radius
665 REAL(kind=dp), DIMENSION(:, :), POINTER :: pgf_radius
666 TYPE(cp_logger_type), POINTER :: logger
667 TYPE(gto_basis_set_type), POINTER :: aux_basis_set, lri_basis_set, &
668 orb_basis_set
669
670 NULLIFY (logger)
671 logger => cp_get_default_logger()
672 NULLIFY (aux_basis_set, orb_basis_set, lri_basis_set)
673 bas = " "
674 bas(1:3) = basis(1:3)
675 CALL uppercase(bas)
676 IF (bas(1:3) == "ORB") THEN
677 bas = "ORBITAL "
678 ELSE IF (bas(1:3) == "AUX") THEN
679 bas = "AUXILLIARY"
680 ELSE IF (bas(1:3) == "LRI") THEN
681 bas = "LOCAL RI"
682 ELSE
683 cpabort("Undefined basis set type")
684 END IF
685
686 nkind = SIZE(qs_kind_set)
687
688! *** Print the kind radii ***
689 output_unit = cp_print_key_unit_nr(logger, subsys_section, &
690 "PRINT%RADII/KIND_RADII", extension=".Log")
691 CALL section_vals_val_get(subsys_section, "PRINT%RADII%UNIT", c_val=unit_str)
692 conv = cp_unit_from_cp2k(1.0_dp, trim(unit_str))
693 IF (output_unit > 0) THEN
694 WRITE (unit=output_unit, fmt="(/,T2,A,T46,A,T53,A,T63,A,T71,A)") &
695 "RADII: "//trim(bas)//" BASIS in "//trim(unit_str), &
696 "Kind", "Label", "Radius", "OCE Radius"
697 DO ikind = 1, nkind
698 CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
699 IF (bas(1:3) == "ORB") THEN
700 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set)
701 IF (ASSOCIATED(orb_basis_set)) THEN
702 CALL get_gto_basis_set(gto_basis_set=orb_basis_set, &
703 kind_radius=kind_radius, &
704 short_kind_radius=short_kind_radius)
705 END IF
706 ELSE IF (bas(1:3) == "AUX") THEN
707 CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_basis_set, basis_type="AUX")
708 IF (ASSOCIATED(aux_basis_set)) THEN
709 CALL get_gto_basis_set(gto_basis_set=aux_basis_set, &
710 kind_radius=kind_radius)
711 END IF
712 ELSE IF (bas(1:3) == "LOC") THEN
713 CALL get_qs_kind(qs_kind_set(ikind), basis_set=lri_basis_set, basis_type="LRI_AUX")
714 IF (ASSOCIATED(lri_basis_set)) THEN
715 CALL get_gto_basis_set(gto_basis_set=lri_basis_set, &
716 kind_radius=kind_radius)
717 END IF
718 ELSE
719 cpabort("Undefined basis set type")
720 END IF
721 IF (ASSOCIATED(aux_basis_set) .OR. ASSOCIATED(orb_basis_set)) THEN
722 WRITE (unit=output_unit, fmt="(T45,I5,T53,A5,T57,F12.6,T69,F12.6)") &
723 ikind, name, kind_radius*conv, short_kind_radius*conv
724 ELSE
725 WRITE (unit=output_unit, fmt="(T55,I5,T63,A5,T72,A9)") &
726 ikind, name, "no basis"
727 END IF
728 END DO
729 END IF
730 CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
731 "PRINT%RADII/KIND_RADII")
732
733! *** Print the shell set radii ***
734 output_unit = cp_print_key_unit_nr(logger, subsys_section, &
735 "PRINT%RADII/SET_RADII", extension=".Log")
736 IF (output_unit > 0) THEN
737 WRITE (unit=output_unit, fmt="(/,T2,A,T51,A,T57,A,T65,A,T75,A)") &
738 "RADII: SHELL SETS OF "//trim(bas)//" BASIS in "// &
739 trim(unit_str), "Kind", "Label", "Set", "Radius"
740 DO ikind = 1, nkind
741 CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
742 IF (bas(1:3) == "ORB") THEN
743 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set)
744 IF (ASSOCIATED(orb_basis_set)) THEN
745 CALL get_gto_basis_set(gto_basis_set=orb_basis_set, &
746 nset=nset, &
747 set_radius=set_radius)
748 END IF
749 ELSE IF (bas(1:3) == "AUX") THEN
750 CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_basis_set, basis_type="AUX")
751 IF (ASSOCIATED(aux_basis_set)) THEN
752 CALL get_gto_basis_set(gto_basis_set=aux_basis_set, &
753 nset=nset, &
754 set_radius=set_radius)
755 END IF
756 ELSE IF (bas(1:3) == "LOC") THEN
757 CALL get_qs_kind(qs_kind_set(ikind), basis_set=lri_basis_set, basis_type="LRI_AUX")
758 IF (ASSOCIATED(lri_basis_set)) THEN
759 CALL get_gto_basis_set(gto_basis_set=lri_basis_set, &
760 nset=nset, &
761 set_radius=set_radius)
762 END IF
763 ELSE
764 cpabort("Undefined basis set type")
765 END IF
766 IF (ASSOCIATED(aux_basis_set) .OR. ASSOCIATED(orb_basis_set)) THEN
767 WRITE (unit=output_unit, fmt="(T50,I5,T57,A5,(T63,I5,T69,F12.6))") &
768 ikind, name, (iset, set_radius(iset)*conv, iset=1, nset)
769 ELSE
770 WRITE (unit=output_unit, fmt="(T50,I5,T58,A5,T73,A8)") &
771 ikind, name, "no basis"
772 END IF
773 END DO
774 END IF
775 CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
776 "PRINT%RADII/SET_RADII")
777! *** Print the primitive Gaussian function radii ***
778 output_unit = cp_print_key_unit_nr(logger, subsys_section, &
779 "PRINT%RADII/PGF_RADII", extension=".Log")
780 IF (output_unit > 0) THEN
781 WRITE (unit=output_unit, fmt="(/,T2,A,T51,A,T57,A,T65,A,T75,A)") &
782 "RADII: PRIMITIVE GAUSSIANS OF "//trim(bas)//" BASIS in "// &
783 trim(unit_str), "Kind", "Label", "Set", "Radius"
784 DO ikind = 1, nkind
785 CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
786 IF (bas(1:3) == "ORB") THEN
787 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set)
788 IF (ASSOCIATED(orb_basis_set)) THEN
789 CALL get_gto_basis_set(gto_basis_set=orb_basis_set, &
790 nset=nset, &
791 npgf=npgf, &
792 pgf_radius=pgf_radius)
793 END IF
794 ELSE IF (bas(1:3) == "AUX") THEN
795 CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_basis_set, basis_type="AUX")
796 IF (ASSOCIATED(aux_basis_set)) THEN
797 CALL get_gto_basis_set(gto_basis_set=aux_basis_set, &
798 nset=nset, &
799 npgf=npgf, &
800 pgf_radius=pgf_radius)
801 END IF
802 ELSE IF (bas(1:3) == "LOC") THEN
803 CALL get_qs_kind(qs_kind_set(ikind), basis_set=lri_basis_set, basis_type="LRI_AUX")
804 IF (ASSOCIATED(lri_basis_set)) THEN
805 CALL get_gto_basis_set(gto_basis_set=lri_basis_set, &
806 nset=nset, &
807 npgf=npgf, &
808 pgf_radius=pgf_radius)
809 END IF
810 ELSE
811 cpabort("Undefined basis type")
812 END IF
813 IF (ASSOCIATED(aux_basis_set) .OR. ASSOCIATED(orb_basis_set) .OR. &
814 ASSOCIATED(lri_basis_set)) THEN
815 DO iset = 1, nset
816 WRITE (unit=output_unit, fmt="(T50,I5,T57,A5,T63,I5,(T69,F12.6))") &
817 ikind, name, iset, &
818 (pgf_radius(ipgf, iset)*conv, ipgf=1, npgf(iset))
819 END DO
820 ELSE
821 WRITE (unit=output_unit, fmt="(T50,I5,T58,A5,T73,A8)") &
822 ikind, name, "no basis"
823 END IF
824 END DO
825 END IF
826 CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
827 "PRINT%RADII/PGF_RADII")
828 END SUBROUTINE write_pgf_orb_radii
829
830! **************************************************************************************************
831!> \brief Write the radii of the exponential functions of the Goedecker
832!> pseudopotential (GTH, local part) to the logical unit number
833!> "output_unit".
834!> \param atomic_kind_set ...
835!> \param qs_kind_set ...
836!> \param subsys_section ...
837!> \date 06.10.2000
838!> \author MK
839!> \version 1.0
840! **************************************************************************************************
841 SUBROUTINE write_ppl_radii(atomic_kind_set, qs_kind_set, subsys_section)
842
843 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
844 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
845 TYPE(section_vals_type), POINTER :: subsys_section
846
847 CHARACTER(LEN=default_string_length) :: name, unit_str
848 INTEGER :: ikind, nkind, output_unit
849 REAL(kind=dp) :: conv, ppl_radius
850 TYPE(cp_logger_type), POINTER :: logger
851 TYPE(gth_potential_type), POINTER :: gth_potential
852
853 NULLIFY (logger)
854 logger => cp_get_default_logger()
855 output_unit = cp_print_key_unit_nr(logger, subsys_section, &
856 "PRINT%RADII/PPL_RADII", extension=".Log")
857 CALL section_vals_val_get(subsys_section, "PRINT%RADII%UNIT", c_val=unit_str)
858 conv = cp_unit_from_cp2k(1.0_dp, trim(unit_str))
859 IF (output_unit > 0) THEN
860 nkind = SIZE(atomic_kind_set)
861 WRITE (unit=output_unit, fmt="(/,T2,A,T56,A,T63,A,T75,A)") &
862 "RADII: LOCAL PART OF GTH/ELP PP in "// &
863 trim(unit_str), "Kind", "Label", "Radius"
864 DO ikind = 1, nkind
865 CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
866 CALL get_qs_kind(qs_kind_set(ikind), gth_potential=gth_potential)
867 IF (ASSOCIATED(gth_potential)) THEN
868 CALL get_potential(potential=gth_potential, &
869 ppl_radius=ppl_radius)
870 WRITE (unit=output_unit, fmt="(T55,I5,T63,A5,T69,F12.6)") &
871 ikind, name, ppl_radius*conv
872 END IF
873 END DO
874 END IF
875 CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
876 "PRINT%RADII/PPL_RADII")
877 END SUBROUTINE write_ppl_radii
878
879! **************************************************************************************************
880!> \brief Write the radii of the projector functions of the Goedecker
881!> pseudopotential (GTH, non-local part) to the logical unit number
882!> "output_unit".
883!> \param atomic_kind_set ...
884!> \param qs_kind_set ...
885!> \param subsys_section ...
886!> \date 06.10.2000
887!> \author MK
888!> \version 1.0
889! **************************************************************************************************
890 SUBROUTINE write_ppnl_radii(atomic_kind_set, qs_kind_set, subsys_section)
891
892 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
893 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
894 TYPE(section_vals_type), POINTER :: subsys_section
895
896 CHARACTER(LEN=default_string_length) :: name, unit_str
897 INTEGER :: ikind, nkind, output_unit
898 REAL(kind=dp) :: conv, ppnl_radius
899 TYPE(cp_logger_type), POINTER :: logger
900 TYPE(gth_potential_type), POINTER :: gth_potential
901
902 NULLIFY (logger)
903 logger => cp_get_default_logger()
904 output_unit = cp_print_key_unit_nr(logger, subsys_section, &
905 "PRINT%RADII/PPNL_RADII", extension=".Log")
906 CALL section_vals_val_get(subsys_section, "PRINT%RADII%UNIT", c_val=unit_str)
907 conv = cp_unit_from_cp2k(1.0_dp, trim(unit_str))
908 IF (output_unit > 0) THEN
909 nkind = SIZE(atomic_kind_set)
910 WRITE (unit=output_unit, fmt="(/,T2,A,T56,A,T63,A,T75,A)") &
911 "RADII: NON-LOCAL PART OF GTH PP in "// &
912 trim(unit_str), "Kind", "Label", "Radius"
913 DO ikind = 1, nkind
914 CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
915 CALL get_qs_kind(qs_kind_set(ikind), gth_potential=gth_potential)
916 IF (ASSOCIATED(gth_potential)) THEN
917 CALL get_potential(potential=gth_potential, &
918 ppnl_radius=ppnl_radius)
919 WRITE (unit=output_unit, fmt="(T55,I5,T63,A5,T69,F12.6)") &
920 ikind, name, ppnl_radius*conv
921 END IF
922 END DO
923 END IF
924 CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
925 "PRINT%RADII/PPNL_RADII")
926 END SUBROUTINE write_ppnl_radii
927
928! **************************************************************************************************
929!> \brief Write the radii of the one center projector
930!> \param atomic_kind_set ...
931!> \param qs_kind_set ...
932!> \param subsys_section ...
933!> \version 1.0
934! **************************************************************************************************
935 SUBROUTINE write_paw_radii(atomic_kind_set, qs_kind_set, subsys_section)
936 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
937 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
938 TYPE(section_vals_type), POINTER :: subsys_section
939
940 CHARACTER(LEN=default_string_length) :: name, unit_str
941 INTEGER :: ikind, nkind, output_unit
942 LOGICAL :: paw_atom
943 REAL(kind=dp) :: conv, rcprj
944 TYPE(cp_logger_type), POINTER :: logger
945 TYPE(paw_proj_set_type), POINTER :: paw_proj_set
946
947 NULLIFY (logger)
948 logger => cp_get_default_logger()
949 output_unit = cp_print_key_unit_nr(logger, subsys_section, &
950 "PRINT%RADII/GAPW_PRJ_RADII", extension=".Log")
951 CALL section_vals_val_get(subsys_section, "PRINT%RADII%UNIT", c_val=unit_str)
952 conv = cp_unit_from_cp2k(1.0_dp, trim(unit_str))
953 IF (output_unit > 0) THEN
954 nkind = SIZE(qs_kind_set)
955 WRITE (unit=output_unit, fmt="(/,T2,A,T56,A,T63,A,T75,A)") &
956 "RADII: ONE CENTER PROJECTORS in "// &
957 trim(unit_str), "Kind", "Label", "Radius"
958 DO ikind = 1, nkind
959 CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
960 CALL get_qs_kind(qs_kind_set(ikind), &
961 paw_atom=paw_atom, paw_proj_set=paw_proj_set)
962 IF (paw_atom .AND. ASSOCIATED(paw_proj_set)) THEN
963 CALL get_paw_proj_set(paw_proj_set=paw_proj_set, &
964 rcprj=rcprj)
965 WRITE (unit=output_unit, fmt="(T55,I5,T63,A5,T69,F12.6)") &
966 ikind, name, rcprj*conv
967 END IF
968 END DO
969 END IF
970 CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
971 "PRINT%RADII/GAPW_PRJ_RADII")
972 END SUBROUTINE write_paw_radii
973
974END MODULE qs_interactions
All kind of helpful little routines.
Definition ao_util.F:14
real(kind=dp) function, public exp_radius(l, alpha, threshold, prefactor, epsabs, epsrel, rlow)
The radius of a primitive Gaussian function for a given threshold is calculated. g(r) = prefactor*r**...
Definition ao_util.F:96
Define the atomic kind types and their sub types.
subroutine, public get_atomic_kind(atomic_kind, fist_potential, element_symbol, name, mass, kind_number, natom, atom_list, rcov, rvdw, z, qeff, apol, cpol, mm_radius, shell, shell_active, damping)
Get attributes of an atomic kind.
subroutine, public set_gto_basis_set(gto_basis_set, name, aliases, norm_type, kind_radius, ncgf, nset, nsgf, cgf_symbol, sgf_symbol, norm_cgf, set_radius, lmax, lmin, lx, ly, lz, m, ncgf_set, npgf, nsgf_set, nshell, cphi, pgf_radius, sphi, scon, zet, first_cgf, first_sgf, l, last_cgf, last_sgf, n, gcc, short_kind_radius)
Set the components of Gaussian-type orbital (GTO) basis set data set.
subroutine, public get_gto_basis_set(gto_basis_set, name, aliases, norm_type, kind_radius, ncgf, nset, nsgf, cgf_symbol, sgf_symbol, norm_cgf, set_radius, lmax, lmin, lx, ly, lz, m, ncgf_set, npgf, nsgf_set, nshell, cphi, pgf_radius, sphi, scon, zet, first_cgf, first_sgf, l, last_cgf, last_sgf, n, gcc, maxco, maxl, maxpgf, maxsgf_set, maxshell, maxso, nco_sum, npgf_sum, nshell_sum, maxder, short_kind_radius)
...
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
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)
...
subroutine, public cp_print_key_finished_output(unit_nr, logger, basis_section, print_key_path, local, ignore_should_output, on_file, mpi_io)
should be called after you finish working with a unit obtained with cp_print_key_unit_nr,...
unit conversion facility
Definition cp_units.F:30
real(kind=dp) function, public cp_unit_from_cp2k(value, unit_str, defaults, power)
converts from the internal cp2k units to the given unit
Definition cp_units.F:1179
Definition of the atomic potential types.
objects that represent the structure of input sections and the data contained in an input section
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
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
integer, parameter, public default_string_length
Definition kinds.F:57
Calculate MAO's and analyze wavefunctions.
Definition mao_basis.F:15
generate or use from input minimal basis set
subroutine, public get_paw_proj_set(paw_proj_set, csprj, chprj, first_prj, first_prjs, last_prj, local_oce_sphi_h, local_oce_sphi_s, maxl, ncgauprj, nsgauprj, nsatbas, nsotot, nprj, o2nindex, n2oindex, rcprj, rzetprj, zisomin, zetprj)
Get informations about a paw projectors set.
subroutine, public set_paw_proj_set(paw_proj_set, rzetprj, rcprj)
Set informations about a paw projectors set.
Calculate the interaction radii for the operator matrix calculation.
subroutine, public write_pgf_orb_radii(basis, atomic_kind_set, qs_kind_set, subsys_section)
Write the orbital basis function radii to the output unit.
subroutine, public init_interaction_radii_orb_basis(orb_basis_set, eps_pgf_orb, eps_pgf_short)
...
subroutine, public write_paw_radii(atomic_kind_set, qs_kind_set, subsys_section)
Write the radii of the one center projector.
subroutine, public write_ppnl_radii(atomic_kind_set, qs_kind_set, subsys_section)
Write the radii of the projector functions of the Goedecker pseudopotential (GTH, non-local part) to ...
subroutine, public init_se_nlradius(se_control, atomic_kind_set, qs_kind_set, subsys_section)
...
subroutine, public write_ppl_radii(atomic_kind_set, qs_kind_set, subsys_section)
Write the radii of the exponential functions of the Goedecker pseudopotential (GTH,...
subroutine, public init_interaction_radii(qs_control, qs_kind_set)
Initialize all the atomic kind radii for a given threshold value.
subroutine, public write_core_charge_radii(atomic_kind_set, qs_kind_set, subsys_section)
Write the radii of the core charge distributions to the output unit.
Define the quickstep kind type and their sub types.
subroutine, public get_qs_kind(qs_kind, basis_set, basis_type, ncgf, nsgf, all_potential, tnadd_potential, gth_potential, sgp_potential, upf_potential, se_parameter, dftb_parameter, xtb_parameter, dftb3_param, zeff, elec_conf, mao, lmax_dftb, alpha_core_charge, ccore_charge, core_charge, core_charge_radius, paw_proj_set, paw_atom, hard_radius, hard0_radius, max_rad_local, covalent_radius, vdw_radius, gpw_r3d_rs_type_forced, harmonics, max_iso_not0, max_s_harm, grid_atom, ngrid_ang, ngrid_rad, lmax_rho0, dft_plus_u_atom, l_of_dft_plus_u, n_of_dft_plus_u, u_minus_j, u_of_dft_plus_u, j_of_dft_plus_u, alpha_of_dft_plus_u, beta_of_dft_plus_u, j0_of_dft_plus_u, occupation_of_dft_plus_u, dispersion, bs_occupation, magnetization, no_optimize, addel, laddel, naddel, orbitals, max_scf, eps_scf, smear, u_ramping, u_minus_j_target, eps_u_ramping, init_u_ramping_each_scf, reltmat, ghost, floating, name, element_symbol, pao_basis_size, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
Utilities for string manipulations.
elemental subroutine, public uppercase(string)
Convert all lower case characters in a string to upper case.
Provides all information about an atomic kind.
type of a logger, at the moment it contains just a print level starting at which level it should be l...
Provides all information about a quickstep kind.