(git:916bf6e)
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-2025 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
45 USE qs_kind_types, ONLY: get_qs_kind,&
48#include "./base/base_uses.f90"
49
50 IMPLICIT NONE
51
52 PRIVATE
53
54! *** Global parameters (only in this module)
55
56 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_interactions'
57
58! *** Public subroutines ***
59
61
64
65CONTAINS
66
67! **************************************************************************************************
68!> \brief Initialize all the atomic kind radii for a given threshold value.
69!> \param qs_control ...
70!> \param qs_kind_set ...
71!> \date 24.09.2002
72!> \author GT
73!> \version 1.0
74! **************************************************************************************************
75 SUBROUTINE init_interaction_radii(qs_control, qs_kind_set)
76
77 TYPE(qs_control_type), INTENT(IN) :: qs_control
78 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
79
80 CHARACTER(len=*), PARAMETER :: routinen = 'init_interaction_radii'
81
82 INTEGER :: handle, i, iexp_ppl, ikind, ip, iprj_ppnl, j, l, lppl, lppnl, lppsl, lprj, &
83 lprj_ppnl, maxl, n_local, nexp_lpot, nexp_lsd, nexp_ppl, nkind, nloc
84 INTEGER, DIMENSION(0:10) :: npot
85 INTEGER, DIMENSION(1:10) :: nrloc
86 INTEGER, DIMENSION(1:15, 0:10) :: nrpot
87 INTEGER, DIMENSION(:), POINTER :: nct_lpot, nct_lsd, nprj, nprj_ppnl
88 LOGICAL :: ecp_local, ecp_semi_local, llsd, lpot, &
89 paw_atom
90 LOGICAL, DIMENSION(0:5) :: is_nonlocal
91 REAL(kind=dp) :: alpha_core_charge, alpha_ppl, ccore_charge, cerf_ppl, core_charge_radius, &
92 cval, ppl_radius, ppnl_radius, rcprj, zeta
93 REAL(kind=dp), DIMENSION(1:10) :: aloc, bloc
94 REAL(kind=dp), DIMENSION(1:15, 0:10) :: apot, bpot
95 REAL(kind=dp), DIMENSION(:), POINTER :: a_local, a_nonlocal, alpha_lpot, &
96 alpha_lsd, alpha_ppnl, c_local, &
97 cexp_ppl
98 REAL(kind=dp), DIMENSION(:, :), POINTER :: cprj_ppnl, cval_lpot, cval_lsd, rzetprj, &
99 zet
100 REAL(kind=dp), DIMENSION(:, :, :), POINTER :: c_nonlocal
101 TYPE(all_potential_type), POINTER :: all_potential
102 TYPE(cneo_potential_type), POINTER :: cneo_potential
103 TYPE(gth_potential_type), POINTER :: gth_potential
104 TYPE(gto_basis_set_type), POINTER :: aux_basis_set, aux_fit_basis_set, aux_gw_basis, &
105 aux_opt_basis_set, gapw_1c_basis, harris_basis, lri_basis, mao_basis, min_basis_set, &
106 nuc_basis_set, orb_basis_set, p_lri_basis, rhoin_basis, ri_aux_basis_set, ri_basis, &
107 ri_xas_basis, soft_basis, tda_k_basis
108 TYPE(paw_proj_set_type), POINTER :: paw_proj_set
109 TYPE(sgp_potential_type), POINTER :: sgp_potential
110
111 CALL timeset(routinen, handle)
112
113 NULLIFY (all_potential, gth_potential, sgp_potential, cneo_potential)
114 NULLIFY (aux_basis_set, aux_fit_basis_set, aux_gw_basis, tda_k_basis, &
115 harris_basis, lri_basis, mao_basis, orb_basis_set, p_lri_basis, ri_aux_basis_set, &
116 ri_basis, ri_xas_basis, soft_basis, gapw_1c_basis, aux_opt_basis_set, min_basis_set, &
117 nuc_basis_set)
118 NULLIFY (nprj_ppnl, nprj)
119 NULLIFY (alpha_ppnl, cexp_ppl, cprj_ppnl, zet)
120
121 nkind = SIZE(qs_kind_set)
122 nexp_ppl = 0
123
124 DO ikind = 1, nkind
125
126 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set, basis_type="ORB")
127 CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_basis_set, basis_type="AUX")
128 CALL get_qs_kind(qs_kind_set(ikind), basis_set=min_basis_set, basis_type="MIN")
129 CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_fit_basis_set, basis_type="AUX_FIT")
130 CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_opt_basis_set, basis_type="AUX_OPT")
131 CALL get_qs_kind(qs_kind_set(ikind), basis_set=lri_basis, basis_type="LRI_AUX")
132 CALL get_qs_kind(qs_kind_set(ikind), basis_set=p_lri_basis, basis_type="P_LRI_AUX")
133 CALL get_qs_kind(qs_kind_set(ikind), basis_set=ri_basis, basis_type="RI_HXC")
134 CALL get_qs_kind(qs_kind_set(ikind), basis_set=ri_aux_basis_set, basis_type="RI_AUX")
135 CALL get_qs_kind(qs_kind_set(ikind), basis_set=mao_basis, basis_type="MAO")
136 CALL get_qs_kind(qs_kind_set(ikind), basis_set=harris_basis, basis_type="HARRIS")
137 CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_gw_basis, basis_type="AUX_GW")
138 CALL get_qs_kind(qs_kind_set(ikind), basis_set=ri_xas_basis, basis_type="RI_XAS")
139 CALL get_qs_kind(qs_kind_set(ikind), basis_set=soft_basis, basis_type="ORB_SOFT")
140 CALL get_qs_kind(qs_kind_set(ikind), basis_set=gapw_1c_basis, basis_type="GAPW_1C")
141 CALL get_qs_kind(qs_kind_set(ikind), basis_set=tda_k_basis, basis_type="TDA_HFX")
142 CALL get_qs_kind(qs_kind_set(ikind), basis_set=rhoin_basis, basis_type="RHOIN")
143 CALL get_qs_kind(qs_kind_set(ikind), basis_set=nuc_basis_set, basis_type="NUC")
144 CALL get_qs_kind(qs_kind_set(ikind), &
145 paw_proj_set=paw_proj_set, &
146 paw_atom=paw_atom, &
147 all_potential=all_potential, &
148 gth_potential=gth_potential, &
149 sgp_potential=sgp_potential, &
150 cneo_potential=cneo_potential)
151
152 ! Calculate the orbital basis function radii ***
153 ! For ALL electron this has to come before the calculation of the
154 ! radii used to calculate the 3c lists.
155 ! Indeed, there the radii of the GTO primitives are needed
156 IF (ASSOCIATED(orb_basis_set)) THEN
157 CALL init_interaction_radii_orb_basis(orb_basis_set, qs_control%eps_pgf_orb, &
158 qs_control%eps_kg_orb)
159 END IF
160
161 IF (ASSOCIATED(all_potential)) THEN
162
163 CALL get_potential(potential=all_potential, &
164 alpha_core_charge=alpha_core_charge, &
165 ccore_charge=ccore_charge)
166
167 ! Calculate the radius of the core charge distribution
168
169 core_charge_radius = exp_radius(0, alpha_core_charge, &
170 qs_control%eps_core_charge, &
171 ccore_charge)
172
173 CALL set_potential(potential=all_potential, &
174 core_charge_radius=core_charge_radius)
175
176 ELSE IF (ASSOCIATED(gth_potential)) THEN
177
178 CALL get_potential(potential=gth_potential, &
179 alpha_core_charge=alpha_core_charge, &
180 ccore_charge=ccore_charge, &
181 alpha_ppl=alpha_ppl, &
182 cerf_ppl=cerf_ppl, &
183 nexp_ppl=nexp_ppl, &
184 cexp_ppl=cexp_ppl, &
185 lpot_present=lpot, &
186 lsd_present=llsd, &
187 lppnl=lppnl, &
188 alpha_ppnl=alpha_ppnl, &
189 nprj_ppnl=nprj_ppnl, &
190 cprj_ppnl=cprj_ppnl)
191
192 ! Calculate the radius of the core charge distribution
193 core_charge_radius = exp_radius(0, alpha_core_charge, &
194 qs_control%eps_core_charge, &
195 ccore_charge)
196
197 ! Calculate the radii of the local part
198 ! of the Goedecker pseudopotential (GTH)
199 ppl_radius = exp_radius(0, alpha_ppl, qs_control%eps_ppl, cerf_ppl)
200
201 DO iexp_ppl = 1, nexp_ppl
202 lppl = 2*(iexp_ppl - 1)
203 ppl_radius = max(ppl_radius, &
204 exp_radius(lppl, alpha_ppl, &
205 qs_control%eps_ppl, &
206 cexp_ppl(iexp_ppl), &
207 rlow=ppl_radius))
208 END DO
209 IF (lpot) THEN
210 ! extended local potential
211 CALL get_potential(potential=gth_potential, &
212 nexp_lpot=nexp_lpot, &
213 alpha_lpot=alpha_lpot, &
214 nct_lpot=nct_lpot, &
215 cval_lpot=cval_lpot)
216 DO j = 1, nexp_lpot
217 DO i = 1, nct_lpot(j)
218 lppl = 2*(i - 1)
219 ppl_radius = max(ppl_radius, &
220 exp_radius(lppl, alpha_lpot(j), qs_control%eps_ppl, &
221 cval_lpot(i, j), rlow=ppl_radius))
222 END DO
223 END DO
224 END IF
225 IF (llsd) THEN
226 ! lsd local potential
227 CALL get_potential(potential=gth_potential, &
228 nexp_lsd=nexp_lsd, &
229 alpha_lsd=alpha_lsd, &
230 nct_lsd=nct_lsd, &
231 cval_lsd=cval_lsd)
232 DO j = 1, nexp_lsd
233 DO i = 1, nct_lsd(j)
234 lppl = 2*(i - 1)
235 ppl_radius = max(ppl_radius, &
236 exp_radius(lppl, alpha_lsd(j), qs_control%eps_ppl, &
237 cval_lsd(i, j), rlow=ppl_radius))
238 END DO
239 END DO
240 END IF
241
242 ! Calculate the radii of the non-local part
243 ! of the Goedecker pseudopotential (GTH)
244 ppnl_radius = 0.0_dp
245 DO l = 0, lppnl
246 DO iprj_ppnl = 1, nprj_ppnl(l)
247 lprj_ppnl = l + 2*(iprj_ppnl - 1)
248 ppnl_radius = max(ppnl_radius, &
249 exp_radius(lprj_ppnl, alpha_ppnl(l), &
250 qs_control%eps_pgf_orb, &
251 cprj_ppnl(iprj_ppnl, l), &
252 rlow=ppnl_radius))
253 END DO
254 END DO
255 CALL set_potential(potential=gth_potential, &
256 core_charge_radius=core_charge_radius, &
257 ppl_radius=ppl_radius, &
258 ppnl_radius=ppnl_radius)
259
260 ELSE IF (ASSOCIATED(sgp_potential)) THEN
261
262 ! Calculate the radius of the core charge distribution
263 CALL get_potential(potential=sgp_potential, &
264 alpha_core_charge=alpha_core_charge, &
265 ccore_charge=ccore_charge)
266 core_charge_radius = exp_radius(0, alpha_core_charge, &
267 qs_control%eps_core_charge, &
268 ccore_charge)
269 ! Calculate the radii of the local part
270 ppl_radius = core_charge_radius
271 CALL get_potential(potential=sgp_potential, ecp_local=ecp_local)
272 IF (ecp_local) THEN
273 CALL get_potential(potential=sgp_potential, nloc=nloc, nrloc=nrloc, aloc=aloc, bloc=bloc)
274 DO i = 1, nloc
275 lppl = max(0, nrloc(i) - 2)
276 ppl_radius = max(ppl_radius, &
277 exp_radius(lppl, bloc(i), qs_control%eps_ppl, aloc(i), rlow=ppl_radius))
278 END DO
279 ELSE
280 CALL get_potential(potential=sgp_potential, n_local=n_local, a_local=a_local, c_local=c_local)
281 DO i = 1, n_local
282 ppl_radius = max(ppl_radius, &
283 exp_radius(0, a_local(i), qs_control%eps_ppl, c_local(i), rlow=ppl_radius))
284 END DO
285 END IF
286 ! Calculate the radii of the semi-local part
287 CALL get_potential(potential=sgp_potential, ecp_semi_local=ecp_semi_local)
288 IF (ecp_semi_local) THEN
289 CALL get_potential(potential=sgp_potential, sl_lmax=lppsl, npot=npot, nrpot=nrpot, &
290 apot=apot, bpot=bpot)
291 DO l = 0, lppsl
292 DO i = 1, npot(l)
293 lppl = max(0, nrpot(i, l) - 2)
294 ppl_radius = max(ppl_radius, &
295 exp_radius(lppl, bpot(i, l), qs_control%eps_ppl, apot(i, l), &
296 rlow=ppl_radius))
297 END DO
298 END DO
299 END IF
300 ! Calculate the radii of the non-local part
301 ppnl_radius = 0.0_dp
302 CALL get_potential(potential=sgp_potential, lmax=lppnl, n_nonlocal=nloc)
303 CALL get_potential(potential=sgp_potential, is_nonlocal=is_nonlocal, &
304 a_nonlocal=a_nonlocal, c_nonlocal=c_nonlocal)
305 DO l = 0, lppnl
306 IF (is_nonlocal(l)) THEN
307 DO i = 1, nloc
308 cval = maxval(abs(c_nonlocal(i, :, l)))
309 ppnl_radius = max(ppnl_radius, &
310 exp_radius(l, a_nonlocal(i), qs_control%eps_pgf_orb, cval, rlow=ppnl_radius))
311 END DO
312 END IF
313 END DO
314 CALL set_potential(potential=sgp_potential, &
315 core_charge_radius=core_charge_radius, &
316 ppl_radius=ppl_radius, &
317 ppnl_radius=ppnl_radius)
318
319 ELSE IF (ASSOCIATED(cneo_potential)) THEN
320
321 IF (ASSOCIATED(nuc_basis_set)) THEN
322 CALL init_interaction_radii_orb_basis(nuc_basis_set, qs_control%eps_pgf_orb/ &
323 sqrt(cneo_potential%zeff))
324 END IF
325
326 END IF
327
328 ! Calculate the aux fit orbital basis function radii
329 IF (ASSOCIATED(aux_fit_basis_set)) THEN
330 CALL init_interaction_radii_orb_basis(aux_fit_basis_set, qs_control%eps_pgf_orb, &
331 qs_control%eps_kg_orb)
332 END IF
333
334 ! Calculate the aux opt orbital basis function radii
335 IF (ASSOCIATED(aux_opt_basis_set)) THEN
336 CALL init_interaction_radii_orb_basis(aux_opt_basis_set, qs_control%eps_pgf_orb)
337 END IF
338
339 ! Calculate the minimal basis function radii
340 IF (ASSOCIATED(min_basis_set)) THEN
341 CALL init_interaction_radii_orb_basis(min_basis_set, qs_control%eps_pgf_orb)
342 END IF
343
344 ! Calculate the aux orbital basis function radii
345 IF (ASSOCIATED(aux_basis_set)) THEN
346 CALL init_interaction_radii_orb_basis(aux_basis_set, qs_control%eps_pgf_orb)
347 END IF
348
349 ! Calculate the RI aux orbital basis function radii
350 IF (ASSOCIATED(ri_aux_basis_set)) THEN
351 CALL init_interaction_radii_orb_basis(ri_aux_basis_set, qs_control%eps_pgf_orb)
352 END IF
353
354 ! Calculate the MAO orbital basis function radii
355 IF (ASSOCIATED(mao_basis)) THEN
356 CALL init_interaction_radii_orb_basis(mao_basis, qs_control%eps_pgf_orb)
357 END IF
358
359 ! Calculate the HARRIS orbital basis function radii
360 IF (ASSOCIATED(harris_basis)) THEN
361 CALL init_interaction_radii_orb_basis(harris_basis, qs_control%eps_pgf_orb)
362 END IF
363
364 ! Calculate the AUX_GW orbital basis function radii
365 IF (ASSOCIATED(aux_gw_basis)) THEN
366 CALL init_interaction_radii_orb_basis(aux_gw_basis, qs_control%eps_pgf_orb)
367 END IF
368
369 ! Calculate the soft orbital basis function radii
370 IF (ASSOCIATED(soft_basis)) THEN
371 CALL init_interaction_radii_orb_basis(soft_basis, qs_control%eps_pgf_orb)
372 END IF
373
374 ! Calculate the GAPW 1 center basis function radii
375 IF (ASSOCIATED(gapw_1c_basis)) THEN
376 CALL init_interaction_radii_orb_basis(gapw_1c_basis, qs_control%eps_pgf_orb)
377 END IF
378
379 ! Calculate the HFX SR basis for TDA
380 IF (ASSOCIATED(tda_k_basis)) THEN
381 CALL init_interaction_radii_orb_basis(tda_k_basis, qs_control%eps_pgf_orb)
382 END IF
383
384 ! Calculate the lri basis function radii
385 IF (ASSOCIATED(lri_basis)) THEN
386 CALL init_interaction_radii_orb_basis(lri_basis, qs_control%eps_pgf_orb)
387 END IF
388 IF (ASSOCIATED(ri_basis)) THEN
389 CALL init_interaction_radii_orb_basis(ri_basis, qs_control%eps_pgf_orb)
390 END IF
391 IF (ASSOCIATED(ri_xas_basis)) THEN
392 CALL init_interaction_radii_orb_basis(ri_xas_basis, qs_control%eps_pgf_orb)
393 END IF
394 IF (ASSOCIATED(p_lri_basis)) THEN
395 CALL init_interaction_radii_orb_basis(p_lri_basis, qs_control%eps_pgf_orb)
396 END IF
397
398 ! Calculate the density input basis function radii
399 IF (ASSOCIATED(rhoin_basis)) THEN
400 CALL init_interaction_radii_orb_basis(rhoin_basis, qs_control%eps_pgf_orb)
401 END IF
402
403 ! Calculate the paw projector basis function radii
404 IF (ASSOCIATED(paw_proj_set)) THEN
405 CALL get_paw_proj_set(paw_proj_set=paw_proj_set, &
406 nprj=nprj, &
407 maxl=maxl, &
408 zetprj=zet, &
409 rzetprj=rzetprj)
410 rcprj = 0.0_dp
411 rzetprj = 0.0_dp
412 DO lprj = 0, maxl
413 DO ip = 1, nprj(lprj)
414 zeta = zet(ip, lprj)
415 rzetprj(ip, lprj) = max(rzetprj(ip, lprj), &
416 exp_radius(lprj, zeta, qs_control%eps_pgf_orb, &
417 1.0_dp, rlow=rzetprj(ip, lprj)))
418 rcprj = max(rcprj, rzetprj(ip, lprj))
419 END DO
420 END DO
421 CALL set_paw_proj_set(paw_proj_set=paw_proj_set, &
422 rzetprj=rzetprj, &
423 rcprj=rcprj)
424
425 END IF
426 END DO ! ikind
427
428 CALL timestop(handle)
429
430 END SUBROUTINE init_interaction_radii
431
432! **************************************************************************************************
433!> \brief ...
434!> \param orb_basis_set ...
435!> \param eps_pgf_orb ...
436!> \param eps_pgf_short ...
437! **************************************************************************************************
438 SUBROUTINE init_interaction_radii_orb_basis(orb_basis_set, eps_pgf_orb, eps_pgf_short)
439
440 TYPE(gto_basis_set_type), POINTER :: orb_basis_set
441 REAL(kind=dp), INTENT(IN) :: eps_pgf_orb
442 REAL(kind=dp), INTENT(IN), OPTIONAL :: eps_pgf_short
443
444 INTEGER :: ipgf, iset, ishell, l, nset
445 INTEGER, DIMENSION(:), POINTER :: npgf, nshell
446 INTEGER, DIMENSION(:, :), POINTER :: lshell
447 REAL(kind=dp) :: eps_short, gcca, kind_radius, &
448 short_radius, zeta
449 REAL(kind=dp), DIMENSION(:), POINTER :: set_radius
450 REAL(kind=dp), DIMENSION(:, :), POINTER :: pgf_radius, zet
451 REAL(kind=dp), DIMENSION(:, :, :), POINTER :: gcc
452
453 IF (ASSOCIATED(orb_basis_set)) THEN
454
455 IF (PRESENT(eps_pgf_short)) THEN
456 eps_short = eps_pgf_short
457 ELSE
458 eps_short = eps_pgf_orb
459 END IF
460
461 CALL get_gto_basis_set(gto_basis_set=orb_basis_set, &
462 nset=nset, &
463 nshell=nshell, &
464 npgf=npgf, &
465 l=lshell, &
466 zet=zet, &
467 gcc=gcc, &
468 pgf_radius=pgf_radius, &
469 set_radius=set_radius)
470
471 kind_radius = 0.0_dp
472 short_radius = 0.0_dp
473
474 DO iset = 1, nset
475 set_radius(iset) = 0.0_dp
476 DO ipgf = 1, npgf(iset)
477 pgf_radius(ipgf, iset) = 0.0_dp
478 DO ishell = 1, nshell(iset)
479 l = lshell(ishell, iset)
480 gcca = gcc(ipgf, ishell, iset)
481 zeta = zet(ipgf, iset)
482 pgf_radius(ipgf, iset) = max(pgf_radius(ipgf, iset), &
483 exp_radius(l, zeta, eps_pgf_orb, gcca, &
484 rlow=pgf_radius(ipgf, iset)))
485 short_radius = max(short_radius, &
486 exp_radius(l, zeta, eps_short, gcca, &
487 rlow=short_radius))
488 END DO
489 set_radius(iset) = max(set_radius(iset), pgf_radius(ipgf, iset))
490 END DO
491 kind_radius = max(kind_radius, set_radius(iset))
492 END DO
493
494 CALL set_gto_basis_set(gto_basis_set=orb_basis_set, &
495 pgf_radius=pgf_radius, &
496 set_radius=set_radius, &
497 kind_radius=kind_radius, &
498 short_kind_radius=short_radius)
499
500 END IF
501
503
504! **************************************************************************************************
505!> \brief ...
506!> \param se_control ...
507!> \param atomic_kind_set ...
508!> \param qs_kind_set ...
509!> \param subsys_section ...
510! **************************************************************************************************
511 SUBROUTINE init_se_nlradius(se_control, atomic_kind_set, qs_kind_set, &
512 subsys_section)
513
514 TYPE(semi_empirical_control_type), POINTER :: se_control
515 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
516 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
517 TYPE(section_vals_type), POINTER :: subsys_section
518
519 INTEGER :: ikind, nkind
520 REAL(kind=dp) :: kind_radius
521 TYPE(gto_basis_set_type), POINTER :: orb_basis_set
522 TYPE(qs_kind_type), POINTER :: qs_kind
523
524 NULLIFY (orb_basis_set, qs_kind)
525
526 nkind = SIZE(qs_kind_set)
527
528 DO ikind = 1, nkind
529
530 qs_kind => qs_kind_set(ikind)
531
532 CALL get_qs_kind(qs_kind=qs_kind, basis_set=orb_basis_set)
533
534 IF (ASSOCIATED(orb_basis_set)) THEN
535
536 CALL get_gto_basis_set(gto_basis_set=orb_basis_set, &
537 kind_radius=kind_radius)
538
539 kind_radius = max(kind_radius, se_control%cutoff_exc)
540
541 CALL set_gto_basis_set(gto_basis_set=orb_basis_set, &
542 kind_radius=kind_radius)
543
544 END IF
545
546 END DO
547
548 CALL write_kind_radii(atomic_kind_set, qs_kind_set, subsys_section)
549
550 END SUBROUTINE init_se_nlradius
551
552! **************************************************************************************************
553!> \brief ...
554!> \param atomic_kind_set ...
555!> \param qs_kind_set ...
556!> \param subsys_section ...
557! **************************************************************************************************
558 SUBROUTINE write_kind_radii(atomic_kind_set, qs_kind_set, subsys_section)
559
560 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
561 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
562 TYPE(section_vals_type), POINTER :: subsys_section
563
564 CHARACTER(LEN=10) :: bas
565 CHARACTER(LEN=default_string_length) :: name, unit_str
566 INTEGER :: ikind, nkind, output_unit
567 REAL(kind=dp) :: conv, kind_radius
568 TYPE(cp_logger_type), POINTER :: logger
569 TYPE(gto_basis_set_type), POINTER :: orb_basis_set
570
571 NULLIFY (logger)
572 logger => cp_get_default_logger()
573 NULLIFY (orb_basis_set)
574 bas = "ORBITAL "
575
576 nkind = SIZE(atomic_kind_set)
577! *** Print the kind radii ***
578 output_unit = cp_print_key_unit_nr(logger, subsys_section, &
579 "PRINT%RADII/KIND_RADII", extension=".Log")
580 CALL section_vals_val_get(subsys_section, "PRINT%RADII%UNIT", c_val=unit_str)
581 conv = cp_unit_from_cp2k(1.0_dp, trim(unit_str))
582 IF (output_unit > 0) THEN
583 WRITE (unit=output_unit, fmt="(/,T2,A,T56,A,T63,A,T75,A)") &
584 "RADII: "//trim(bas)//" BASIS in "//trim(unit_str), &
585 "Kind", "Label", "Radius"
586 DO ikind = 1, nkind
587 CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
588 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set)
589 IF (ASSOCIATED(orb_basis_set)) THEN
590 CALL get_gto_basis_set(gto_basis_set=orb_basis_set, &
591 kind_radius=kind_radius)
592 WRITE (unit=output_unit, fmt="(T55,I5,T63,A5,T69,F12.6)") &
593 ikind, name, kind_radius*conv
594 ELSE
595 WRITE (unit=output_unit, fmt="(T55,I5,T63,A5,T72,A9)") &
596 ikind, name, "no basis"
597 END IF
598 END DO
599 END IF
600 CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
601 "PRINT%RADII/KIND_RADII")
602
603 END SUBROUTINE write_kind_radii
604
605! **************************************************************************************************
606!> \brief Write the radii of the core charge distributions to the output
607!> unit.
608!> \param atomic_kind_set ...
609!> \param qs_kind_set ...
610!> \param subsys_section ...
611!> \date 15.09.2000
612!> \author MK
613!> \version 1.0
614! **************************************************************************************************
615 SUBROUTINE write_core_charge_radii(atomic_kind_set, qs_kind_set, subsys_section)
616 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
617 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
618 TYPE(section_vals_type), POINTER :: subsys_section
619
620 CHARACTER(LEN=default_string_length) :: name, unit_str
621 INTEGER :: ikind, nkind, output_unit
622 REAL(kind=dp) :: conv, core_charge_radius
623 TYPE(all_potential_type), POINTER :: all_potential
624 TYPE(cp_logger_type), POINTER :: logger
625 TYPE(gth_potential_type), POINTER :: gth_potential
626
627 NULLIFY (logger)
628 logger => cp_get_default_logger()
629 output_unit = cp_print_key_unit_nr(logger, subsys_section, &
630 "PRINT%RADII/CORE_CHARGE_RADII", extension=".Log")
631 CALL section_vals_val_get(subsys_section, "PRINT%RADII%UNIT", c_val=unit_str)
632 conv = cp_unit_from_cp2k(1.0_dp, trim(unit_str))
633 IF (output_unit > 0) THEN
634 nkind = SIZE(atomic_kind_set)
635 WRITE (unit=output_unit, fmt="(/,T2,A,T56,A,T63,A,T75,A)") &
636 "RADII: CORE CHARGE DISTRIBUTIONS in "// &
637 trim(unit_str), "Kind", "Label", "Radius"
638 DO ikind = 1, nkind
639 CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
640 CALL get_qs_kind(qs_kind_set(ikind), &
641 all_potential=all_potential, gth_potential=gth_potential)
642
643 IF (ASSOCIATED(all_potential)) THEN
644 CALL get_potential(potential=all_potential, &
645 core_charge_radius=core_charge_radius)
646 WRITE (unit=output_unit, fmt="(T55,I5,T63,A5,T69,F12.6)") &
647 ikind, name, core_charge_radius*conv
648 ELSE IF (ASSOCIATED(gth_potential)) THEN
649 CALL get_potential(potential=gth_potential, &
650 core_charge_radius=core_charge_radius)
651 WRITE (unit=output_unit, fmt="(T55,I5,T63,A5,T69,F12.6)") &
652 ikind, name, core_charge_radius*conv
653 END IF
654 END DO
655 END IF
656 CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
657 "PRINT%RADII/CORE_CHARGE_RADII")
658 END SUBROUTINE write_core_charge_radii
659
660! **************************************************************************************************
661!> \brief Write the orbital basis function radii to the output unit.
662!> \param basis ...
663!> \param atomic_kind_set ...
664!> \param qs_kind_set ...
665!> \param subsys_section ...
666!> \date 05.06.2000
667!> \author MK
668!> \version 1.0
669! **************************************************************************************************
670 SUBROUTINE write_pgf_orb_radii(basis, atomic_kind_set, qs_kind_set, subsys_section)
671
672 CHARACTER(len=*) :: basis
673 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
674 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
675 TYPE(section_vals_type), POINTER :: subsys_section
676
677 CHARACTER(LEN=10) :: bas
678 CHARACTER(LEN=default_string_length) :: name, unit_str
679 INTEGER :: ikind, ipgf, iset, nkind, nset, &
680 output_unit
681 INTEGER, DIMENSION(:), POINTER :: npgf
682 REAL(kind=dp) :: conv, kind_radius, short_kind_radius
683 REAL(kind=dp), DIMENSION(:), POINTER :: set_radius
684 REAL(kind=dp), DIMENSION(:, :), POINTER :: pgf_radius
685 TYPE(cp_logger_type), POINTER :: logger
686 TYPE(gto_basis_set_type), POINTER :: aux_basis_set, lri_basis_set, &
687 nuc_basis_set, orb_basis_set
688
689 NULLIFY (logger)
690 logger => cp_get_default_logger()
691 NULLIFY (aux_basis_set, orb_basis_set, lri_basis_set, nuc_basis_set)
692 bas = " "
693 bas(1:3) = basis(1:3)
694 CALL uppercase(bas)
695 IF (bas(1:3) == "ORB") THEN
696 bas = "ORBITAL "
697 ELSE IF (bas(1:3) == "AUX") THEN
698 bas = "AUXILLIARY"
699 ELSE IF (bas(1:3) == "LRI") THEN
700 bas = "LOCAL RI"
701 ELSE IF (bas(1:3) == "NUC") THEN
702 bas = "NUCLEAR "
703 ELSE
704 cpabort("Undefined basis set type")
705 END IF
706
707 nkind = SIZE(qs_kind_set)
708
709! *** Print the kind radii ***
710 output_unit = cp_print_key_unit_nr(logger, subsys_section, &
711 "PRINT%RADII/KIND_RADII", extension=".Log")
712 CALL section_vals_val_get(subsys_section, "PRINT%RADII%UNIT", c_val=unit_str)
713 conv = cp_unit_from_cp2k(1.0_dp, trim(unit_str))
714 IF (output_unit > 0) THEN
715 WRITE (unit=output_unit, fmt="(/,T2,A,T46,A,T53,A,T63,A,T71,A)") &
716 "RADII: "//trim(bas)//" BASIS in "//trim(unit_str), &
717 "Kind", "Label", "Radius", "OCE Radius"
718 DO ikind = 1, nkind
719 CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
720 IF (bas(1:3) == "ORB") THEN
721 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set)
722 IF (ASSOCIATED(orb_basis_set)) THEN
723 CALL get_gto_basis_set(gto_basis_set=orb_basis_set, &
724 kind_radius=kind_radius, &
725 short_kind_radius=short_kind_radius)
726 END IF
727 ELSE IF (bas(1:3) == "AUX") THEN
728 CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_basis_set, basis_type="AUX")
729 IF (ASSOCIATED(aux_basis_set)) THEN
730 CALL get_gto_basis_set(gto_basis_set=aux_basis_set, &
731 kind_radius=kind_radius)
732 END IF
733 ELSE IF (bas(1:3) == "LOC") THEN
734 CALL get_qs_kind(qs_kind_set(ikind), basis_set=lri_basis_set, basis_type="LRI_AUX")
735 IF (ASSOCIATED(lri_basis_set)) THEN
736 CALL get_gto_basis_set(gto_basis_set=lri_basis_set, &
737 kind_radius=kind_radius)
738 END IF
739 ELSE IF (bas(1:3) == "NUC") THEN
740 CALL get_qs_kind(qs_kind_set(ikind), basis_set=nuc_basis_set, basis_type="NUC")
741 IF (ASSOCIATED(nuc_basis_set)) THEN
742 CALL get_gto_basis_set(gto_basis_set=nuc_basis_set, &
743 kind_radius=kind_radius, &
744 short_kind_radius=short_kind_radius)
745 END IF
746 ELSE
747 cpabort("Undefined basis set type")
748 END IF
749 IF (ASSOCIATED(aux_basis_set) .OR. ASSOCIATED(orb_basis_set) .OR. &
750 ASSOCIATED(nuc_basis_set)) THEN
751 WRITE (unit=output_unit, fmt="(T45,I5,T53,A5,T57,F12.6,T69,F12.6)") &
752 ikind, name, kind_radius*conv, short_kind_radius*conv
753 ELSE
754 WRITE (unit=output_unit, fmt="(T55,I5,T63,A5,T72,A9)") &
755 ikind, name, "no basis"
756 END IF
757 END DO
758 END IF
759 CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
760 "PRINT%RADII/KIND_RADII")
761
762! *** Print the shell set radii ***
763 output_unit = cp_print_key_unit_nr(logger, subsys_section, &
764 "PRINT%RADII/SET_RADII", extension=".Log")
765 IF (output_unit > 0) THEN
766 WRITE (unit=output_unit, fmt="(/,T2,A,T51,A,T57,A,T65,A,T75,A)") &
767 "RADII: SHELL SETS OF "//trim(bas)//" BASIS in "// &
768 trim(unit_str), "Kind", "Label", "Set", "Radius"
769 DO ikind = 1, nkind
770 CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
771 IF (bas(1:3) == "ORB") THEN
772 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set)
773 IF (ASSOCIATED(orb_basis_set)) THEN
774 CALL get_gto_basis_set(gto_basis_set=orb_basis_set, &
775 nset=nset, &
776 set_radius=set_radius)
777 END IF
778 ELSE IF (bas(1:3) == "AUX") THEN
779 CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_basis_set, basis_type="AUX")
780 IF (ASSOCIATED(aux_basis_set)) THEN
781 CALL get_gto_basis_set(gto_basis_set=aux_basis_set, &
782 nset=nset, &
783 set_radius=set_radius)
784 END IF
785 ELSE IF (bas(1:3) == "LOC") THEN
786 CALL get_qs_kind(qs_kind_set(ikind), basis_set=lri_basis_set, basis_type="LRI_AUX")
787 IF (ASSOCIATED(lri_basis_set)) THEN
788 CALL get_gto_basis_set(gto_basis_set=lri_basis_set, &
789 nset=nset, &
790 set_radius=set_radius)
791 END IF
792 ELSE IF (bas(1:3) == "NUC") THEN
793 CALL get_qs_kind(qs_kind_set(ikind), basis_set=nuc_basis_set, basis_type="NUC")
794 IF (ASSOCIATED(nuc_basis_set)) THEN
795 CALL get_gto_basis_set(gto_basis_set=nuc_basis_set, &
796 nset=nset, &
797 set_radius=set_radius)
798 END IF
799 ELSE
800 cpabort("Undefined basis set type")
801 END IF
802 IF (ASSOCIATED(aux_basis_set) .OR. ASSOCIATED(orb_basis_set) .OR. &
803 ASSOCIATED(nuc_basis_set)) THEN
804 WRITE (unit=output_unit, fmt="(T50,I5,T57,A5,(T63,I5,T69,F12.6))") &
805 ikind, name, (iset, set_radius(iset)*conv, iset=1, nset)
806 ELSE
807 WRITE (unit=output_unit, fmt="(T50,I5,T58,A5,T73,A8)") &
808 ikind, name, "no basis"
809 END IF
810 END DO
811 END IF
812 CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
813 "PRINT%RADII/SET_RADII")
814! *** Print the primitive Gaussian function radii ***
815 output_unit = cp_print_key_unit_nr(logger, subsys_section, &
816 "PRINT%RADII/PGF_RADII", extension=".Log")
817 IF (output_unit > 0) THEN
818 WRITE (unit=output_unit, fmt="(/,T2,A,T51,A,T57,A,T65,A,T75,A)") &
819 "RADII: PRIMITIVE GAUSSIANS OF "//trim(bas)//" BASIS in "// &
820 trim(unit_str), "Kind", "Label", "Set", "Radius"
821 DO ikind = 1, nkind
822 CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
823 IF (bas(1:3) == "ORB") THEN
824 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set)
825 IF (ASSOCIATED(orb_basis_set)) THEN
826 CALL get_gto_basis_set(gto_basis_set=orb_basis_set, &
827 nset=nset, &
828 npgf=npgf, &
829 pgf_radius=pgf_radius)
830 END IF
831 ELSE IF (bas(1:3) == "AUX") THEN
832 CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_basis_set, basis_type="AUX")
833 IF (ASSOCIATED(aux_basis_set)) THEN
834 CALL get_gto_basis_set(gto_basis_set=aux_basis_set, &
835 nset=nset, &
836 npgf=npgf, &
837 pgf_radius=pgf_radius)
838 END IF
839 ELSE IF (bas(1:3) == "LOC") THEN
840 CALL get_qs_kind(qs_kind_set(ikind), basis_set=lri_basis_set, basis_type="LRI_AUX")
841 IF (ASSOCIATED(lri_basis_set)) THEN
842 CALL get_gto_basis_set(gto_basis_set=lri_basis_set, &
843 nset=nset, &
844 npgf=npgf, &
845 pgf_radius=pgf_radius)
846 END IF
847 ELSE IF (bas(1:3) == "NUC") THEN
848 CALL get_qs_kind(qs_kind_set(ikind), basis_set=nuc_basis_set, basis_type="NUC")
849 IF (ASSOCIATED(nuc_basis_set)) THEN
850 CALL get_gto_basis_set(gto_basis_set=nuc_basis_set, &
851 nset=nset, &
852 npgf=npgf, &
853 pgf_radius=pgf_radius)
854 END IF
855 ELSE
856 cpabort("Undefined basis type")
857 END IF
858 IF (ASSOCIATED(aux_basis_set) .OR. ASSOCIATED(orb_basis_set) .OR. &
859 ASSOCIATED(lri_basis_set) .OR. ASSOCIATED(nuc_basis_set)) THEN
860 DO iset = 1, nset
861 WRITE (unit=output_unit, fmt="(T50,I5,T57,A5,T63,I5,(T69,F12.6))") &
862 ikind, name, iset, &
863 (pgf_radius(ipgf, iset)*conv, ipgf=1, npgf(iset))
864 END DO
865 ELSE
866 WRITE (unit=output_unit, fmt="(T50,I5,T58,A5,T73,A8)") &
867 ikind, name, "no basis"
868 END IF
869 END DO
870 END IF
871 CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
872 "PRINT%RADII/PGF_RADII")
873 END SUBROUTINE write_pgf_orb_radii
874
875! **************************************************************************************************
876!> \brief Write the radii of the exponential functions of the Goedecker
877!> pseudopotential (GTH, local part) to the logical unit number
878!> "output_unit".
879!> \param atomic_kind_set ...
880!> \param qs_kind_set ...
881!> \param subsys_section ...
882!> \date 06.10.2000
883!> \author MK
884!> \version 1.0
885! **************************************************************************************************
886 SUBROUTINE write_ppl_radii(atomic_kind_set, qs_kind_set, subsys_section)
887
888 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
889 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
890 TYPE(section_vals_type), POINTER :: subsys_section
891
892 CHARACTER(LEN=default_string_length) :: name, unit_str
893 INTEGER :: ikind, nkind, output_unit
894 REAL(kind=dp) :: conv, ppl_radius
895 TYPE(cp_logger_type), POINTER :: logger
896 TYPE(gth_potential_type), POINTER :: gth_potential
897
898 NULLIFY (logger)
899 logger => cp_get_default_logger()
900 output_unit = cp_print_key_unit_nr(logger, subsys_section, &
901 "PRINT%RADII/PPL_RADII", extension=".Log")
902 CALL section_vals_val_get(subsys_section, "PRINT%RADII%UNIT", c_val=unit_str)
903 conv = cp_unit_from_cp2k(1.0_dp, trim(unit_str))
904 IF (output_unit > 0) THEN
905 nkind = SIZE(atomic_kind_set)
906 WRITE (unit=output_unit, fmt="(/,T2,A,T56,A,T63,A,T75,A)") &
907 "RADII: LOCAL PART OF GTH/ELP PP in "// &
908 trim(unit_str), "Kind", "Label", "Radius"
909 DO ikind = 1, nkind
910 CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
911 CALL get_qs_kind(qs_kind_set(ikind), gth_potential=gth_potential)
912 IF (ASSOCIATED(gth_potential)) THEN
913 CALL get_potential(potential=gth_potential, &
914 ppl_radius=ppl_radius)
915 WRITE (unit=output_unit, fmt="(T55,I5,T63,A5,T69,F12.6)") &
916 ikind, name, ppl_radius*conv
917 END IF
918 END DO
919 END IF
920 CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
921 "PRINT%RADII/PPL_RADII")
922 END SUBROUTINE write_ppl_radii
923
924! **************************************************************************************************
925!> \brief Write the radii of the projector functions of the Goedecker
926!> pseudopotential (GTH, non-local part) to the logical unit number
927!> "output_unit".
928!> \param atomic_kind_set ...
929!> \param qs_kind_set ...
930!> \param subsys_section ...
931!> \date 06.10.2000
932!> \author MK
933!> \version 1.0
934! **************************************************************************************************
935 SUBROUTINE write_ppnl_radii(atomic_kind_set, qs_kind_set, subsys_section)
936
937 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
938 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
939 TYPE(section_vals_type), POINTER :: subsys_section
940
941 CHARACTER(LEN=default_string_length) :: name, unit_str
942 INTEGER :: ikind, nkind, output_unit
943 REAL(kind=dp) :: conv, ppnl_radius
944 TYPE(cp_logger_type), POINTER :: logger
945 TYPE(gth_potential_type), POINTER :: gth_potential
946
947 NULLIFY (logger)
948 logger => cp_get_default_logger()
949 output_unit = cp_print_key_unit_nr(logger, subsys_section, &
950 "PRINT%RADII/PPNL_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(atomic_kind_set)
955 WRITE (unit=output_unit, fmt="(/,T2,A,T56,A,T63,A,T75,A)") &
956 "RADII: NON-LOCAL PART OF GTH PP 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), gth_potential=gth_potential)
961 IF (ASSOCIATED(gth_potential)) THEN
962 CALL get_potential(potential=gth_potential, &
963 ppnl_radius=ppnl_radius)
964 WRITE (unit=output_unit, fmt="(T55,I5,T63,A5,T69,F12.6)") &
965 ikind, name, ppnl_radius*conv
966 END IF
967 END DO
968 END IF
969 CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
970 "PRINT%RADII/PPNL_RADII")
971 END SUBROUTINE write_ppnl_radii
972
973! **************************************************************************************************
974!> \brief Write the radii of the one center projector
975!> \param atomic_kind_set ...
976!> \param qs_kind_set ...
977!> \param subsys_section ...
978!> \version 1.0
979! **************************************************************************************************
980 SUBROUTINE write_paw_radii(atomic_kind_set, qs_kind_set, subsys_section)
981 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
982 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
983 TYPE(section_vals_type), POINTER :: subsys_section
984
985 CHARACTER(LEN=default_string_length) :: name, unit_str
986 INTEGER :: ikind, nkind, output_unit
987 LOGICAL :: paw_atom
988 REAL(kind=dp) :: conv, rcprj
989 TYPE(cp_logger_type), POINTER :: logger
990 TYPE(paw_proj_set_type), POINTER :: paw_proj_set
991
992 NULLIFY (logger)
993 logger => cp_get_default_logger()
994 output_unit = cp_print_key_unit_nr(logger, subsys_section, &
995 "PRINT%RADII/GAPW_PRJ_RADII", extension=".Log")
996 CALL section_vals_val_get(subsys_section, "PRINT%RADII%UNIT", c_val=unit_str)
997 conv = cp_unit_from_cp2k(1.0_dp, trim(unit_str))
998 IF (output_unit > 0) THEN
999 nkind = SIZE(qs_kind_set)
1000 WRITE (unit=output_unit, fmt="(/,T2,A,T56,A,T63,A,T75,A)") &
1001 "RADII: ONE CENTER PROJECTORS in "// &
1002 trim(unit_str), "Kind", "Label", "Radius"
1003 DO ikind = 1, nkind
1004 CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
1005 CALL get_qs_kind(qs_kind_set(ikind), &
1006 paw_atom=paw_atom, paw_proj_set=paw_proj_set)
1007 IF (paw_atom .AND. ASSOCIATED(paw_proj_set)) THEN
1008 CALL get_paw_proj_set(paw_proj_set=paw_proj_set, &
1009 rcprj=rcprj)
1010 WRITE (unit=output_unit, fmt="(T55,I5,T63,A5,T69,F12.6)") &
1011 ikind, name, rcprj*conv
1012 END IF
1013 END DO
1014 END IF
1015 CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
1016 "PRINT%RADII/GAPW_PRJ_RADII")
1017 END SUBROUTINE write_paw_radii
1018
1019END 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 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, npgf_seg_sum)
...
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.
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:1178
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.
Types used by CNEO-DFT (see J. Chem. Theory Comput. 2025, 21, 16, 7865–7877)
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, cneo_potential, se_parameter, dftb_parameter, xtb_parameter, dftb3_param, zatom, 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_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_model_file, 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.