*IF DEF,C84_1A,OR,DEF,FLDOP UIE3F404.18
C ******************************COPYRIGHT****************************** GTS2F400.3421
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.3422
C GTS2F400.3423
C Use, duplication or disclosure of this code is subject to the GTS2F400.3424
C restrictions as set forth in the contract. GTS2F400.3425
C GTS2F400.3426
C Meteorological Office GTS2F400.3427
C London Road GTS2F400.3428
C BRACKNELL GTS2F400.3429
C Berkshire UK GTS2F400.3430
C RG12 2SZ GTS2F400.3431
C GTS2F400.3432
C If no contract has been raised with this copy of the code, the use, GTS2F400.3433
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.3434
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.3435
C Modelling at the above address. GTS2F400.3436
C ******************************COPYRIGHT****************************** GTS2F400.3437
C GTS2F400.3438
CLL Routine: GRBWRT------------------------------------------------ GRBWRT1A.3
CLL GRBWRT1A.4
CLL Purpose: This routine acts as an interface between the model and GRBWRT1A.5
CLL GRIB format output routines. GRBWRT1A.6
CLL GRBWRT1A.7
CLL Author: D.M.Goddard Date: 23 December 1993 GRBWRT1A.8
CLL Reviewer: Date of review: GRBWRT1A.9
CLL GRBWRT1A.10
CLL Tested under compiler: cft77 GRBWRT1A.11
CLL Tested under OS version: UNICOS 5.1 GRBWRT1A.12
CLL GRBWRT1A.13
CLL Code version no: 1 Date: 15 October 1993 GRBWRT1A.14
CLL GRBWRT1A.15
CLL Modification History: GRBWRT1A.16
CLL 3.4 11/10/94 : Correct setting of reals in lookup table GRS3F304.335
CLL and add return code and message to PP2GRIB call GRS3F304.336
CLL R A Stratton. GRS3F304.337
! 4.0 10/03/95 : Allow alternative grib packing to be used and GRS3F400.282
! improve error traping. R A Stratton. GRS3F400.283
!LL 4.3 06/02/97 Modify I/O calls for MPP use P.Burton GPB0F403.3013
CLL GRBWRT1A.17
CLL Programming standard: UM Doc Paper 3, version 1 (15/1/90) GRBWRT1A.18
CLL GRBWRT1A.19
CLL Logical components covered: ... GRBWRT1A.20
CLL GRBWRT1A.21
CLL Project task: ... GRBWRT1A.22
CLL GRBWRT1A.23
CLL External documentation: On-line UM document ??? - ?????????? GRBWRT1A.24
CLL GRBWRT1A.25
CLL ------------------------------------------------------------------- GRBWRT1A.26
C*L Interface and arguments: ------------------------------------------ GRBWRT1A.27
SUBROUTINE GRIB_FILE(LEN1_LOOKUP,LEN2_LOOKUP,LOOKUP,RLOOKUP,IENT, 5,5GRBWRT1A.28
& FIELD,PPHORIZ_OUT,LENBUF,NUM_CRAY_WORDS, GRBWRT1A.29
& UNITPP,IWA,GRIB_PACKING,ICODE,CMESSAGE) GRS3F400.284
GRBWRT1A.31
INTEGER GRBWRT1A.32
& LEN1_LOOKUP ! IN first dimension of LOOKUP GRBWRT1A.33
& ,LEN2_LOOKUP ! IN second dimension of LOOKUP GRBWRT1A.34
& ,LENBUF ! IN No of points in output field GRBWRT1A.35
& ,IENT ! IN level indicator for processing LOOKUP. GRBWRT1A.36
& ,IWA ! IN Record number GRBWRT1A.37
& ,PPHORIZ_OUT ! IN GRBWRT1A.38
& ,UNITPP ! IN Output PP unit number GRBWRT1A.39
& ,GRIB_PACKING ! IN Packing profile for grib GRS3F400.285
& ,LEN_FIELD GRBWRT1A.40
& ,ICODE ! OUT Return code GRBWRT1A.41
& ,NUM_CRAY_WORDS ! OUT Number of cray words output in grib GRBWRT1A.42
& ,LOOKUP(LEN1_LOOKUP,LEN2_LOOKUP) ! Integer lookup headers GRBWRT1A.43
REAL GRBWRT1A.44
& FIELD(PPHORIZ_OUT) ! IN Unpacked output array GRBWRT1A.45
& ,RLOOKUP(LEN1_LOOKUP,LEN2_LOOKUP) ! REAL lookup headers GRBWRT1A.46
CHARACTER GRBWRT1A.47
& CMESSAGE*(*) ! OUT Will contain any error messages GRBWRT1A.48
C GRBWRT1A.49
C LOCAL VARIABLES GRBWRT1A.50
C GRBWRT1A.51
INTEGER GRBWRT1A.52
& ILABEL(45) ! Integer part of LOOKUP for level IENT GRBWRT1A.53
& ,LEN_IO GRBWRT1A.54
& ,IX GRBWRT1A.55
REAL GRBWRT1A.56
& RLABEL(19) ! Real part of LOOKUP for level IENT GRBWRT1A.57
& ,WORK_ARRAY(LENBUF) ! GRIB packed output array GRBWRT1A.58
& ,BUFOUT(LENBUF) ! Output PP BUFFER GRBWRT1A.59
*CALL CLOOKADD
GRBWRT1A.60
*CALL C_MDI
GRBWRT1A.61
GRBWRT1A.62
CL GRBWRT1A.63
CL 1. Fill arrays ILABEL and RLABEL GRBWRT1A.64
CL GRBWRT1A.65
DO J=1,45 GRBWRT1A.66
ILABEL(J)=LOOKUP(J,IENT) GRBWRT1A.67
ENDDO GRBWRT1A.68
DO J=1,19 GRBWRT1A.69
RLABEL(J)=RLOOKUP(J+45,IENT) GRBWRT1A.70
ENDDO GRBWRT1A.71
CL GRBWRT1A.72
CL 2. Convert data to GRIB code GRBWRT1A.73
CL GRBWRT1A.74
CALL PP2GRIB
(FIELD,WORK_ARRAY,LENBUF,NUM_CRAY_WORDS,GRIB_PACKING, GRS3F400.286
& ILABEL,RLABEL,ICODE,CMESSAGE) GRS3F304.338
IF (ICODE.NE.0) THEN GRS3F400.287
RETURN GRS3F400.288
ENDIF GRS3F400.289
C WRITE(6,*) NUM_CRAY_WORDS,LENBUF GRS3F304.339
C write(6,*) (ilabel(j),j=1,45) GRS3F304.340
C write(6,*) (rlabel(j),j=1,19) GRS3F304.341
CL GRBWRT1A.80
CL 3. Put coded data into BUFOUT for output GRBWRT1A.81
CL GRBWRT1A.82
DO I=1,NUM_CRAY_WORDS GRBWRT1A.83
BUFOUT(I)=WORK_ARRAY(I) GRBWRT1A.84
ENDDO GRBWRT1A.85
DO I=NUM_CRAY_WORDS+1,LENBUF GRBWRT1A.86
BUFOUT(I)=0.0 GRBWRT1A.87
ENDDO GRBWRT1A.88
CL GRBWRT1A.89
CL 4. Update lookup for this field GRBWRT1A.90
CL GRBWRT1A.91
DO J=1,45 GRBWRT1A.92
LOOKUP(J,IENT)=ILABEL(J) GRBWRT1A.93
ENDDO GRBWRT1A.94
DO J=1,19 GRBWRT1A.95
RLOOKUP(J+45,IENT)=RLABEL(J) GRS3F304.342
ENDDO GRBWRT1A.97
LOOKUP(LBLREC,IENT)=NUM_CRAY_WORDS GRBWRT1A.98
LOOKUP(LBEGIN,IENT)=IWA GRBWRT1A.99
LOOKUP(LBNREC,IENT)=NUM_CRAY_WORDS GRBWRT1A.100
LOOKUP(DATA_TYPE,IENT)=1 GRBWRT1A.101
LOOKUP(NADDR,IENT)=IWA GRBWRT1A.102
CL GRBWRT1A.103
CL 5. Output BUFOUT GRBWRT1A.104
CL GRBWRT1A.105
*IF -DEF,MPP GPB0F403.3014
CALL SETPOS
(UNITPP,IWA,ICODE) GTD0F400.82
CALL BUFFOUT
(UNITPP,BUFOUT(1),NUM_CRAY_WORDS,LEN_IO,IX) GRBWRT1A.107
*ELSE GPB0F403.3015
CALL SETPOS_single
(UNITPP,IWA,ICODE) GPB0F403.3016
CALL BUFFOUT_single
(UNITPP,BUFOUT(1),NUM_CRAY_WORDS,LEN_IO,IX) GPB0F403.3017
*ENDIF GPB0F403.3018
RETURN GRBWRT1A.108
END GRBWRT1A.109
*ENDIF GRBWRT1A.110