*IF DEF,RECON RDVARFL1.2
C *****************************COPYRIGHT****************************** RDVARFL1.3
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved. RDVARFL1.4
C RDVARFL1.5
C Use, duplication or disclosure of this code is subject to the RDVARFL1.6
C restrictions as set forth in the contract. RDVARFL1.7
C RDVARFL1.8
C Meteorological Office RDVARFL1.9
C London Road RDVARFL1.10
C BRACKNELL RDVARFL1.11
C Berkshire UK RDVARFL1.12
C RG12 2SZ RDVARFL1.13
C RDVARFL1.14
C If no contract has been raised with this copy of the code, the use, RDVARFL1.15
C duplication or disclosure of it is strictly prohibited. Permission RDVARFL1.16
C to do so must first be obtained in writing from the Head of Numerical RDVARFL1.17
C Modelling at the above address. RDVARFL1.18
C ******************************COPYRIGHT****************************** RDVARFL1.19
!+ RDVARFL1.20
! RDVARFL1.21
! Subroutine Interface: RDVARFL1.22
SUBROUTINE RDVARFLD(NFTIN,LEN_FIXHD_IN,FIXHD_IN, 1,9RDVARFL1.23
& LEN1_LOOKUP_IN,LEN2_LOOKUP_IN,LOOKUP_IN, RDVARFL1.24
& PP_ITEMC_IN,PP_LEN_IN,N_TYPES_IN,PP_NUM_IN,PP_POS_IN, RDVARFL1.25
& P_FIELD_IN,P_LEVELS_IN,N_FIELDS_IN,PP_ITEMC_OUT,PP_LEN_OUT, RDVARFL1.26
& POS,D1_IN,OCEAN,RadialGridIn,RadialGridOut, RDVARFL1.27
*CALL ARGPPX
RDVARFL1.28
& ICODE,CMESSAGE) RDVARFL1.29
IMPLICIT NONE RDVARFL1.30
RDVARFL1.31
! RDVARFL1.32
! Description: RDVARFL1.33
! Routine which enables RDVARFL1.34
! fields stored on UM B grid u, v, thetaL and qT positions to be RDVARFL1.35
! written out onto VAR LS grid u, v ,theta and q positions. RDVARFL1.36
! In subroutine CONTROL u and v (stashes 2 and 3) are written to space RDVARFL1.37
! reserved for stashcodes 253, and 254 which define u, v on a C grid RDVARFL1.38
! and thetaL and qT (stashes 5, 11) are written out to space reserved RDVARFL1.39
! for theta and q (stashes 4, 10). RDVARFL1.40
! Alternatively, RDVARFL1.41
! Routine which enables fields stored on RDVARFL1.42
! VAR LS grid u, v ,theta and q positions to be written out to B grid RDVARFL1.43
! u, v, thetaL and qT positions. RDVARFL1.44
! RDVARFL1.45
! Method: RDVARFL1.46
! RDVARFL1.47
! Current Code Owner: I Edmond RDVARFL1.48
! RDVARFL1.49
! History: RDVARFL1.50
! Version Date Comment RDVARFL1.51
! ------- ---- ------- RDVARFL1.52
! 4.4 15/6/96 Original code. Ian Edmond RDVARFL1.53
! Code Description: RDVARFL1.54
! Language: FORTRAN 77 + common extensions. RDVARFL1.55
! This code is written to UMDP3 v6 programming standards. RDVARFL1.56
! RDVARFL1.57
! System component covered: <appropriate code> RDVARFL1.58
! System Task: <appropriate code> RDVARFL1.59
! RDVARFL1.60
! Declarations: RDVARFL1.61
! These are of the form:- RDVARFL1.62
! INTEGER ExampleVariable !Description of variable RDVARFL1.63
! RDVARFL1.64
! 1.0 Global variables (*CALLed COMDECKs etc...): RDVARFL1.65
*CALL RCPARAM
RDVARFL1.66
*CALL CSUBMODL
RDVARFL1.67
*CALL CPPXREF
RDVARFL1.68
*CALL PPXLOOK
RDVARFL1.69
RDVARFL1.70
! Subroutine arguments RDVARFL1.71
! Scalar arguments with intent(in): RDVARFL1.72
INTEGER RDVARFL1.73
& NFTIN RDVARFL1.74
&,LEN_FIXHD_IN RDVARFL1.75
&,LEN1_LOOKUP_IN RDVARFL1.76
&,LEN2_LOOKUP_IN RDVARFL1.77
&,N_TYPES_IN RDVARFL1.78
&,PP_LEN_OUT RDVARFL1.79
&,PP_ITEMC_OUT RDVARFL1.80
&,P_LEVELS_IN RDVARFL1.81
&,P_FIELD_IN RDVARFL1.82
RDVARFL1.83
LOGICAL RDVARFL1.84
& OCEAN RDVARFL1.85
&,RadialGridIn RDVARFL1.86
&,RadialGridOut RDVARFL1.87
RDVARFL1.88
! Array arguments with intent(in): RDVARFL1.89
INTEGER RDVARFL1.90
& FIXHD_IN(LEN_FIXHD_IN) RDVARFL1.91
&,LOOKUP_IN(LEN1_LOOKUP_IN,LEN2_LOOKUP_IN) RDVARFL1.92
RDVARFL1.93
INTEGER RDVARFL1.94
& PP_NUM_IN(LEN2_LOOKUP_IN) RDVARFL1.95
&,PP_LEN_IN(LEN2_LOOKUP_IN) RDVARFL1.96
&,PP_POS_IN(LEN2_LOOKUP_IN) RDVARFL1.97
&,PP_ITEMC_IN(LEN2_LOOKUP_IN) RDVARFL1.98
RDVARFL1.99
! Scalar arguments with intent(Out): RDVARFL1.100
INTEGER RDVARFL1.101
& POS RDVARFL1.102
&,N_FIELDS_IN RDVARFL1.103
RDVARFL1.104
! Array arguments with intent(Out): RDVARFL1.105
REAL RDVARFL1.106
& D1_IN(P_FIELD_IN*P_LEVELS_IN+P_FIELD_IN) RDVARFL1.107
RDVARFL1.108
! Local scalars: RDVARFL1.109
INTEGER RDVARFL1.110
& POS2 RDVARFL1.111
&,POS3 RDVARFL1.112
&,ICODE RDVARFL1.113
RDVARFL1.114
CHARACTER*80 CMESSAGE RDVARFL1.115
!- End of header RDVARFL1.116
RDVARFL1.117
If (.NOT.RadialGridIn.AND.RadialGridOut) then RDVARFL1.118
! For interpolations from UM grid onto VAR LS grid. RDVARFL1.119
RDVARFL1.120
IF ( PP_ITEMC_OUT.EQ.stashcode_ND_u) THEN RDVARFL1.121
! If PP_ITEMC_OUT contains stash code 253 (u on C grid) and RDVARFL1.122
! SOURCE=9 (set in ITEMS namelist) then read data from field RDVARFL1.123
! defining u on B grid (stashcode 2). RDVARFL1.124
RDVARFL1.125
CALL FIND
(stashcode_OD_u, RDVARFL1.126
& PP_ITEMC_IN, RDVARFL1.127
& PP_LEN_OUT, RDVARFL1.128
& PP_LEN_IN, RDVARFL1.129
& N_TYPES_IN, RDVARFL1.130
& OCEAN,POS2) RDVARFL1.131
POS=POS2 RDVARFL1.132
RDVARFL1.133
ELSE IF ( PP_ITEMC_OUT.EQ.stashcode_ND_v) THEN RDVARFL1.134
! If PP_ITEMC_OUT contains stash code 254 (v on C grid) and RDVARFL1.135
! SOURCE=9 (set in ITEMS namelist) then read data from field RDVARFL1.136
! defining v on B grid (stashcode 3). RDVARFL1.137
RDVARFL1.138
CALL FIND
(stashcode_OD_v, RDVARFL1.139
& PP_ITEMC_IN, RDVARFL1.140
& PP_LEN_OUT, RDVARFL1.141
& PP_LEN_IN, RDVARFL1.142
& N_TYPES_IN, RDVARFL1.143
& OCEAN,POS3) RDVARFL1.144
POS=POS3 RDVARFL1.145
RDVARFL1.146
END IF RDVARFL1.147
RDVARFL1.148
IF ( PP_ITEMC_OUT.EQ.stashcode_OD_theta) THEN RDVARFL1.149
! If PP_ITEMC_OUT contains stash code 4 (theta) and SOURCE=9 RDVARFL1.150
! (set in ITEMS namelist) then read data from thetaL field RDVARFL1.151
RDVARFL1.152
CALL FIND
(stashcode_OD_thetaL, RDVARFL1.153
& PP_ITEMC_IN, RDVARFL1.154
& PP_LEN_OUT, RDVARFL1.155
& PP_LEN_IN, RDVARFL1.156
& N_TYPES_IN, RDVARFL1.157
& OCEAN,POS2) RDVARFL1.158
POS=POS2 RDVARFL1.159
RDVARFL1.160
ELSE IF ( PP_ITEMC_OUT.EQ.stashcode_OD_q) THEN RDVARFL1.161
! If PP_ITEMC_OUT contains stash code 10 (q) and SOURCE=9 RDVARFL1.162
! (set in ITEMS namelist) then read data from qT field. RDVARFL1.163
RDVARFL1.164
CALL FIND
(stashcode_OD_qT, RDVARFL1.165
& PP_ITEMC_IN, RDVARFL1.166
& PP_LEN_OUT, RDVARFL1.167
& PP_LEN_IN, RDVARFL1.168
& N_TYPES_IN, RDVARFL1.169
& OCEAN,POS3) RDVARFL1.170
POS=POS3 RDVARFL1.171
RDVARFL1.172
END IF RDVARFL1.173
RDVARFL1.174
Else if (.NOT.RadialGridOut.AND.RadialGridIn) then RDVARFL1.175
! For interpolations from VAR PF grid onto UM grid. RDVARFL1.176
RDVARFL1.177
RDVARFL1.178
IF ( PP_ITEMC_OUT.EQ.stashcode_OD_u) THEN RDVARFL1.179
! If PP_ITEMC_OUT contains stash code 2 (u on B grid) and RDVARFL1.180
! SOURCE=9 (set in ITEMS namelist) then read data from field RDVARFL1.181
! defining u on C grid (stashcode 253). RDVARFL1.182
RDVARFL1.183
CALL FIND
(stashcode_ND_u, RDVARFL1.184
& PP_ITEMC_IN, RDVARFL1.185
& PP_LEN_OUT, RDVARFL1.186
& PP_LEN_IN, RDVARFL1.187
& N_TYPES_IN, RDVARFL1.188
& OCEAN,POS2) RDVARFL1.189
POS=POS2 RDVARFL1.190
RDVARFL1.191
ELSE IF ( PP_ITEMC_OUT.EQ.stashcode_OD_v) THEN RDVARFL1.192
! If PP_ITEMC_OUT contains stash code 3 (v on B grid) and RDVARFL1.193
! SOURCE=9 (set in ITEMS namelist) then read data from field RDVARFL1.194
! defining v on C grid (stashcode 254). RDVARFL1.195
RDVARFL1.196
CALL FIND
(stashcode_ND_v, RDVARFL1.197
& PP_ITEMC_IN, RDVARFL1.198
& PP_LEN_OUT, RDVARFL1.199
& PP_LEN_IN, RDVARFL1.200
& N_TYPES_IN, RDVARFL1.201
& OCEAN,POS3) RDVARFL1.202
POS=POS3 RDVARFL1.203
RDVARFL1.204
END IF RDVARFL1.205
RDVARFL1.206
IF ( PP_ITEMC_OUT.EQ.stashcode_OD_thetaL) THEN RDVARFL1.207
! If PP_ITEMC_OUT contains stash code 5 (thetaL) and SOURCE=9 RDVARFL1.208
! (set in ITEMS namelist) then read data from theta field. RDVARFL1.209
RDVARFL1.210
CALL FIND
(stashcode_OD_theta, RDVARFL1.211
& PP_ITEMC_IN, RDVARFL1.212
& PP_LEN_OUT, RDVARFL1.213
& PP_LEN_IN, RDVARFL1.214
& N_TYPES_IN, RDVARFL1.215
& OCEAN,POS2) RDVARFL1.216
POS=POS2 RDVARFL1.217
RDVARFL1.218
ELSE IF ( PP_ITEMC_OUT.EQ.stashcode_OD_qT) THEN RDVARFL1.219
! If PP_ITEMC_OUT contains stash code 11 (qT) and SOURCE=9 RDVARFL1.220
! (set in ITEMS namelist) then read data from q field. RDVARFL1.221
RDVARFL1.222
CALL FIND
(stashcode_OD_q, RDVARFL1.223
& PP_ITEMC_IN, RDVARFL1.224
& PP_LEN_OUT, RDVARFL1.225
& PP_LEN_IN, RDVARFL1.226
& N_TYPES_IN, RDVARFL1.227
& OCEAN,POS3) RDVARFL1.228
POS=POS3 RDVARFL1.229
RDVARFL1.230
END IF RDVARFL1.231
RDVARFL1.232
End if RDVARFL1.233
RDVARFL1.234
! Set the number of levels to be read in from dump. RDVARFL1.235
IF (POS.EQ.0) THEN RDVARFL1.236
N_FIELDS_IN=0 RDVARFL1.237
ELSE RDVARFL1.238
N_FIELDS_IN=PP_NUM_IN(POS) RDVARFL1.239
ENDIF RDVARFL1.240
RDVARFL1.241
! Read u,v,thetaL or qT data from B grid or VAR variables RDVARFL1.242
! u,v,theta or q on C grid. RDVARFL1.243
RDVARFL1.244
CALL READFLDS
(NFTIN,N_FIELDS_IN,PP_POS_IN(POS),LOOKUP_IN, RDVARFL1.245
& LEN1_LOOKUP_IN,D1_IN,P_FIELD_IN,FIXHD_IN, RDVARFL1.246
*CALL ARGPPX
RDVARFL1.247
& ICODE,CMESSAGE) RDVARFL1.248
RDVARFL1.249
RETURN RDVARFL1.250
END RDVARFL1.251
*ENDIF RDVARFL1.252