SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/XRD38/grib_mf/offset_mf.F
Go to the documentation of this file.
00001       SUBROUTINE OFFSET_MF  (KOFF,KVAL,KWORD,KBYTE,KNBIT,KLEN,KERR)
00002       USE PARKIND1, ONLY : JPRB
00003       USE YOMHOOK , ONLY : LHOOK, DR_HOOK
00004 C
00005 C
00006 C
00007 C
00008 C
00009 C********************************************************************
00010 C*
00011 C*    NAME      : OFFSET
00012 C*
00013 C*    FUNCTION  : CALCULATES THE WORD AND BIT OFFSET OF THE START
00014 C*                OF THE NEXT BIT-FIELD IN AN ARRAY OF BINARY
00015 C*                DATA, FOLLOWING THE INSERTION/EXTRACTION OF ONE
00016 C*                OR MORE CONSECUTIVE BIT-FIELDS.
00017 C*
00018 C*    INPUT     : KOFF  - BIT OFFSET AT WHICH LAST INSERTION OR
00019 C*                        EXTRACTION STARTED.
00020 C*                KVAL - NUMBER OF FIELDS INSERTED OR EXTRACTED IN
00021 C*                        LAST OPERATION.
00022 C*                KWORD - WORD NUMBER OF ARRAY AT WHICH LAST OPERATION
00023 C*                        STARTED.
00024 C*                KBYTE - LENGTH, IN BITS, OF LAST FIELD(S) INSERTED
00025 C*                        OR EXTRACTED.
00026 C*                KNBIT - NUMBER OF BITS IN COMPUTER WORD.
00027 C*                KLEN  - NUMBER OF WORDS IN ARRAY.
00028 C*
00029 C*    OUTPUT    : KOFF  - BIT OFFSET AT WHICH NEXT INSERTION OR
00030 C*                        EXTRACTION STARTS.
00031 C*                KVAL - UNCHANGED.
00032 C*                KWORD - WORD NUMBER OF ARRAY AT WHICH NEXT OPERATION
00033 C*                        STARTS.
00034 C*                KBYTE - UNCHANGED.
00035 C*                KNBIT - UNCHANGED.
00036 C*                KLEN  - UNCHANGED.
00037 C*
00038 C*                KERR  - EQUAL 0 IF NO ERROR.
00039 C*                        EQUAL -2 IF NEXT OPERATION IS OUTSIDE ARRAY
00040 C*                        BOUNDS.
00041 C*
00042 C*    GENERAL   : OFFSET CALLS -----
00043 C*
00044 C*    AUTHOR    : J.HENNESSY  15.4.85
00045 C*
00046 C*    MODIFIED  : J.HENNESSY  28.11.85
00047 C*    Modified by Jean CLOCHARD, February 1990, to comply with "DOCTOR".
00048 C*
00049 C********************************************************************
00050 C
00051       INTEGER KOFF, KVAL, KWORD, KBYTE, KNBIT, KLEN, KERR
00052 C
00053       INTEGER IBITL, INTER, IOFFS
00054 C
00055 C
00056 C     CLEAR ERROR INDICATOR
00057 C
00058       REAL(KIND=JPRB) :: ZHOOK_HANDLE
00059       IF (LHOOK) CALL DR_HOOK('OFFSET_MF',0,ZHOOK_HANDLE)
00060       KERR = 0
00061 C
00062 C
00063 C
00064 C
00065 C
00066 C
00067 C
00068 C
00069 C
00070 C
00071 C     CALCULATE NEXT WORD AND BIT POSITIONS.
00072 C
00073       IBITL = KVAL * KBYTE
00074       INTER = IBITL / KNBIT
00075       IOFFS = IBITL - INTER * KNBIT
00076       KWORD = KWORD + INTER
00077       KOFF  = KOFF  + IOFFS
00078 C
00079       IF (KOFF.GE.KNBIT)
00080      C   THEN
00081              KWORD = KWORD + 1
00082              KOFF  = KOFF  - KNBIT
00083          END IF
00084 C
00085 C
00086 C
00087 C
00088 C
00089 C
00090 C
00091 C
00092 C     CHECK THAT NEXT WORD TO BE ACCESSED LIES WITHIN THE ARRAY BOUNDS.
00093 C
00094       IF (KWORD.GT.KLEN)
00095      C   THEN
00096              KERR = -2
00097              WRITE (*,9001) KWORD,KLEN
00098  9001        FORMAT (1H ,'WORD ',I8,' IS OUTSIDE ARRAY BOUNDS ',I8)
00099          ENDIF
00100 C
00101 C
00102       IF (LHOOK) CALL DR_HOOK('OFFSET_MF',1,ZHOOK_HANDLE)
00103       END