57#include "./base/base_uses.f90"
63 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'atom_kind_orbitals'
88 density, wavefunction, wfninfo, confine, xc_section, nocc)
92 INTEGER,
INTENT(IN),
OPTIONAL :: iunit
93 REAL(kind=
dp),
DIMENSION(:, :, :),
OPTIONAL, &
95 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: density
96 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: wavefunction, wfninfo
97 LOGICAL,
INTENT(IN),
OPTIONAL :: confine
99 INTEGER,
DIMENSION(:),
OPTIONAL :: nocc
101 INTEGER :: i, ii, j, k, k1, k2, l, ll, m, mb, mo, &
103 INTEGER,
DIMENSION(0:lmat) :: nbb
104 INTEGER,
DIMENSION(0:lmat, 10) :: ncalc, ncore,
nelem
105 INTEGER,
DIMENSION(0:lmat, 100) :: set_index, shell_index
106 INTEGER,
DIMENSION(:),
POINTER :: nshell
107 INTEGER,
DIMENSION(:, :),
POINTER :: first_sgf, ls
108 LOGICAL :: ecp_semi_local, ghost, has_pp, uks
109 REAL(kind=
dp) :: ok, scal, zeff
110 REAL(kind=
dp),
DIMENSION(0:lmat, 10, 2) :: edelta
124 IF (
PRESENT(xc_section))
THEN
125 atom%xc_section => xc_section
127 NULLIFY (
atom%xc_section)
131 NULLIFY (all_potential, gth_potential, sgp_potential, orb_basis_set)
133 basis_set=orb_basis_set, &
135 all_potential=all_potential, &
136 gth_potential=gth_potential, &
137 sgp_potential=sgp_potential)
139 has_pp =
ASSOCIATED(gth_potential) .OR.
ASSOCIATED(sgp_potential)
151 ALLOCATE (potential, integrals)
153 IF (
PRESENT(confine))
THEN
154 potential%confinement = confine
156 IF (
ASSOCIATED(gth_potential) .OR.
ASSOCIATED(sgp_potential))
THEN
157 potential%confinement = .true.
159 potential%confinement = .false.
163 potential%acon = 0.1_dp
164 potential%rcon = 2.0_dp*
ptable(z)%vdw_radius*
bohr
165 potential%scon = 2.0_dp
167 IF (
ASSOCIATED(gth_potential))
THEN
171 CALL set_atom(
atom, zcore=nint(zeff), potential=potential)
172 ELSE IF (
ASSOCIATED(sgp_potential))
THEN
173 CALL get_potential(sgp_potential, ecp_semi_local=ecp_semi_local)
174 IF (ecp_semi_local)
THEN
176 CALL ecp_potential_conversion(sgp_potential, potential%ecp_pot)
177 potential%ecp_pot%symbol =
ptable(z)%symbol
180 CALL sgp_potential_conversion(sgp_potential, potential%sgp_pot)
181 potential%sgp_pot%symbol =
ptable(z)%symbol
184 CALL set_atom(
atom, zcore=nint(zeff), potential=potential)
197 atom%optimization%damping = 0.2_dp
198 atom%optimization%eps_scf = 1.e-6_dp
199 atom%optimization%eps_diis = 100._dp
200 atom%optimization%max_iter = 50
201 atom%optimization%n_diis = 5
212 IF (sum(abs(edelta)) > 0.0_dp)
THEN
220 ALLOCATE (
atom%state)
222 atom%state%core = 0._dp
224 atom%state%occ = 0._dp
227 edelta(0:
lmat, 1:7, 1) + edelta(0:
lmat, 1:7, 2)
231 atom%state%occupation = 0._dp
235 IF (ncalc(l, i) > 0)
THEN
238 atom%state%occupation(l, k) = real(ncalc(l, i),
dp) + &
239 edelta(l, i, 1) + edelta(l, i, 2)
240 atom%state%occa(l, k) = 0.5_dp*real(ncalc(l, i),
dp) + edelta(l, i, 1)
241 atom%state%occb(l, k) = 0.5_dp*real(ncalc(l, i),
dp) + edelta(l, i, 2)
243 atom%state%occupation(l, k) = real(ncalc(l, i),
dp)
247 ok = real(2*l + 1, kind=
dp)
250 atom%state%occ(l, i) = min(
atom%state%occ(l, i), 2.0_dp*ok)
251 atom%state%occa(l, i) = min(
atom%state%occa(l, i), ok)
252 atom%state%occb(l, i) = min(
atom%state%occb(l, i), ok)
253 atom%state%occupation(l, i) =
atom%state%occa(l, i) +
atom%state%occb(l, i)
257 atom%state%occ(l, i) = min(
atom%state%occ(l, i), 2.0_dp*ok)
258 atom%state%occupation(l, i) = min(
atom%state%occupation(l, i), 2.0_dp*ok)
263 atom%state%multiplicity = nint(abs(sum(
atom%state%occa -
atom%state%occb)) + 1)
265 atom%state%multiplicity = -1
270 atom%state%maxl_calc =
atom%state%maxl_occ
271 atom%state%maxn_calc =
atom%state%maxn_occ
274 IF (
PRESENT(nocc) .AND. ghost)
THEN
276 ELSEIF (
PRESENT(nocc))
THEN
281 IF (
atom%state%occa(l, k) > 0.0_dp)
THEN
282 nocc(1) = nocc(1) + 2*l + 1
284 IF (
atom%state%occb(l, k) > 0.0_dp)
THEN
285 nocc(2) = nocc(2) + 2*l + 1
288 IF (
atom%state%occupation(l, k) > 0.0_dp)
THEN
289 nocc(1) = nocc(1) + 2*l + 1
290 nocc(2) = nocc(2) + 2*l + 1
305 NULLIFY (integrals%tzora, integrals%hdkh)
310 mo = maxval(
atom%state%maxn_calc)
311 mb = maxval(
atom%basis%nbas)
315 IF (.NOT. ghost)
THEN
316 IF (
PRESENT(iunit))
THEN
323 IF (
PRESENT(pmat))
THEN
326 nset=nset, nshell=nshell, l=ls, nsgf=nsgf, first_sgf=first_sgf)
338 shell_index(l, k) = j
343 IF (
ASSOCIATED(pmat))
THEN
346 ALLOCATE (pmat(nsgf, nsgf, 2))
348 IF (.NOT. ghost)
THEN
351 DO k1 = 1,
atom%basis%nbas(l)
352 DO k2 = 1,
atom%basis%nbas(l)
353 scal = sqrt(
atom%integrals%ovlp(k1, k1, l)*
atom%integrals%ovlp(k2, k2, l))/real(2*l + 1, kind=
dp)
354 i = first_sgf(shell_index(l, k1), set_index(l, k1))
355 j = first_sgf(shell_index(l, k2), set_index(l, k2))
358 pmat(i + m, j + m, 1) =
atom%orbitals%pmata(k1, k2, l)*scal
359 pmat(i + m, j + m, 2) =
atom%orbitals%pmatb(k1, k2, l)*scal
363 pmat(i + m, j + m, 1) =
atom%orbitals%pmat(k1, k2, l)*scal
370 pmat(:, :, 1) = pmat(:, :, 1) + pmat(:, :, 2)
371 pmat(:, :, 2) = pmat(:, :, 1) - 2.0_dp*pmat(:, :, 2)
376 IF (
PRESENT(fmat))
THEN
380 nset=nset, nshell=nshell, l=ls, nsgf=nsgf, first_sgf=first_sgf)
392 shell_index(l, k) = j
396 IF (uks) cpabort(
"calculate_atomic_orbitals: only RKS is implemented")
397 IF (
ASSOCIATED(fmat)) cpabort(
"fmat already associated")
398 IF (.NOT.
ASSOCIATED(
atom%fmat)) cpabort(
"atom%fmat not associated")
399 ALLOCATE (fmat(nsgf, nsgf, 1))
401 IF (.NOT. ghost)
THEN
404 DO k1 = 1,
atom%basis%nbas(l)
405 DO k2 = 1,
atom%basis%nbas(l)
406 scal = sqrt(
atom%integrals%ovlp(k1, k1, l)*
atom%integrals%ovlp(k2, k2, l))
407 i = first_sgf(shell_index(l, k1), set_index(l, k1))
408 j = first_sgf(shell_index(l, k2), set_index(l, k2))
410 fmat(i + m, j + m, 1) =
atom%fmat%op(k1, k2, l)/scal
420 IF (
PRESENT(density))
THEN
421 IF (
ASSOCIATED(density))
DEALLOCATE (density)
422 ALLOCATE (density(nr))
430 IF (
PRESENT(wavefunction))
THEN
431 cpassert(
PRESENT(wfninfo))
432 IF (
ASSOCIATED(wavefunction))
DEALLOCATE (wavefunction)
433 IF (
ASSOCIATED(wfninfo))
DEALLOCATE (wfninfo)
434 mo = sum(
atom%state%maxn_occ)
435 ALLOCATE (wavefunction(nr, mo), wfninfo(2, mo))
436 wavefunction = 0.0_dp
437 IF (.NOT. ghost)
THEN
440 DO i = 1,
atom%state%maxn_occ(l)
441 IF (
atom%state%occupation(l, i) > 0.0_dp)
THEN
443 wfninfo(1, ii) =
atom%state%occupation(l, i)
444 wfninfo(2, ii) = real(l,
dp)
445 DO j = 1,
atom%basis%nbas(l)
446 wavefunction(:, ii) = wavefunction(:, ii) + &
447 atom%orbitals%wfn(j, i, l)*basis%bf(:, j, l)
464 DEALLOCATE (potential, basis, integrals)
480 optbasis, allelectron, confine)
481 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT) :: density
484 INTEGER,
INTENT(IN) :: ngto
485 INTEGER,
INTENT(IN),
OPTIONAL :: iunit
486 LOGICAL,
INTENT(IN),
OPTIONAL :: optbasis, allelectron, confine
488 INTEGER,
PARAMETER :: num_gto = 40
490 INTEGER :: i, ii, iw, k, l, ll, m, mb, mo, ngp, nn, &
491 nr, quadtype, relativistic, z
492 INTEGER,
DIMENSION(0:lmat) :: starti
493 INTEGER,
DIMENSION(0:lmat, 10) :: ncalc, ncore,
nelem
494 INTEGER,
DIMENSION(:),
POINTER :: econf
495 LOGICAL :: do_basopt, ecp_semi_local, monovalent
496 REAL(kind=
dp) :: al, aval, cc, cval, ear, rk, xx, zeff
497 REAL(kind=
dp),
DIMENSION(num_gto+2) :: results
512 NULLIFY (all_potential, gth_potential)
514 all_potential=all_potential, &
515 gth_potential=gth_potential, &
516 sgp_potential=sgp_potential, &
517 monovalent=monovalent)
519 IF (
PRESENT(iunit))
THEN
525 IF (
PRESENT(allelectron))
THEN
526 IF (allelectron)
THEN
527 NULLIFY (gth_potential)
533 IF (
PRESENT(optbasis))
THEN
537 cpassert(ngto <= num_gto)
539 IF (
ASSOCIATED(gth_potential) .OR.
ASSOCIATED(sgp_potential))
THEN
549 pp_calc=(
ASSOCIATED(gth_potential) .OR.
ASSOCIATED(sgp_potential)), &
551 relativistic=relativistic, &
555 ALLOCATE (potential, basis, integrals)
557 IF (
PRESENT(confine))
THEN
558 potential%confinement = confine
560 IF (
ASSOCIATED(gth_potential) .OR.
ASSOCIATED(sgp_potential))
THEN
561 potential%confinement = .true.
563 potential%confinement = .false.
567 potential%acon = 200._dp
568 potential%rcon = 4.0_dp
569 potential%scon = 8.0_dp
571 IF (
ASSOCIATED(gth_potential))
THEN
575 CALL set_atom(
atom, zcore=nint(zeff), potential=potential)
576 ELSE IF (
ASSOCIATED(sgp_potential))
THEN
577 CALL get_potential(sgp_potential, ecp_semi_local=ecp_semi_local)
578 IF (ecp_semi_local)
THEN
580 CALL ecp_potential_conversion(sgp_potential, potential%ecp_pot)
581 potential%ecp_pot%symbol =
ptable(z)%symbol
584 CALL sgp_potential_conversion(sgp_potential, potential%sgp_pot)
585 potential%sgp_pot%symbol =
ptable(z)%symbol
588 CALL set_atom(
atom, zcore=nint(zeff), potential=potential)
603 NULLIFY (basis%am, basis%cm, basis%as, basis%ns, basis%bf, basis%dbf, basis%ddbf)
606 basis%eps_eig = 1.e-12_dp
609 basis%nprim = basis%nbas
610 m = maxval(basis%nbas)
611 ALLOCATE (basis%am(m, 0:
lmat))
614 DO i = 1, basis%nbas(l)
615 ll = i - 1 + starti(l)
616 basis%am(i, l) = aval*cval**(ll)
620 basis%geometrical = .true.
627 m = maxval(basis%nbas)
628 ALLOCATE (basis%bf(nr, m, 0:
lmat))
629 ALLOCATE (basis%dbf(nr, m, 0:
lmat))
630 ALLOCATE (basis%ddbf(nr, m, 0:
lmat))
635 DO i = 1, basis%nbas(l)
638 rk = basis%grid%rad(k)
639 ear = exp(-al*basis%grid%rad(k)**2)
640 basis%bf(k, i, l) = rk**l*ear
641 basis%dbf(k, i, l) = (real(l,
dp)*rk**(l - 1) - 2._dp*al*rk**(l + 1))*ear
642 basis%ddbf(k, i, l) = (real(l*(l - 1),
dp)*rk**(l - 2) - &
643 2._dp*al*real(2*l + 1,
dp)*rk**(l) + 4._dp*al*rk**(l + 2))*ear
651 atom%optimization%damping = 0.2_dp
652 atom%optimization%eps_scf = 1.e-6_dp
653 atom%optimization%eps_diis = 100._dp
654 atom%optimization%max_iter = 50
655 atom%optimization%n_diis = 5
663 ELSE IF (
ASSOCIATED(gth_potential))
THEN
666 ELSE IF (
ASSOCIATED(sgp_potential))
THEN
670 DO l = 0, min(
lmat, ubound(
ptable(z)%e_conv, 1))
685 ncalc =
nelem - ncore
688 IF (qs_kind%ghost .OR. qs_kind%floating)
THEN
694 ALLOCATE (
atom%state)
696 atom%state%core = 0._dp
698 atom%state%occ = 0._dp
700 atom%state%occupation = 0._dp
701 atom%state%multiplicity = -1
705 IF (ncalc(l, i) > 0)
THEN
707 atom%state%occupation(l, k) = real(ncalc(l, i),
dp)
714 atom%state%maxl_calc =
atom%state%maxl_occ
715 atom%state%maxn_calc =
atom%state%maxn_occ
725 NULLIFY (integrals%tzora, integrals%hdkh)
730 mo = maxval(
atom%state%maxn_calc)
731 mb = maxval(
atom%basis%nbas)
742 density(i, 1) = xx*cc**i
743 density(i, 2) = results(2 + i)
747 density(1:ngto, 2) = results(1:ngto)
758 DEALLOCATE (potential, basis, integrals)
773 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: rtmat
775 INTEGER :: i, ii, ipgf, j, k, k1, k2, l, ll, m, n, &
776 ngp, nj, nn, nr, ns, nset, nsgf, &
777 quadtype, relativistic, z
778 INTEGER,
DIMENSION(0:lmat, 10) :: ncalc, ncore,
nelem
779 INTEGER,
DIMENSION(0:lmat, 100) :: set_index, shell_index
780 INTEGER,
DIMENSION(:),
POINTER :: lmax, lmin, npgf, nshell
781 INTEGER,
DIMENSION(:, :),
POINTER :: first_sgf, last_sgf, ls
782 REAL(kind=
dp) :: al, alpha, ear, prefac, rk, zeff
783 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: omat
784 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: zet
785 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: gcc
794 IF (rel_control%rel_method ==
rel_none)
RETURN
796 NULLIFY (all_potential, orb_basis_set)
797 CALL get_qs_kind(qs_kind, basis_set=orb_basis_set, all_potential=all_potential)
799 cpassert(
ASSOCIATED(orb_basis_set))
801 IF (
ASSOCIATED(all_potential))
THEN
808 NULLIFY (
atom%xc_section)
809 NULLIFY (
atom%orbitals)
811 alpha = sqrt(all_potential%alpha_core_charge)
814 SELECT CASE (rel_control%rel_method)
818 SELECT CASE (rel_control%rel_DKH_order)
831 SELECT CASE (rel_control%rel_zora_type)
846 relativistic=relativistic, &
850 ALLOCATE (potential, basis, integrals)
856 nset=nset, nshell=nshell, npgf=npgf, lmin=lmin, lmax=lmax, l=ls, nsgf=nsgf, zet=zet, gcc=gcc, &
857 first_sgf=first_sgf, last_sgf=last_sgf)
867 NULLIFY (basis%am, basis%cm, basis%as, basis%ns, basis%bf, basis%dbf, basis%ddbf)
869 basis%eps_eig = 1.e-12_dp
877 DO j = lmin(i), min(lmax(i),
lmat)
878 basis%nprim(j) = basis%nprim(j) + npgf(i)
883 basis%nbas(l) = basis%nbas(l) + 1
887 shell_index(l, k) = j
892 nj = maxval(basis%nprim)
893 ns = maxval(basis%nbas)
894 ALLOCATE (basis%am(nj, 0:
lmat))
896 ALLOCATE (basis%cm(nj, ns, 0:
lmat))
902 IF (j >= lmin(i) .AND. j <= lmax(i))
THEN
904 basis%am(nj + ipgf, j) = zet(ipgf, i)
907 IF (ls(ii, i) == j)
THEN
910 basis%cm(nj + ipgf, ns, j) = gcc(ipgf, ii, i)
922 prefac = 2.0_dp*sqrt(
pi/
dfac(2*j + 1))
923 DO ipgf = 1, basis%nprim(j)
924 DO ii = 1, basis%nbas(j)
925 basis%cm(ipgf, ii, j) = prefac*basis%cm(ipgf, ii, j)
932 m = maxval(basis%nbas)
933 ALLOCATE (basis%bf(nr, m, 0:
lmat))
934 ALLOCATE (basis%dbf(nr, m, 0:
lmat))
935 ALLOCATE (basis%ddbf(nr, m, 0:
lmat))
941 DO i = 1, basis%nprim(l)
944 rk = basis%grid%rad(k)
945 ear = exp(-al*basis%grid%rad(k)**2)
946 DO j = 1, basis%nbas(l)
947 basis%bf(k, j, l) = basis%bf(k, j, l) + rk**l*ear*basis%cm(i, j, l)
948 basis%dbf(k, j, l) = basis%dbf(k, j, l) &
949 + (real(l,
dp)*rk**(l - 1) - 2._dp*al*rk**(l + 1))*ear*basis%cm(i, j, l)
950 basis%ddbf(k, j, l) = basis%ddbf(k, j, l) + &
951 (real(l*(l - 1),
dp)*rk**(l - 2) - 2._dp*al*real(2*l + 1,
dp)* &
952 rk**(l) + 4._dp*al*rk**(l + 2))*ear*basis%cm(i, j, l)
961 atom%optimization%damping = 0.2_dp
962 atom%optimization%eps_scf = 1.e-6_dp
963 atom%optimization%eps_diis = 100._dp
964 atom%optimization%max_iter = 50
965 atom%optimization%n_diis = 5
971 DO l = 0, min(
lmat, ubound(
ptable(z)%e_conv, 1))
986 ncalc =
nelem - ncore
988 IF (qs_kind%ghost .OR. qs_kind%floating)
THEN
994 ALLOCATE (
atom%state)
996 atom%state%core = 0._dp
998 atom%state%occ = 0._dp
1000 atom%state%occupation = 0._dp
1001 atom%state%multiplicity = -1
1005 IF (ncalc(l, i) > 0)
THEN
1007 atom%state%occupation(l, k) = real(ncalc(l, i),
dp)
1014 atom%state%maxl_calc =
atom%state%maxl_occ
1015 atom%state%maxn_calc =
atom%state%maxn_occ
1023 NULLIFY (integrals%tzora, integrals%hdkh)
1029 integrals%core = 0.0_dp
1033 ALLOCATE (omat(m, m))
1035 CALL sg_erfc(omat(1:m, 1:m), l, alpha, basis%am(1:m, l), basis%am(1:m, l))
1036 integrals%core(1:n, 1:n, l) = matmul(transpose(basis%cm(1:m, 1:n, l)), &
1037 matmul(omat(1:m, 1:m), basis%cm(1:m, 1:n, l)))
1043 IF (
ASSOCIATED(rtmat))
THEN
1046 ALLOCATE (rtmat(nsgf, nsgf))
1050 DO k1 = 1, basis%nbas(l)
1051 DO k2 = 1, basis%nbas(l)
1052 i = first_sgf(shell_index(l, k1), set_index(l, k1))
1053 j = first_sgf(shell_index(l, k2), set_index(l, k2))
1054 SELECT CASE (
atom%relativistic)
1059 rtmat(i + m, j + m) = integrals%tzora(k1, k2, l)
1063 rtmat(i + m, j + m) = integrals%hdkh(k1, k2, l) - integrals%kin(k1, k2, l) + &
1064 atom%zcore*integrals%core(k1, k2, l)
1072 rtmat(k1, k2) = 0.5_dp*(rtmat(k1, k2) + rtmat(k2, k1))
1073 rtmat(k2, k1) = rtmat(k1, k2)
1085 DEALLOCATE (potential, basis, integrals)
1089 IF (
ASSOCIATED(rtmat))
THEN
1107 INTEGER :: i, j, l, lm, n, ne, nexp_lpot, nexp_lsd, &
1109 INTEGER,
DIMENSION(:),
POINTER :: nct_lpot, nct_lsd, nct_nlcc, nppnl, &
1111 LOGICAL :: lpot_present, lsd_present, nlcc_present, &
1113 REAL(kind=
dp) :: ac, zeff
1114 REAL(kind=
dp),
DIMENSION(:),
POINTER :: alpha_lpot, alpha_lsd, alpha_nlcc, ap, ce
1115 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: cval_lpot, cval_lsd, cval_nlcc
1116 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: hp, kp
1120 elec_conf=ppeconf, &
1121 alpha_core_charge=ac, &
1130 gth_atompot%zion = zeff
1131 gth_atompot%rc = sqrt(0.5_dp/ac)
1132 gth_atompot%ncl = ne
1133 gth_atompot%cl(:) = 0._dp
1134 IF (ac > 0._dp)
THEN
1136 gth_atompot%cl(i) = ce(i)/(2._dp*ac)**(i - 1)
1140 gth_atompot%lpotextended = .false.
1141 gth_atompot%lsdpot = .false.
1142 gth_atompot%nlcc = .false.
1143 gth_atompot%nexp_lpot = 0
1144 gth_atompot%nexp_lsd = 0
1145 gth_atompot%nexp_nlcc = 0
1147 lpot_present=lpot_present, &
1148 lsd_present=lsd_present, &
1149 nlcc_present=nlcc_present)
1150 IF (lpot_present)
THEN
1152 nexp_lpot=nexp_lpot, &
1153 alpha_lpot=alpha_lpot, &
1154 nct_lpot=nct_lpot, &
1155 cval_lpot=cval_lpot)
1156 gth_atompot%lpotextended = .true.
1157 gth_atompot%nexp_lpot = nexp_lpot
1158 gth_atompot%alpha_lpot(1:nexp_lpot) = sqrt(0.5_dp/alpha_lpot(1:nexp_lpot))
1159 gth_atompot%nct_lpot(1:nexp_lpot) = nct_lpot(1:nexp_lpot)
1163 gth_atompot%cval_lpot(i, j) = cval_lpot(i, j)/(2._dp*ac)**(i - 1)
1167 IF (lsd_present)
THEN
1169 nexp_lsd=nexp_lsd, &
1170 alpha_lsd=alpha_lsd, &
1173 gth_atompot%lsdpot = .true.
1174 gth_atompot%nexp_lsd = nexp_lsd
1175 gth_atompot%alpha_lsd(1:nexp_lsd) = sqrt(0.5_dp/alpha_lsd(1:nexp_lsd))
1176 gth_atompot%nct_lsd(1:nexp_lsd) = nct_lsd(1:nexp_lsd)
1180 gth_atompot%cval_lsd(i, j) = cval_lsd(i, j)/(2._dp*ac)**(i - 1)
1186 gth_atompot%nl(:) = 0
1187 gth_atompot%rcnl(:) = 0._dp
1188 gth_atompot%hnl(:, :, :) = 0._dp
1191 gth_atompot%nl(l) = n
1192 gth_atompot%rcnl(l) = sqrt(0.5_dp/ap(l))
1193 gth_atompot%hnl(1:n, 1:n, l) = hp(1:n, 1:n, l)
1198 gth_atompot%soc = soc_present
1199 gth_atompot%knl = 0.0_dp
1200 IF (soc_present)
THEN
1203 gth_atompot%knl(1:n, 1:n, l) = kp(1:n, 1:n, l)
1207 IF (nlcc_present)
THEN
1209 nexp_nlcc=nexp_nlcc, &
1210 alpha_nlcc=alpha_nlcc, &
1211 nct_nlcc=nct_nlcc, &
1212 cval_nlcc=cval_nlcc)
1213 gth_atompot%nlcc = .true.
1214 gth_atompot%nexp_nlcc = nexp_nlcc
1215 gth_atompot%alpha_nlcc(1:nexp_nlcc) = alpha_nlcc(1:nexp_nlcc)
1216 gth_atompot%nct_nlcc(1:nexp_nlcc) = nct_nlcc(1:nexp_nlcc)
1217 gth_atompot%cval_nlcc(1:4, 1:nexp_nlcc) = cval_nlcc(1:4, 1:nexp_nlcc)
1227 SUBROUTINE sgp_potential_conversion(sgp_potential, sgp_atompot)
1232 INTEGER,
DIMENSION(:),
POINTER :: ppeconf
1233 LOGICAL :: nlcc_present
1234 REAL(kind=
dp) :: ac, zeff
1235 REAL(kind=
dp),
DIMENSION(:),
POINTER :: ap, ce
1236 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: hhp
1237 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: ccp
1240 name=sgp_atompot%pname, &
1242 elec_conf=ppeconf, &
1243 alpha_core_charge=ac)
1244 sgp_atompot%zion = zeff
1245 sgp_atompot%ac_local = ac
1246 sgp_atompot%econf(0:3) = ppeconf(0:3)
1248 is_nonlocal=sgp_atompot%is_nonlocal, &
1249 n_nonlocal=n, a_nonlocal=ap, h_nonlocal=hhp, c_nonlocal=ccp)
1251 sgp_atompot%has_nonlocal = any(sgp_atompot%is_nonlocal)
1252 sgp_atompot%lmax = lm
1253 IF (sgp_atompot%has_nonlocal)
THEN
1254 cpassert(n <=
SIZE(sgp_atompot%a_nonlocal))
1255 sgp_atompot%n_nonlocal = n
1256 sgp_atompot%a_nonlocal(1:n) = ap(1:n)
1257 sgp_atompot%h_nonlocal(1:n, 0:lm) = hhp(1:n, 0:lm)
1258 sgp_atompot%c_nonlocal(1:n, 1:n, 0:lm) = ccp(1:n, 1:n, 0:lm)
1261 CALL get_potential(sgp_potential, n_local=n, a_local=ap, c_local=ce)
1262 cpassert(n <=
SIZE(sgp_atompot%a_local))
1263 sgp_atompot%n_local = n
1264 sgp_atompot%a_local(1:n) = ap(1:n)
1265 sgp_atompot%c_local(1:n) = ce(1:n)
1268 n_nlcc=n, a_nlcc=ap, c_nlcc=ce)
1269 IF (nlcc_present)
THEN
1270 sgp_atompot%has_nlcc = .true.
1271 cpassert(n <=
SIZE(sgp_atompot%a_nlcc))
1272 sgp_atompot%n_nlcc = n
1273 sgp_atompot%a_nlcc(1:n) = ap(1:n)
1274 sgp_atompot%c_nlcc(1:n) = ce(1:n)
1276 sgp_atompot%has_nlcc = .false.
1279 END SUBROUTINE sgp_potential_conversion
1286 SUBROUTINE ecp_potential_conversion(sgp_potential, ecp_atompot)
1290 INTEGER,
DIMENSION(:),
POINTER :: ppeconf
1291 LOGICAL :: ecp_local, ecp_semi_local
1292 REAL(kind=
dp) :: zeff
1294 CALL get_potential(sgp_potential, ecp_local=ecp_local, ecp_semi_local=ecp_semi_local)
1295 cpassert(ecp_semi_local .AND. ecp_local)
1297 name=ecp_atompot%pname, &
1300 ecp_atompot%zion = zeff
1301 ecp_atompot%econf(0:3) = ppeconf(0:3)
1304 CALL get_potential(sgp_potential, nloc=ecp_atompot%nloc, nrloc=ecp_atompot%nrloc, &
1305 aloc=ecp_atompot%aloc, bloc=ecp_atompot%bloc)
1307 CALL get_potential(sgp_potential, npot=ecp_atompot%npot, nrpot=ecp_atompot%nrpot, &
1308 apot=ecp_atompot%apot, bpot=ecp_atompot%bpot)
1310 END SUBROUTINE ecp_potential_conversion
subroutine, public sg_erfc(umat, l, a, pa, pb)
...
subroutine, public calculate_atom(atom, iw, noguess, converged)
General routine to perform electronic structure atomic calculations.
routines that fit parameters for /from atomic calculations
subroutine, public atom_fit_density(atom, num_gto, norder, iunit, agto, powell_section, results)
Fit the atomic electron density using a geometrical Gaussian basis set.
calculate the orbitals for a given atomic kind type
subroutine, public calculate_atomic_relkin(atomic_kind, qs_kind, rel_control, rtmat)
...
subroutine, public calculate_atomic_orbitals(atomic_kind, qs_kind, agrid, iunit, pmat, fmat, density, wavefunction, wfninfo, confine, xc_section, nocc)
...
subroutine, public calculate_atomic_density(density, atomic_kind, qs_kind, ngto, iunit, optbasis, allelectron, confine)
...
subroutine, public gth_potential_conversion(gth_potential, gth_atompot)
...
Calculate the atomic operator matrices.
subroutine, public atom_ppint_release(integrals)
Release memory allocated for atomic integrals (core electrons).
subroutine, public atom_int_setup(integrals, basis, potential, eri_coulomb, eri_exchange, all_nu)
Set up atomic integrals.
subroutine, public atom_relint_setup(integrals, basis, reltyp, zcore, alpha)
...
subroutine, public atom_relint_release(integrals)
Release memory allocated for atomic integrals (relativistic effects).
subroutine, public atom_ppint_setup(integrals, basis, potential)
...
subroutine, public atom_int_release(integrals)
Release memory allocated for atomic integrals (valence electrons).
subroutine, public set_kind_basis_atomic(basis, orb_basis_set, has_pp, agrid, cp2k_norm)
...
Define the atom type and its sub types.
subroutine, public create_atom_type(atom)
...
integer, parameter, public cgto_basis
integer, parameter, public gto_basis
subroutine, public release_atom_type(atom)
...
subroutine, public release_atom_potential(potential)
...
integer, parameter, public lmat
subroutine, public set_atom(atom, basis, state, integrals, orbitals, potential, zcore, pp_calc, do_zmp, doread, read_vxc, method_type, relativistic, coulomb_integral_type, exchange_integral_type, fmat)
...
subroutine, public release_atom_basis(basis)
...
subroutine, public create_atom_orbs(orbs, mbas, mo)
...
subroutine, public clementi_geobas(zval, cval, aval, ngto, ival)
...
Some basic routines for atomic calculations.
pure integer function, dimension(0:lmat), public get_maxn_occ(occupation)
Return the maximum principal quantum number of occupied orbitals.
subroutine, public atom_density(density, pmat, basis, maxl, typ, rr)
Map the electron density on an atomic radial grid.
pure integer function, public get_maxl_occ(occupation)
Return the maximum orbital quantum number of occupied orbitals.
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)
...
Definition of the atomic potential types.
Defines the basic variable types.
integer, parameter, public dp
Definition of mathematical constants and functions.
real(kind=dp), parameter, public pi
real(kind=dp), dimension(-1:2 *maxfac+1), parameter, public dfac
Periodic Table related data definitions.
type(atom), dimension(0:nelem), public ptable
integer, parameter, public nelem
Definition of physical constants:
real(kind=dp), parameter, public bohr
subroutine, public allocate_grid_atom(grid_atom)
Initialize components of the grid_atom_type structure.
subroutine, public create_grid_atom(grid_atom, nr, na, llmax, ll, quadrature)
...
Define the quickstep kind type and their sub types.
subroutine, public set_pseudo_state(econf, z, ncalc, ncore, nelem)
...
logical function, public has_nlcc(qs_kind_set)
finds if a given qs run needs to use nlcc
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, monovalent, floating, name, element_symbol, pao_basis_size, pao_model_file, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
subroutine, public init_atom_electronic_state(atomic_kind, qs_kind, ncalc, ncore, nelem, edelta)
...
parameters that control a relativistic calculation
Provides all information about a basis set.
Provides all information about a pseudopotential.
Holds atomic orbitals and energies.
Provides all information about an atomic kind.
Provides all information about an atomic kind.
Provides all information about a quickstep kind.
contains the parameters needed by a relativistic calculation