1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
|
C Copyright 1981-2007 ECMWF
C
C Licensed under the GNU Lesser General Public License which
C incorporates the terms and conditions of version 3 of the GNU
C General Public License.
C See LICENSE and gpl-3.0.txt for details.
C
INTEGER FUNCTION INTFA( INGRIB,INLEN,FLDIN,OUTGRIB,OUTLEN,FLDOUT)
C
C---->
C**** INTFA
C
C Purpose
C -------
C
C Prepare to interpolate input field...
C
C
C Interface
C ---------
C
C IRET = INTFA( INGRIB,INLEN,FLDIN,OUTGRIB,OUTLEN,FLDOUT)
C
C Input
C -----
C
C INGRIB - Input field (packed).
C INLEN - Input field length (words).
C FLDIN - Input field (unpacked).
C
C
C Output
C ------
C
C OUTGRIB - Output field (packed).
C OUTLEN - Output field length (words).
C FLDOUT - Output field (unpacked).
C
C
C Method
C ------
C
C Unpack field if GRIB).
C
C
C Externals
C ---------
C
C IBASINI - Ensure basic interpolation setup is done.
C GRIBEX - Decode/encode GRIB product.
C GRSVCK - Turn off GRIB checking
C RESET_C - Reset interpolation handling options using GRIB product.
C PDDEFS - Setup interpolation using parameter dependent options.
C INTLOG - Log error message.
C
C
C Author
C ------
C
C J.D.Chambers ECMWF Jan 1995
C
C----<
C
IMPLICIT NONE
C
C Function arguments
INTEGER INGRIB(*),OUTGRIB(*),INLEN,OUTLEN
REAL FLDIN(*),FLDOUT(*)
C
#include "parim.h"
#include "nifld.common"
#include "nofld.common"
#include "grfixed.h"
#include "intf.h"
C
C Parameters
INTEGER JPROUTINE
PARAMETER (JPROUTINE = 26100 )
C
C Local variables
C
INTEGER IWORD, IERR
INTEGER KPR
INTEGER LOOP
C
C Externals
INTEGER IBASINI, RESET_C, PDDEFS
C
C ------------------------------------------------------------------
C* Section 1. Initialise
C ------------------------------------------------------------------
C
100 CONTINUE
INTFA = 0
IERR = 0
KPR = 0
C
C Check that basic initialisation has been done
IERR = IBASINI(0)
IF ( IERR .NE. 0 ) THEN
CALL INTLOG(JP_ERROR,'INTFA: basic initialisation fail',JPQUIET)
INTFA = IERR
GOTO 900
ENDIF
C
C ------------------------------------------------------------------
C* Section 2. Decode data from the GRIB code
C ------------------------------------------------------------------
C
200 CONTINUE
C
C Allocate work array ZNFELDI if not already done.
C
IF( IZNJDCI.NE.1952999238 ) THEN
CALL JMEMHAN( 19, IZNFLDI, JPEXPAND, 1, IERR)
IF( IERR.NE.0 ) THEN
CALL INTLOG(JP_WARN,'INTFA: ZNFELDI allocation fail',JPQUIET)
INTFA = IERR
GOTO 900
ENDIF
IZNJDCI = 1952999238
ENDIF
C
C If input is a GRIB product
If (NIFORM .EQ. 1) THEN
C
C Decode data from GRIB code (no checking)
C
IWORD = INLEN
IERR = 0
CALL GRSVCK(0)
IERR = 1
ISEC3(2) = NINT(RMISSGV)
ZSEC3(2) = RMISSGV
CALL GRIBEX(ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
X ZNFELDI, JPEXPAND, INGRIB, INLEN, IWORD, 'D',IERR)
IF ( IERR .NE. 0) THEN
CALL INTLOG(JP_ERROR, 'INTFA: GRIBEX decoding failed.',IERR)
INTFA = IERR
GOTO 900
ENDIF
C
C Setup interpolation options from GRIB product characteristics
IERR = RESET_C( ISEC1, ISEC2, ZSEC2, ISEC4)
IF ( IERR .NE. 0 ) THEN
CALL INTLOG(JP_ERROR,
X 'INTFA: Setup interp. options from GRIB failed.',JPQUIET)
INTFA = IERR
GOTO 900
ENDIF
C
C Otherwise, move unpacked values in from user array
ELSE
DO 210 LOOP = 1, INLEN
ZNFELDI( LOOP ) = FLDIN( LOOP )
210 CONTINUE
C
ENDIF
C
C Setup interpolation options based on parameter in field.
IERR = PDDEFS()
IF ( IERR .NE. 0 ) THEN
CALL INTLOG(JP_ERROR,
X 'INTFA: Setup interp. options from parameter failed.',JPQUIET)
INTFA = IERR
GOTO 900
ENDIF
C
C
C ------------------------------------------------------------------
C* Section 9. Closedown.
C ------------------------------------------------------------------
C
900 CONTINUE
C
C Clear change flags for next product processing
C
RETURN
END
|