KFREAD()

Fortran version:

    LOGICAL FUNCTION KFREAD( FNAME, VNAME, EVENT, 
     &                        COL, ROW, SDATE, STIME, KFLEN, VBLE )
        CHARACTER*(*), INTENT(IN   ) :: FNAME      !  logical file name
        CHARACTER*(*), INTENT(IN   ) :: VNAME      !  variable name, or 'ALL'
        INTEGER      , INTENT(IN   ) :: EVENT      !  KF-cloud event number
        INTEGER      , INTENT(IN   ) :: COL        !  column number for this event
        INTEGER      , INTENT(IN   ) :: ROW        !  row    number for this event
        INTEGER      , INTENT(IN   ) :: SDATE      !  starting date, formatted YYYYDDD
        INTEGER      , INTENT(IN   ) :: STIME      !  starting time, formatted HHMMSS
        INTEGER      , INTENT(  OUT) :: KFLEN      !  event duration, formatted HHMMSS
        REAL         , INTENT(  OUT) :: VBLE(*)    !  array of returned values for VNAME

C version:

not yet implemented

Summary:

Reads the the indicated variable for the indicated event from the EDSS/Models-3 I/O API KF event file with logical name FNAME, along with the event's description: If VNAME is the "magic value" ALLVARS3 (= 'ALL', defined in PARMS3.EXT), reads all variables for this event.

Returns .TRUE. (or 1) if the operation succeeds, .FALSE. (or 0) if it fails. For failure, writes a log message indicating the nature of the failure.

KFREAD() is OpenMP thread-safe.

Preconditions:

INCLUDE 'IODECL3.EXT' and INCLUDE 'FDESC3.EXT' for Fortran.

I/O API must already be initialized by a call to INIT3() .

FNAME must have length at most 16.

FNAME must already have been opened by OPEN3() or KFOPEN().

Dimensionality of the VBLE argument should be at least the NLAYS3D for the file FNAME for the single-variable case), or NLAYS3D*NVARS3D for the ALLVARS3 case.

See Also:

Fortran Usage:

    ...
    INCLUDE 'IODECL3.EXT'
    INCLUDE 'PARMS3.EXT'
    ...
    INTEGER NCOLS, NROWS, NLAYS, NTHIK
    PARAMETER ( NCOLS = ??, NROWS = ??, NLAYS = ??, NTHIK = ?? )
    ...
        INTEGER       ECOUNT     !  # of events for this col-row
        INTEGER       SDATES(NTHIK)  !  starting date,  formatted YYYYDDD
        INTEGER       STIMES(NTHIK)  !  starting time,  formatted HHMMSS
        INTEGER       KFLENS(NTHIK)  !  event duration, formatted HHMMSS
        INTEGER       EVENTS(NTHIK)  !  event numbers
        REAL          TA(NLAYS)      !  buffer for variable 'TA'
        INTEGER       C, R, I, IEVENT, ISECS, IDIFF
        INTEGER       COL, ROW, SDATE, STIME, KFLEN
        INTEGER       JDATE, JTIME
    ...
    DO  R = 1, NROWS
    DO  C = 1, NCOLS

        IF ( KFINDX( 'MYFILE', C, R,  
 &                  ECOUNT, SDATES, STIMES, KFLENS, EVENTS ) THEN

                !!  For I=1 to ECOUNT, there are  KF-events at (C,R),
                !!  with time periods starting at SDATES(I),STIMES(I), 
                !!  durations KFLENS(I) and event numbers EVENTS(I) 
                !!  (for use with KFREAD(), below) 

            ...
        ELSE
                !!  Error:  see program log for further info.
            ...
            GO TO 999
        END IF

                !!  Check and see if any event returned by KFINDX() is 
                !!  active at JDATE:JTIME.  If so, read and process it:

        DO  I = 1, ECOUNT

            ISECS = TIME2SEC( KFLENS(I) )
            IDIFF = SECSDIFF( SDATES(I), STIMES(I), JDATE, JTIME )
            IEVENT= EVENTS(I)

            IF ( IDIFF .GE. 0 .AND. IDIFF .LT. ISECS ) THEN
                IF ( KFREAD( 'MYFILE', 'TA', IEVENT, 
     &                       COL, ROW, SDATE, STIME, KFLEN, TA ) ) THEN
                    !! process this event.
                    !! note that the returned COL, ROW, SDATE, STIME, KFLEN
                    !! are redundant for this particular algorithm
                    ....  
                ELSE
                    !!  Error:  see program log for further info.
                    ...
                    GO TO 999
                END IF              !  if kfread() succeeded
            END IF                  !  if event active for count I
            
            GO TO 999               !  done processing this loop

        END DO                      !  end loop on events I at this cell

999     CONTINUE                    !  exit from search loop on I (etc.)

    END DO
    END DO
    ...

C Usage:

Don't, unless you know what you're doing with multi-lingual programming.
Previous: KFOPEN

Next: KFWRITE

Up: I/O API: Public Routines

To: Models-3/EDSS I/O API: The Help Pages