58#include "./base/base_uses.f90"
64 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'atom_types'
67 INTEGER,
PARAMETER ::
lmat = 5
74 INTEGER,
PARAMETER :: nmax = 25
80 INTEGER,
DIMENSION(0:lmat) :: nbas = 0
81 INTEGER,
DIMENSION(0:lmat) :: nprim = 0
82 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: am => null()
83 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: cm => null()
84 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: as => null()
85 INTEGER,
DIMENSION(:, :),
POINTER :: ns => null()
86 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: bf => null()
87 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: dbf => null()
88 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: ddbf => null()
89 REAL(kind=
dp) :: eps_eig = 0.0_dp
91 LOGICAL :: geometrical = .false.
92 REAL(kind=
dp) :: aval = 0.0_dp, cval = 0.0_dp
93 INTEGER,
DIMENSION(0:lmat) :: start = 0
99 CHARACTER(LEN=2) :: symbol =
""
100 CHARACTER(LEN=default_string_length) :: pname =
""
101 INTEGER,
DIMENSION(0:lmat) :: econf = 0
102 REAL(
dp) :: zion = 0.0_dp
103 REAL(
dp) :: rc = 0.0_dp
105 REAL(
dp),
DIMENSION(5) :: cl = 0.0_dp
106 INTEGER,
DIMENSION(0:lmat) :: nl = 0
107 REAL(
dp),
DIMENSION(0:lmat) :: rcnl = 0.0_dp
108 REAL(
dp),
DIMENSION(4, 4, 0:lmat) :: hnl = 0.0_dp
110 LOGICAL :: soc = .false.
111 REAL(
dp),
DIMENSION(4, 4, 0:lmat) :: knl = 0.0_dp
114 LOGICAL :: nlcc = .false.
115 INTEGER :: nexp_nlcc = 0
116 REAL(kind=
dp),
DIMENSION(10) :: alpha_nlcc = 0.0_dp
117 INTEGER,
DIMENSION(10) :: nct_nlcc = 0
118 REAL(kind=
dp),
DIMENSION(4, 10) :: cval_nlcc = 0.0_dp
120 LOGICAL :: lsdpot = .false.
121 INTEGER :: nexp_lsd = 0
122 REAL(kind=
dp),
DIMENSION(10) :: alpha_lsd = 0.0_dp
123 INTEGER,
DIMENSION(10) :: nct_lsd = 0
124 REAL(kind=
dp),
DIMENSION(4, 10) :: cval_lsd = 0.0_dp
126 LOGICAL :: lpotextended = .false.
127 INTEGER :: nexp_lpot = 0
128 REAL(kind=
dp),
DIMENSION(10) :: alpha_lpot = 0.0_dp
129 INTEGER,
DIMENSION(10) :: nct_lpot = 0
130 REAL(kind=
dp),
DIMENSION(4, 10) :: cval_lpot = 0.0_dp
134 CHARACTER(LEN=2) :: symbol =
""
135 CHARACTER(LEN=default_string_length) :: pname =
""
136 INTEGER,
DIMENSION(0:lmat) :: econf = 0
137 REAL(
dp) :: zion = 0.0_dp
140 INTEGER,
DIMENSION(1:15) :: nrloc = 0
141 REAL(
dp),
DIMENSION(1:15) :: aloc = 0.0_dp
142 REAL(
dp),
DIMENSION(1:15) :: bloc = 0.0_dp
143 INTEGER,
DIMENSION(0:10) :: npot = 0
144 INTEGER,
DIMENSION(1:15, 0:10) :: nrpot = 0
145 REAL(
dp),
DIMENSION(1:15, 0:10) :: apot = 0.0_dp
146 REAL(
dp),
DIMENSION(1:15, 0:10) :: bpot = 0.0_dp
150 CHARACTER(LEN=2) :: symbol =
""
151 CHARACTER(LEN=default_string_length) :: pname =
""
152 INTEGER,
DIMENSION(0:lmat) :: econf = 0
153 REAL(
dp) :: zion = 0.0_dp
155 LOGICAL :: has_nonlocal = .false.
156 INTEGER :: n_nonlocal = 0
157 LOGICAL,
DIMENSION(0:5) :: is_nonlocal = .false.
158 REAL(kind=
dp),
DIMENSION(nmax) :: a_nonlocal = 0.0_dp
159 REAL(kind=
dp),
DIMENSION(nmax, 0:lmat) :: h_nonlocal = 0.0_dp
160 REAL(kind=
dp),
DIMENSION(nmax, nmax, 0:lmat) :: c_nonlocal = 0.0_dp
161 INTEGER :: n_local = 0
162 REAL(kind=
dp) :: ac_local = 0.0_dp
163 REAL(kind=
dp),
DIMENSION(nmax) :: a_local = 0.0_dp
164 REAL(kind=
dp),
DIMENSION(nmax) :: c_local = 0.0_dp
165 LOGICAL :: has_nlcc = .false.
166 INTEGER :: n_nlcc = 0
167 REAL(kind=
dp),
DIMENSION(nmax) :: a_nlcc = 0.0_dp
168 REAL(kind=
dp),
DIMENSION(nmax) :: c_nlcc = 0.0_dp
172 INTEGER :: ppot_type = 0
173 LOGICAL :: confinement = .false.
174 INTEGER :: conf_type = 0
175 REAL(
dp) :: acon = 0.0_dp
176 REAL(
dp) :: rcon = 0.0_dp
177 REAL(
dp) :: scon = 0.0_dp
188 REAL(kind=
dp) :: scale_coulomb = 0.0_dp
189 REAL(kind=
dp) :: scale_longrange = 0.0_dp
190 REAL(kind=
dp) :: omega = 0.0_dp
191 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: kernel
192 LOGICAL :: do_gh = .false.
199 REAL(kind=
dp),
DIMENSION(0:lmat, 10) :: occ = 0.0_dp
200 REAL(kind=
dp),
DIMENSION(0:lmat, 10) :: core = 0.0_dp
201 REAL(kind=
dp),
DIMENSION(0:lmat, 10) :: occupation = 0.0_dp
202 INTEGER :: maxl_occ = 0
203 INTEGER,
DIMENSION(0:lmat) :: maxn_occ = 0
204 INTEGER :: maxl_calc = 0
205 INTEGER,
DIMENSION(0:lmat) :: maxn_calc = 0
206 INTEGER :: multiplicity = 0
207 REAL(kind=
dp),
DIMENSION(0:lmat, 10) :: occa = 0.0_dp, occb = 0.0_dp
213 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: int => null()
217 INTEGER :: status = 0
218 INTEGER :: ppstat = 0
219 LOGICAL :: eri_coulomb = .false.
220 LOGICAL :: eri_exchange = .false.
221 LOGICAL :: all_nu = .false.
222 INTEGER,
DIMENSION(0:lmat) :: n = 0, nne = 0
223 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: ovlp => null(), kin => null(), core => null(), clsd => null()
224 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: utrans => null(), uptrans => null()
225 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: hnl => null()
226 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: conf => null()
227 TYPE(
eri),
DIMENSION(100) :: ceri =
eri()
228 TYPE(
eri),
DIMENSION(100) :: eeri =
eri()
229 INTEGER :: dkhstat = 0
230 INTEGER :: zorastat = 0
231 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: tzora => null()
232 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: hdkh => null()
238 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: wfn => null(), wfna => null(), wfnb => null()
239 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: pmat => null(), pmata => null(), pmatb => null()
240 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: ener => null(), enera => null(), enerb => null()
241 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: refene => null(), refchg => null(), refnod => null()
242 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: wrefene => null(), wrefchg => null(), wrefnod => null()
243 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: crefene => null(), crefchg => null(), crefnod => null()
244 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: wpsir0 => null(), tpsir0 => null()
245 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: rcmax => null()
246 CHARACTER(LEN=2),
DIMENSION(:, :, :),
POINTER :: reftype => null()
252 INTEGER,
DIMENSION(0:lmat) :: n = 0
253 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: op => null()
259 REAL(kind=
dp),
DIMENSION(:),
POINTER :: op => null()
265 TYPE atom_energy_type
266 REAL(kind=
dp) :: etot = 0.0_dp
267 REAL(kind=
dp) :: eband = 0.0_dp
268 REAL(kind=
dp) :: ekin = 0.0_dp
269 REAL(kind=
dp) :: epot = 0.0_dp
270 REAL(kind=
dp) :: ecore = 0.0_dp
271 REAL(kind=
dp) :: elsd = 0.0_dp
272 REAL(kind=
dp) :: epseudo = 0.0_dp
273 REAL(kind=
dp) :: eploc = 0.0_dp
274 REAL(kind=
dp) :: epnl = 0.0_dp
275 REAL(kind=
dp) :: exc = 0.0_dp
276 REAL(kind=
dp) :: ecoulomb = 0.0_dp
277 REAL(kind=
dp) :: eexchange = 0.0_dp
278 REAL(kind=
dp) :: econfinement = 0.0_dp
279 END TYPE atom_energy_type
284 REAL(kind=
dp) :: damping = 0.0_dp
285 REAL(kind=
dp) :: eps_scf = 0.0_dp
286 REAL(kind=
dp) :: eps_diis = 0.0_dp
287 INTEGER :: max_iter = 0
288 INTEGER :: n_diis = 0
296 LOGICAL :: pp_calc = .false.
298 LOGICAL :: do_zmp = .false., doread = .false., read_vxc = .false., dm = .false.
299 CHARACTER(LEN=default_string_length) :: ext_file =
"", ext_vxc_file =
"", &
300 zmp_restart_file =
""
307 REAL(kind=
dp) :: lambda = 0.0_dp
308 REAL(kind=
dp) :: rho_diff_integral = 0.0_dp
309 REAL(kind=
dp) :: weight = 0.0_dp, zmpgrid_tol = 0.0_dp, zmpvxcgrid_tol = 0.0_dp
316 TYPE(atom_energy_type) :: energy = atom_energy_type()
380 INTEGER,
INTENT(IN) :: zval
381 CHARACTER(LEN=2) :: btyp
383 CHARACTER(LEN=*),
PARAMETER :: routinen =
'init_atom_basis'
384 INTEGER,
PARAMETER :: nua = 40, nup = 16
385 REAL(kind=
dp),
DIMENSION(nua),
PARAMETER :: ugbs = [0.007299_dp, 0.013705_dp, 0.025733_dp, &
386 0.048316_dp, 0.090718_dp, 0.170333_dp, 0.319819_dp, 0.600496_dp, 1.127497_dp, 2.117000_dp,&
387 3.974902_dp, 7.463317_dp, 14.013204_dp, 26.311339_dp, 49.402449_dp, 92.758561_dp, &
388 174.164456_dp, 327.013024_dp, 614.003114_dp, 1152.858743_dp, 2164.619772_dp, &
389 4064.312984_dp, 7631.197056_dp, 14328.416324_dp, 26903.186074_dp, 50513.706789_dp, &
390 94845.070265_dp, 178082.107320_dp, 334368.848683_dp, 627814.487663_dp, 1178791.123851_dp, &
391 2213310.684886_dp, 4155735.557141_dp, 7802853.046713_dp, 14650719.428954_dp, &
392 27508345.793637_dp, 51649961.080194_dp, 96978513.342764_dp, 182087882.613702_dp, &
395 CHARACTER(LEN=default_string_length) :: basis_fn, basis_name
396 INTEGER :: basistype, handle, i, j, k, l, ll, m, &
397 ngp, nl, nr, nu, quadtype
398 INTEGER,
DIMENSION(0:lmat) :: starti
399 INTEGER,
DIMENSION(:),
POINTER :: nqm, num_gto, num_slater, sindex
400 REAL(kind=
dp) :: al, amax, aval, cval, ear, pf, rk
401 REAL(kind=
dp),
DIMENSION(:),
POINTER :: expo
404 CALL timeset(routinen, handle)
411 NULLIFY (basis%am, basis%cm, basis%as, basis%ns, basis%bf, basis%dbf, basis%ddbf)
418 cpabort(
"The number of radial grid points must be greater than zero.")
422 basis%geometrical = .false.
429 SELECT CASE (basistype)
434 IF (num_gto(1) < 1)
THEN
436 IF (btyp ==
"AE")
THEN
438 ELSE IF (btyp ==
"PP")
THEN
445 ALLOCATE (basis%am(nu, 0:
lmat))
447 basis%am(1:nu, i) = ugbs(1:nu)
451 DO i = 1,
SIZE(num_gto)
452 basis%nbas(i - 1) = num_gto(i)
454 basis%nprim = basis%nbas
455 m = maxval(basis%nbas)
456 ALLOCATE (basis%am(m, 0:
lmat))
459 IF (basis%nbas(l) > 0)
THEN
471 cpabort(
"Invalid angular quantum number l found for Gaussian basis set")
473 cpassert(
SIZE(expo) >= basis%nbas(l))
474 DO i = 1, basis%nbas(l)
475 basis%am(i, l) = expo(i)
482 m = maxval(basis%nbas)
483 ALLOCATE (basis%bf(nr, m, 0:
lmat))
484 ALLOCATE (basis%dbf(nr, m, 0:
lmat))
485 ALLOCATE (basis%ddbf(nr, m, 0:
lmat))
490 DO i = 1, basis%nbas(l)
493 rk = basis%grid%rad(k)
494 ear = exp(-al*basis%grid%rad(k)**2)
495 basis%bf(k, i, l) = rk**l*ear
496 basis%dbf(k, i, l) = (real(l,
dp)*rk**(l - 1) - 2._dp*al*rk**(l + 1))*ear
497 basis%ddbf(k, i, l) = (real(l*(l - 1),
dp)*rk**(l - 2) - &
498 2._dp*al*real(2*l + 1,
dp)*rk**(l) + 4._dp*al*rk**(l + 2))*ear
506 IF (num_gto(1) < 1)
THEN
507 IF (btyp ==
"AE")
THEN
510 ELSE IF (btyp ==
"PP")
THEN
513 ELSE IF (btyp ==
"AA")
THEN
515 amax = cval**(basis%nbas(0) - 1)
516 basis%nbas(0) = nint((log(amax)/log(1.6_dp)))
519 basis%nbas(1) = basis%nbas(0) - 4
520 basis%nbas(2) = basis%nbas(0) - 8
521 basis%nbas(3) = basis%nbas(0) - 12
522 IF (
lmat > 3) basis%nbas(4:
lmat) = 0
523 ELSE IF (btyp ==
"AP")
THEN
526 basis%nbas = nint((log(amax)/log(1.6_dp)))
533 basis%nprim = basis%nbas
536 DO i = 1,
SIZE(num_gto)
537 basis%nbas(i - 1) = num_gto(i)
539 basis%nprim = basis%nbas
543 DO i = 1,
SIZE(sindex)
544 starti(i - 1) = sindex(i)
545 cpassert(sindex(i) >= 0)
550 m = maxval(basis%nbas)
551 ALLOCATE (basis%am(m, 0:
lmat))
554 DO i = 1, basis%nbas(l)
555 ll = i - 1 + starti(l)
556 basis%am(i, l) = aval*cval**(ll)
560 basis%geometrical = .true.
567 m = maxval(basis%nbas)
568 ALLOCATE (basis%bf(nr, m, 0:
lmat))
569 ALLOCATE (basis%dbf(nr, m, 0:
lmat))
570 ALLOCATE (basis%ddbf(nr, m, 0:
lmat))
575 DO i = 1, basis%nbas(l)
578 rk = basis%grid%rad(k)
579 ear = exp(-al*basis%grid%rad(k)**2)
580 basis%bf(k, i, l) = rk**l*ear
581 basis%dbf(k, i, l) = (real(l,
dp)*rk**(l - 1) - 2._dp*al*rk**(l + 1))*ear
582 basis%ddbf(k, i, l) = (real(l*(l - 1),
dp)*rk**(l - 2) - &
583 2._dp*al*real(2*l + 1,
dp)*rk**(l) + 4._dp*al*rk**(l + 2))*ear
592 CALL read_basis_set(
ptable(zval)%symbol, basis, basis_name, basis_fn, &
597 m = maxval(basis%nbas)
598 ALLOCATE (basis%bf(nr, m, 0:
lmat))
599 ALLOCATE (basis%dbf(nr, m, 0:
lmat))
600 ALLOCATE (basis%ddbf(nr, m, 0:
lmat))
605 DO i = 1, basis%nprim(l)
608 rk = basis%grid%rad(k)
609 ear = exp(-al*basis%grid%rad(k)**2)
610 DO j = 1, basis%nbas(l)
611 basis%bf(k, j, l) = basis%bf(k, j, l) + rk**l*ear*basis%cm(i, j, l)
612 basis%dbf(k, j, l) = basis%dbf(k, j, l) &
613 + (real(l,
dp)*rk**(l - 1) - 2._dp*al*rk**(l + 1))*ear*basis%cm(i, j, l)
614 basis%ddbf(k, j, l) = basis%ddbf(k, j, l) + &
615 (real(l*(l - 1),
dp)*rk**(l - 2) - 2._dp*al*real(2*l + 1,
dp)*rk**(l) + 4._dp*al*rk**(l + 2))* &
616 ear*basis%cm(i, j, l)
625 IF (num_slater(1) < 1)
THEN
626 cpabort(
"Invalid number (less than 1) Slater-type functions found.")
629 DO i = 1,
SIZE(num_slater)
630 basis%nbas(i - 1) = num_slater(i)
632 basis%nprim = basis%nbas
633 m = maxval(basis%nbas)
634 ALLOCATE (basis%as(m, 0:
lmat), basis%ns(m, 0:
lmat))
638 IF (basis%nbas(l) > 0)
THEN
650 cpabort(
"Invalid angular quantum number l found for Slater basis set")
652 cpassert(
SIZE(expo) >= basis%nbas(l))
653 DO i = 1, basis%nbas(l)
654 basis%as(i, l) = expo(i)
667 cpabort(
"Invalid angular quantum number l found for Slater basis set")
669 cpassert(
SIZE(nqm) >= basis%nbas(l))
670 DO i = 1, basis%nbas(l)
671 basis%ns(i, l) = nqm(i)
678 m = maxval(basis%nbas)
679 ALLOCATE (basis%bf(nr, m, 0:
lmat))
680 ALLOCATE (basis%dbf(nr, m, 0:
lmat))
681 ALLOCATE (basis%ddbf(nr, m, 0:
lmat))
686 DO i = 1, basis%nbas(l)
689 pf = (2._dp*al)**nl*sqrt(2._dp*al/
fac(2*nl))
691 rk = basis%grid%rad(k)
692 ear = rk**(nl - 1)*exp(-al*rk)
693 basis%bf(k, i, l) = pf*ear
694 basis%dbf(k, i, l) = pf*(real(nl - 1,
dp)/rk - al)*ear
695 basis%ddbf(k, i, l) = pf*(real((nl - 2)*(nl - 1),
dp)/rk/rk &
696 - al*real(2*(nl - 1),
dp)/rk + al*al)*ear
702 cpabort(
"Numerical basis set type not yet implemented.")
704 cpabort(
"Unknown basis set type specified. Check the code!")
707 CALL timestop(handle)
718 CHARACTER(LEN=*),
PARAMETER :: routinen =
'init_atom_basis_default_pp'
719 INTEGER,
PARAMETER :: nua = 40, nup = 20
720 REAL(kind=
dp),
DIMENSION(nua),
PARAMETER :: ugbs = [0.007299_dp, 0.013705_dp, 0.025733_dp, &
721 0.048316_dp, 0.090718_dp, 0.170333_dp, 0.319819_dp, 0.600496_dp, 1.127497_dp, 2.117000_dp,&
722 3.974902_dp, 7.463317_dp, 14.013204_dp, 26.311339_dp, 49.402449_dp, 92.758561_dp, &
723 174.164456_dp, 327.013024_dp, 614.003114_dp, 1152.858743_dp, 2164.619772_dp, &
724 4064.312984_dp, 7631.197056_dp, 14328.416324_dp, 26903.186074_dp, 50513.706789_dp, &
725 94845.070265_dp, 178082.107320_dp, 334368.848683_dp, 627814.487663_dp, 1178791.123851_dp, &
726 2213310.684886_dp, 4155735.557141_dp, 7802853.046713_dp, 14650719.428954_dp, &
727 27508345.793637_dp, 51649961.080194_dp, 96978513.342764_dp, 182087882.613702_dp, &
730 INTEGER :: handle, i, k, l, m, ngp, nr, nu, quadtype
731 REAL(kind=
dp) :: al, ear, rk
733 CALL timeset(routinen, handle)
735 NULLIFY (basis%am, basis%cm, basis%as, basis%ns, basis%bf, basis%dbf, basis%ddbf)
744 basis%geometrical = .false.
748 basis%eps_eig = 1.e-12_dp
754 ALLOCATE (basis%am(nu, 0:
lmat))
756 basis%am(1:nu, i) = ugbs(1:nu)
760 m = maxval(basis%nbas)
761 ALLOCATE (basis%bf(nr, m, 0:
lmat))
762 ALLOCATE (basis%dbf(nr, m, 0:
lmat))
763 ALLOCATE (basis%ddbf(nr, m, 0:
lmat))
768 DO i = 1, basis%nbas(l)
771 rk = basis%grid%rad(k)
772 ear = exp(-al*basis%grid%rad(k)**2)
773 basis%bf(k, i, l) = rk**l*ear
774 basis%dbf(k, i, l) = (real(l,
dp)*rk**(l - 1) - 2._dp*al*rk**(l + 1))*ear
775 basis%ddbf(k, i, l) = (real(l*(l - 1),
dp)*rk**(l - 2) - &
776 2._dp*al*real(2*l + 1,
dp)*rk**(l) + 4._dp*al*rk**(l + 2))*ear
781 CALL timestop(handle)
795 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: r, rab
797 INTEGER :: i, j, k, l, m, n1, n2, n3, ngp, nl, nr, &
799 REAL(kind=
dp) :: al, ear, pf, rk
801 NULLIFY (gbasis%am, gbasis%cm, gbasis%as, gbasis%ns, gbasis%bf, gbasis%dbf, gbasis%ddbf)
804 gbasis%basis_type = basis%basis_type
805 gbasis%nbas(0:
lmat) = basis%nbas(0:
lmat)
806 gbasis%nprim(0:
lmat) = basis%nprim(0:
lmat)
807 IF (
ASSOCIATED(basis%am))
THEN
808 n1 =
SIZE(basis%am, 1)
809 n2 =
SIZE(basis%am, 2)
810 ALLOCATE (gbasis%am(n1, 0:n2 - 1))
813 IF (
ASSOCIATED(basis%cm))
THEN
814 n1 =
SIZE(basis%cm, 1)
815 n2 =
SIZE(basis%cm, 2)
816 n3 =
SIZE(basis%cm, 3)
817 ALLOCATE (gbasis%cm(n1, n2, 0:n3 - 1))
820 IF (
ASSOCIATED(basis%as))
THEN
821 n1 =
SIZE(basis%as, 1)
822 n2 =
SIZE(basis%as, 2)
823 ALLOCATE (gbasis%as(n1, 0:n2 - 1))
826 IF (
ASSOCIATED(basis%ns))
THEN
827 n1 =
SIZE(basis%ns, 1)
828 n2 =
SIZE(basis%ns, 2)
829 ALLOCATE (gbasis%ns(n1, 0:n2 - 1))
832 gbasis%eps_eig = basis%eps_eig
833 gbasis%geometrical = basis%geometrical
834 gbasis%aval = basis%aval
835 gbasis%cval = basis%cval
836 gbasis%start(0:
lmat) = basis%start(0:
lmat)
840 NULLIFY (gbasis%grid)
845 cpabort(
"The number of radial grid points must be greater than zero.")
849 gbasis%grid%rad(:) = r(:)
850 gbasis%grid%rad2(:) = r(:)*r(:)
851 gbasis%grid%wr(:) = rab(:)*gbasis%grid%rad2(:)
855 m = maxval(gbasis%nbas)
856 ALLOCATE (gbasis%bf(nr, m, 0:
lmat))
857 ALLOCATE (gbasis%dbf(nr, m, 0:
lmat))
858 ALLOCATE (gbasis%ddbf(nr, m, 0:
lmat))
863 SELECT CASE (gbasis%basis_type)
866 DO i = 1, gbasis%nbas(l)
869 rk = gbasis%grid%rad(k)
870 ear = exp(-al*gbasis%grid%rad(k)**2)
871 gbasis%bf(k, i, l) = rk**l*ear
872 gbasis%dbf(k, i, l) = (real(l,
dp)*rk**(l - 1) - 2._dp*al*rk**(l + 1))*ear
873 gbasis%ddbf(k, i, l) = (real(l*(l - 1),
dp)*rk**(l - 2) - &
874 2._dp*al*real(2*l + 1,
dp)*rk**(l) + 4._dp*al*rk**(l + 2))*ear
880 DO i = 1, gbasis%nprim(l)
883 rk = gbasis%grid%rad(k)
884 ear = exp(-al*gbasis%grid%rad(k)**2)
885 DO j = 1, gbasis%nbas(l)
886 gbasis%bf(k, j, l) = gbasis%bf(k, j, l) + rk**l*ear*gbasis%cm(i, j, l)
887 gbasis%dbf(k, j, l) = gbasis%dbf(k, j, l) &
888 + (real(l,
dp)*rk**(l - 1) - 2._dp*al*rk**(l + 1))*ear*gbasis%cm(i, j, l)
889 gbasis%ddbf(k, j, l) = gbasis%ddbf(k, j, l) + &
890 (real(l*(l - 1),
dp)*rk**(l - 2) - 2._dp*al*real(2*l + 1,
dp)*rk**(l) + 4._dp*al*rk**(l + 2))* &
891 ear*gbasis%cm(i, j, l)
898 DO i = 1, gbasis%nbas(l)
901 pf = (2._dp*al)**nl*sqrt(2._dp*al/
fac(2*nl))
903 rk = gbasis%grid%rad(k)
904 ear = rk**(nl - 1)*exp(-al*rk)
905 gbasis%bf(k, i, l) = pf*ear
906 gbasis%dbf(k, i, l) = pf*(real(nl - 1,
dp)/rk - al)*ear
907 gbasis%ddbf(k, i, l) = pf*(real((nl - 2)*(nl - 1),
dp)/rk/rk &
908 - al*real(2*(nl - 1),
dp)/rk + al*al)*ear
914 cpabort(
"Numerical basis set type not yet implemented.")
916 cpabort(
"Unknown basis set type specified. Check the code!")
928 IF (
ASSOCIATED(basis%am))
THEN
929 DEALLOCATE (basis%am)
931 IF (
ASSOCIATED(basis%cm))
THEN
932 DEALLOCATE (basis%cm)
934 IF (
ASSOCIATED(basis%as))
THEN
935 DEALLOCATE (basis%as)
937 IF (
ASSOCIATED(basis%ns))
THEN
938 DEALLOCATE (basis%ns)
940 IF (
ASSOCIATED(basis%bf))
THEN
941 DEALLOCATE (basis%bf)
943 IF (
ASSOCIATED(basis%dbf))
THEN
944 DEALLOCATE (basis%dbf)
946 IF (
ASSOCIATED(basis%ddbf))
THEN
947 DEALLOCATE (basis%ddbf)
962 cpassert(.NOT.
ASSOCIATED(
atom))
966 NULLIFY (
atom%zmp_section)
967 NULLIFY (
atom%xc_section)
969 atom%do_zmp = .false.
970 atom%doread = .false.
971 atom%read_vxc = .false.
973 atom%hfx_pot%scale_coulomb = 0.0_dp
974 atom%hfx_pot%scale_longrange = 0.0_dp
975 atom%hfx_pot%omega = 0.0_dp
986 cpassert(
ASSOCIATED(
atom))
989 NULLIFY (
atom%integrals)
990 IF (
ASSOCIATED(
atom%state))
THEN
991 DEALLOCATE (
atom%state)
993 IF (
ASSOCIATED(
atom%orbitals))
THEN
1023 SUBROUTINE set_atom(atom, basis, state, integrals, orbitals, potential, zcore, pp_calc, do_zmp, doread, &
1024 read_vxc, method_type, relativistic, coulomb_integral_type, exchange_integral_type, fmat)
1031 INTEGER,
INTENT(IN),
OPTIONAL :: zcore
1032 LOGICAL,
INTENT(IN),
OPTIONAL :: pp_calc, do_zmp, doread, read_vxc
1033 INTEGER,
INTENT(IN),
OPTIONAL :: method_type, relativistic, &
1034 coulomb_integral_type, &
1035 exchange_integral_type
1038 cpassert(
ASSOCIATED(
atom))
1040 IF (
PRESENT(basis))
atom%basis => basis
1041 IF (
PRESENT(state))
atom%state => state
1042 IF (
PRESENT(integrals))
atom%integrals => integrals
1043 IF (
PRESENT(orbitals))
atom%orbitals => orbitals
1044 IF (
PRESENT(potential))
atom%potential => potential
1045 IF (
PRESENT(zcore))
atom%zcore = zcore
1046 IF (
PRESENT(pp_calc))
atom%pp_calc = pp_calc
1048 IF (
PRESENT(do_zmp))
atom%do_zmp = do_zmp
1049 IF (
PRESENT(doread))
atom%doread = doread
1050 IF (
PRESENT(read_vxc))
atom%read_vxc = read_vxc
1052 IF (
PRESENT(method_type))
atom%method_type = method_type
1053 IF (
PRESENT(relativistic))
atom%relativistic = relativistic
1054 IF (
PRESENT(coulomb_integral_type))
atom%coulomb_integral_type = coulomb_integral_type
1055 IF (
PRESENT(exchange_integral_type))
atom%exchange_integral_type = exchange_integral_type
1057 IF (
PRESENT(fmat))
THEN
1072 INTEGER,
INTENT(IN) :: mbas, mo
1074 cpassert(.NOT.
ASSOCIATED(orbs))
1078 ALLOCATE (orbs%wfn(mbas, mo, 0:
lmat), orbs%wfna(mbas, mo, 0:
lmat), orbs%wfnb(mbas, mo, 0:
lmat))
1083 ALLOCATE (orbs%pmat(mbas, mbas, 0:
lmat), orbs%pmata(mbas, mbas, 0:
lmat), orbs%pmatb(mbas, mbas, 0:
lmat))
1088 ALLOCATE (orbs%ener(mo, 0:
lmat), orbs%enera(mo, 0:
lmat), orbs%enerb(mo, 0:
lmat))
1093 ALLOCATE (orbs%refene(mo, 0:
lmat, 2), orbs%refchg(mo, 0:
lmat, 2), orbs%refnod(mo, 0:
lmat, 2))
1097 ALLOCATE (orbs%wrefene(mo, 0:
lmat, 2), orbs%wrefchg(mo, 0:
lmat, 2), orbs%wrefnod(mo, 0:
lmat, 2))
1098 orbs%wrefene = 0._dp
1099 orbs%wrefchg = 0._dp
1100 orbs%wrefnod = 0._dp
1101 ALLOCATE (orbs%crefene(mo, 0:
lmat, 2), orbs%crefchg(mo, 0:
lmat, 2), orbs%crefnod(mo, 0:
lmat, 2))
1102 orbs%crefene = 0._dp
1103 orbs%crefchg = 0._dp
1104 orbs%crefnod = 0._dp
1105 ALLOCATE (orbs%rcmax(mo, 0:
lmat, 2))
1107 ALLOCATE (orbs%wpsir0(mo, 2), orbs%tpsir0(mo, 2))
1110 ALLOCATE (orbs%reftype(mo, 0:
lmat, 2))
1122 cpassert(
ASSOCIATED(orbs))
1124 IF (
ASSOCIATED(orbs%wfn))
THEN
1125 DEALLOCATE (orbs%wfn, orbs%wfna, orbs%wfnb)
1127 IF (
ASSOCIATED(orbs%pmat))
THEN
1128 DEALLOCATE (orbs%pmat, orbs%pmata, orbs%pmatb)
1130 IF (
ASSOCIATED(orbs%ener))
THEN
1131 DEALLOCATE (orbs%ener, orbs%enera, orbs%enerb)
1133 IF (
ASSOCIATED(orbs%refene))
THEN
1134 DEALLOCATE (orbs%refene)
1136 IF (
ASSOCIATED(orbs%refchg))
THEN
1137 DEALLOCATE (orbs%refchg)
1139 IF (
ASSOCIATED(orbs%refnod))
THEN
1140 DEALLOCATE (orbs%refnod)
1142 IF (
ASSOCIATED(orbs%wrefene))
THEN
1143 DEALLOCATE (orbs%wrefene)
1145 IF (
ASSOCIATED(orbs%wrefchg))
THEN
1146 DEALLOCATE (orbs%wrefchg)
1148 IF (
ASSOCIATED(orbs%wrefnod))
THEN
1149 DEALLOCATE (orbs%wrefnod)
1151 IF (
ASSOCIATED(orbs%crefene))
THEN
1152 DEALLOCATE (orbs%crefene)
1154 IF (
ASSOCIATED(orbs%crefchg))
THEN
1155 DEALLOCATE (orbs%crefchg)
1157 IF (
ASSOCIATED(orbs%crefnod))
THEN
1158 DEALLOCATE (orbs%crefnod)
1160 IF (
ASSOCIATED(orbs%rcmax))
THEN
1161 DEALLOCATE (orbs%rcmax)
1163 IF (
ASSOCIATED(orbs%wpsir0))
THEN
1164 DEALLOCATE (orbs%wpsir0)
1166 IF (
ASSOCIATED(orbs%tpsir0))
THEN
1167 DEALLOCATE (orbs%tpsir0)
1169 IF (
ASSOCIATED(orbs%reftype))
THEN
1170 DEALLOCATE (orbs%reftype)
1186 REAL(kind=
dp),
INTENT(OUT) :: hf_frac
1187 LOGICAL,
INTENT(OUT) :: do_hfx
1190 INTEGER,
INTENT(IN) :: extype
1192 INTEGER :: i, j, nr, nu, pot_type
1193 REAL(kind=
dp) :: scale_coulomb, scale_longrange
1194 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: abscissa, weights
1198 IF (
ASSOCIATED(
atom%xc_section))
THEN
1199 xc_section =>
atom%xc_section
1204 atom%hfx_pot%scale_longrange = 0.0_dp
1205 atom%hfx_pot%scale_coulomb = 1.0_dp
1218 SELECT CASE (pot_type)
1220 cpwarn(
"Potential not implemented, use Coulomb instead!")
1222 atom%hfx_pot%scale_longrange = 0.0_dp
1223 atom%hfx_pot%scale_coulomb = scale_coulomb
1225 atom%hfx_pot%scale_coulomb = 0.0_dp
1226 atom%hfx_pot%scale_longrange = scale_longrange
1228 atom%hfx_pot%scale_coulomb = 1.0_dp
1229 atom%hfx_pot%scale_longrange = -1.0_dp
1231 atom%hfx_pot%scale_coulomb = scale_coulomb
1232 atom%hfx_pot%scale_longrange = scale_longrange
1238 cpabort(
"Only numerical and semi-analytic lrHF exchange available!")
1241 IF (
atom%hfx_pot%scale_longrange /= 0.0_dp .AND. extype ==
do_numeric .AND. .NOT.
ALLOCATED(
atom%hfx_pot%kernel))
THEN
1244 IF (
atom%hfx_pot%do_gh)
THEN
1248 ALLOCATE (weights(
atom%hfx_pot%nr_gh), abscissa(
atom%hfx_pot%nr_gh))
1249 CALL get_gauss_hermite_weights(abscissa, weights,
atom%hfx_pot%nr_gh)
1251 nr =
atom%basis%grid%nr
1252 ALLOCATE (
atom%hfx_pot%kernel(nr,
atom%hfx_pot%nr_gh, 0:
atom%state%maxl_calc +
atom%state%maxl_occ))
1253 atom%hfx_pot%kernel = 0.0_dp
1254 DO nu = 0,
atom%state%maxl_calc +
atom%state%maxl_occ
1255 DO i = 1,
atom%hfx_pot%nr_gh
1258 *abscissa(i)*
atom%basis%grid%rad(j), nu)*sqrt(weights(i))
1266 nr =
atom%basis%grid%nr
1267 ALLOCATE (
atom%hfx_pot%kernel(nr, nr, 0:
atom%state%maxl_calc +
atom%state%maxl_occ))
1268 atom%hfx_pot%kernel = 0.0_dp
1269 DO nu = 0,
atom%state%maxl_calc +
atom%state%maxl_occ
1273 *
atom%basis%grid%rad(i)*
atom%basis%grid%rad(j), nu)
1280 NULLIFY (xc_section)
1292 SUBROUTINE get_gauss_hermite_weights(abscissa, weights, nn)
1293 REAL(kind=
dp),
DIMENSION(:),
INTENT(OUT) :: abscissa, weights
1294 INTEGER,
INTENT(IN) :: nn
1296 INTEGER :: counter, ii, info, liwork, lwork
1297 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: iwork
1298 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: diag, subdiag, work
1299 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: eigenvec
1303 ALLOCATE (work(1), iwork(1), diag(2*nn), subdiag(2*nn - 1), eigenvec(2*nn, 2*nn))
1308 subdiag(ii) = sqrt(real(ii, kind=
dp)/2.0_dp)
1312 CALL dstevd(
'V', 2*nn, diag, subdiag, eigenvec, 2*nn, work, lwork, iwork, liwork, info)
1315 cpabort(
'Finding size of working matrices failed!')
1319 lwork = int(work(1))
1321 DEALLOCATE (work, iwork)
1322 ALLOCATE (work(lwork), iwork(liwork))
1325 CALL dstevd(
'V', 2*nn, diag, subdiag, eigenvec, 2*nn, work, lwork, iwork, liwork, info)
1328 cpabort(
'Eigenvalue decomposition failed!')
1331 DEALLOCATE (work, iwork, subdiag)
1337 IF (diag(ii) > 0.0_dp)
THEN
1338 counter = counter + 1
1339 abscissa(counter) = diag(ii)
1340 weights(counter) =
rootpi*eigenvec(1, ii)**2
1343 IF (counter /= nn)
THEN
1344 cpabort(
'Have not found enough or too many zeros!')
1347 END SUBROUTINE get_gauss_hermite_weights
1357 INTEGER,
DIMENSION(0:lmat),
INTENT(IN) :: n
1358 INTEGER,
INTENT(IN),
OPTIONAL :: lmax
1363 IF (
PRESENT(lmax))
THEN
1369 cpassert(.NOT.
ASSOCIATED(opmat))
1374 ALLOCATE (opmat%op(m, m, 0:lm))
1386 cpassert(
ASSOCIATED(opmat))
1389 DEALLOCATE (opmat%op)
1406 cpassert(.NOT.
ASSOCIATED(opgrid))
1414 ALLOCATE (opgrid%op(nr))
1426 cpassert(
ASSOCIATED(opgrid))
1428 NULLIFY (opgrid%grid)
1429 DEALLOCATE (opgrid%op)
1445 INTEGER,
INTENT(IN) :: zval
1446 REAL(
dp),
INTENT(OUT) :: cval, aval
1447 INTEGER,
DIMENSION(0:lmat),
INTENT(OUT) :: ngto, ival
1460 cval = 2.14774520_dp
1461 aval = 0.04850670_dp
1464 cval = 2.08932430_dp
1465 aval = 0.02031060_dp
1468 cval = 2.09753060_dp
1469 aval = 0.03207070_dp
1472 cval = 2.10343410_dp
1473 aval = 0.03591970_dp
1477 cval = 2.10662820_dp
1478 aval = 0.05292410_dp
1482 cval = 2.13743840_dp
1483 aval = 0.06291970_dp
1487 cval = 2.08687310_dp
1488 aval = 0.08350860_dp
1492 cval = 2.12318180_dp
1493 aval = 0.09899170_dp
1497 cval = 2.13164810_dp
1498 aval = 0.11485350_dp
1502 cval = 2.11413310_dp
1503 aval = 0.00922630_dp
1508 cval = 2.12183620_dp
1509 aval = 0.01215850_dp
1514 cval = 2.06073230_dp
1515 aval = 0.01449350_dp
1520 cval = 2.08563660_dp
1521 aval = 0.01861460_dp
1526 cval = 2.04879270_dp
1527 aval = 0.02147790_dp
1532 cval = 2.06216660_dp
1533 aval = 0.01978920_dp
1538 cval = 2.04628670_dp
1539 aval = 0.02451470_dp
1544 cval = 2.08675200_dp
1545 aval = 0.02635040_dp
1550 cval = 2.02715220_dp
1551 aval = 0.01822040_dp
1556 cval = 2.01465650_dp
1557 aval = 0.01646570_dp
1562 cval = 2.01605240_dp
1563 aval = 0.01254190_dp
1569 cval = 2.01800000_dp
1570 aval = 0.01195490_dp
1577 cval = 1.98803560_dp
1578 aval = 0.02492140_dp
1585 cval = 1.98984000_dp
1586 aval = 0.02568400_dp
1593 cval = 2.01694380_dp
1594 aval = 0.02664480_dp
1601 cval = 2.01824090_dp
1602 aval = 0.01355000_dp
1609 cval = 1.98359400_dp
1610 aval = 0.01702210_dp
1617 cval = 1.96797340_dp
1618 aval = 0.02163180_dp
1625 cval = 1.98955180_dp
1626 aval = 0.02304480_dp
1633 cval = 1.98074320_dp
1634 aval = 0.02754320_dp
1641 cval = 2.00551070_dp
1642 aval = 0.02005530_dp
1649 cval = 2.00000030_dp
1650 aval = 0.02003000_dp
1657 cval = 2.00609100_dp
1658 aval = 0.02055620_dp
1665 cval = 2.00701000_dp
1666 aval = 0.02230400_dp
1673 cval = 2.01508710_dp
1674 aval = 0.02685790_dp
1681 cval = 2.01960430_dp
1682 aval = 0.02960430_dp
1689 cval = 2.00031000_dp
1690 aval = 0.00768400_dp
1698 cval = 1.99563960_dp
1699 aval = 0.01401940_dp
1706 cval = 1.98971210_dp
1707 aval = 0.01558470_dp
1713 cval = 1.97976190_dp
1714 aval = 0.01705520_dp
1720 cval = 1.97989290_dp
1721 aval = 0.01527040_dp
1727 cval = 1.97909240_dp
1728 aval = 0.01879720_dp
1734 cval = 1.98508430_dp
1735 aval = 0.01497550_dp
1742 cval = 1.98515010_dp
1743 aval = 0.01856670_dp
1750 cval = 1.98502970_dp
1751 aval = 0.01487000_dp
1758 cval = 1.97672850_dp
1759 aval = 0.01762500_dp
1767 cval = 1.97862730_dp
1768 aval = 0.01863310_dp
1775 cval = 1.97990020_dp
1776 aval = 0.01347150_dp
1783 cval = 1.97979410_dp
1784 aval = 0.00890265_dp
1791 cval = 1.98001000_dp
1792 aval = 0.00895215_dp
1799 cval = 1.97979980_dp
1800 aval = 0.01490290_dp
1807 cval = 1.98009310_dp
1808 aval = 0.01490390_dp
1815 cval = 1.97794750_dp
1816 aval = 0.01425880_dp
1824 cval = 1.97784450_dp
1825 aval = 0.01430130_dp
1833 cval = 1.97784450_dp
1834 aval = 0.00499318_dp
1842 cval = 1.97764820_dp
1843 aval = 0.00500392_dp
1851 cval = 1.97765150_dp
1852 aval = 0.00557083_dp
1860 cval = 1.97768750_dp
1861 aval = 0.00547531_dp
1871 cval = 1.96986600_dp
1872 aval = 0.00813143_dp
1882 cval = 1.97765720_dp
1883 aval = 0.00489201_dp
1893 cval = 1.97768120_dp
1894 aval = 0.00499000_dp
1904 cval = 1.97745700_dp
1905 aval = 0.00615587_dp
1915 cval = 1.97570240_dp
1916 aval = 0.00769959_dp
1926 cval = 1.97629350_dp
1927 aval = 0.00706610_dp
1937 cval = 1.96900000_dp
1938 aval = 0.01019150_dp
1948 cval = 1.97350000_dp
1949 aval = 0.01334320_dp
1959 cval = 1.97493000_dp
1960 aval = 0.01331360_dp
1969 cval = 1.97597670_dp
1970 aval = 0.01434040_dp
1980 cval = 1.97809240_dp
1981 aval = 0.01529430_dp
1991 cval = 1.97644360_dp
1992 aval = 0.01312770_dp
2002 cval = 1.96998000_dp
2003 aval = 0.01745150_dp
2013 cval = 1.97223830_dp
2014 aval = 0.01639750_dp
2024 cval = 1.97462110_dp
2025 aval = 0.01603680_dp
2035 cval = 1.97756000_dp
2036 aval = 0.02030570_dp
2046 cval = 1.97645760_dp
2047 aval = 0.02057180_dp
2057 cval = 1.97725820_dp
2058 aval = 0.02058210_dp
2068 cval = 1.97749380_dp
2069 aval = 0.02219380_dp
2079 cval = 1.97946280_dp
2080 aval = 0.02216280_dp
2090 cval = 1.97852130_dp
2091 aval = 0.02168500_dp
2101 cval = 1.98045190_dp
2102 aval = 0.02177860_dp
2112 cval = 1.97000000_dp
2113 aval = 0.02275000_dp
2123 cval = 1.97713580_dp
2124 aval = 0.02317030_dp
2134 cval = 1.97537880_dp
2135 aval = 0.02672860_dp
2145 cval = 1.97545360_dp
2146 aval = 0.02745360_dp
2156 cval = 1.97338370_dp
2157 aval = 0.02616310_dp
2167 cval = 1.97294240_dp
2168 aval = 0.02429220_dp
2178 cval = 1.98000000_dp
2179 aval = 0.01400000_dp
2189 cpabort(
"No geometrical basis set data are available for the selected atom number.")
2202 SUBROUTINE read_basis_set(element_symbol, basis, basis_set_name, basis_set_file, &
2205 CHARACTER(LEN=*),
INTENT(IN) :: element_symbol
2207 CHARACTER(LEN=*),
INTENT(IN) :: basis_set_name, basis_set_file
2210 INTEGER,
PARAMETER :: maxpri = 40, maxset = 20
2212 CHARACTER(len=20*default_string_length) :: line_att
2213 CHARACTER(LEN=240) :: line
2214 CHARACTER(LEN=242) :: line2
2215 CHARACTER(LEN=LEN(basis_set_name)) :: bsname
2216 CHARACTER(LEN=LEN(basis_set_name)+2) :: bsname2
2217 CHARACTER(LEN=LEN(element_symbol)) :: symbol
2218 CHARACTER(LEN=LEN(element_symbol)+2) :: symbol2
2219 INTEGER :: i, ii, ipgf, irep, iset, ishell, j, k, &
2220 lshell, nj, nmin, ns, nset, strlen1, &
2222 INTEGER,
DIMENSION(maxpri, maxset) :: l
2223 INTEGER,
DIMENSION(maxset) :: lmax, lmin, n, npgf, nshell
2224 LOGICAL :: found, is_ok, match, read_from_input
2225 REAL(
dp) :: expzet, gcca, prefac, zeta
2226 REAL(
dp),
DIMENSION(maxpri, maxpri, maxset) :: gcc
2227 REAL(
dp),
DIMENSION(maxpri, maxset) :: zet
2231 bsname = basis_set_name
2232 symbol = element_symbol
2244 read_from_input = .false.
2246 IF (read_from_input)
THEN
2253 CALL val_get(val, c_val=line_att)
2254 READ (line_att, *) nset
2255 cpassert(nset <= maxset)
2259 CALL val_get(val, c_val=line_att)
2260 READ (line_att, *) n(iset)
2262 READ (line_att, *) lmin(iset)
2264 READ (line_att, *) lmax(iset)
2266 READ (line_att, *) npgf(iset)
2268 cpassert(npgf(iset) <= maxpri)
2270 DO lshell = lmin(iset), lmax(iset)
2271 nmin = n(iset) + lshell - lmin(iset)
2272 READ (line_att, *) ishell
2274 nshell(iset) = nshell(iset) + ishell
2276 l(nshell(iset) - ishell + i, iset) = lshell
2279 cpassert(len_trim(line_att) == 0)
2280 DO ipgf = 1, npgf(iset)
2283 CALL val_get(val, c_val=line_att)
2284 READ (line_att, *) zet(ipgf, iset), (gcc(ipgf, ishell, iset), ishell=1, nshell(iset))
2301 line2 =
" "//line//
" "
2302 symbol2 =
" "//trim(symbol)//
" "
2303 bsname2 =
" "//trim(bsname)//
" "
2304 strlen1 = len_trim(symbol2) + 1
2305 strlen2 = len_trim(bsname2) + 1
2307 IF ((index(line2, symbol2(:strlen1)) > 0) .AND. &
2308 (index(line2, bsname2(:strlen2)) > 0)) match = .true.
2313 cpassert(nset <= maxset)
2319 cpassert(npgf(iset) <= maxpri)
2321 DO lshell = lmin(iset), lmax(iset)
2322 nmin = n(iset) + lshell - lmin(iset)
2324 nshell(iset) = nshell(iset) + ishell
2326 l(nshell(iset) - ishell + i, iset) = lshell
2329 DO ipgf = 1, npgf(iset)
2331 DO ishell = 1, nshell(iset)
2342 cpabort(
"End of file reached and the requested basis set was not found.")
2355 DO j = lmin(i), min(lmax(i),
lmat)
2356 basis%nprim(j) = basis%nprim(j) + npgf(i)
2360 IF (k <=
lmat) basis%nbas(k) = basis%nbas(k) + 1
2364 nj = maxval(basis%nprim)
2365 ns = maxval(basis%nbas)
2366 ALLOCATE (basis%am(nj, 0:
lmat))
2368 ALLOCATE (basis%cm(nj, ns, 0:
lmat))
2375 IF (j >= lmin(i) .AND. j <= lmax(i))
THEN
2376 DO ipgf = 1, npgf(i)
2377 basis%am(nj + ipgf, j) = zet(ipgf, i)
2379 DO ii = 1, nshell(i)
2380 IF (l(ii, i) == j)
THEN
2382 DO ipgf = 1, npgf(i)
2383 basis%cm(nj + ipgf, ns, j) = gcc(ipgf, ii, i)
2394 expzet = 0.25_dp*real(2*j + 3,
dp)
2395 prefac = sqrt(
rootpi/2._dp**(j + 2)*
dfac(2*j + 1))
2396 DO ipgf = 1, basis%nprim(j)
2397 DO ii = 1, basis%nbas(j)
2398 gcca = basis%cm(ipgf, ii, j)
2399 zeta = 2._dp*basis%am(ipgf, j)
2400 basis%cm(ipgf, ii, j) = zeta**expzet*gcca/prefac
2405 END SUBROUTINE read_basis_set
2414 TYPE(section_vals_type),
POINTER :: opt_section
2416 INTEGER :: miter, ndiis
2417 REAL(kind=dp) :: damp, eps_diis, eps_scf
2419 CALL section_vals_val_get(opt_section,
"MAX_ITER", i_val=miter)
2420 CALL section_vals_val_get(opt_section,
"EPS_SCF", r_val=eps_scf)
2421 CALL section_vals_val_get(opt_section,
"N_DIIS", i_val=ndiis)
2422 CALL section_vals_val_get(opt_section,
"EPS_DIIS", r_val=eps_diis)
2423 CALL section_vals_val_get(opt_section,
"DAMPING", r_val=damp)
2425 optimization%max_iter = miter
2426 optimization%eps_scf = eps_scf
2427 optimization%n_diis = ndiis
2428 optimization%eps_diis = eps_diis
2429 optimization%damping = damp
2440 TYPE(section_vals_type),
POINTER :: potential_section
2441 INTEGER,
INTENT(IN) :: zval
2443 CHARACTER(LEN=default_string_length) :: pseudo_fn, pseudo_name
2445 REAL(dp),
DIMENSION(:),
POINTER :: convals
2446 TYPE(section_vals_type),
POINTER :: ecp_potential_section, &
2447 gth_potential_section
2450 CALL section_vals_val_get(potential_section,
"PSEUDO_TYPE", i_val=potential%ppot_type)
2452 SELECT CASE (potential%ppot_type)
2454 CALL section_vals_val_get(potential_section,
"POTENTIAL_FILE_NAME", c_val=pseudo_fn)
2455 CALL section_vals_val_get(potential_section,
"POTENTIAL_NAME", c_val=pseudo_name)
2456 gth_potential_section => section_vals_get_subs_vals(potential_section,
"GTH_POTENTIAL")
2457 CALL read_gth_potential(ptable(zval)%symbol, potential%gth_pot, &
2458 pseudo_name, pseudo_fn, gth_potential_section)
2460 CALL section_vals_val_get(potential_section,
"POTENTIAL_FILE_NAME", c_val=pseudo_fn)
2461 CALL section_vals_val_get(potential_section,
"POTENTIAL_NAME", c_val=pseudo_name)
2462 ecp_potential_section => section_vals_get_subs_vals(potential_section,
"ECP")
2464 pseudo_name, pseudo_fn, ecp_potential_section)
2466 CALL section_vals_val_get(potential_section,
"POTENTIAL_FILE_NAME", c_val=pseudo_fn)
2467 CALL section_vals_val_get(potential_section,
"POTENTIAL_NAME", c_val=pseudo_name)
2468 CALL atom_read_upf(potential%upf_pot, pseudo_fn)
2469 potential%upf_pot%pname = pseudo_name
2471 cpabort(
"Pseudopotential type SGP is not implemented.")
2475 cpabort(
"Invalid pseudopotential type selected. Check the code!")
2478 potential%ppot_type = no_pseudo
2483 CALL section_vals_val_get(potential_section,
"CONFINEMENT_TYPE", i_val=ic)
2484 potential%conf_type = ic
2485 IF (potential%conf_type == no_conf)
THEN
2486 potential%acon = 0.0_dp
2487 potential%rcon = 4.0_dp
2488 potential%scon = 2.0_dp
2489 potential%confinement = .false.
2490 ELSE IF (potential%conf_type == poly_conf)
THEN
2491 CALL section_vals_val_get(potential_section,
"CONFINEMENT", r_vals=convals)
2492 IF (
SIZE(convals) >= 1)
THEN
2493 IF (convals(1) > 0.0_dp)
THEN
2494 potential%confinement = .true.
2495 potential%acon = convals(1)
2496 IF (
SIZE(convals) >= 2)
THEN
2497 potential%rcon = convals(2)
2499 potential%rcon = 4.0_dp
2501 IF (
SIZE(convals) >= 3)
THEN
2502 potential%scon = convals(3)
2504 potential%scon = 2.0_dp
2507 potential%confinement = .false.
2510 potential%confinement = .false.
2512 ELSE IF (potential%conf_type == barrier_conf)
THEN
2513 potential%acon = 200.0_dp
2514 potential%rcon = 4.0_dp
2515 potential%scon = 12.0_dp
2516 potential%confinement = .true.
2517 CALL section_vals_val_get(potential_section,
"CONFINEMENT", r_vals=convals)
2518 IF (
SIZE(convals) >= 1)
THEN
2519 IF (convals(1) > 0.0_dp)
THEN
2520 potential%acon = convals(1)
2521 IF (
SIZE(convals) >= 2)
THEN
2522 potential%rcon = convals(2)
2524 IF (
SIZE(convals) >= 3)
THEN
2525 potential%scon = convals(3)
2528 potential%confinement = .false.
2541 potential%confinement = .false.
2543 CALL atom_release_upf(potential%upf_pot)
2554 SUBROUTINE read_gth_potential(element_symbol, potential, pseudo_name, pseudo_file, &
2557 CHARACTER(LEN=*),
INTENT(IN) :: element_symbol
2559 CHARACTER(LEN=*),
INTENT(IN) :: pseudo_name, pseudo_file
2560 TYPE(section_vals_type),
POINTER :: potential_section
2562 CHARACTER(LEN=240) :: line
2563 CHARACTER(LEN=242) :: line2
2564 CHARACTER(len=5*default_string_length) :: line_att
2565 CHARACTER(LEN=LEN(element_symbol)) :: symbol
2566 CHARACTER(LEN=LEN(element_symbol)+2) :: symbol2
2567 CHARACTER(LEN=LEN(pseudo_name)) :: apname
2568 CHARACTER(LEN=LEN(pseudo_name)+2) :: apname2
2569 INTEGER :: i, ic, ipot, j, l, nlmax, strlen1, &
2571 INTEGER,
DIMENSION(0:lmat) :: elec_conf
2572 LOGICAL :: found, is_ok, match, read_from_input
2573 TYPE(cp_sll_val_type),
POINTER ::
list
2574 TYPE(val_type),
POINTER :: val
2578 apname = pseudo_name
2579 symbol = element_symbol
2581 potential%symbol = symbol
2582 potential%pname = apname
2584 potential%rc = 0._dp
2586 potential%cl = 0._dp
2588 potential%rcnl = 0._dp
2589 potential%hnl = 0._dp
2590 potential%soc = .false.
2591 potential%knl = 0._dp
2593 potential%lpotextended = .false.
2594 potential%lsdpot = .false.
2595 potential%nlcc = .false.
2596 potential%nexp_lpot = 0
2597 potential%nexp_lsd = 0
2598 potential%nexp_nlcc = 0
2600 read_from_input = .false.
2601 CALL section_vals_get(potential_section, explicit=read_from_input)
2602 IF (read_from_input)
THEN
2603 CALL section_vals_list_get(potential_section,
"_DEFAULT_KEYWORD_",
list=
list)
2604 CALL uppercase(symbol)
2605 CALL uppercase(apname)
2608 is_ok = cp_sll_val_next(
list, val)
2610 CALL val_get(val, c_val=line_att)
2611 READ (line_att, *) elec_conf(l)
2612 CALL remove_word(line_att)
2613 DO WHILE (len_trim(line_att) /= 0)
2615 READ (line_att, *) elec_conf(l)
2616 CALL remove_word(line_att)
2618 potential%econf(0:
lmat) = elec_conf(0:
lmat)
2619 potential%zion = real(sum(elec_conf), dp)
2621 is_ok = cp_sll_val_next(
list, val)
2623 CALL val_get(val, c_val=line_att)
2624 READ (line_att, *) potential%rc
2625 CALL remove_word(line_att)
2627 READ (line_att, *) potential%ncl
2628 CALL remove_word(line_att)
2629 DO i = 1, potential%ncl
2630 READ (line_att, *) potential%cl(i)
2631 CALL remove_word(line_att)
2635 is_ok = cp_sll_val_next(
list, val)
2637 CALL val_get(val, c_val=line_att)
2638 IF (index(line_att,
"LPOT") /= 0)
THEN
2639 potential%lpotextended = .true.
2640 CALL remove_word(line_att)
2641 READ (line_att, *) potential%nexp_lpot
2642 DO ipot = 1, potential%nexp_lpot
2643 is_ok = cp_sll_val_next(
list, val)
2645 CALL val_get(val, c_val=line_att)
2646 READ (line_att, *) potential%alpha_lpot(ipot)
2647 CALL remove_word(line_att)
2648 READ (line_att, *) potential%nct_lpot(ipot)
2649 CALL remove_word(line_att)
2650 DO ic = 1, potential%nct_lpot(ipot)
2651 READ (line_att, *) potential%cval_lpot(ic, ipot)
2652 CALL remove_word(line_att)
2655 ELSE IF (index(line_att,
"NLCC") /= 0)
THEN
2656 potential%nlcc = .true.
2657 CALL remove_word(line_att)
2658 READ (line_att, *) potential%nexp_nlcc
2659 DO ipot = 1, potential%nexp_nlcc
2660 is_ok = cp_sll_val_next(
list, val)
2662 CALL val_get(val, c_val=line_att)
2663 READ (line_att, *) potential%alpha_nlcc(ipot)
2664 CALL remove_word(line_att)
2665 READ (line_att, *) potential%nct_nlcc(ipot)
2666 CALL remove_word(line_att)
2667 DO ic = 1, potential%nct_nlcc(ipot)
2668 READ (line_att, *) potential%cval_nlcc(ic, ipot)
2670 potential%cval_nlcc(ic, ipot) = potential%cval_nlcc(ic, ipot)/(4.0_dp*pi)
2671 CALL remove_word(line_att)
2674 ELSE IF (index(line_att,
"LSD") /= 0)
THEN
2675 potential%lsdpot = .true.
2676 CALL remove_word(line_att)
2677 READ (line_att, *) potential%nexp_lsd
2678 DO ipot = 1, potential%nexp_lsd
2679 is_ok = cp_sll_val_next(
list, val)
2681 CALL val_get(val, c_val=line_att)
2682 READ (line_att, *) potential%alpha_lsd(ipot)
2683 CALL remove_word(line_att)
2684 READ (line_att, *) potential%nct_lsd(ipot)
2685 CALL remove_word(line_att)
2686 DO ic = 1, potential%nct_lsd(ipot)
2687 READ (line_att, *) potential%cval_lsd(ic, ipot)
2688 CALL remove_word(line_att)
2696 READ (line_att, *) nlmax
2697 CALL remove_word(line_att)
2698 IF (index(line_att,
"SOC") /= 0) potential%soc = .true.
2702 is_ok = cp_sll_val_next(
list, val)
2704 CALL val_get(val, c_val=line_att)
2705 READ (line_att, *) potential%rcnl(l)
2706 CALL remove_word(line_att)
2707 READ (line_att, *) potential%nl(l)
2708 CALL remove_word(line_att)
2709 DO i = 1, potential%nl(l)
2711 READ (line_att, *) potential%hnl(1, 1, l)
2712 CALL remove_word(line_att)
2714 cpassert(len_trim(line_att) == 0)
2715 is_ok = cp_sll_val_next(
list, val)
2717 CALL val_get(val, c_val=line_att)
2718 READ (line_att, *) potential%hnl(i, i, l)
2719 CALL remove_word(line_att)
2721 DO j = i + 1, potential%nl(l)
2722 READ (line_att, *) potential%hnl(i, j, l)
2723 potential%hnl(j, i, l) = potential%hnl(i, j, l)
2724 CALL remove_word(line_att)
2727 IF (potential%soc .AND. l /= 0)
THEN
2728 is_ok = cp_sll_val_next(
list, val)
2730 CALL val_get(val, c_val=line_att)
2731 DO i = 1, potential%nl(l)
2733 READ (line_att, *) potential%knl(1, 1, l)
2734 CALL remove_word(line_att)
2736 cpassert(len_trim(line_att) == 0)
2737 is_ok = cp_sll_val_next(
list, val)
2739 CALL val_get(val, c_val=line_att)
2740 READ (line_att, *) potential%knl(i, i, l)
2741 CALL remove_word(line_att)
2743 DO j = i + 1, potential%nl(l)
2744 READ (line_att, *) potential%knl(i, j, l)
2745 potential%knl(j, i, l) = potential%knl(i, j, l)
2746 CALL remove_word(line_att)
2750 cpassert(len_trim(line_att) == 0)
2755 TYPE(cp_parser_type) :: parser
2756 CALL parser_create(parser, pseudo_file)
2759 CALL parser_search_string(parser, trim(apname), .true., found, line)
2761 CALL uppercase(symbol)
2762 CALL uppercase(apname)
2765 CALL uppercase(line)
2766 line2 =
" "//line//
" "
2767 symbol2 =
" "//trim(symbol)//
" "
2768 apname2 =
" "//trim(apname)//
" "
2769 strlen1 = len_trim(symbol2) + 1
2770 strlen2 = len_trim(apname2) + 1
2772 IF ((index(line2, symbol2(:strlen1)) > 0) .AND. &
2773 (index(line2, apname2(:strlen2)) > 0)) match = .true.
2778 CALL parser_get_object(parser, elec_conf(l), newline=.true.)
2779 DO WHILE (parser_test_next_token(parser) ==
"INT")
2781 CALL parser_get_object(parser, elec_conf(l))
2783 potential%econf(0:
lmat) = elec_conf(0:
lmat)
2784 potential%zion = real(sum(elec_conf), dp)
2786 CALL parser_get_object(parser, potential%rc, newline=.true.)
2788 CALL parser_get_object(parser, potential%ncl)
2789 DO i = 1, potential%ncl
2790 CALL parser_get_object(parser, potential%cl(i))
2794 CALL parser_get_next_line(parser, 1)
2795 IF (parser_test_next_token(parser) ==
"INT")
THEN
2797 ELSE IF (parser_test_next_token(parser) ==
"STR")
THEN
2798 CALL parser_get_object(parser, line)
2799 IF (index(line,
"LPOT") /= 0)
THEN
2801 potential%lpotextended = .true.
2802 CALL parser_get_object(parser, potential%nexp_lpot)
2803 DO ipot = 1, potential%nexp_lpot
2804 CALL parser_get_object(parser, potential%alpha_lpot(ipot), newline=.true.)
2805 CALL parser_get_object(parser, potential%nct_lpot(ipot))
2806 DO ic = 1, potential%nct_lpot(ipot)
2807 CALL parser_get_object(parser, potential%cval_lpot(ic, ipot))
2810 ELSE IF (index(line,
"NLCC") /= 0)
THEN
2812 potential%nlcc = .true.
2813 CALL parser_get_object(parser, potential%nexp_nlcc)
2814 DO ipot = 1, potential%nexp_nlcc
2815 CALL parser_get_object(parser, potential%alpha_nlcc(ipot), newline=.true.)
2816 CALL parser_get_object(parser, potential%nct_nlcc(ipot))
2817 DO ic = 1, potential%nct_nlcc(ipot)
2818 CALL parser_get_object(parser, potential%cval_nlcc(ic, ipot))
2820 potential%cval_nlcc(ic, ipot) = potential%cval_nlcc(ic, ipot)/(4.0_dp*pi)
2823 ELSE IF (index(line,
"LSD") /= 0)
THEN
2825 potential%lsdpot = .true.
2826 CALL parser_get_object(parser, potential%nexp_lsd)
2827 DO ipot = 1, potential%nexp_lsd
2828 CALL parser_get_object(parser, potential%alpha_lsd(ipot), newline=.true.)
2829 CALL parser_get_object(parser, potential%nct_lsd(ipot))
2830 DO ic = 1, potential%nct_lsd(ipot)
2831 CALL parser_get_object(parser, potential%cval_lsd(ic, ipot))
2835 cpabort(
"Parsing of extended potential type failed.")
2838 cpabort(
"Invalid input token found.")
2842 CALL parser_get_object(parser, nlmax)
2844 IF (parser_test_next_token(parser) ==
"STR")
THEN
2845 CALL parser_get_object(parser, line)
2846 IF (index(line,
"SOC") /= 0) potential%soc = .true.
2850 CALL parser_get_object(parser, potential%rcnl(l), newline=.true.)
2851 CALL parser_get_object(parser, potential%nl(l))
2852 DO i = 1, potential%nl(l)
2854 CALL parser_get_object(parser, potential%hnl(i, i, l))
2856 CALL parser_get_object(parser, potential%hnl(i, i, l), newline=.true.)
2858 DO j = i + 1, potential%nl(l)
2859 CALL parser_get_object(parser, potential%hnl(i, j, l))
2860 potential%hnl(j, i, l) = potential%hnl(i, j, l)
2863 IF (potential%soc .AND. l /= 0)
THEN
2864 DO i = 1, potential%nl(l)
2865 CALL parser_get_object(parser, potential%knl(i, i, l), newline=.true.)
2866 DO j = i + 1, potential%nl(l)
2867 CALL parser_get_object(parser, potential%knl(i, j, l))
2868 potential%knl(j, i, l) = potential%knl(i, j, l)
2878 cpabort(
"End of file reached unexpectedly")
2883 CALL parser_release(parser)
2887 END SUBROUTINE read_gth_potential
2899 CHARACTER(LEN=*),
INTENT(IN) :: element_symbol
2901 CHARACTER(LEN=*),
INTENT(IN) :: pseudo_name, pseudo_file
2902 TYPE(section_vals_type),
POINTER :: potential_section
2904 CHARACTER(LEN=240) :: line
2905 CHARACTER(len=5*default_string_length) :: line_att
2906 CHARACTER(LEN=LEN(element_symbol)+1) :: symbol
2907 CHARACTER(LEN=LEN(pseudo_name)) :: apname
2908 INTEGER :: i, ic, l, ncore, nel
2909 LOGICAL :: found, is_ok, read_from_input
2910 TYPE(cp_sll_val_type),
POINTER ::
list
2911 TYPE(val_type),
POINTER :: val
2913 apname = pseudo_name
2914 symbol = element_symbol
2915 CALL get_ptable_info(symbol, number=ncore)
2917 potential%symbol = symbol
2918 potential%pname = apname
2924 potential%aloc = 0.0_dp
2925 potential%bloc = 0.0_dp
2928 potential%apot = 0.0_dp
2929 potential%bpot = 0.0_dp
2931 read_from_input = .false.
2932 CALL section_vals_get(potential_section, explicit=read_from_input)
2933 IF (read_from_input)
THEN
2934 CALL section_vals_list_get(potential_section,
"_DEFAULT_KEYWORD_",
list=
list)
2936 is_ok = cp_sll_val_next(
list, val)
2938 CALL val_get(val, c_val=line_att)
2939 CALL remove_word(line_att)
2940 CALL remove_word(line_att)
2942 READ (line_att, *) nel
2943 potential%zion = real(ncore - nel, kind=dp)
2945 is_ok = cp_sll_val_next(
list, val)
2947 CALL val_get(val, c_val=line_att)
2949 IF (.NOT. cp_sll_val_next(
list, val))
EXIT
2950 CALL val_get(val, c_val=line_att)
2951 IF (index(line_att, element_symbol) == 0)
THEN
2952 potential%nloc = potential%nloc + 1
2954 READ (line_att, *) potential%nrloc(ic), potential%bloc(ic), potential%aloc(ic)
2961 CALL val_get(val, c_val=line_att)
2962 IF (index(line_att, element_symbol) == 0)
THEN
2963 potential%npot(l) = potential%npot(l) + 1
2964 ic = potential%npot(l)
2965 READ (line_att, *) potential%nrpot(ic, l), potential%bpot(ic, l), potential%apot(ic, l)
2967 potential%lmax = potential%lmax + 1
2970 IF (.NOT. cp_sll_val_next(
list, val))
EXIT
2975 TYPE(cp_parser_type) :: parser
2976 CALL parser_create(parser, pseudo_file)
2979 CALL parser_search_string(parser, trim(apname), .true., found, line)
2982 CALL parser_get_object(parser, line, newline=.true.)
2983 IF (trim(line) == element_symbol)
THEN
2984 CALL parser_get_object(parser, line, lower_to_upper=.true.)
2985 cpassert(trim(line) ==
"NELEC")
2987 CALL parser_get_object(parser, nel)
2988 potential%zion = real(ncore - nel, kind=dp)
2990 CALL parser_get_object(parser, line, newline=.true.)
2993 CALL parser_read_line(parser, 1)
2994 IF (parser_test_next_token(parser) ==
"STR")
EXIT
2995 potential%nloc = potential%nloc + 1
2997 CALL parser_get_object(parser, potential%nrloc(ic))
2998 CALL parser_get_object(parser, potential%bloc(ic))
2999 CALL parser_get_object(parser, potential%aloc(ic))
3003 CALL parser_get_object(parser, symbol)
3004 IF (symbol == element_symbol)
THEN
3006 potential%lmax = potential%lmax + 1
3008 CALL parser_read_line(parser, 1)
3009 IF (parser_test_next_token(parser) ==
"STR")
EXIT
3010 potential%npot(l) = potential%npot(l) + 1
3011 ic = potential%npot(l)
3012 CALL parser_get_object(parser, potential%nrpot(ic, l))
3013 CALL parser_get_object(parser, potential%bpot(ic, l))
3014 CALL parser_get_object(parser, potential%apot(ic, l))
3021 ELSE IF (line ==
"END")
THEN
3022 cpabort(
"Element not found in ECP library")
3026 cpabort(
"ECP type not found in library")
3031 CALL parser_release(parser)
3036 potential%econf(0:3) = ptable(ncore)%e_conv(0:3)
3039 cpabort(
"Unknown Core State")
3042 potential%econf(0:3) = potential%econf(0:3) - ptable(2)%e_conv(0:3)
3044 potential%econf(0:3) = potential%econf(0:3) - ptable(10)%e_conv(0:3)
3046 potential%econf(0:3) = potential%econf(0:3) - ptable(18)%e_conv(0:3)
3048 potential%econf(0:3) = potential%econf(0:3) - ptable(18)%e_conv(0:3)
3049 potential%econf(2) = potential%econf(2) - 10
3051 potential%econf(0:3) = potential%econf(0:3) - ptable(36)%e_conv(0:3)
3053 potential%econf(0:3) = potential%econf(0:3) - ptable(36)%e_conv(0:3)
3054 potential%econf(2) = potential%econf(2) - 10
3056 potential%econf(0:3) = potential%econf(0:3) - ptable(54)%e_conv(0:3)
3058 potential%econf(0:3) = potential%econf(0:3) - ptable(36)%e_conv(0:3)
3059 potential%econf(2) = potential%econf(2) - 10
3060 potential%econf(3) = potential%econf(3) - 14
3062 potential%econf(0:3) = potential%econf(0:3) - ptable(54)%e_conv(0:3)
3063 potential%econf(3) = potential%econf(3) - 14
3065 potential%econf(0:3) = potential%econf(0:3) - ptable(54)%e_conv(0:3)
3066 potential%econf(2) = potential%econf(2) - 10
3067 potential%econf(3) = potential%econf(3) - 14
3070 cpassert(all(potential%econf >= 0))
3080 TYPE(grid_atom_type) :: grid1, grid2
3084 REAL(kind=dp) :: dr, dw
3087 IF (grid1%nr == grid2%nr)
THEN
3089 dr = abs(grid1%rad(i) - grid2%rad(i))
3090 dw = abs(grid1%wr(i) - grid2%wr(i))
3091 IF (dr + dw > 1.0e-12_dp)
THEN
Define the atom type and its sub types.
integer, parameter, public num_basis
subroutine, public read_atom_opt_section(optimization, opt_section)
...
subroutine, public create_atom_type(atom)
...
integer, parameter, public cgto_basis
integer, parameter, public gto_basis
integer, parameter, public sto_basis
subroutine, public release_atom_type(atom)
...
subroutine, public release_opmat(opmat)
...
subroutine, public release_atom_potential(potential)
...
subroutine, public init_atom_basis(basis, basis_section, zval, btyp)
Initialize the basis for the atomic code.
logical function, public atom_compare_grids(grid1, grid2)
...
subroutine, public release_opgrid(opgrid)
...
subroutine, public release_atom_orbs(orbs)
...
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 init_atom_potential(potential, potential_section, zval)
...
subroutine, public release_atom_basis(basis)
...
subroutine, public create_atom_orbs(orbs, mbas, mo)
...
subroutine, public init_atom_basis_default_pp(basis)
...
subroutine, public create_opmat(opmat, n, lmax)
...
subroutine, public atom_basis_gridrep(basis, gbasis, r, rab)
...
subroutine, public read_ecp_potential(element_symbol, potential, pseudo_name, pseudo_file, potential_section)
...
subroutine, public setup_hf_section(hf_frac, do_hfx, atom, xc_section, extype)
...
subroutine, public clementi_geobas(zval, cval, aval, ngto, ival)
...
subroutine, public create_opgrid(opgrid, grid)
...
Routines that process Quantum Espresso UPF files.
subroutine, public atom_read_upf(pot, upf_filename, read_header)
...
pure subroutine, public atom_release_upf(upfpot)
...
Calculates Bessel functions.
elemental impure real(kind=dp) function, public bessel0(x, l)
...
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public limpanuparb2011
Utility routines to read data from files. Kept as close as possible to the old parser because.
subroutine, public parser_read_line(parser, nline, at_end)
Read the next line from a logical unit "unit" (I/O node only). Skip (nline-1) lines and skip also all...
subroutine, public parser_get_next_line(parser, nline, at_end)
Read the next input line and broadcast the input information. Skip (nline-1) lines and skip also all ...
character(len=3) function, public parser_test_next_token(parser, string_length)
Test next input object.
subroutine, public parser_search_string(parser, string, ignore_case, found, line, begin_line, search_from_begin_of_file)
Search a string pattern in a file defined by its logical unit number "unit". A case sensitive search ...
Utility routines to read data from files. Kept as close as possible to the old parser because.
subroutine, public parser_release(parser)
releases the parser
subroutine, public parser_create(parser, file_name, unit_nr, para_env, end_section_label, separator_chars, comment_char, continuation_char, quote_char, section_char, parse_white_lines, initial_variables, apply_preprocessing)
Start a parser run. Initial variables allow to @SET stuff before opening the file.
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
An array-based list which grows on demand. When the internal array is full, a new array of twice the ...
Definition of mathematical constants and functions.
real(kind=dp), parameter, public pi
real(kind=dp), dimension(-1:2 *maxfac+1), parameter, public dfac
real(kind=dp), parameter, public rootpi
real(kind=dp), dimension(0:maxfac), parameter, public fac
Periodic Table related data definitions.
type(atom), dimension(0:nelem), public ptable
subroutine, public get_ptable_info(symbol, number, amass, ielement, covalent_radius, metallic_radius, vdw_radius, found)
Pass information about the kind given the element symbol.
subroutine, public deallocate_grid_atom(grid_atom)
Deallocate a Gaussian-type orbital (GTO) basis set data set.
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)
...
Utilities for string manipulations.
character(len=1), parameter, public newline
subroutine, public remove_word(string)
remove a word from a string (words are separated by white spaces)
elemental subroutine, public uppercase(string)
Convert all lower case characters in a string to upper case.
Provides all information about a basis set.
Provides all information about a pseudopotential.
Provides info about hartree-fock exchange (For now, we only support potentials that can be represente...
Information on optimization procedure.
Holds atomic orbitals and energies.
Provides all information on states and occupation.
Provides all information about an atomic kind.