C  MICROSOFT FORTRAN SOURCE CODE FOR PROGRAM DIRACC  (DMAAC/GGCB, 11 MAY 94)
C                                          ------  
C***********************************************************************
C* 
C*                     DIRACC  
C*   LGLEN   =  NUMBER OF LONGTITUDE BANDS IN THE DIRECT ACCESS FILE
C*   IRECL   =  NUMBER OF WORDS PER RECORD 
C*   NREC    =  NUMBER OF RECORDS IN DIRECT ACCESS FILE
C*   XINC    =  SPACING IN MINUTES OF DIRECT ACCESS FILE
C* 
C*                     INPUT
C*   NWR     =  NUMBER OF WORDS PER RECORD 
C*   NRB     =  NUMBER OF RECORDS PER BLOCK
C***********************************************************************
      IMPLICIT REAL*4 (A-H,O-Z)
C     NAMELIST /DIRACC/ LGLEN,IRECL,NREC,XINC  
C     NAMELIST /INPUT/ NWR,NRB,TOPLAT,WL
      DIMENSION WRD(500),W(3)  
      DATA WRD/500*0.0/, PAD/-5401.0/  
      DATA W/3*-9999.0/

      OPEN(15,STATUS='UNKNOWN',FILE='DIRACC.DAT')                   
      OPEN(12,STATUS='UNKNOWN',FILE='WWGRID.TXT')
C  
      READ(15,*) LGLEN,IRECL,NREC,XINC
      OPEN(13,ACCESS='DIRECT',RECL=IRECL*4,FILE='DIRACC.OUT')
      READ(15,*) NWR,NRB,TOPLAT,WL
      WRITE(6,50) LGLEN,IRECL,NREC,XINC 
      WRITE(6,51) NWR,NRB,TOPLAT,WL
   50 FORMAT (' LGLEN = ',I4,2X,'IRECL = ',I2,2X,'NREC = ',I8,  
     >2X,'XINC = ',F6.1//)
   51 FORMAT (' NWR = ',I2,2X,'NRB = ',I3,2X,'TOPLAT = ',F6.0,
     >2X,'WL = ',F6.0//)
C************************************************************************  
C*   OPEN DIRECT ACCESS FILE AND FILL RECTANGULAR AREA CONTAINING  
C*   AREA OF INTEREST WITH A PAD OF -9999.0
C************************************************************************  
  
      DO 1 L = 1,NREC
          WRITE(13,REC=L) W(1), W(2), W(3)  
  1   CONTINUE
  
C************************************************************************  
C*   NPTS  -  NUMBER OF POINTS 
C*   NWB   -  NUMBER OF WORDS PER BLOCK
C*   NWR   -  NUMBER OF WORDS PER RECORD
C*   NRB   -  NUMBER OF RECORDS PER BLOCK  
C************************************************************************* 
  
      NPTS = 0 
      NWB = NWR * NRB  
   10 READ(12,*,END=30) W(1),W(2),W(3)
              IF ( W(1) .LE. PAD) GOTO 30 
              NPTS = NPTS + 1  
              W(1) = W(1) * 60.  
              W(2) = W(2) * 60.
C              IF ( W(2) .EQ. 21600.0 ) W(2) = 0.0
              CALL RECORD(W(1),W(2),TOPLAT,WL,LGLEN,XINC,IREC) 
              WRITE(UNIT=13,REC=IREC) (W(J), J = 1, 3)  
  20      CONTINUE 
      GOTO 10  
  30  CONTINUE 
      WRITE(6,*)W(1),W(2)  
      PRINT*, '    NUMBER OF VALUES WRITTEN TO FILE ',NPTS 
      STOP 
      END  
      
      SUBROUTINE RECORD( LAT,LONG,TOPLAT,WL,LGLEN,XINC,IREC)
      IMPLICIT REAL*4 (A-H,O-Z)
      REAL*4 LAT, LONG 
      IPOSLT = NINT((TOPLAT - LAT)/XINC)
      IPOSLG = NINT((LONG - WL)/XINC) + 1  
      IREC = IPOSLT * LGLEN + IPOSLG
      RETURN
      END  
















































