1c
2c $Id$
3c
4c Taken and modified from HONDO
5c
6      subroutine hnd_stvintd(xyzi,expi,coefi,i_nprim,i_ngen, Li,
7     1  i_cent,xyzj,expj,coefj, j_nprim, j_ngen, Lj, j_cent,
8     2  xyz,zan,nat,sder,tder,vder,nint,doS,doT,doV,scr,lscr)
9c
10      implicit none
11#include "stdio.fh"
12      integer i_nprim  ! [input] num. prims on function i
13      integer i_ngen   ! [input] num general conts on func. i
14      integer Li       ! [input] angular momentum of func. i
15      integer j_nprim  ! [input] num. prims on function j
16      integer j_ngen   ! [input] num general conts on func. j
17      integer Lj       ! [input] angular momentum of func. j
18      integer nat      ! [input] number of atoms
19      integer lscr     ! [input] size of scratch array
20      integer nint     ! [input] size of any integral buffer
21      integer i_cent   ! [input] lexical number of center i
22      integer j_cent   ! [input] lexical number of center j
23      double precision xyzi(3)  ! [input] position of center i
24      double precision expi(i_nprim) ! [input] exponents on i
25      double precision coefi(i_nprim,i_ngen) ! [input] i coeffs
26      double precision xyzj(3)  ! [input] position of center j
27      double precision expj(j_nprim)  ! [input] exponents on j
28      double precision coefj(j_nprim,j_ngen)  ! [input] j coeffs
29      double precision xyz(3,nat)  ! [input] all atom positions
30      double precision zan(nat)  ! [input] charges on all atoms
31      double precision scr(lscr)  ! [scratch] scratch buffers
32      double precision sder(*)  ! [output] overlap integrals
33      double precision tder(*)  ! [output] kinetic energy integrals
34      double precision vder(*)  ! [output] potential integrals
35      logical doS     ! [input] compute overlap (True/False)
36      logical doT     ! [input] compute kinetic (True/False)
37      logical doV     ! [input] compute potential (True/False)
38      logical some, doH1
39      integer nder, maxi, maxj
40      integer i, index
41      double precision zero
42      data zero   /0.0d+00/
43c
44      doH1 = doT.and.doV.and..not.doS
45      nder = 1
46c
47c     ----- calculate -s-, -t-, and -v- derivative integrals -----
48c
49      some = .false.
50      if(some) write(luout,9999)
51c
52      if (doS) then
53        call dcopy(nint*3*2,zero,0,sder,1)
54        call hnd_sd_ij2(xyzi,expi,coefi,i_nprim,i_ngen, Li,
55     1    xyzj,expj,coefj, j_nprim, j_ngen, Lj, sder, sder(nint*3+1),
56     2    scr, scr, scr, nder,nint,scr,lscr)
57      endif
58c
59      if (doV) then
60        call dcopy(nint*3*nat,zero,0,vder,1)
61        do i=1,nat
62          call hnd_hlf_ij2(xyzi,expi,coefi,i_nprim,i_ngen,Li,
63     1      xyzj,expj,coefj,j_nprim,j_ngen,Lj,i,vder((i-1)*3*nint+1),
64     2      scr,zan,xyz,nder,nint,scr,lscr)
65        enddo
66      endif
67
68      if (doT.or.doV) then
69        if (doT) call dcopy(nint*3*2,zero,0,tder,1)
70        if (doV) then
71           call hnd_tvd_ij2(xyzi,expi,coefi,i_nprim,i_ngen,Li,
72     1       xyzj,expj,coefj,j_nprim,j_ngen,Lj,xyz,tder,tder(nint*3+1),
73     2       scr,scr,scr,vder((i_cent-1)*3*nint+1),
74     3       vder((j_cent-1)*3*nint+1),scr,scr,scr,nder,nint,zan,
75     4       nat,doT,doV,i_cent,j_cent,scr,lscr)
76        else
77           call hnd_tvd_ij2(xyzi,expi,coefi,i_nprim,i_ngen,Li,
78     1       xyzj,expj,coefj,j_nprim,j_ngen,Lj,xyz,tder,tder(nint*3+1),
79     2       scr,scr,scr,scr,scr,scr,scr,scr,nder,nint,zan,
80     3       nat,doT,doV,i_cent,j_cent,scr,lscr)
81        endif
82      endif
83c
84      if(some) write(luout,9998)
85      return
86 9999 format(/,10x,20(1h-),/,10x,'1 electron derivative integrals',
87     2       /,10x,20(1h-))
88 9998 format(' ...... end of one-electron integrals ......')
89      end
90