C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE DIAGON(IREC8)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
PARAMETER(KNMT=KNG11*(KNG11+1)/2,KNM9=9*KNG11)
!XOCL SUBPROCESSOR PS(IPARA)=PQ(1:IPARA)
!XOCL INDEX PARTITION IP=(PS,INDEX=1:KNV3,PART=BAND)
DIMENSION ZZ2(KNG1,KEG,KNV3),SSS(KNG1,KNV3,KTYP,10)
DIMENSION EKK(KEG,KNV3),OCCUU(KEG,KNV3)
!XOCL LOCAL ZZ2(:,:,/IP),SSS(:,/IP,:,:)
!XOCL LOCAL EKK(:,/IP),OCCUU(:,/IP)
EQUIVALENCE (ZAJ,ZZ2),(SNL,SSS),(EKO,EKK)
& ,(OCCUP,OCCUU)
C EIGEN-VALUE PROBLEM
DIMENSION ZAAA(KNMT)
& ,WWW(3*KNG11),ZWW(5*KNG11),ZAWORK(KNG1)
& ,IFLG(KEG)
& ,ZVN(KNG11,KEG),ZZZ(KNG11,KNG11),EG(KEG)
C & ,EVR(KNG11,KEG),EVI(KNG11,KEG),EG(KEG)
C & ,WK1(KNG11,6),WK2(8*KEG),ZWK3(KNG11,2),IWK(6*KEG+KNG11)
C & ,IFLG(KEG)
C & ,ZAWORK(KNG1)
C & ,WOK(KNM9),CCC(KNG11,KNG11)
C
DIMENSION PPM(KNG11),IJG(KNG11)
C
IF (KNG1.NE.KNG11) THEN
WRITE (6,*) 'WORNING] KNG1 IS NOT EQUAL TO KNG11'
END IF
C
DO 4 I=1,KG
ZCHGO(I) = ZCHG(I)
ZCHG(I) = DCMPLX(0.0D0,0.0D0)
4 CONTINUE
C ////////////////////////////
C // DIAGONALIZE AT K-POINT //
C ////////////////////////////
C VPP-PARALLEL START
C!XOCL PARALLEL REGION
!XOCL SPREAD DO /IP
DO 100 NNN=1,KNV3
C IWRT(NNN) =NNN
AKX = VX(NNN)
AKY = VY(NNN)
AKZ = VZ(NNN)
IIKB = IBA(NNN)
IIBA = IBA2(NNN)
C PSEUDOPOTENTIAL NON-LOCAL PART MATRIX ELEMENT
DO 71 I=1,KNG11*(KNG11+1)/2
ZAAA(I)=DCMPLX(0.0D0,0.0D0)
71 CONTINUE
DO 272 I=1,KNG11
DO 274 K=1,KEG
C EVR(I,K)=0.0D0
C EVI(I,K)=0.0D0
ZVN(I,K)=CMPLX(0.0,0.0)
274 CONTINUE
DO 273 J=1,KNG11
C CCC(J,I)=0.0D0
ZZZ(J,I)=CMPLX(0.0,0.0)
273 CONTINUE
272 CONTINUE
C
DO 6 IT=1,KTYP
CS=1.0D0/(WS(IT)*UNIVOL)
CP=1.0D0/(WP(IT)*UNIVOL)
CWL(1)=CS
CWL(2)=CP
CWL(3)=CP
CWL(4)=CP
IF (NLSPD(IT).EQ.2) THEN
CD=1.0D0/(WD(IT)*UNIVOL)
CWL(5)=CD
CWL(6)=CD
CWL(7)=CD
CWL(8)=CD
CWL(9)=CD
END IF
IF (NLSPD(IT).EQ.1) THEN
LNUM = 4
ELSE
LNUM = 9
END IF
DO 5 I=1,IIBA
I1 = NBMAT(I,NNN)
L1=IG1(I1)+KX1
L2=IG2(I1)+KY1
L3=IG3(I1)+KZ1
II=I*(I-1)/2
DO 8700 L=1,LNUM
DO 7600 J =1,I
PPMT = CWL(L)*SSS(I,NNN,IT,L)*SSS(J,NNN,IT,L)
ZAAA(II+J) = ZAAA(II+J) + PPMT *
& ZFM3( IGPO( L1-IG1(NBMAT(J,NNN)),
& L2-IG2(NBMAT(J,NNN)),
& L3-IG3(NBMAT(J,NNN)) ) ,IT)
7600 CONTINUE
8700 CONTINUE
5 CONTINUE
6 CONTINUE
C MATRIX ELEMENT AND KINETIC ENERGY
DO 230 I=1,IIBA
PPM(I) = ( (AKX+GX(NBMAT(I,NNN)))**2
& + (AKY+GY(NBMAT(I,NNN)))**2
& + (AKZ+GZ(NBMAT(I,NNN)))**2 )/2.D0
230 CONTINUE
DO 222 I=1,IIBA
I1=NBMAT(I,NNN)
I2=I*(I-1)/2
L1=IG1(I1)+KX1
L2=IG2(I1)+KY1
L3=IG3(I1)+KZ1
ZAAA(I*(I+1)/2) = ZAAA(I*(I+1)/2) + PPM(I)
DO 222 J=1,I
C HARTREE, EXCHANGE AND CORE POTENTIAL
IJG(J) = ( IGPO( L1-IG1(NBMAT(J,NNN)), L2-IG2(NBMAT(J,NNN)),
& L3-IG3(NBMAT(J,NNN)) ) )
IF(IJG(J).NE.1) THEN
ZAAA(I2+J) = ZAAA(I2+J) + PAI4*ZCHGO(IJG(J))/GR(IJG(J))**2
END IF
ZAAA(I2+J) = ZAAA(I2+J) + ZVXC(IJG(J)) + ZPSCC(IJG(J))
222 CONTINUE
C=====DIAGONALIZATION SSL2
DO 7701 I=1,IIBA
MM = I*(I-1)/2
DO 7702 J=1,I
ZZZ(I,J)=ZAAA(MM+J)
IF (I.NE.J) ZZZ(J,I)=CONJG(ZZZ(I,J))
C RMAT = DREAL(ZAAA(MM+J))
C CMAT = DIMAG(ZAAA(MM+J))
C CCC(I,J) = RMAT
C IF (I.NE.J) CCC(J,I) = CMAT
7702 CONTINUE
7701 CONTINUE
C""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
KBAS = KNG11
KGB = KEG
IOPT = 2
EPS = 1.0D-15
C CALL HZES1M(ZAAA,IIBA,KGB,KGB,EPS,IOPT,EG,EVR,KBAS,EVI,IFLG
C & ,WK1,WK2,ZWK3,IWK,ICON)
C WRITE(6,*) KBAS,IIBA,KGB
C CALL DHEIG2(CCC,KBAS,IIBA,-KGB,EG,EVR,EVI,WOK,ICON)
CALL CHOBSD(ZZZ,KBAS,IIBA,EG,-KGB,ZVN,KGB,EPS,WWW,ZWW,ICON)
C""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
IF(ICON.NE.0) THEN
WRITE(6,*) '*****!! AT HZES1M, ICON=',ICON
END IF
C
DO 7164 M=1,KEG
EKK(M,NNN)=EG(M)
C WRITE(6,*) 'NNN = ',NNN,'IBAN = ',M
C WRITE(6,*) 'ENERGY = ',EKK(M,NNN)
7164 CONTINUE
C OUTPUT EIGENVECTORS ON FILE 80 (DIRECT-ACCESS) (KNG11 <---> IIBA)
C WRITE(6,*) 'ZAJ = '
DO 231 IBAN = NBD1,NBD2
DO 33 J=1,IIBA
C ZAJ(J,IBAN,NNN) = EVR(J,IBAN) + ZI*EVI(J,IBAN)
ZZ2(J,IBAN,NNN) = ZVN(J,IBAN)
C*********ZV1(J) = EVR(J,IBAN) + ZI*EVI(J,IBAN)
33 CONTINUE
DO 97 M=1,IIKB
ZAWORK(M)=0.D0
97 CONTINUE
DO 91 J=1,IIBA
DO 92 M=1,IIKB
IF (NBASE(M,NNN) .EQ. NBMAT(J,NNN)) THEN
ZAWORK(M)=ZZ2(J,IBAN,NNN)
ENDIF
92 CONTINUE
91 CONTINUE
DO 93 M=1,IIKB
ZZ2(M,IBAN,NNN)=ZAWORK(M)
93 CONTINUE
C**************DO 34 J=IIBA+1,KNG1
C ZV1(J) = DCMPLX(0.0D0,0.0D0)
C 34 CONTINUE
C IREC = KV3*(IBAN-1)+IWRT(NNN)
C IF (IREC8.NE.0) IREC=IREC8*IREC-IREC8+1
C**************WRITE(80,REC=IREC) ZV1
231 CONTINUE
100 CONTINUE
!XOCL END SPREAD
C!XOCL END PARALLEL
RETURN
END