24 #include "./base/base_uses.f90"
30 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_dftb_utils'
33 INTEGER,
PARAMETER :: max_inter = 5
35 INTEGER,
PARAMETER :: max_extra = 9
37 REAL(dp),
PARAMETER :: slako_d0 = 1._dp
39 INTEGER,
DIMENSION(0:3, 0:3, 0:3, 0:3, 0:3)::
iptr
41 REAL(dp),
PARAMETER :: rtiny = 1.e-10_dp
43 REAL(dp),
PARAMETER :: eta_mm = 0.47_dp
45 REAL(dp),
PARAMETER :: ddrmm = 0.0001_dp
63 TYPE(qs_dftb_atom_type),
POINTER :: dftb_parameter
65 IF (
ASSOCIATED(dftb_parameter)) &
68 ALLOCATE (dftb_parameter)
70 dftb_parameter%defined = .false.
71 dftb_parameter%name =
""
72 dftb_parameter%typ =
"NONE"
74 dftb_parameter%zeff = -1.0_dp
75 dftb_parameter%natorb = 0
76 dftb_parameter%lmax = -1
77 dftb_parameter%skself = 0.0_dp
78 dftb_parameter%occupation = 0.0_dp
79 dftb_parameter%eta = 0.0_dp
80 dftb_parameter%energy = 0.0_dp
81 dftb_parameter%xi = 0.0_dp
82 dftb_parameter%di = 0.0_dp
83 dftb_parameter%rcdisp = 0.0_dp
84 dftb_parameter%dudq = 0.0_dp
94 TYPE(qs_dftb_atom_type),
POINTER :: dftb_parameter
96 cpassert(
ASSOCIATED(dftb_parameter))
97 DEALLOCATE (dftb_parameter)
122 lmax, skself, occupation, eta, energy, cutoff, xi, di, rcdisp, dudq)
124 TYPE(qs_dftb_atom_type),
POINTER :: dftb_parameter
125 CHARACTER(LEN=default_string_length), &
126 INTENT(OUT),
OPTIONAL :: name, typ
127 LOGICAL,
INTENT(OUT),
OPTIONAL :: defined
128 INTEGER,
INTENT(OUT),
OPTIONAL :: z
129 REAL(kind=dp),
INTENT(OUT),
OPTIONAL :: zeff
130 INTEGER,
INTENT(OUT),
OPTIONAL :: natorb, lmax
131 REAL(kind=dp),
DIMENSION(0:3),
OPTIONAL :: skself, occupation, eta
132 REAL(kind=dp),
OPTIONAL :: energy, cutoff, xi, di, rcdisp, dudq
134 cpassert(
ASSOCIATED(dftb_parameter))
136 IF (
PRESENT(name)) name = dftb_parameter%name
137 IF (
PRESENT(typ)) typ = dftb_parameter%typ
138 IF (
PRESENT(defined)) defined = dftb_parameter%defined
139 IF (
PRESENT(z)) z = dftb_parameter%z
140 IF (
PRESENT(zeff)) zeff = dftb_parameter%zeff
141 IF (
PRESENT(natorb)) natorb = dftb_parameter%natorb
142 IF (
PRESENT(lmax)) lmax = dftb_parameter%lmax
143 IF (
PRESENT(skself)) skself = dftb_parameter%skself
144 IF (
PRESENT(eta)) eta = dftb_parameter%eta
145 IF (
PRESENT(energy)) energy = dftb_parameter%energy
146 IF (
PRESENT(cutoff)) cutoff = dftb_parameter%cutoff
147 IF (
PRESENT(occupation)) occupation = dftb_parameter%occupation
148 IF (
PRESENT(xi)) xi = dftb_parameter%xi
149 IF (
PRESENT(di)) di = dftb_parameter%di
150 IF (
PRESENT(rcdisp)) rcdisp = dftb_parameter%rcdisp
151 IF (
PRESENT(dudq)) dudq = dftb_parameter%dudq
176 lmax, skself, occupation, eta, energy, cutoff, xi, di, rcdisp, dudq)
178 TYPE(qs_dftb_atom_type),
POINTER :: dftb_parameter
179 CHARACTER(LEN=default_string_length),
INTENT(IN), &
180 OPTIONAL :: name, typ
181 LOGICAL,
INTENT(IN),
OPTIONAL :: defined
182 INTEGER,
INTENT(IN),
OPTIONAL :: z
183 REAL(kind=dp),
INTENT(IN),
OPTIONAL :: zeff
184 INTEGER,
INTENT(IN),
OPTIONAL :: natorb, lmax
185 REAL(kind=dp),
DIMENSION(0:3),
OPTIONAL :: skself, occupation, eta
186 REAL(kind=dp),
OPTIONAL :: energy, cutoff, xi, di, rcdisp, dudq
188 cpassert(
ASSOCIATED(dftb_parameter))
190 IF (
PRESENT(name)) dftb_parameter%name = name
191 IF (
PRESENT(typ)) dftb_parameter%typ = typ
192 IF (
PRESENT(defined)) dftb_parameter%defined = defined
193 IF (
PRESENT(z)) dftb_parameter%z = z
194 IF (
PRESENT(zeff)) dftb_parameter%zeff = zeff
195 IF (
PRESENT(natorb)) dftb_parameter%natorb = natorb
196 IF (
PRESENT(lmax)) dftb_parameter%lmax = lmax
197 IF (
PRESENT(skself)) dftb_parameter%skself = skself
198 IF (
PRESENT(eta)) dftb_parameter%eta = eta
199 IF (
PRESENT(occupation)) dftb_parameter%occupation = occupation
200 IF (
PRESENT(energy)) dftb_parameter%energy = energy
201 IF (
PRESENT(cutoff)) dftb_parameter%cutoff = cutoff
202 IF (
PRESENT(xi)) dftb_parameter%xi = xi
203 IF (
PRESENT(di)) dftb_parameter%di = di
204 IF (
PRESENT(rcdisp)) dftb_parameter%rcdisp = rcdisp
205 IF (
PRESENT(dudq)) dftb_parameter%dudq = dudq
216 TYPE(qs_dftb_atom_type),
POINTER :: dftb_parameter
217 TYPE(section_vals_type),
POINTER :: subsys_section
219 CHARACTER(LEN=default_string_length) :: name, typ
220 INTEGER :: lmax, natorb, output_unit, z
223 TYPE(cp_logger_type),
POINTER :: logger
227 IF (
ASSOCIATED(dftb_parameter) .AND. &
229 "PRINT%KINDS/POTENTIAL"),
cp_p_file))
THEN
234 IF (output_unit > 0)
THEN
236 z=z, zeff=zeff, natorb=natorb, lmax=lmax)
238 WRITE (unit=output_unit, fmt=
"(/,A,T67,A14)") &
239 " DFTB parameters: ", trim(name)
241 WRITE (unit=output_unit, fmt=
"(T16,A,T71,F10.2)") &
242 "Effective core charge:", zeff
243 WRITE (unit=output_unit, fmt=
"(T16,A,T71,I10)") &
244 "Number of orbitals:", natorb
246 WRITE (unit=output_unit, fmt=
"(T55,A)") &
247 "Parameters are not defined"
272 llm, lmaxi, lmaxj, irow, iatom)
273 REAL(kind=dp),
DIMENSION(:, :),
POINTER :: block, smatij, smatji
274 REAL(kind=dp),
DIMENSION(3) :: rij
275 INTEGER :: ngrd, ngrdcut
276 REAL(kind=dp) :: dgrd
277 INTEGER :: llm, lmaxi, lmaxj, irow, iatom
280 REAL(kind=dp),
DIMENSION(20) :: skabij, skabji
282 dr = sqrt(sum(rij(:)**2))
283 CALL getskz(smatij, skabij, dr, ngrd, ngrdcut, dgrd, llm)
284 CALL getskz(smatji, skabji, dr, ngrd, ngrdcut, dgrd, llm)
285 IF (irow == iatom)
THEN
286 CALL turnsk(block, skabji, skabij, rij, dr, lmaxi, lmaxj)
288 CALL turnsk(block, skabij, skabji, -rij, dr, lmaxj, lmaxi)
304 SUBROUTINE getskz(slakotab, skpar, dx, ngrd, ngrdcut, dgrd, llm)
305 REAL(dp),
INTENT(in) :: slakotab(:, :), dx
306 INTEGER,
INTENT(in) :: ngrd, ngrdcut
307 REAL(dp),
INTENT(in) :: dgrd
308 INTEGER,
INTENT(in) :: llm
309 REAL(dp),
INTENT(out) :: skpar(llm)
321 IF (clgp > ngrdcut)
RETURN
327 IF (clgp > ngrd)
THEN
331 CALL extrapol(slakotab, skpar, dx, ngrd, dgrd, llm)
336 CALL interpol(slakotab, skpar, dx, ngrd, dgrd, llm, clgp)
338 END SUBROUTINE getskz
350 SUBROUTINE interpol(slakotab, skpar, dx, ngrd, dgrd, llm, clgp)
351 REAL(dp),
INTENT(in) :: slakotab(:, :), dx
352 INTEGER,
INTENT(in) :: ngrd
353 REAL(dp),
INTENT(in) :: dgrd
354 INTEGER,
INTENT(in) :: llm
355 REAL(dp),
INTENT(out) :: skpar(llm)
356 INTEGER,
INTENT(in) :: clgp
358 INTEGER :: fgpm, k, l, lgpm
359 REAL(dp) :: error, xa(max_inter), ya(max_inter)
361 lgpm = min(clgp + int(max_inter/2.0), ngrd)
362 fgpm = lgpm - max_inter + 1
363 DO k = 0, max_inter - 1
364 xa(k + 1) = (fgpm + k)*dgrd
373 ya(1:max_inter) = slakotab(fgpm:lgpm, l)
374 CALL polint(xa, ya, max_inter, dx, skpar(l), error)
376 END SUBROUTINE interpol
387 SUBROUTINE extrapol(slakotab, skpar, dx, ngrd, dgrd, llm)
388 REAL(dp),
INTENT(in) :: slakotab(:, :), dx
389 INTEGER,
INTENT(in) :: ngrd
390 REAL(dp),
INTENT(in) :: dgrd
391 INTEGER,
INTENT(in) :: llm
392 REAL(dp),
INTENT(out) :: skpar(llm)
394 INTEGER :: fgp, k, l, lgp, ntable, nzero
395 REAL(dp) :: error, xa(max_extra), ya(max_extra)
398 ntable = max_extra - nzero
403 xa(k) = (ngrd - (max_extra - 3) + k)*dgrd
406 xa(ntable + k) = (ngrd + k - 1)*dgrd + slako_d0
416 fgp = ngrd + 1 - (max_extra - 3)
418 ya(1:max_extra - 3) = slakotab(fgp:lgp, l)
419 CALL polint(xa, ya, max_extra, dx, skpar(l), error)
421 END SUBROUTINE extrapol
446 SUBROUTINE turnsk(mat, skab1, skab2, dxv, dx, lmaxa, lmaxb)
447 REAL(dp),
INTENT(inout) :: mat(:, :)
448 REAL(dp),
INTENT(in) :: skab1(:), skab2(:), dxv(3), dx
449 INTEGER,
INTENT(in) :: lmaxa, lmaxb
451 INTEGER :: lmaxab, minlmaxab
452 REAL(dp) :: rinv, rr(6), rr2(6)
454 lmaxab = max(lmaxa, lmaxb)
456 IF (lmaxab .GT. 2) cpabort(
'lmax=2')
457 minlmaxab = min(lmaxa, lmaxb)
461 CALL skss(skab1, mat)
463 IF (lmaxab .LE. 0)
RETURN
465 rr2(1:3) = dxv(1:3)**2
469 rr(1:3) = rr(1:3)*rinv
471 rr2(1:3) = rr2(1:3)*rinv**2
476 IF (minlmaxab .GE. 1)
THEN
477 CALL skpp(skab1, mat,
iptr(:, :, :, lmaxa, lmaxb))
478 CALL sksp(skab2, mat,
iptr(:, :, :, lmaxa, lmaxb), .true.)
479 CALL sksp(skab1, mat,
iptr(:, :, :, lmaxa, lmaxb), .false.)
481 IF (lmaxb .GE. 1)
THEN
482 CALL sksp(skab2, mat,
iptr(:, :, :, lmaxa, lmaxb), .true.)
484 CALL sksp(skab1, mat,
iptr(:, :, :, lmaxa, lmaxb), .false.)
490 IF (lmaxab .LE. 1)
RETURN
494 IF (minlmaxab .EQ. 2)
THEN
498 CALL skdd(skab1, mat,
iptr(:, :, :, lmaxa, lmaxb))
499 CALL sksd(skab2, mat,
iptr(:, :, :, lmaxa, lmaxb), .true.)
500 CALL sksd(skab1, mat,
iptr(:, :, :, lmaxa, lmaxb), .false.)
501 CALL skpd(skab2, mat,
iptr(:, :, :, lmaxa, lmaxb), .true.)
502 CALL skpd(skab1, mat,
iptr(:, :, :, lmaxa, lmaxb), .false.)
507 IF (lmaxa .EQ. 0)
THEN
511 CALL sksd(skab2, mat,
iptr(:, :, :, lmaxa, lmaxb), .true.)
512 ELSE IF (lmaxa .EQ. 1)
THEN
516 CALL sksd(skab2, mat,
iptr(:, :, :, lmaxa, lmaxb), .true.)
517 CALL skpd(skab2, mat,
iptr(:, :, :, lmaxa, lmaxb), .true.)
522 IF (lmaxb .EQ. 0)
THEN
526 CALL sksd(skab1, mat,
iptr(:, :, :, lmaxa, lmaxb), .false.)
531 CALL sksd(skab1, mat,
iptr(:, :, :, lmaxa, lmaxb), .false.)
532 CALL skpd(skab1, mat,
iptr(:, :, :, lmaxa, lmaxb), .false.)
551 SUBROUTINE skss(skpar, mat)
552 REAL(dp),
INTENT(in) :: skpar(:)
553 REAL(dp),
INTENT(inout) :: mat(:, :)
555 mat(1, 1) = mat(1, 1) + skpar(1)
567 SUBROUTINE sksp(skpar, mat, ind, transposed)
568 REAL(dp),
INTENT(in) :: skpar(:)
569 REAL(dp),
INTENT(inout) :: mat(:, :)
570 INTEGER,
INTENT(in) :: ind(0:, 0:, 0:)
571 LOGICAL,
INTENT(in) :: transposed
576 skp = skpar(ind(1, 0, 0))
579 mat(1, l + 1) = mat(1, l + 1) + rr(l)*skp
583 mat(l + 1, 1) = mat(l + 1, 1) - rr(l)*skp
595 SUBROUTINE skpp(skpar, mat, ind)
596 REAL(dp),
INTENT(in) :: skpar(:)
597 REAL(dp),
INTENT(inout) :: mat(:, :)
598 INTEGER,
INTENT(in) :: ind(0:, 0:, 0:)
600 INTEGER :: ii, ir, is, k, l
601 REAL(dp) :: epp(6), matel(6), skppp, skpps
605 epp(l + 3) = rr(l)*rr(l + 1)
607 skppp = skpar(ind(1, 1, 1))
608 skpps = skpar(ind(1, 1, 0))
611 matel(l) = epp(l)*skpps + (1._dp - epp(l))*skppp
614 matel(l) = epp(l)*(skpps - skppp)
620 k = 3*ii - (ii*(ii - 1))/2 + is
621 mat(is + 1, ir + 1) = mat(is + 1, ir + 1) + matel(k)
622 mat(ir + 1, is + 1) = mat(ir + 1, is + 1) + matel(k)
624 mat(ir + 1, ir + 1) = mat(ir + 1, ir + 1) + matel(ir)
635 SUBROUTINE sksd(skpar, mat, ind, transposed)
636 REAL(dp),
INTENT(in) :: skpar(:)
637 REAL(dp),
INTENT(inout) :: mat(:, :)
638 INTEGER,
INTENT(in) :: ind(0:, 0:, 0:)
639 LOGICAL,
INTENT(in) :: transposed
642 REAL(dp) :: d4, d5, es(5), r3, sksds
644 sksds = skpar(ind(2, 0, 0))
646 d4 = rr2(3) - 0.5_dp*(rr2(1) + rr2(2))
650 es(l) = r3*rr(l)*rr(l + 1)
657 mat(1, l + 4) = mat(1, l + 4) + es(l)*sksds
661 mat(l + 4, 1) = mat(l + 4, 1) + es(l)*sksds
673 SUBROUTINE skpd(skpar, mat, ind, transposed)
674 REAL(dp),
INTENT(in) :: skpar(:)
675 REAL(dp),
INTENT(inout) :: mat(:, :)
676 INTEGER,
INTENT(in) :: ind(0:, 0:, 0:)
677 LOGICAL,
INTENT(in) :: transposed
679 INTEGER :: ir, is, k, l, m
680 REAL(dp) :: d3, d4, d5, d6, dm(15), epd(13, 2), r3, &
685 d4 = rr2(3) - 0.5_dp*d3
687 d6 = rr(1)*rr(2)*rr(3)
689 epd(l, 1) = r3*rr2(l)*rr(l + 1)
690 epd(l, 2) = rr(l + 1)*(1.0_dp - 2._dp*rr2(l))
691 epd(l + 4, 1) = r3*rr2(l)*rr(l + 2)
692 epd(l + 4, 2) = rr(l + 2)*(1.0_dp - 2*rr2(l))
693 epd(l + 7, 1) = 0.5_dp*r3*rr(l)*d5
694 epd(l + 10, 1) = rr(l)*d4
698 epd(4, 2) = -2._dp*d6
699 epd(8, 2) = rr(1)*(1.0_dp - d5)
700 epd(9, 2) = -rr(2)*(1.0_dp + d5)
701 epd(10, 2) = -rr(3)*d5
702 epd(11, 2) = -r3*rr(1)*rr2(3)
703 epd(12, 2) = -r3*rr(2)*rr2(3)
704 epd(13, 2) = r3*rr(3)*d3
709 sktmp = skpar(ind(2, 1, m - 1))
710 dm(1) = dm(1) + epd(1, m)*sktmp
711 dm(2) = dm(2) + epd(6, m)*sktmp
712 dm(3) = dm(3) + epd(4, m)*sktmp
713 dm(5) = dm(5) + epd(2, m)*sktmp
714 dm(6) = dm(6) + epd(7, m)*sktmp
715 dm(7) = dm(7) + epd(5, m)*sktmp
716 dm(9) = dm(9) + epd(3, m)*sktmp
718 dm(l + 2) = dm(l + 2) + epd(l, m)*sktmp
729 mat(is + 1, ir + 4) = mat(is + 1, ir + 4) + dm(k)
736 mat(ir + 4, is + 1) = mat(ir + 4, is + 1) - dm(k)
749 SUBROUTINE skdd(skpar, mat, ind)
750 REAL(dp),
INTENT(in) :: skpar(:)
751 REAL(dp),
INTENT(inout) :: mat(:, :)
752 INTEGER,
INTENT(in) :: ind(0:, 0:, 0:)
754 INTEGER :: ii, ir, is, k, l, m
755 REAL(dp) :: d3, d4, d5, dd(3), dm(15), e(15, 3), r3
759 d4 = rr2(3) - 0.5_dp*d3
762 e(l, 1) = rr2(l)*rr2(l + 1)
763 e(l, 2) = rr2(l) + rr2(l + 1) - 4._dp*e(l, 1)
764 e(l, 3) = rr2(l + 2) + e(l, 1)
765 e(l, 1) = 3._dp*e(l, 1)
768 e(4, 2) = d3 - e(4, 1)
769 e(4, 3) = rr2(3) + 0.25_dp*e(4, 1)
770 e(4, 1) = 0.75_dp*e(4, 1)
772 e(5, 2) = 3._dp*rr2(3)*d3
773 e(5, 3) = 0.75_dp*d3**2
778 e(l + 5, 1) = 3._dp*rr2(l + 1)*dd(l)
779 e(l + 5, 2) = dd(l)*(1._dp - 4._dp*rr2(l + 1))
780 e(l + 5, 3) = dd(l)*(rr2(l + 1) - 1._dp)
782 e(8, 1) = dd(1)*d5*1.5_dp
783 e(8, 2) = dd(1)*(1.0_dp - 2.0_dp*d5)
784 e(8, 3) = dd(1)*(0.5_dp*d5 - 1.0_dp)
785 e(9, 1) = d5*0.5_dp*d4*r3
786 e(9, 2) = -d5*rr2(3)*r3
787 e(9, 3) = d5*0.25_dp*(1.0_dp + rr2(3))*r3
788 e(10, 1) = rr2(1)*dd(3)*3.0_dp
789 e(10, 2) = (0.25_dp - rr2(1))*dd(3)*4.0_dp
790 e(10, 3) = dd(3)*(rr2(1) - 1.0_dp)
791 e(11, 1) = 1.5_dp*dd(3)*d5
792 e(11, 2) = -dd(3)*(1.0_dp + 2.0_dp*d5)
793 e(11, 3) = dd(3)*(1.0_dp + 0.5_dp*d5)
794 e(13, 3) = 0.5_dp*d5*dd(2)
795 e(13, 2) = -2.0_dp*dd(2)*d5
796 e(13, 1) = e(13, 3)*3.0_dp
797 e(12, 1) = d4*dd(1)*r3
798 e(14, 1) = d4*dd(3)*r3
799 e(15, 1) = d4*dd(2)*r3
800 e(15, 2) = -2.0_dp*r3*dd(2)*rr2(3)
801 e(15, 3) = 0.5_dp*r3*(1.0_dp + rr2(3))*dd(2)
802 e(14, 2) = r3*dd(3)*(d3 - rr2(3))
803 e(14, 3) = -r3*0.5_dp*dd(3)*d3
804 e(12, 2) = r3*dd(1)*(d3 - rr2(3))
805 e(12, 3) = -r3*0.5_dp*dd(1)*d3
810 dm(l) = dm(l) + e(l, m)*skpar(ind(2, 2, m - 1))
817 k = 5*ii - (ii*(ii - 1))/2 + is
818 mat(ir + 4, is + 4) = mat(ir + 4, is + 4) + dm(k)
819 mat(is + 4, ir + 4) = mat(is + 4, ir + 4) + dm(k)
821 mat(ir + 4, ir + 4) = mat(ir + 4, ir + 4) + dm(ir)
825 END SUBROUTINE turnsk
836 SUBROUTINE polint(xa, ya, n, x, y, dy)
837 INTEGER,
INTENT(in) :: n
838 REAL(dp),
INTENT(in) :: ya(n), xa(n), x
839 REAL(dp),
INTENT(out) :: y, dy
842 REAL(dp) :: c(n), d(n), den, dif, dift, ho, hp, w
851 dift = abs(x - xa(i))
852 IF (dift .LT. dif)
THEN
868 cpassert(den /= 0.0_dp)
873 IF (2*ns .LT. n - m)
THEN
883 END SUBROUTINE polint
902 n_urpoly, urep, spdim, s_cut, srep, spxr, scoeff, surr, dograd)
904 REAL(dp),
INTENT(in) :: rv(3), r
905 REAL(dp),
INTENT(inout) :: erep, derep(3)
906 INTEGER,
INTENT(in) :: n_urpoly
907 REAL(dp),
INTENT(in) :: urep(:)
908 INTEGER,
INTENT(in) :: spdim
909 REAL(dp),
INTENT(in) :: s_cut, srep(3)
910 REAL(dp),
POINTER :: spxr(:, :), scoeff(:, :)
911 REAL(dp),
INTENT(in) :: surr(2)
912 LOGICAL,
INTENT(in) :: dograd
914 INTEGER :: ic, isp, jsp, nsp
919 IF (n_urpoly > 0)
THEN
924 IF (rz <= rtiny)
RETURN
926 erep = erep + urep(ic)*rz**(ic)
930 de_z = de_z - ic*urep(ic)*rz**(ic - 1)
933 ELSE IF (spdim > 0)
THEN
946 IF (r > s_cut)
RETURN
948 IF (r < spxr(1, 1))
THEN
950 erep = erep + exp(-srep(1)*r + srep(2)) + srep(3)
951 IF (dograd) de_z = de_z - srep(1)*exp(-srep(1)*r + srep(2))
956 ispg:
DO isp = 1, spdim
957 IF (r < spxr(isp, 1)) cycle ispg
958 IF (r >= spxr(isp, 2)) cycle ispg
960 rz = r - spxr(isp, 1)
961 IF (isp /= spdim)
THEN
964 erep = erep + scoeff(isp, jsp + 1)*rz**(jsp)
968 de_z = de_z + jsp*scoeff(isp, jsp + 1)*rz**(jsp - 1)
975 erep = erep + scoeff(isp, jsp + 1)*rz**(jsp)
977 erep = erep + surr(jsp - 3)*rz**(jsp)
983 de_z = de_z + jsp*scoeff(isp, jsp + 1)*rz**(jsp - 1)
985 de_z = de_z + jsp*surr(jsp - 3)*rz**(jsp - 1)
996 IF (r > 1.e-12_dp) derep(1:3) = (de_z/r)*rv(1:3)
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,...
integer, parameter, public cp_p_file
integer function, public cp_print_key_should_output(iteration_info, basis_section, print_key_path, used_print_key, first_time)
returns what should be done with the given property if btest(res,cp_p_store) then the property should...
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
Definition of the DFTB parameter types.
Working with the DFTB parameter types.
subroutine, public deallocate_dftb_atom_param(dftb_parameter)
...
subroutine, public urep_egr(rv, r, erep, derep, n_urpoly, urep, spdim, s_cut, srep, spxr, scoeff, surr, dograd)
...
subroutine, public set_dftb_atom_param(dftb_parameter, name, typ, defined, z, zeff, natorb, lmax, skself, occupation, eta, energy, cutoff, xi, di, rcdisp, dudq)
...
subroutine, public compute_block_sk(block, smatij, smatji, rij, ngrd, ngrdcut, dgrd, llm, lmaxi, lmaxj, irow, iatom)
...
subroutine, public write_dftb_atom_param(dftb_parameter, subsys_section)
...
integer, dimension(0:3, 0:3, 0:3, 0:3, 0:3), public iptr
subroutine, public get_dftb_atom_param(dftb_parameter, name, typ, defined, z, zeff, natorb, lmax, skself, occupation, eta, energy, cutoff, xi, di, rcdisp, dudq)
...
subroutine, public allocate_dftb_atom_param(dftb_parameter)
...