*IF DEF,RECON GRIB_UM1.2
C ******************************COPYRIGHT****************************** GTS2F400.3493
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.3494
C GTS2F400.3495
C Use, duplication or disclosure of this code is subject to the GTS2F400.3496
C restrictions as set forth in the contract. GTS2F400.3497
C GTS2F400.3498
C Meteorological Office GTS2F400.3499
C London Road GTS2F400.3500
C BRACKNELL GTS2F400.3501
C Berkshire UK GTS2F400.3502
C RG12 2SZ GTS2F400.3503
C GTS2F400.3504
C If no contract has been raised with this copy of the code, the use, GTS2F400.3505
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.3506
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.3507
C Modelling at the above address. GTS2F400.3508
C ******************************COPYRIGHT****************************** GTS2F400.3509
C GTS2F400.3510
CLL SUBROUTINE GRIB_UM--------------------------------------------- GRIB_UM1.3
CLL GRIB_UM1.4
CLL Purpose: AD110293.164
CLL Reads in ECMWF GRIB encoded pressure level data AD110293.165
CLL and converts to UM dump format. Recocognised fields GRIB_UM1.6
CLL are PSTAR, PHISTAR, U, V, T, RH, LAND_SEA mask UDG3F405.202
CLL PHISTAR is converted to orography, T to TH and RH to Q. GRIB_UM1.9
CLL GRIB_UM1.12
CLL Extra fields, not available from either the ECMWF GRIB_UM1.13
CLL MARS archive or ancillary files, are initialised and GRIB_UM1.14
CLL incorporated into the output dump. These are BL depth, GRIB_UM1.15
CLL sea ice fraction and depth, and convective cloud GRIB_UM1.16
CLL water path. GRIB_UM1.17
CLL GRIB_UM1.18
CLL See description of subroutine GRIB_TO_UNIFIED_MODEL GRIB_UM1.19
CLL for more details on data format. GRIB_UM1.20
CLL GRIB_UM1.21
CLL Written by A. Dickinson GRIB_UM1.22
CLL GRIB_UM1.23
CLL Model Modification history from model version 3.0: GRIB_UM1.24
CLL version date AD110293.166
CLL AD110293.167
CLL 3.1 11/02/93 ECMWF data on model levels now handled AD110293.168
CLL Author: A. Dickinson Reviewer: D. Richardson AD110293.169
CLL AD200593.1
CLL 3.2 20/05/93 Wind staggering for C-grid added supporting AD200593.2
CLL interpolations B->C; B->B; C->C; C->B. AD200593.3
CLL Author: A.Dickinson Reviewer: T.Davies AD200593.4
CLL GRIB_UM1.26
CLL 3.3 10/12/93 Correct argument in call to SETFHEAD. Add DR101293.1
CLL extra checks after LOCATE calls. DR101293.2
CLL Author: D.Robinson Reviewer: D. Goddard DR101293.3
CLL DR101293.4
CLL 3.3 08/12/93 Extra arguments for READFLDS and WRITFLDS. DR081293.74
CLL Author: A.Dickinson Reviewer: M.Bell DR081293.75
! 3.5 01/05/95 Additional arguments and associated declarations UDG2F305.415
! declarations to enable addressing to be UDG2F305.416
! calculated within model. UDG2F305.417
! Author D.M.Goddard Reviewer S Swarbrick UDG2F305.418
! 4.0 02/02/95 Alteration to use centrally maintained GRIB UDG3F400.150
! decoding routine DECODE UDG3F400.151
! Author: D.M. Goddard Reviewer: D. Robinson UDG3F400.152
! 4.1 18/06/96 Changes to cope with changes in STASH addressing GDG0F401.655
! Author D.M. Goddard. GDG0F401.656
! 4.2 Oct. 96 T3E migration: *DEF CRAY removed GSS9F402.76
! S.J.Swarbrick GSS9F402.77
! 4.4 05/08/97 GRIB message must be passed into DECODE as an UDG3F404.13
! integer (TYPE=8) array on T3E. UDG3F404.14
! Author D.M. Goddard UDG3F404.15
! 4.4 12/09/97 Changes to make addresses well-formed for UDG7F404.1
! Cray I/O UDG7F404.2
! 4.4 15/10/97 Correct pointer for reading potential temperature UDG8F404.1
! Author: D.M. Goddard. UDG8F404.2
! 4.5 23/09/98 Cater for packed/unpacked fields. D. Robinson. GDR8F405.64
! 4.5 10/11/98 Add code to initialise following fields from UDG3F405.203
! ECMWF GRIB data :- UDG3F405.204
! 1) pstar from log pstar UDG3F405.205
! 1) surface temperature from skin temperature UDG3F405.206
! 2) deep soil temperature on MOSES levels UDG3F405.207
! interpolated from ECMWF soil levels UDG3F405.208
! 3) soil moisture content on MOSES levels UDG3F405.209
! interpolated from ECMWF soil levels UDG3F405.210
! Remove code to initialise pstar from pmsl UDG3F405.211
! Author D.M Goddard UDG3F405.212
CLL DR081293.76
CLL Programming standard : GRIB_UM1.27
CLL GRIB_UM1.28
CLL Logical components covered : S73 GRIB_UM1.29
CLL GRIB_UM1.30
CLL Project task : GRIB_UM1.31
CLL GRIB_UM1.32
CLL External documentation: Unified Model documentation paper No:S1 AD110293.170
CLL Version: GRIB_UM1.34
CLL GRIB_UM1.35
CLL----------------------------------------------------------------- AD110293.171
C*L Arguments:------------------------------------------------------ GRIB_UM1.38
SUBROUTINE GRIB_UM( 1,38UDG2F305.419
*CALL ARGPPX
UDG2F305.420
& LEN2_LOOKUP,ROW_LENGTH,P_ROWS,P_LEVELS, UDG2F305.421
& BL_LEVELS,SM_LEVELS,ST_LEVELS, UDG3F405.213
& YEAR,MONTH,DAY,HOUR,MINUTE, UDG3F405.214
& N_M_FIELDS,N_S_FIELDS,POS_LSM, UDG3F405.215
& N_SOIL_LEVELS,LSKINTEMP, UDG3F405.216
& ECMWF_SOIL_LEVELS,ECMWF_SOIL_DEPTHS, UDG3F405.217
& NFTIN,NFTOUT,LPSTAR,GRIB_RECORD_START_ADDRESS UDG3F405.218
*,GRIB_RECORD_LENGTH,AK,BK,HYBRID) AD110293.174
GRIB_UM1.42
IMPLICIT NONE GRIB_UM1.43
GRIB_UM1.44
INTEGER GRIB_UM1.45
* LEN2_LOOKUP !No of GRIB fields GRIB_UM1.46
*,ROW_LENGTH !No of points E-W GRIB_UM1.47
*,P_ROWS !No of points N-S GRIB_UM1.48
*,P_LEVELS !No of levels GRIB_UM1.49
*,BL_LEVELS !No of BL levels GRIB_UM1.50
*,SM_LEVELS !No of soil moisture levels UDG3F405.219
*,ST_LEVELS !No of soil temperature levels UDG3F405.220
*,N_M_FIELDS !No of upper level fields GRIB_UM1.51
*,N_S_FIELDS !No of single level fields GRIB_UM1.52
*,N_SOIL_LEVELS !No of soil levels UDG3F405.221
*,YEAR ! GRIB_UM1.53
*,MONTH ! GRIB_UM1.54
*,DAY !> Analysis date & time GRIB_UM1.55
*,HOUR ! GRIB_UM1.56
*,MINUTE ! GRIB_UM1.57
*,NFTIN !Unit no containing GRIB data GRIB_UM1.58
*,NFTOUT !Unit no to which UM dump is written GRIB_UM1.59
*,POS_LSM !Position of LSM among single level fields UDG3F405.222
! in GRIB file. UDG3F405.223
*,GRIB_RECORD_START_ADDRESS(LEN2_LOOKUP) AD110293.175
*,GRIB_RECORD_LENGTH(LEN2_LOOKUP) AD110293.176
GRIB_UM1.61
GRIB_UM1.62
REAL GRIB_UM1.63
* AK(P_LEVELS) !Levels AD110293.177
*,BK(P_LEVELS) !Levels AD110293.178
!,ECMWF_SOIL_LEVELS(N_SOIL_LEVELS) UDG3F405.224
!Array containing ECMWF soil levels UDG3F405.225
!,ECMWF_SOIL_DEPTHS(N_SOIL_LEVELS) UDG3F405.226
!Array containing depth of ECMWF soil layers UDG3F405.227
GRIB_UM1.65
LOGICAL LPSTAR !=T if P STAR in GRIB file UDG3F405.228
!=F if log P STAR in GRIB file UDG3F405.229
LOGICAL LSKINTEMP !=T if GRIB code 235 in GRIB file UDG3F405.230
LOGICAL HYBRID UDG3F405.231
AD110293.181
*CALL CSUBMODL
UDG2F305.422
*CALL CPPXREF
UDG2F305.424
*CALL PPXLOOK
UDG2F305.425
UDG2F305.426
INTEGER EXPPXI ! Function to extract integer UDG2F305.427
! from ppxref file UDG2F305.428
CHARACTER*36 EXPPXC ! Function to extract character string UDG2F305.429
! from ppxref file UDG2F305.430
UDG2F305.431
C---------------------------------------------------------------------- GRIB_UM1.66
C Workspace usage:----------------------------------------------------- GRIB_UM1.67
C GRIB_UM1.68
GRIB_UM1.69
INTEGER GRIB_UM1.70
* LEN_INTHD !Length of integer header GRIB_UM1.71
*,LEN1_LOOKUP !1st dim of LOOKUP array GRIB_UM1.72
*,LEN_REALHD !Length of real header GRIB_UM1.73
*,LEN2_LEVDEPC !2nd dimension of LEVDEPC GRIB_UM1.74
*,LEN2_ROWDEPC !2nd dimension of ROWDEPC GRIB_UM1.75
*,LEN_FIXHD !Length of fixed length header GRIB_UM1.76
*,N_E_FIELDS !No of extra fields written to UM dump GRIB_UM1.77
*,LEN_DUMPH !Length of temp history blockz GRIB_UM1.78
GRIB_UM1.79
GRIB_UM1.80
PARAMETER( GRIB_UM1.81
* LEN_INTHD=29 GRIB_UM1.82
*,LEN1_LOOKUP=64 GRIB_UM1.83
*,LEN_REALHD=30 GRIB_UM1.84
*,LEN2_LEVDEPC=20 AD200593.5
*,LEN2_ROWDEPC=3 GRIB_UM1.86
*,LEN_FIXHD=256 GRIB_UM1.87
*,N_E_FIELDS=4 GRIB_UM1.88
*,LEN_DUMPH=2048) GRIB_UM1.89
GRIB_UM1.90
INTEGER GRIB_UM1.91
& FIXHD(LEN_FIXHD), GRIB_UM1.92
& INTHD(LEN_INTHD), GRIB_UM1.93
& LOOKUP(64,1000) GRIB_UM1.94
GRIB_UM1.95
REAL GRIB_UM1.96
& REALHD(LEN_REALHD), GRIB_UM1.97
& LEVDEPC(1+P_LEVELS*LEN2_LEVDEPC), GRIB_UM1.98
& ROWDEPC(1+ROW_LENGTH*LEN2_ROWDEPC), GRIB_UM1.99
& RLOOKUP(64,1000) GRIB_UM1.100
GRIB_UM1.101
EQUIVALENCE (RLOOKUP,LOOKUP) GRIB_UM1.102
GRIB_UM1.103
GRIB_UM1.111
REAL GRIB_UM1.112
* T(ROW_LENGTH*P_ROWS) !Temperature GRIB_UM1.113
*,Q(ROW_LENGTH*P_ROWS) !Specific humidity GRIB_UM1.114
*,RH(ROW_LENGTH*P_ROWS) !Relative humidity GRIB_UM1.115
*,TH(ROW_LENGTH*P_ROWS) !Potential temperature GRIB_UM1.116
*,SAT(ROW_LENGTH*P_ROWS) !Sat specific humidity GRIB_UM1.117
*,PSTAR(ROW_LENGTH*P_ROWS) !Pstar AD110293.183
*,P(ROW_LENGTH*P_ROWS) !Pressure GRIB_UM1.118
GRIB_UM1.119
LOGICAL GRIB_UM1.120
* LAND_SEA(ROW_LENGTH*P_ROWS) !Land/sea mask GRIB_UM1.121
*,SEA_ICE(ROW_LENGTH*P_ROWS) !Sea ice mask GRIB_UM1.122
GRIB_UM1.123
INTEGER GRIB_UM1.124
* PP_LEN(LEN2_LOOKUP) !Length | GRIB_UM1.125
*,PP_NUM(LEN2_LOOKUP) !No of fields| For each GRIB_UM1.126
*,PP_POS(LEN2_LOOKUP) !Position | field type GRIB_UM1.127
*,PP_TYPE(LEN2_LOOKUP) !Real,int,log| on output file GRIB_UM1.128
*,PP_ITEMC(LEN2_LOOKUP) !Item code | GRIB_UM1.129
&,PP_LS(LEN2_LOOKUP) !Land or sea GRIB_UM1.130
GRIB_UM1.131
C---------------------------------------------------------------------- GRIB_UM1.132
C External subroutines called:----------------------------------------- GRIB_UM1.133
EXTERNAL DECODE,SETPOS8,BUFFIN8,WRITHEAD,WRITFLDS,F_TYPE UDG3F400.153
EXTERNAL SETFHEAD,ABORT_IO,READFLDS GDG0F401.657
GRIB_UM1.137
C*--------------------------------------------------------------------- GRIB_UM1.138
C Define local variables:---------------------------------------------- GRIB_UM1.139
REAL GRIB_UM1.140
* A,PRESS,THREF,AL10000 GRIB_UM1.141
GRIB_UM1.145
INTEGER GRIB_UM1.146
* ICODE ! Return code; successful=0; error > 0 GRIB_UM1.147
*,DUMMY ! Dummy argument to WRITHEAD GRIB_UM1.148
*,I,N,K,J,L,M ! Integer indices GRIB_UM1.149
*,LEN_IO ! Actual length of data read by BUFIN GRIB_UM1.150
*,IPOS GRIB_UM1.151
*,START_BLOCK GRIB_UM1.152
*,LL GRIB_UM1.153
*,N_TYPES GRIB_UM1.154
*,POSQ,POST,POSO,POSP AD110293.184
*,P_FIELD ! No of points along a level GRIB_UM1.158
*,INDEX_POS(1000)! Index used to make multilevel fields contiguous GRIB_UM1.159
INTEGER DISK_ADDRESS !Current rounded disk address UDG7F404.3
INTEGER NUMBER_OF_DATA_WORDS_ON_DISK UDG7F404.4
INTEGER NUMBER_OF_DATA_WORDS_IN_MEMORY UDG7F404.5
GRIB_UM1.160
CHARACTER*256 GRIB_UM1.161
* CMESSAGE !OUT Error message if ICODE > 0 GRIB_UM1.162
GRIB_UM1.163
INTEGER LRECL_BYTES,LRECL_WORDS GRIB_UM1.164
PARAMETER (LRECL_BYTES=2048 GRIB_UM1.165
* ,LRECL_WORDS=LRECL_BYTES/8) GRIB_UM1.166
GRIB_UM1.167
CHARACTER*80 F_TYPE_TITLE UDG3F400.154
CHARACTER*1 CHAR2(LRECL_BYTES) UDG3F404.16
UDG3F404.17
*CALL TYPGRIB
UDG3F404.18
CHARACTER*1 CHAR3(LEN_MAX) UDG3F404.19
INTEGER ICHAR3(LEN_MAX) ! INTEGER EQUIVALENT OF CHAR3 UDG3F404.20
EQUIVALENCE (CHAR3(1),ICHAR3(1)) UDG3F404.21
GRIB_UM1.171
C---------------------------------------------------------------------- GRIB_UM1.178
C Constants from comdecks:--------------------------------------------- GRIB_UM1.179
*CALL C_R_CP
GRIB_UM1.180
*CALL C_G
GRIB_UM1.181
*CALL C_MDI
GRIB_UM1.182
*CALL CLOOKADD
GRIB_UM1.183
*CALL C_0_DG_C
GRIB_UM1.184
UDG3F404.22
*CALL CGRIB
UDG3F400.156
C---------------------------------------------------------------------- GRIB_UM1.185
GRIB_UM1.186
DUMMY=1 GRIB_UM1.187
GRIB_UM1.188
C---------------------------------------------------------------------- GRIB_UM1.189
C Initialise fixed length header GRIB_UM1.190
C---------------------------------------------------------------------- GRIB_UM1.191
GRIB_UM1.192
CALL SETFHEAD
(FIXHD GRIB_UM1.193
*,LEN_FIXHD GRIB_UM1.194
*,LEN_INTHD GRIB_UM1.195
*,LEN_REALHD GRIB_UM1.196
*,P_LEVELS,LEN2_LEVDEPC GRIB_UM1.197
*,P_ROWS,LEN2_ROWDEPC DR101293.5
*,0,0 GRIB_UM1.199
*,0,0 GRIB_UM1.200
*,0 GRIB_UM1.201
*,LEN_DUMPH GRIB_UM1.202
*,0,0,0 GRIB_UM1.203
&,LEN1_LOOKUP,LEN2_LOOKUP+N_E_FIELDS UDG3F405.232
&,(LEN2_LOOKUP+N_E_FIELDS)*ROW_LENGTH*P_ROWS UDG3F405.233
*,0 GRIB_UM1.206
*,YEAR,MONTH,DAY,HOUR,MINUTE GRIB_UM1.207
*,0 GRIB_UM1.208
*,YEAR,MONTH,DAY,HOUR,MINUTE GRIB_UM1.209
*,8,1,3,0,1,IMDI,IMDI,1,1,IMDI,IMDI GRIB_UM1.210
*,IPOS) GRIB_UM1.211
FIXHD(12)=405 UDG3F405.234
FIXHD(9)=2 AD200593.6
C-------------------------------------------------------------- GRIB_UM1.213
C Initialise integer constants record GRIB_UM1.214
C-------------------------------------------------------------- GRIB_UM1.215
GRIB_UM1.216
DO I=1,LEN_INTHD GRIB_UM1.217
INTHD(I)=IMDI GRIB_UM1.218
ENDDO GRIB_UM1.219
GRIB_UM1.220
INTHD(6)=ROW_LENGTH GRIB_UM1.221
INTHD(7)=P_ROWS GRIB_UM1.222
INTHD(8)=P_LEVELS GRIB_UM1.223
INTHD(9)=P_LEVELS GRIB_UM1.224
! IF(LMOSES)THEN UDG3F405.235
INTHD(10)=4 UDG3F405.236
! ELSE UDG3F405.237
! INTHD(10)=3 UDG3F405.238
! END IF UDG3F405.239
INTHD(13)=BL_LEVELS GRIB_UM1.226
INTHD(18)=1 GRIB_UM1.227
GRIB_UM1.228
C-------------------------------------------------------------- GRIB_UM1.229
C Initialise real constants GRIB_UM1.230
C-------------------------------------------------------------- GRIB_UM1.231
GRIB_UM1.232
DO I=1,LEN_REALHD GRIB_UM1.233
REALHD(I)=RMDI GRIB_UM1.234
ENDDO GRIB_UM1.235
REALHD(1)=360./ROW_LENGTH GRIB_UM1.236
REALHD(2)=180./(P_ROWS-1) GRIB_UM1.237
REALHD(3)=90.0 GRIB_UM1.238
REALHD(4)=0.0 GRIB_UM1.239
REALHD(5)=90.0 GRIB_UM1.240
REALHD(6)=00.0 GRIB_UM1.241
GRIB_UM1.242
C-------------------------------------------------------------- GRIB_UM1.243
C Initialise level dependent constants GRIB_UM1.244
C-------------------------------------------------------------- GRIB_UM1.245
GRIB_UM1.246
DO I=1,LEN2_LEVDEPC*P_LEVELS GRIB_UM1.247
LEVDEPC(I)=RMDI GRIB_UM1.248
ENDDO GRIB_UM1.249
GRIB_UM1.250
DO I=1,P_LEVELS GRIB_UM1.251
LEVDEPC(I)=AK(I) GRIB_UM1.252
LEVDEPC(I+P_LEVELS)=BK(I) AD110293.189
LEVDEPC(I+2*P_LEVELS)=0. GRIB_UM1.254
LEVDEPC(I+3*P_LEVELS)=0. GRIB_UM1.255
PRESS=AK(I)+100000.*BK(I) AD110293.190
IF(PRESS.GT.10000.)THEN GRIB_UM1.257
THREF=300. GRIB_UM1.258
ELSEIF(PRESS.LT.100.)THEN GRIB_UM1.259
THREF=400. GRIB_UM1.260
ELSE GRIB_UM1.261
AL10000=ALOG(10000.) GRIB_UM1.262
THREF=300.+100.*(AL10000-ALOG(PRESS))/(AL10000-ALOG(100.)) GRIB_UM1.263
ENDIF GRIB_UM1.264
LEVDEPC(I+4*P_LEVELS) GRIB_UM1.265
* =THREF/(PRESS*1.E-5)**KAPPA GRIB_UM1.266
ENDDO GRIB_UM1.274
GRIB_UM1.275
LEVDEPC(1 + 5*P_LEVELS) = 0.1 UDG3F405.240
LEVDEPC(2 + 5*P_LEVELS) = 0.25 UDG3F405.241
LEVDEPC(3 + 5*P_LEVELS) = 0.65 UDG3F405.242
LEVDEPC(4 + 5*P_LEVELS) = 2.0 UDG3F405.243
GRIB_UM1.280
C-------------------------------------------------------------- GRIB_UM1.281
C Initialise row dependent constants GRIB_UM1.282
C-------------------------------------------------------------- GRIB_UM1.283
C SET FILTER WAVE VALUES TO MAX VALUES GRIB_UM1.284
DO I=1,P_LEVELS GRIB_UM1.285
ROWDEPC(I)=ROW_LENGTH GRIB_UM1.286
ROWDEPC(I+P_LEVELS)=ROW_LENGTH GRIB_UM1.287
ENDDO GRIB_UM1.288
GRIB_UM1.289
C-------------------------------------------------------------- GRIB_UM1.290
C Initialise addresses and lengths in LOOKUP prior to I/O GRIB_UM1.291
C-------------------------------------------------------------- GRIB_UM1.292
GRIB_UM1.293
GRIB_UM1.294
DO N=1,LEN2_LOOKUP+N_E_FIELDS UDG3F405.244
GRIB_UM1.296
DO J=1,LEN1_LOOKUP GRIB_UM1.297
LOOKUP(J,N)=0 GRIB_UM1.298
ENDDO GRIB_UM1.299
GRIB_UM1.300
C DATA TIME YEAR,DAY,MONTH,HOUR,MINUTE GRIB_UM1.301
LOOKUP(LBYR,N)=YEAR GRIB_UM1.302
LOOKUP(LBMON,N)=MONTH GRIB_UM1.303
LOOKUP(LBDAT,N)=DAY GRIB_UM1.304
LOOKUP(LBHR,N)=HOUR GRIB_UM1.305
LOOKUP(LBMIN,N)=MINUTE GRIB_UM1.306
LOOKUP(LBYRD,N)=YEAR GRIB_UM1.307
LOOKUP(LBMOND,N)=MONTH GRIB_UM1.308
LOOKUP(LBDATD,N)=DAY GRIB_UM1.309
LOOKUP(LBHRD,N)=HOUR GRIB_UM1.310
LOOKUP(LBMIND,N)=MINUTE GRIB_UM1.311
GRIB_UM1.312
C NO OF POINTS ALONG A LATITUDE GRIB_UM1.313
LOOKUP(LBNPT,N)=ROW_LENGTH GRIB_UM1.314
C NO OF POINTS ALONG A MERIDIAN GRIB_UM1.315
LOOKUP(LBROW,N)=P_ROWS GRIB_UM1.316
C FIELD LENGTH GRIB_UM1.317
LOOKUP(LBLREC,N)=ROW_LENGTH*P_ROWS GRIB_UM1.318
C ADDRESS GRIB_UM1.319
LOOKUP(NADDR,N)=IPOS GRIB_UM1.320
IPOS=IPOS+LOOKUP(15,N) GRIB_UM1.321
C TYPE GRIB_UM1.322
LOOKUP(DATA_TYPE,N)=1 GRIB_UM1.323
C PACK GRIB_UM1.324
*IF DEF,CRAY GDR8F405.65
LOOKUP(LBPACK,N)=2 ! 32 bit packing GDR8F405.66
*ELSE GDR8F405.67
LOOKUP(LBPACK,N)=0 ! No packing GDR8F405.68
*ENDIF GDR8F405.69
LOOKUP(LBREL,N)=2 ! Header release number UDG3F400.157
! Internal model number GDG0F401.658
LOOKUP(45,N)=1 GDG0F401.659
C GRID RESOLUTION AND POSITION GRIB_UM1.326
RLOOKUP(BPLAT,N)=90. GRIB_UM1.327
RLOOKUP(BPLON,N)=0. GRIB_UM1.328
RLOOKUP(BDY,N)=-REALHD(2) GRIB_UM1.329
RLOOKUP(BZY,N)=REALHD(3)+REALHD(2) GRIB_UM1.330
RLOOKUP(BZX,N)=REALHD(4)-REALHD(1) GRIB_UM1.331
RLOOKUP(BDX,N)=REALHD(1) GRIB_UM1.332
LOOKUP(BMDI,N)=RMDI ! Missing data indicator UDG3F400.158
ENDDO GRIB_UM1.333
GRIB_UM1.334
C Index to make multilevel fields contiguous on disk GRIB_UM1.335
DO J=1,N_S_FIELDS GRIB_UM1.336
INDEX_POS(J)=J GRIB_UM1.337
ENDDO GRIB_UM1.338
UDG3F405.245
IF(ST_LEVELS.GT.0)THEN UDG3F405.246
DO J=1,ST_LEVELS UDG3F405.247
INDEX_POS(N_S_FIELDS+J)= UDG3F405.248
& N_S_FIELDS+J UDG3F405.249
END DO UDG3F405.250
END IF UDG3F405.251
IF(SM_LEVELS.GT.0)THEN UDG3F405.252
DO J=1,SM_LEVELS UDG3F405.253
INDEX_POS(ST_LEVELS+N_S_FIELDS+J)= UDG3F405.254
& ST_LEVELS+N_S_FIELDS+J UDG3F405.255
END DO UDG3F405.256
END IF UDG3F405.257
UDG3F405.258
IF(HYBRID)THEN AD110293.192
AD110293.193
DO I=1,N_M_FIELDS GRIB_UM1.340
DO J=1,P_LEVELS AD110293.194
INDEX_POS(P_LEVELS*(I-1)+ST_LEVELS+SM_LEVELS UDG3F405.259
& +N_S_FIELDS+P_LEVELS-J+1) UDG3F405.260
& =(J-1)*N_M_FIELDS+ST_LEVELS+SM_LEVELS+N_S_FIELDS+I UDG3F405.261
ENDDO AD110293.197
ENDDO GRIB_UM1.343
AD110293.198
ELSE AD110293.199
AD110293.200
DO I=1,N_M_FIELDS AD110293.201
DO J=1,P_LEVELS AD110293.202
INDEX_POS(P_LEVELS*(I-1)+ST_LEVELS+SM_LEVELS+J+N_S_FIELDS) UDG3F405.262
& =(J-1)*N_M_FIELDS+ST_LEVELS+SM_LEVELS+N_S_FIELDS+I UDG3F405.263
ENDDO AD110293.205
ENDDO AD110293.206
AD110293.207
ENDIF AD110293.208
C WRITE(6,*)INDEX_POS GRIB_UM1.345
WRITE(6,*)INDEX_POS UDG3F405.264
UDG7F404.6
LOOKUP(LBPACK,POS_LSM)=0 UDG3F405.265
UDG3F405.266
! Reset the disk addresses and lengths for well formed I/O UDG7F404.8
CALL SET_DUMPFILE_ADDRESS
(FIXHD,LEN_FIXHD, UDG7F404.9
& LOOKUP,LEN1_LOOKUP, UDG7F404.10
& LEN2_LOOKUP+N_E_FIELDS, UDG7F404.11
& NUMBER_OF_DATA_WORDS_IN_MEMORY, UDG7F404.12
& NUMBER_OF_DATA_WORDS_ON_DISK, UDG7F404.13
& DISK_ADDRESS) UDG7F404.14
UDG7F404.15
C-------------------------------------------------------------- GRIB_UM1.347
C Read in data, decode, initialise LOOKUP(42) & write out data GRIB_UM1.348
C-------------------------------------------------------------- GRIB_UM1.349
GRIB_UM1.350
write(6,*) 'ECMWF soil levels' UDG3F405.267
do l=1,4 UDG3F405.268
write(6,*) l,ecmwf_soil_levels(l) UDG3F405.269
end do UDG3F405.270
DO N=1,LEN2_LOOKUP AD110293.209
GRIB_UM1.358
CALL SETPOS8(
NFTIN,GRIB_RECORD_START_ADDRESS(INDEX_POS(N))) AD110293.210
CALL BUFFIN8(
NFTIN,CHAR3,GRIB_RECORD_LENGTH(INDEX_POS(N)) AD110293.211
x ,LEN_IO,A) AD110293.212
GRIB_UM1.365
C Decode grib headers UDG3F400.159
LEN_FP=ROW_LENGTH*P_ROWS UDG3F400.160
JLEN=LEN_IO UDG3F400.161
CALL DECODE
(FPDATA,FPWORK,LEN_FP,NUM_FP, UDG3F400.162
! VERT_COORDS,LEN_VERT,NUM_VERT, UDG3F400.163
! BITMAP,LEN_BITMAP,NUM_BITMAP, UDG3F400.164
! QUASI,LEN_Q,NUM_Q,WIDTH,WORD_SIZE, UDG3F400.165
! BLOCK0,BLOCK1,BLOCK2,BLOCK3,BLOCK4, UDG3F400.166
! BLOCKR,ICHAR3,JLEN,POSN,WORD,OFF,ERROR, UDG3F404.23
! WORK_INT1,WORK_INT2,WORK_RE1,IERR_UNIT,MSGLVL) UDG3F404.24
GRIB_UM1.375
C-------------------------------------------------------------- GRIB_UM1.376
C Initialise ITEM CODE in LOOKUP for each field GRIB_UM1.377
C-------------------------------------------------------------- GRIB_UM1.378
GRIB_UM1.379
GRIB_UM1.380
C ITEM CODE GRIB_UM1.381
LL=0 GRIB_UM1.382
DO L=1,N_CODES GRIB_UM1.383
IF(BLOCK1(5).EQ.GRIB_CODE(L))LL=L UDG3F400.169
ENDDO GRIB_UM1.385
IF(LL.EQ.0)THEN GRIB_UM1.386
WRITE(6,'(''*ERROR* GRIB CODE NOT RECOGNISED'',I6)')BLOCK1(5) UDG3F400.170
ENDIF GRIB_UM1.389
LOOKUP(ITEM_CODE,N)=ITEM_C(LL) GRIB_UM1.390
IF(.NOT.LSKINTEMP.AND.BLOCK1(5).EQ.139)THEN UDG3F405.271
LOOKUP(ITEM_CODE,N)=24 UDG3F405.272
LSKINTEMP=.TRUE. UDG3F405.273
END IF UDG3F405.274
GRIB_UM1.391
GRIB_UM1.392
C-------------------------------------------------------------- GRIB_UM1.393
C Write out each field GRIB_UM1.394
C-------------------------------------------------------------- GRIB_UM1.395
GRIB_UM1.396
IF(LOOKUP(ITEM_CODE,N).EQ.30)THEN GRIB_UM1.397
C Land-sea mask as logical GRIB_UM1.398
LOOKUP(DATA_TYPE,N)=3 GRIB_UM1.399
LOOKUP(LBPACK,N)=0 AD110293.215
DO L=1,LOOKUP(LBLREC,N) GRIB_UM1.400
LAND_SEA(L)=.TRUE. GRIB_UM1.401
IF(FPDATA(L).EQ.0.)LAND_SEA(L)=.FALSE. GRIB_UM1.402
ENDDO GRIB_UM1.403
CALL WRITFLDS
(NFTOUT,1,N,LOOKUP,LEN1_LOOKUP, GDG0F401.660
& LAND_SEA,LOOKUP(LBLREC,N),FIXHD, GDG0F401.661
*CALL ARGPPX
GDG0F401.662
& ICODE,CMESSAGE) GDG0F401.663
ELSEIF(LOOKUP(ITEM_CODE,N).EQ.1)THEN UDG3F405.297
!Surface pressure UDG3F405.298
IF(.NOT.LPSTAR)THEN UDG3F405.299
! Log(PSTAR). Convert to PSTAR UDG3F405.300
DO I=1, LOOKUP(LBLREC,N) UDG3F405.301
PSTAR(I)=EXP(FPDATA(I)) UDG3F405.302
END DO UDG3F405.303
CALL WRITFLDS
(NFTOUT,1,N,LOOKUP,LEN1_LOOKUP, UDG3F405.304
& PSTAR,LOOKUP(LBLREC,N),FIXHD, UDG3F405.305
*CALL ARGPPX
UDG3F405.306
& ICODE,CMESSAGE) UDG3F405.307
ELSE UDG3F405.308
CALL WRITFLDS
(NFTOUT,1,N,LOOKUP,LEN1_LOOKUP, UDG3F405.309
& FPDATA,LOOKUP(LBLREC,N),FIXHD, UDG3F405.310
*CALL ARGPPX
UDG3F405.311
& ICODE,CMESSAGE) UDG3F405.312
END IF UDG3F405.313
ELSE GRIB_UM1.406
C Other fields are type real GRIB_UM1.407
CALL WRITFLDS
(NFTOUT,1,N,LOOKUP,LEN1_LOOKUP, GDG0F401.664
& FPDATA,LOOKUP(LBLREC,N),FIXHD, GDG0F401.665
*CALL ARGPPX
GDG0F401.666
& ICODE,CMESSAGE) GDG0F401.667
ENDIF GRIB_UM1.410
IF(ICODE.NE.0)CALL ABORT_IO('GRIB_UM',CMESSAGE,ICODE,NFTOUT) GRIB_UM1.411
GRIB_UM1.412
ENDDO GRIB_UM1.413
GRIB_UM1.414
C--------------------------------------------------------------- GRIB_UM1.415
C Analyse characteristics of output dump GRIB_UM1.416
C--------------------------------------------------------------- GRIB_UM1.417
GRIB_UM1.418
F_TYPE_TITLE='Decoded GRIB fields' UDG3F400.171
CALL F_TYPE
(LOOKUP,LEN2_LOOKUP,PP_NUM,N_TYPES, UDG3F400.172
& PP_LEN,PP_ITEMC,PP_TYPE,PP_POS,PP_LS,FIXHD, UDG3F400.173
*CALL ARGPPX
UDG3F400.174
& F_TYPE_TITLE) UDG3F400.175
C--------------------------------------------------------------- GRIB_UM1.423
C Convert relative humidity to specific humidity and T to TH GRIB_UM1.424
C--------------------------------------------------------------- GRIB_UM1.425
GRIB_UM1.426
IF(LPSTAR)THEN UDG3F405.275
C Pstar UDG3F405.276
CALL LOCATE
(1,PP_ITEMC,N_TYPES,POSP) UDG3F405.277
IF (POSP.EQ.0) THEN UDG3F405.278
write(6,*)' ERROR in SUBROUTINE GRIB_UM' UDG3F405.279
write(6,*)' P STAR is not in grib file' UDG3F405.280
CALL ABORT
UDG3F405.281
ENDIF UDG3F405.282
ELSE UDG3F405.283
C Log pstar UDG3F405.284
CALL LOCATE
(1,PP_ITEMC,N_TYPES,POSP) UDG3F405.285
IF (POSP.EQ.0) THEN UDG3F405.286
write(6,*)' ERROR in SUBROUTINE GRIB_UM' UDG3F405.287
write(6,*)' LOG P STAR is not in grib file' UDG3F405.288
CALL ABORT
UDG3F405.289
ENDIF UDG3F405.290
ENDIF UDG3F405.291
DR101293.11
C R.H. (pressure levs) or Q (hybrid levs) AD110293.218
CALL LOCATE
(10,PP_ITEMC,N_TYPES,POSQ) GRIB_UM1.428
IF (POSQ.EQ.0) THEN DR101293.12
write(6,*)' ERROR in SUBROUTINE GRIB_UM' DR101293.13
write(6,*)' RH or Q is not in grib file' DR101293.14
CALL ABORT
DR101293.15
ENDIF DR101293.16
DR101293.17
C T GRIB_UM1.429
CALL LOCATE
(4,PP_ITEMC,N_TYPES,POST) GRIB_UM1.430
IF (POST.EQ.0) THEN DR101293.18
write(6,*)' ERROR in SUBROUTINE GRIB_UM' DR101293.19
write(6,*)' Temperature is not in grib file' DR101293.20
CALL ABORT
DR101293.21
ENDIF DR101293.22
DR101293.23
C PHI STAR GRIB_UM1.431
CALL LOCATE
(33,PP_ITEMC,N_TYPES,POSO) GRIB_UM1.432
IF (POSO.EQ.0) THEN UDG3F405.292
write(6,*)' ERROR in SUBROUTINE GRIB_UM' UDG3F405.293
write(6,*)' PHISTAR is not in grib file' UDG3F405.294
CALL ABORT
UDG3F405.295
ENDIF UDG3F405.296
GRIB_UM1.433
P_FIELD=ROW_LENGTH*P_ROWS GRIB_UM1.434
AD110293.219
C Read in Pstar AD110293.220
AD110293.221
CALL READFLDS
(NFTOUT,1,PP_POS(POSP),LOOKUP,LEN1_LOOKUP, GDG0F401.668
& PSTAR,P_FIELD,FIXHD, GDG0F401.669
*CALL ARGPPX
GDG0F401.670
& ICODE,CMESSAGE) GDG0F401.671
IF(ICODE.NE.0)CALL ABORT_IO('GRIB_UM',CMESSAGE,ICODE,NFTOUT) AD110293.224
GRIB_UM1.435
DO K=1,P_LEVELS GRIB_UM1.436
GRIB_UM1.437
C Read in T and convert to TH GRIB_UM1.438
GRIB_UM1.439
CALL READFLDS
(NFTOUT,1,PP_POS(POST)+K-1,LOOKUP,LEN1_LOOKUP, UDG8F404.3
& T,P_FIELD,FIXHD, GDG0F401.673
*CALL ARGPPX
GDG0F401.674
& ICODE,CMESSAGE) GDG0F401.675
IF(ICODE.NE.0)CALL ABORT_IO('GRIB_UM',CMESSAGE,ICODE,NFTOUT) GRIB_UM1.442
GRIB_UM1.443
DO I=1,P_FIELD GRIB_UM1.444
P(I)=LEVDEPC(K)+PSTAR(I)*LEVDEPC(K+P_LEVELS) AD110293.225
TH(I)=T(I)*(PREF/P(I))**KAPPA GSS9F402.78
ENDDO GRIB_UM1.450
GRIB_UM1.451
C Write out TH GRIB_UM1.452
GRIB_UM1.453
CALL WRITFLDS
(NFTOUT,1,PP_POS(POST)+K-1,LOOKUP,LEN1_LOOKUP, GDG0F401.676
& TH,P_FIELD,FIXHD, GDG0F401.677
*CALL ARGPPX
GDG0F401.678
& ICODE,CMESSAGE) GDG0F401.679
IF(ICODE.NE.0)CALL ABORT_IO('GRIB_UM',CMESSAGE,ICODE,NFTOUT) GRIB_UM1.456
GRIB_UM1.457
GRIB_UM1.458
IF(.NOT.HYBRID)THEN AD110293.228
C Read in R.H. and convert to Q GRIB_UM1.459
GRIB_UM1.460
CALL READFLDS
(NFTOUT,1,PP_POS(POSQ)+K-1,LOOKUP,LEN1_LOOKUP, GDG0F401.680
& RH,P_FIELD,FIXHD, GDG0F401.681
*CALL ARGPPX
GDG0F401.682
& ICODE,CMESSAGE) GDG0F401.683
IF(ICODE.NE.0)CALL ABORT_IO('GRIB_UM',CMESSAGE,ICODE,NFTOUT) GRIB_UM1.463
GRIB_UM1.464
CALL QSAT
(SAT,T,P,P_FIELD) GRIB_UM1.468
DO I=1,P_FIELD GRIB_UM1.469
Q(I)=RH(I)*.01*SAT(I) GRIB_UM1.470
ENDDO GRIB_UM1.471
GRIB_UM1.472
C Write out Q GRIB_UM1.473
GRIB_UM1.474
CALL WRITFLDS
(NFTOUT,1,PP_POS(POSQ)+K-1,LOOKUP,LEN1_LOOKUP, GDG0F401.684
& Q,P_FIELD,FIXHD, GDG0F401.685
*CALL ARGPPX
GDG0F401.686
& ICODE,CMESSAGE) GDG0F401.687
IF(ICODE.NE.0)CALL ABORT_IO('GRIB_UM',CMESSAGE,ICODE,NFTOUT) GRIB_UM1.477
GRIB_UM1.478
ENDIF AD110293.229
AD110293.230
ENDDO GRIB_UM1.479
GRIB_UM1.480
C Read in surface geopotential and convert to orographic height GRIB_UM1.481
IF(POSO.NE.0)THEN GRIB_UM1.482
GRIB_UM1.483
CALL READFLDS
(NFTOUT,1,PP_POS(POSO),LOOKUP,LEN1_LOOKUP, GDG0F401.688
& T,P_FIELD,FIXHD, GDG0F401.689
*CALL ARGPPX
GDG0F401.690
& ICODE,CMESSAGE) GDG0F401.691
IF(ICODE.NE.0)CALL ABORT_IO('GRIB_UM',CMESSAGE,ICODE,NFTOUT) GRIB_UM1.486
GRIB_UM1.487
DO I=1,P_FIELD GRIB_UM1.488
T(I)=T(I)/G GRIB_UM1.489
ENDDO GRIB_UM1.490
GRIB_UM1.491
C Write out orography GRIB_UM1.492
GRIB_UM1.493
CALL WRITFLDS
(NFTOUT,1,PP_POS(POSO),LOOKUP,LEN1_LOOKUP, GDG0F401.692
& T,P_FIELD,FIXHD, GDG0F401.693
*CALL ARGPPX
GDG0F401.694
& ICODE,CMESSAGE) GDG0F401.695
IF(ICODE.NE.0)CALL ABORT_IO('GRIB_UM',CMESSAGE,ICODE,NFTOUT) GRIB_UM1.496
GRIB_UM1.497
ENDIF GRIB_UM1.522
GRIB_UM1.523
C-------------------------------------------------------------- UDG3F405.314
C Interpolate soil fields onto model levels UDG3F405.315
C-------------------------------------------------------------- UDG3F405.316
IF(ST_LEVELS.NE.0)THEN UDG3F405.317
! Interpolate Soil Temperature Fields UDG3F405.318
CALL SOIL_INTERP
(NFTOUT,20,N_TYPES,P_FIELD,FIXHD, UDG3F405.319
& LEN1_LOOKUP,LEN2_LOOKUP,LOOKUP, UDG3F405.320
& ECMWF_SOIL_LEVELS,ECMWF_SOIL_DEPTHS, UDG3F405.321
& LEVDEPC(1+5*P_LEVELS), UDG3F405.322
& N_SOIL_LEVELS,PP_ITEMC,PP_POS, UDG3F405.323
*CALL ARGPPX
UDG3F405.324
& ICODE,CMESSAGE) UDG3F405.325
END IF UDG3F405.326
IF(SM_LEVELS.NE.0)THEN UDG3F405.327
! Interpolate Soil Moisture Fields UDG3F405.328
CALL SOIL_INTERP
(NFTOUT,9,N_TYPES,P_FIELD,FIXHD, UDG3F405.329
& LEN1_LOOKUP,LEN2_LOOKUP,LOOKUP, UDG3F405.330
& ECMWF_SOIL_LEVELS,ECMWF_SOIL_DEPTHS, UDG3F405.331
& LEVDEPC(1+5*P_LEVELS), UDG3F405.332
& N_SOIL_LEVELS,PP_ITEMC,PP_POS, UDG3F405.333
*CALL ARGPPX
UDG3F405.334
& ICODE,CMESSAGE) UDG3F405.335
END IF UDG3F405.336
UDG3F405.337
C-------------------------------------------------------------- GRIB_UM1.524
C Process extra fields GRIB_UM1.525
C-------------------------------------------------------------- GRIB_UM1.526
GRIB_UM1.527
C Read in Tstar and determine sea ice points GRIB_UM1.528
CALL LOCATE
(24,PP_ITEMC,N_TYPES,POST) GRIB_UM1.529
IF (POST.EQ.0) THEN DR101293.24
write(6,*)' ERROR in SUBROUTINE GRIB_UM' DR101293.25
write(6,*)' T STAR is not in grib file' DR101293.26
CALL ABORT
DR101293.27
ENDIF DR101293.28
DR101293.29
CALL READFLDS
(NFTOUT,1,PP_POS(POST),LOOKUP,LEN1_LOOKUP, GDG0F401.700
& T,P_FIELD,FIXHD, GDG0F401.701
*CALL ARGPPX
GDG0F401.702
& ICODE,CMESSAGE) GDG0F401.703
IF(ICODE.NE.0)CALL ABORT_IO('GRIB_UM',CMESSAGE,ICODE,NFTOUT) GRIB_UM1.532
DO I=1,P_FIELD GRIB_UM1.533
SEA_ICE(I)=.FALSE. GRIB_UM1.534
IF(T(I).LE.TFS.AND..NOT.LAND_SEA(I))SEA_ICE(I)=.TRUE. GRIB_UM1.535
ENDDO GRIB_UM1.536
GRIB_UM1.537
C Sea ice fraction GRIB_UM1.538
LOOKUP(ITEM_CODE,LEN2_LOOKUP+1)=31 GRIB_UM1.539
GRIB_UM1.540
DO I=1,P_FIELD GRIB_UM1.541
T(I)=0. GRIB_UM1.542
IF(SEA_ICE(I))T(I)=1. GRIB_UM1.543
ENDDO GRIB_UM1.544
GRIB_UM1.545
CALL WRITFLDS
(NFTOUT,1,LEN2_LOOKUP+1,LOOKUP,LEN1_LOOKUP, GDG0F401.704
& T,P_FIELD,FIXHD, GDG0F401.705
*CALL ARGPPX
GDG0F401.706
& ICODE,CMESSAGE) GDG0F401.707
IF(ICODE.NE.0)CALL ABORT_IO('GRIB_UM',CMESSAGE,ICODE,NFTOUT) GRIB_UM1.548
GRIB_UM1.549
C B.L. Depth GRIB_UM1.550
LOOKUP(ITEM_CODE,LEN2_LOOKUP+2)=25 GRIB_UM1.551
GRIB_UM1.552
DO I=1,P_FIELD GRIB_UM1.553
T(I)=1000. GRIB_UM1.554
ENDDO GRIB_UM1.555
GRIB_UM1.556
CALL WRITFLDS
(NFTOUT,1,LEN2_LOOKUP+2,LOOKUP,LEN1_LOOKUP, GDG0F401.708
& T,P_FIELD,FIXHD, GDG0F401.709
*CALL ARGPPX
GDG0F401.710
& ICODE,CMESSAGE) GDG0F401.711
IF(ICODE.NE.0)CALL ABORT_IO('GRIB_UM',CMESSAGE,ICODE,NFTOUT) GRIB_UM1.559
GRIB_UM1.560
C Convective cloud condensed water path GRIB_UM1.561
LOOKUP(ITEM_CODE,LEN2_LOOKUP+3)=16 GRIB_UM1.562
GRIB_UM1.563
DO I=1,P_FIELD GRIB_UM1.564
T(I)=1. GRIB_UM1.565
ENDDO GRIB_UM1.566
GRIB_UM1.567
CALL WRITFLDS
(NFTOUT,1,LEN2_LOOKUP+3,LOOKUP,LEN1_LOOKUP, GDG0F401.712
& T,P_FIELD,FIXHD, GDG0F401.713
*CALL ARGPPX
GDG0F401.714
& ICODE,CMESSAGE) GDG0F401.715
IF(ICODE.NE.0)CALL ABORT_IO('GRIB_UM',CMESSAGE,ICODE,NFTOUT) GRIB_UM1.570
GRIB_UM1.571
C Ice Depth GRIB_UM1.572
LOOKUP(ITEM_CODE,LEN2_LOOKUP+4)=32 GRIB_UM1.573
GRIB_UM1.574
DO I=1,P_FIELD/2 GRIB_UM1.575
T(I)=0. GRIB_UM1.576
IF(SEA_ICE(I))T(I)=2. GRIB_UM1.577
ENDDO GRIB_UM1.578
DO I=P_FIELD/2+1,P_FIELD GRIB_UM1.579
T(I)=0. GRIB_UM1.580
IF(SEA_ICE(I))T(I)=1. GRIB_UM1.581
ENDDO GRIB_UM1.582
GRIB_UM1.583
CALL WRITFLDS
(NFTOUT,1,LEN2_LOOKUP+4,LOOKUP,LEN1_LOOKUP, GDG0F401.716
& T,P_FIELD,FIXHD, GDG0F401.717
*CALL ARGPPX
GDG0F401.718
& ICODE,CMESSAGE) GDG0F401.719
IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTOUT) GRIB_UM1.586
GRIB_UM1.587
GRIB_UM1.588
C-------------------------------------------------------------- GRIB_UM1.589
C Write out header GRIB_UM1.590
C-------------------------------------------------------------- GRIB_UM1.591
CALL SETPOS
(NFTOUT,0,ICODE) GTD0F400.83
GRIB_UM1.593
CALL WRITHEAD
(NFTOUT,FIXHD,LEN_FIXHD, GDG0F401.720
& INTHD,LEN_INTHD, GDG0F401.721
& REALHD,LEN_REALHD, GDG0F401.722
& LEVDEPC,P_LEVELS,LEN2_LEVDEPC, GDG0F401.723
& ROWDEPC,ROW_LENGTH,LEN2_ROWDEPC, GDG0F401.724
& DUMMY,DUMMY,DUMMY, GDG0F401.725
& DUMMY,DUMMY,DUMMY, GDG0F401.726
& DUMMY,DUMMY, GDG0F401.727
& T,LEN_DUMPH, GDG0F401.728
& DUMMY,DUMMY, GDG0F401.729
& DUMMY,DUMMY, GDG0F401.730
& DUMMY,DUMMY, GDG0F401.731
& LOOKUP,LEN1_LOOKUP,LEN2_LOOKUP+N_E_FIELDS, UDG3F405.338
& (LEN2_LOOKUP+N_E_FIELDS)*ROW_LENGTH*P_ROWS, UDG3F405.339
*CALL ARGPPX
GDG0F401.734
& START_BLOCK,ICODE,CMESSAGE) GDG0F401.735
GRIB_UM1.609
IF(ICODE.NE.0)CALL ABORT_IO('GRIB_UM',CMESSAGE,ICODE,NFTOUT) GRIB_UM1.610
GRIB_UM1.611
CALL SETPOS
(NFTOUT,0,ICODE) GTD0F400.84
GRIB_UM1.613
RETURN GRIB_UM1.614
END GRIB_UM1.615
GRIB_UM1.616
*ENDIF GRIB_UM1.617