NOAA GVI GUIDE

Appendix I

Introduction Page, GVI Guide TOC, Acronyms
Previous Section, Next Section

APPENDIX I: IBM JCL and Software Necessary for Reading Continental Weekly Composite Data from Tape

This appendix contains the job control language (JCL) for an IBM mainframe which can be used as a prototype for extracting the Continental Weekly Composite data from tape. This JCL is called "tape.jcl". Also, this appendix contains a FORTRAN program ("calibrd.for") for converting the one-byte image data to IBM formatted data for browsing. A floppy diskette containing "tape.jcl" and "calibrd.for" is available upon request from SSB.

A listing of "tape.jcl" follows:

//WWMAP JOB (XXXXXXXXXXXXXXX,WWB07,SO),'STEVE : GLOBRD',REGION=0K,   
//    TIME=(5,00),MSGCLASS=T,MSGLEVEL=(1,1),NOTIFY=$ED12SO                                   
//*MAIN LINES=60,CLASS=XACHK,FAILURE=CANCEL                                                         
//*FORMAT PR,DDNAME=JESMSG,COPIES=0                                                                           
//*FORMAT PR,DDNAME=JESJCL,COPIES=0                                                                             
//*FORMAT PR,DDNAME=SYSMSG,COPIES=0                                                                          
//*FORMAT PR,DDNAME=SYSPRINT,COPIES=0                                                                       
//*FORMAT PR,DDNAME=SYSTERM,COPIES=0                                                                       
//*                                                                                                                                                        
//*FORMAT PR,DDNAME=,DEST=WWBP3                                                                                 
//******                                                                                                                                              
//******                                                                                                                                              
//COPY2 EXEC PGM=IEBGENER                                                                                                  
//SYSPRINT  DD SYSOUT=T                                                                                                          
//SYSIN     DD DUMMY                                                                                                                   
//SYSUT1    DD VOL=SER=E08500,UNIT=T6250,DISP=(OLD,PASS),                                       
//            DCB=(LRECL=200,BLKSIZE=200,RECFM=FB),LABEL=(1,NL,,IN)                            
//SYSUT2    DD DSN=$ED12SO.TAPE.HDR,DISP=(NEW,CATLG),                                           
//         DCB=(LRECL=200,BLKSIZE=200,RECFM=FB),UNIT=TSODA,                                     
//         VOL=SER=CACTMP,SPACE=(TRK,(2,2))                                                                          
//COPY2 EXEC PGM=IEBGENER                                                                                                  
//SYSPRINT  DD SYSOUT=T                                                                                                          
//SYSIN     DD DUMMY                                                                                                                   
//SYSUT1    DD VOL=SER=E08500,UNIT=T6250,DISP=(OLD,PASS),                                       
//            DCB=(LRECL=6,BLKSIZE=6354,RECFM=FB),LABEL=(2,NL,,IN)                              
//SYSUT2    DD DSN=$ED12SO.TAPE.DAT,DISP=(NEW,CATLG),                                           
//         DCB=(LRECL=6,BLKSIZE=6354,RECFM=FB),UNIT=TSODA,                                       
//         VOL=SER=CACTMP,SPACE=(TRK,(50,50))                                                                      
/*                                                                                                                                                         
To convert the one-byte image data (of the mixed-mode records) to IBM formatted data for browsing, the program "calibrd.for" may be used. Several input parameters need to be specified. The following text describes each input parameter:

1. Specify continent (ILAND). The choices are:

  1. North America
  2. South America
  3. Europe
  4. Africa
  5. Asia
  6. Australia
2. Specify the total number of weeks read from tape (WKSTOT). This information can be found in Table 4.4.5-2.

3. Specify the number of weeks in the data set to process (IWKS). Valid numbers range from 1 to the total number of weeks in the data set.

4. Specify the starting week (ISTWK). Valid numbers for the starting week could be from the first week to the last week in the data set.

The formatted output ASCII data set will have a record length of 80 characters and will contain the following information in the order given:

1. The pre-launch AVHRR Ch1, visible reflectance, which has been normalized by the cosine of the Solar Zenith Angle.

2. The pre-launch AVHRR Ch2, near-IR reflectance, which has been normalized by the cosine of the Solar Zenith Angle.

3. The AVHRR Ch4 brightness temperature.

4. The AVHRR Ch5 brightness temperature.

5. The AVHRR Solar Zenith Angle (SZA).

6. The AVHRR Scan Angle (SCA).

7. The latitude of the map cell.

8. The longitude of the map cell.

9. The 2-digit year and 3-digit day of year of the map cell, (e.g., "89001", represents January 1, 1989, and "93365" represents December 31, 1993).

A listing of "calibrd.for" follows:

    PROGRAM CALCON                                                                                                      
****************************************************************************
*                                                                                                                                              
*   PROGRAM:  CALIBRATE           TYPE:  MAIN                                                            
*                                                                                                                                               
*   LANGUAGE:  VS FORTRAN     PROGRAMMER:  STEVE OLSON, RDC, INC.       
*                                                                                                                                               
*   VERSION: 1.0              DATE:  3/9/94                                                                              
*                                                                                                                                               
*    PURPOSE:  TO CALIBRATE A CONTINENTAL MAPPED TIME SERIES OF         
*              GVI DATA AND OUTPUT THE DATA TO UNIT 95.                                         
*                                                                                                                                               
*                                                                                                                                               
*                                                                                                                                               
****************************************************************************
                                                                                                                                                
      REAL*4 CH1,CH2,CH4,CH5,SCA,SZA,NDVI                                                              
      CHARACTER*1 ALL(6,900),OUTMOD                                                                        
      CHARACTER*5 CDAT                                                                                                   
      CHARACTER*6 CTEMP,LAT,LON,CONT(6)                                                               
      INTEGER*4 ILOC,IWKS,SATID,IVAL(6),IUNIT,WKSTOT,IPIX(6),WKDIF,KK      
      INTEGER*4 DARNUM,ICCC,IAVCH1,DATE,YEAR,IPIXEL                                    
      DATA CONT/'NORTHA','SOUTHA','EUROPE','AFRICA','ASIA','AUSTRA'/            
      DATA IPIX/28011,14808,24906,28683,41820,9729/                                                      
C                                                                                                                                              
C **  OPEN THE APPROPRIATE FILES                                                                             
C                                                                                                                                              
C       OPEN(20,'$ED12SO.NAM.DAT',STATUS='OLD')                                                    
C       OPEN(95,'$ED12SO.CALIB.DATA',STATUS='OLD')                                               
C                                                                                                                                              
C **  SELECT THE APPROPRIATE CONTINENT (ILAND).                                            
C                                                                                                                                              
C      1=NORTH AMERICA                                                                                                   
C      2=SOUTH AMERICA                                                                                                   
C      3=EUROPE                                                                                                                    
C      4=AFRICA                                                                                                                     
C      5=ASIA                                                                                                                          
C      6=AUSTRALIA                                                                                                             
C                                                                                                                                              
       ILAND=1                                                                                                                         
C                                                                                                                                              
C ** SELECT THE NUMBER OF TOTAL WEEKS IN THE DATASET (WKSTOT)         
C                                                                                                                                              
C  **  NORTH AMERICAN DATA IS BROKEN UP ONTO TWO TAPES.                      
C        TAPE 1 HAS 399 WEEKS : WEEKS 1 - 399                                                              
C        TAPE 2 HAS 4 WEEKS :  WEEKS 400 - 403                                                             
C **   SOUTH AMERICAN DATA IS ALL ON ONE TAPE OF 403 WEEKS                   
C **   EUROPEAN DATA IS ALL ON ONE TAPE OF 403 WEEKS                                 
C  **  AFRICAN DATA IS BROKEN UP ONTO TWO TAPES.                                        
C        TAPE 1 HAS 391 WEEKS :  WEEKS 1 - 391                                                            
C        TAPE 2 HAS 12 WEEKS :  WEEKS 392 - 403                                                          
C  **  ASIAN DATA IS BROKEN UP ONTO TWO TAPES.                                             
C        TAPE 1 HAS 247 WEEKS :  WEEKS 1 - 247                                                            
C        TAPE 2 HAS 156 WEEKS :  WEEKS 248 - 403                                                        
C **   AUSTRALIAN DATA IS ALL ON ONE TAPE OF 403 WEEKS                             
C                                                                                                                                              
C ** SELECT THE APPROPRIATE NUMBER OF WEEKS WHICH HAS BEEN             
C    GIVEN ON THE CONTINENTAL TAPES (WKSTOT)                                                 
C                                                                                                                                               
      WKSTOT=399                                                                                                                   
C                                                                                                                                               
C ** SELECT THE NUMBER OF WEEKS OF DATA TO PROCESS (IWKS)                    
C    THIS NUMBER, IWKS, WILL USUALLY BE THE SAME AS THE NUMBER          
C    OF TOTAL WEEKS, WKSTOT.  HOWEVER, YOU CAN PROCESS A SUBSET OF 
C    WEEKS FROM THE TOTAL NUMBER OF WEEKS, WKSTOT                                   
                                                                                                                                              
      IWKS=1                                                                                                                              
C                                                                                                                                                
C  ** SELECT THE STARTING WEEK NUMBER TO BEGIN PROCESSING (ISTWK).   
C     THIS NUMBER WILL USUALLY BE EQUAL TO 1, BUT IT DOESN'T HAVE         
C     TO BE.                                                                                                                               
C                                                                                                                                                
      ISTWK=1                                                                                                                            
C                                                                                                                                                
C ** THE NUMBER OF PIXELS IS AUTOMATICALLY SELECTED WITH YOUR        
C    SELECTION OF ILAND (CONTINENT)                                                                        
C                                                                                                                                               
      IPIXEL=IPIX(ILAND)                                                                                                       
      WRITE(6,*) 'PROCESSING CONTINENT ',CONT(ILAND)                                           
                                                                                                                                                   
      NWKS=2*(IWKS+1)                                                                                                          
      IPWKS = 2*(IWKS+ISTWK)                                                                                             
        IUNIT=20                                                                                                                          
        REWIND(IUNIT)                                                                                                              
        DO 20 K=1,IPIXEL                                                                                                           
          READ (IUNIT,'(A6)') LAT                                                                                             
          READ (IUNIT,'(A6)') LON                                                                                            
         READ(LAT,'(I6)') ILAT                                                                                                   
         READ(LON,'(I6)') ILON                                                                                                  
          RLAT=ILAT/100.0                                                                                                          
          RLON=ILON/100.0                                                                                                         
          DO 30 I=1,2*(ISTWK-1)                                                                                                 
            READ (IUNIT,'(A6)') CTEMP                                                                                      
   30     CONTINUE                                                                                                                   
                                                                                                                                                   
          DO 35 I=1,IWKS*2,2                                                                                                      
            READ (IUNIT,'(6A1)') (ALL(J,I),J=1,6)                                                                       
            READ (IUNIT,'(6A1)') (ALL(J,I+1),J=1,6)                                                                   
   35     CONTINUE                                                                                                                    
                                                                                                                                                    
          DO 40 JWKS=1,IWKS*2,2                                                                                             
            DO 50 I=1,5                                                                                                                   
              CDAT(I:I)=ALL(I,JWKS)                                                                                           
   50       CONTINUE                                                                                                                 
            SATID=ICHAR(ALL(6,JWKS))                                                                                   
                                                                                                                                                    
            DO 60 I=1,6                                                                                                                   
              IVAL(I) = ICHAR(ALL(I,JWKS+1))                                                                          
   60       CONTINUE                                                                                                                 
C **************************************************************************   
C *****          CALIBRATE DATA                                                                                          
C **************************************************************************   
            IF (SATID.EQ.9) THEN                                                                                                
              CH1=4.0*0.10634*(IVAL(1)) - 3.84638                                                                     
              CH2=4.0*0.10749*(IVAL(2)) - 3.87701                                                                     
            ELSE                                                                                                                              
              CH1=4.0*0.095*(IVAL(1)) - 3.780                                                                             
              CH2=4.0*0.0900*(IVAL(2)) - 3.600                                                                           
            ENDIF                                                                                                                            
            IF (IVAL(3).GT.177) THEN                                                                                          
              CH4=(IVAL(3)-419.05128)/(-1.006412)                                                                     
            ELSE                                                                                                                               
              CH4= 330.0 - (IVAL(3)/2.0)                                                                                        
            ENDIF                                                                                                                            
            IF (IVAL(4).GT.177) THEN                                                                                          
              CH5=(IVAL(4)-419.05128)/(-1.006412)                                                                     
            ELSE                                                                                                                              
              CH5= 330.0 - (IVAL(4)/2.0)                                                                                       
            ENDIF                                                                                                                           
            SZA = IVAL(5)/2.0                                                                                                       
            SZAX=SZA*3.1415927/180.                                                                                        
            SCA = IVAL(6)/2.0 -55.0                                                                                              
          READ(CDAT,'(I5)') IDAT                                                                                               
C                                                                                                                                                 
C ** DIVIDE CHANNELS 1 & 2 BY THE COSINE OF THE SOLAR ZENITH ANGLE     
C                                                                                                                                                 
           CH1=CH1/COS(SZAX)                                                                                                 
           CH2=CH2/COS(SZAX)                                                                                                 
C                                                                                                                                                 
C ** CALCULATE THE NORMALIZED DIFFERENCE VEGETATION INDEX               
C                                                                                                                                                 
            NDVI = (CH2-CH1)*100./(CH2+CH1)                                                                        
           WRITE(95,61) CH1,CH2,CH4,CH5,SZA,SCA,RLAT,RLON,IDAT                          
 61       FORMAT(6(F7.2,1X),F7.2,1X,F7.2,1X,I5)                                                                  
   40     CONTINUE                                                                                                                   
C                                                                                                                                                 
C ** ADVANCE TO NEXT PIXEL                                                                                          
C                                                                                                                                                 
          WKDIF = WKSTOT-(IWKS+ISTWK-1)                                                                        
          IF (WKDIF.GT.0) THEN                                                                                                 
            WKDIF=WKDIF*2                                                                                                       
            DO 70 I=1,WKDIF                                                                                                        
              READ(IUNIT,'(A6)') CTEMP                                                                                     
   70       CONTINUE                                                                                                                 
          ENDIF                                                                                                                              
   20   CONTINUE                                                                                                                     
C                                                                                                                                                 
C                                                                                                                                                 
 699   STOP                                                                                                                                
      END                                                                                                                                     

Previous Section Top of Page Next Section