C******************************************************************
C PROGRAM MAIN
C This program prepare the picture of FCC band structure
C modified version for HCP band structure
C******************************************************************
c IMPLICIT LOGICAL (A-Z)
INTEGER KNV3,KEG,NKX,NKY,NKYTTH,NKXH,NKYH,NKXQ
PARAMETER (KNV3=89,KEG=14,NKX=8,NKY=8
& ,NKXH=NKX/2,NKYH=NKY/2)
C PARAMETER (KNV3=95,KEG=14,NKX=8,NKY=12
C & ,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)
C 6/25, 2007, SEARCH MINIMUM DIRECT GAP
REAL DELTAE(KNV3)
LOGICAL SPINP
OPEN(UNIT= 5,FILE='../ALN.DAT')
OPEN(UNIT=11,FILE='./EK101.DTT')
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----------------------------------------------------------
CALL FCCM
> (KNV3,MKX,SPINP,NFOUT,
< KV3,VX,VY,VZ,QWGT,INDX)
C
C CALL WURTZM2
C > (KNV3,MKX,MKY,RLTV,SPINP,NFOUT,
C < KV3,VX,VY,VZ,QWGT,INDX)
C CALL FCCM(MKX,KV3,MAXDIM,SPINP,QK,QWGT,INDX)
C----------------------------------------------------------
DO 200 IK = 1,KV3
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,KV3
READ(11,*) XK(IK),YK(IK),ZK(IK)
READ(11,*) (EKO(IBAN,IK),IBAN=1,KEG)
WRITE(6,1320) IK
WRITE(6,1300) (EKO(IBAN,IK),IBAN=1,KEG)
1200 CONTINUE
1320 FORMAT (1H ,"IK = ",I6, " -----------------------------------")
1310 FORMAT (1H ,F12.6)
1300 FORMAT (8F9.5)
C STOP
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 5/1, 2007, MODIFY TO 32 ELECTRONS --> 64 (32 BANDS) ELECTRONS
C 10/10, 2007, MODIFY TO 64 ELECTRONS --> 8 (4 BANDS) ELECTRONS
C CALCULATE THE MAXIMUM OF EIGEN VALUES OF EKO(4,IK)
C CALCULATE THE MINIMUM OF EIGEN VALUES OF EKO(5,IK)
C
EMAX8 = -100.0D0
EMIN9 = 100.0D0
C
DO 2000 IK = 1,KV3
C 6/25, 2007, SEARCH MINIMUM DIRECT GAP
DELTAE(IK) = EKO(5,IK) - EKO(4,IK)
IF (EMAX8.LT.EKO(4,IK)) THEN
EMAX8 = EKO(4,IK)
KMAX8 = IK
END IF
IF (EMIN9.GT.EKO(5,IK)) THEN
EMIN9 = EKO(5,IK)
KMIN9 = IK
END IF
2000 CONTINUE
C
EDIF89 = EMIN9 - EMAX8
C
C 6/25, 2007, CHECK
C
IF (KNV3 .NE. KV3) THEN
WRITE (6,*) "ERROR KNV3 .NE. KV3"
STOP
END IF
C
C 6/25, 2007, SEARCH MINIMUM DIRECT GAP
C
EDELMIN = DELTAE(1)
KDELMIN = 1
C
DO 2100 IK = 1,KV3
IF (EDELMIN.GT.DELTAE(IK)) THEN
EDELMIN = DELTAE(IK)
KDELMIN = IK
END IF
2100 CONTINUE
C
WRITE (6,*) "MAX OF EKO(4,K) = ",KMAX8,EMAX8
WRITE (6,*) "MIN OF EKO(5,K) = ",KMIN9,EMIN9
WRITE (6,*) "GAP OF EKO4-5 = ",EDIF89, " a.u."
WRITE (6,*) "GAP OF EKO4-5 = ",27.2D0*EDIF89, " eV"
C
WRITE (6,*) "MIN DIRECT GAP(IK)= ",KDELMIN
WRITE (6,*) "MIN DIRECT GAP = ",27.2D0*EDELMIN," eV"
C
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