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