C******************************************************************
C PROGRAM MAIN
C This program estimates whether direct or indirect gap for
C insulator or semiconductor systems (h-BN only).
C******************************************************************
c IMPLICIT LOGICAL (A-Z)
INTEGER KNV3,KEG,NKX,NKY,NKYTTH,NKXH,NKYH,NKXQ
PARAMETER (KNV3=95,KEG=14,NKX=8,NKY=12
& ,NKXH=NKX/2,NKYH=NKY/2)
INTEGER IBAN,KV3,IK,INDX(0:20,0:20,0:20),MAXDIM,MKX,MKY,N
REAL VX(KNV3),VY(KNV3),VZ(KNV3),QWGT(KNV3),EKO(KEG,KNV3)
REAL GXX(29),GXY(29)
C REAL XWX(NKXH+1),XWY(NKXH+1)
C REAL WLX(NKXH+1),WLY(NKXH+1),LGX(NKXH+1),LGY(NKXH+1)
C REAL GKX(NKXH+NKXQ+1),GKY(NKXH+NKXQ+1)
REAL GAP,PLACE,RT2,RT3,EF,HTEV
REAL XK(KNV3),YK(KNV3),ZK(KNV3)
REAL ALTV(3,3),RLTV(3,3)
LOGICAL SPINP
OPEN(UNIT= 5,FILE='./EK/BN.DAT')
OPEN(UNIT=11,FILE='./EK/EK101.DTT')
OPEN(UNIT=31,FILE='./BAND/CD.1')
OPEN(UNIT=32,FILE='./BAND/CD.2')
OPEN(UNIT=33,FILE='./BAND/CD.3')
OPEN(UNIT=34,FILE='./BAND/CD.4')
OPEN(UNIT=35,FILE='./BAND/CD.5')
OPEN(UNIT=36,FILE='./BAND/CD.6')
OPEN(UNIT=37,FILE='./BAND/CD.7')
OPEN(UNIT=38,FILE='./BAND/CD.8')
OPEN(UNIT=39,FILE='./BAND/CD.9')
OPEN(UNIT=40,FILE='./BAND/CD.A')
OPEN(UNIT=41,FILE='./BAND/CD.B')
OPEN(UNIT=42,FILE='./BAND/CD.C')
OPEN(UNIT=43,FILE='./BAND/CD.D')
OPEN(UNIT=44,FILE='./BAND/CD.E')
NKYTTH=(NKY/3)**2
HTEV =27.2116
GAP = 1.0
RT2 = SQRT(2.0)
RT3 = SQRT(3.0)
RT3I = 1.0/RT3
PAI = 4.0D0*ATAN(1.0D0)
MKX = NKX
MKY = NKY
SPINP = .FALSE.
MAXDIM = KNV3
C'''''READING THE DATA (UNIT=5)''''''''''''''''''''''''''''''''''
READ(5,*) ITEMAX,PPMIX,CONV,GMAX,ICONT
DO 10 I=1,3
READ(5,*) ALTV(1,I),ALTV(2,I),ALTV(3,I)
10 CONTINUE
WRITE(6,*) ' <<>>'
FFF= ALTV(1,1)*(ALTV(2,2)*ALTV(3,3)-ALTV(3,2)*ALTV(2,3))
& + ALTV(2,1)*(ALTV(3,2)*ALTV(1,3)-ALTV(1,2)*ALTV(3,3))
& + ALTV(3,1)*(ALTV(1,2)*ALTV(2,3)-ALTV(2,2)*ALTV(1,3))
FFF=2.D0*PAI/FFF
RLTV(1,1)=(ALTV(2,2)*ALTV(3,3)-ALTV(3,2)*ALTV(2,3))*FFF
RLTV(2,1)=(ALTV(3,2)*ALTV(1,3)-ALTV(1,2)*ALTV(3,3))*FFF
RLTV(3,1)=(ALTV(1,2)*ALTV(2,3)-ALTV(2,2)*ALTV(1,3))*FFF
RLTV(1,2)=(ALTV(2,3)*ALTV(3,1)-ALTV(3,3)*ALTV(2,1))*FFF
RLTV(2,2)=(ALTV(3,3)*ALTV(1,1)-ALTV(1,3)*ALTV(3,1))*FFF
RLTV(3,2)=(ALTV(1,3)*ALTV(2,1)-ALTV(2,3)*ALTV(1,1))*FFF
RLTV(1,3)=(ALTV(2,1)*ALTV(3,2)-ALTV(3,1)*ALTV(2,2))*FFF
RLTV(2,3)=(ALTV(3,1)*ALTV(1,2)-ALTV(1,1)*ALTV(3,2))*FFF
RLTV(3,3)=(ALTV(1,1)*ALTV(2,2)-ALTV(2,1)*ALTV(1,2))*FFF
WRITE(6,707) ((RLTV(I,J),I=1,3),J=1,3)
707 FORMAT((1H ,3(F10.6,5X)))
C----------------------------------------------------------
DO 200 IK = 1,KNV3
200 WRITE(6,300) IK,VX(IK),VY(IK),VZ(IK),QWGT(IK)
300 FORMAT (1H ,'IK = ',I3,3F10.6,3X,'QWGT = ',F10.6)
C-------> input data from datafile
READ(11,*) EF
WRITE (6,1310) EF
DO 1200 IK = 1,KNV3
READ(11,*) XK(IK),YK(IK),ZK(IK)
READ(11,*) (EKO(IBAN,IK),IBAN=1,KEG)
WRITE(6,1300) (EKO(IBAN,IK),IBAN=1,KEG)
1200 CONTINUE
1310 FORMAT (1H ,F12.6)
1300 FORMAT (8F9.5)
C-----------------------------------------------------
C
C FOR H-BN ONLY 2/9, 2005, MODIFIED 2/10, 2005
C CALCULATE THE MAXIMUM OF EIGEN VALUES OF EKO(8,IK)
C CALCULATE THE MINIMUM OF EIGEN VALUES OF EKO(9,IK)
C
EMAX8 = -100.0D0
EMIN9 = 100.0D0
C
DO 2000 IK = 1,KNV3
IF (EMAX8.LT.EKO(8,IK)) THEN
EMAX8 = EKO(8,IK)
KMAX8 = IK
END IF
IF (EMIN9.GT.EKO(9,IK)) THEN
EMIN9 = EKO(9,IK)
KMIN9 = IK
END IF
2000 CONTINUE
C
EDIF89 = EMIN9 - EMAX8
C
WRITE (6,*) "MAX OF EKO(8,K) = ",KMAX8,EMAX8
WRITE (6,*) "MIN OF EKO(9,K) = ",KMIN9,EMIN9
WRITE (6,*) "GAP OF EKO8-9 = ",EDIF89, " a.u."
WRITE (6,*) "GAP OF EKO8-9 = ",27.2D0*EDIF89, " eV"
IF (KMAX8.NE.KMIN9) THEN
WRITE (6,*) "-------- THIS SYSTEM IS INDIRECT GAP. --------"
ELSE
WRITE (6,*) "-------- THIS SYSTEM IS DIRECT GAP. --------"
END IF
C
STOP
END