*IF DEF,RECON UDG4F304.196
C ******************************COPYRIGHT****************************** GTS2F400.415
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.416
C GTS2F400.417
C Use, duplication or disclosure of this code is subject to the GTS2F400.418
C restrictions as set forth in the contract. GTS2F400.419
C GTS2F400.420
C Meteorological Office GTS2F400.421
C London Road GTS2F400.422
C BRACKNELL GTS2F400.423
C Berkshire UK GTS2F400.424
C RG12 2SZ GTS2F400.425
C GTS2F400.426
C If no contract has been raised with this copy of the code, the use, GTS2F400.427
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.428
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.429
C Modelling at the above address. GTS2F400.430
C ******************************COPYRIGHT****************************** GTS2F400.431
C GTS2F400.432
CLL SUBROUTINE AUX_FILE---------------------------------------- AUX_FIL1.2
CLL AUX_FIL1.3
CLL Purpose: AD221292.118
CLL Reads in auxillary data and incorporates into AD221292.119
CLL model dump. Three modes are supported AD221292.120
CLL 1) Copy everything ITEM_CODE < 0 AD221292.121
CLL 2) Copy specified item code ITEM_CODE > 0 AD221292.122
CLL 3) Copy sub fields specified on namelist TRANS AD221292.123
CLL (transplant mode) ITEM_CODE = 0 AD221292.124
CLL AUX_FIL1.6
CLL Written by A. Dickinson AUX_FIL1.7
CLL AUX_FIL1.8
CLL Model Modification history from model version 3.0: AUX_FIL1.9
CLL version Date AUX_FIL1.10
CLL AD221292.125
CLL 3.1 22/12/92 Changes to allow use for transplatation AD221292.126
CLL Author A. Dickinson Reviewer C. Wilson AD221292.127
CLL 3.3 08/12/93 Extra argument for READFLDS and WRITFLDS. DR081293.17
CLL Author D. Robinson Reviewer M. Bell DR081293.18
CLL 3.4 19/07/94 Extra code to initialise user defined prognostics. UDG4F304.197
CLL Date/time checking is bypass and for single level UDG4F304.198
CLL fields level checking as well. All this is dependent UDG4F304.199
CLL on a logical flag L_USER_PROG which is set in UDG4F304.200
CLL CONTROL1. UDG4F304.201
CLL Author D.M.Goddard UDG4F304.202
! 4.0 11/10/95 Pass in STASH lookup arrays as argument for use UDG7F400.1
! in call to F_TYPE UDG7F400.2
! Author D.M. Goddard UDG7F400.3
! 4.1 18/06/96 Changes to cope with changes in STASH addressing GDG0F401.52
! Author D.M. Goddard. GDG0F401.53
! 4.4 11/07/97 Corect polar rows if non constant. UDG0F404.26
! Author D.M. Goddard UDG0F404.27
! vn4.4 1.9 9/4/97 Code added to allow 10m u and v ancilliary UIE2F404.50
! files to be included in output dump. IEdmond UIE2F404.51
! 4.5 05/10/98 Correct bug introduced at vn4.1 UDG1F405.1531
! Author D.M. Goddard UDG1F405.1532
CLL AUX_FIL1.11
CLL Programming standard: AUX_FIL1.12
CLL AUX_FIL1.13
CLL Logical component number: S1 AUX_FIL1.14
CLL AUX_FIL1.15
CLL Project task: AUX_FIL1.16
CLL AUX_FIL1.17
CLL Documentation: UM Doc Paper S1 AD221292.128
CLL------------------------------------------------------------ AUX_FIL1.19
C*L Arguments:------------------------------------------------- AUX_FIL1.20
AUX_FIL1.21
SUBROUTINE AUX_FILE(NFTAUX,NFTOUT,LEN_FIXHD_OUT, 4,32UDG7F400.4
& LEN_INTHD_AUX,LEN_REALHD_AUX, UDG7F400.5
& LEN1_LEVDEPC_AUX,LEN2_LEVDEPC_AUX, UDG7F400.6
& LEN1_LOOKUP_OUT,LEN2_LOOKUP_AUX, UDG7F400.7
& LEN_DATA_AUX,FIXHD_OUT,INTHD_OUT, UDG7F400.8
& LEVDEPC_OUT,P_LEVELS_OUT,LEN1_LEVDEPC_OUT, UDG7F400.9
& N_TYPES_OUT,P_FIELD_OUT,LOOKUP_OUT, UDG7F400.10
& PP_POS_OUT,PP_ITEMC_OUT,ITEM_CODE, UDG7F400.11
& ROW_LENGTH_IN,P_ROWS_IN, UDG0F404.28
& ROW_LENGTH_OUT,P_ROWS_OUT,LPOLARCHK, UDG0F404.29
*CALL ARGPPX
UDG7F400.12
& UP_ITEM_CODE,L_USER_PROG) UDG7F400.13
AUX_FIL1.28
IMPLICIT NONE AUX_FIL1.29
AUX_FIL1.30
INTEGER AUX_FIL1.31
& NFTAUX !IN Unit no of auxillary file AUX_FIL1.32
&,NFTOUT !IN Unit no of model output file AUX_FIL1.33
&,LEN_FIXHD_OUT !IN Length of fixed length header AUX_FIL1.34
&,LEN_INTHD_AUX !IN Length of auxillary integer header AUX_FIL1.35
&,LEN_REALHD_AUX !IN Length of auxillary real header AUX_FIL1.36
&,LEN1_LEVDEPC_OUT !IN 1st dim of output level dep consts AUX_FIL1.37
&,LEN1_LEVDEPC_AUX !IN 1st dim of auxillary level dep consts AUX_FIL1.38
&,LEN2_LEVDEPC_AUX !IN 2nd dim of auxillary level dep consts AUX_FIL1.39
&,LEN1_LOOKUP_OUT !IN 1st dim of output (& aux) lookup table AUX_FIL1.40
&,LEN2_LOOKUP_AUX !IN 2nd dim of auxillary loolup table AUX_FIL1.41
&,LEN_DATA_AUX !IN Length of auxillary data AUX_FIL1.42
&,P_LEVELS_OUT !IN No of model levels AUX_FIL1.43
&,N_TYPES_OUT !IN No of different item codes in out file AUX_FIL1.44
&,P_FIELD_OUT !IN Length of output field AUX_FIL1.45
&,ITEM_CODE !IN Item code of data required from aux file AUX_FIL1.46
! All data required if ITEM_CODE < 0 AUX_FIL1.47
! Transplant if ITEM_CODE=0 AD221292.129
&,ROW_LENGTH_IN !IN No of points E-W (input) UDG0F404.30
&,ROW_LENGTH_OUT !IN No of points E-W (output) UDG0F404.31
&,P_ROWS_IN !IN No of P-points N-S (input) UDG0F404.32
&,P_ROWS_OUT !IN No of P-points N-S (output) UDG0F404.33
&,UP_ITEM_CODE !IN Item code of user prognostic field UDG0F404.34
AUX_FIL1.48
INTEGER AUX_FIL1.49
& INTHD_OUT(*) !IN Integer header - model output file AUX_FIL1.50
&,FIXHD_OUT(*) !IN Fixed length header - model output file AUX_FIL1.51
&,LOOKUP_OUT(*) !IN Lookup - model output file AUX_FIL1.52
&,PP_POS_OUT(*) !IN Pointer to pos of each group of fields AUX_FIL1.53
&,PP_ITEMC_OUT(*) !IN Item codes on outtput file AUX_FIL1.54
AUX_FIL1.55
REAL AUX_FIL1.56
& LEVDEPC_OUT(*) !IN Level dep consts - model output file AUX_FIL1.57
AUX_FIL1.58
LOGICAL UDG4F304.206
& L_USER_PROG !IN Data time not necesarily the same for user UDG4F304.207
C prognostic ancillary files, also consistancy UDG4F304.208
C is needed at all levels. UDG4F304.209
&,LPOLARCHK !IN True if polar rows to be averaged UDG0F404.35
! after horizontal interpolation UDG0F404.36
AUX_FIL1.59
C Local arrays:--------------------------------------------------------- AUX_FIL1.60
INTEGER AUX_FIL1.61
& INTHD_AUX(LEN_INTHD_AUX) !Aux integer header AUX_FIL1.62
&,FIXHD_AUX(LEN_FIXHD_OUT) !Aux fixed length header AUX_FIL1.63
&,LOOKUP_AUX(LEN1_LOOKUP_OUT,LEN2_LOOKUP_AUX) !Aux lookup AUX_FIL1.64
&,PP_LEN_AUX(LEN2_LOOKUP_AUX) !Length ^ AUX_FIL1.65
&,PP_NUM_AUX(LEN2_LOOKUP_AUX) !No of fields^ For each AUX_FIL1.66
&,PP_POS_AUX(LEN2_LOOKUP_AUX) !Position ^ field type AUX_FIL1.67
&,PP_TYPE_AUX(LEN2_LOOKUP_AUX) !Real,int,log^ on AUX file AUX_FIL1.68
&,PP_ITEMC_AUX(LEN2_LOOKUP_AUX) !Item code ^ AUX_FIL1.69
&,PP_LS_AUX(LEN2_LOOKUP_AUX) !Land or sea AUX_FIL1.70
AUX_FIL1.71
REAL AUX_FIL1.72
& D1_IN(P_FIELD_OUT) !Data array (used in transplant) AD221292.130
&,D1_OUT(P_FIELD_OUT) !Data array AD221292.131
&,REALHD_AUX(LEN_REALHD_AUX) !Aux real header AUX_FIL1.74
&,LEVDEPC_AUX(LEN1_LEVDEPC_AUX*LEN2_LEVDEPC_AUX) ! Aux level dep co AUX_FIL1.75
AUX_FIL1.76
*CALL C_MDI
AD221292.132
*CALL CSUBMODL
UDG7F400.14
*CALL CPPXREF
UDG7F400.15
*CALL PPXLOOK
UDG7F400.17
C External subroutines called:------------------------------------------ AUX_FIL1.77
EXTERNAL SETPOS,READHEAD,ABORT_IO,ABORT,LOCATE,READFLDS AUX_FIL1.78
&,WRITFLDS,F_TYPE AUX_FIL1.79
*IF DEF,TIMER AUX_FIL1.80
&,TIMER AUX_FIL1.81
*ENDIF AUX_FIL1.82
C*---------------------------------------------------------------------- AUX_FIL1.83
C*L Local variables:--------------------------------------------------- AUX_FIL1.84
AUX_FIL1.85
REAL RP_ROW_SUM ! Sum of polar row values UDG0F404.37
INTEGER AUX_FIL1.86
& START_BLOCK AUX_FIL1.87
&,ICODE !Return code; successful=0; error >0 AUX_FIL1.88
&,DUMMY AUX_FIL1.89
&,POS_AUX,POS_OUT AUX_FIL1.90
&,K,IJ,J,I !Indices AUX_FIL1.91
&,M,N,NN !Indices AD221292.133
&,N_TYPES_AUX AUX_FIL1.92
&,N_FIELDS_AUX AUX_FIL1.93
AUX_FIL1.94
CHARACTER*80 F_TYPE_TITLE UDG7F400.18
CHARACTER*100 AUX_FIL1.95
& CMESSAGE !Error message if ICODE > 0 AUX_FIL1.96
AUX_FIL1.97
INTEGER AD221292.134
& ITEMC !Item code ^ AD221292.135
&,LEV1,LEV2 !Level range ^ Transplant data AD221292.136
&,COL1,COL2 !Column range ^ AD221292.137
&,ROW1,ROW2 !Row range ^ AD221292.138
UDG4F304.210
LOGICAL UDG4F304.211
& LFOUND ! TRUE if requested user prognostic found in UDG4F304.212
C ancillary file. UDG4F304.213
AUX_FIL1.98
NAMELIST /TRANSP/ ITEMC,LEV1,LEV2,COL1,COL2,ROW1,ROW2 AD221292.139
AUX_FIL1.99
DUMMY=0 AD221292.140
AD221292.141
LFOUND=.FALSE. UDG4F304.214
IF(.NOT.L_USER_PROG)THEN UDG4F304.215
WRITE(6,'(//,'' READING IN AUX FIELDS'')') AUX_FIL1.100
WRITE(6,'( '' ----------------------'')') AUX_FIL1.101
ENDIF UDG4F304.216
AUX_FIL1.102
CALL SETPOS
(NFTAUX,0,ICODE) GTD0F400.42
AUX_FIL1.104
CALL READHEAD
(NFTAUX,FIXHD_AUX,LEN_FIXHD_OUT, AUX_FIL1.105
& INTHD_AUX,LEN_INTHD_AUX, AUX_FIL1.106
& REALHD_AUX,LEN_REALHD_AUX, AUX_FIL1.107
& LEVDEPC_AUX,LEN1_LEVDEPC_AUX,LEN2_LEVDEPC_AUX, AUX_FIL1.108
& DUMMY,DUMMY,DUMMY, AUX_FIL1.109
& DUMMY,DUMMY,DUMMY, AUX_FIL1.110
& DUMMY,DUMMY,DUMMY, AUX_FIL1.111
& DUMMY,DUMMY, AUX_FIL1.112
& DUMMY,DUMMY, AUX_FIL1.113
& DUMMY,DUMMY, AUX_FIL1.114
& DUMMY,DUMMY, AUX_FIL1.115
& DUMMY,DUMMY, AUX_FIL1.116
& LOOKUP_AUX,LEN1_LOOKUP_OUT,LEN2_LOOKUP_AUX, AUX_FIL1.117
& LEN_DATA_AUX, AUX_FIL1.118
*CALL ARGPPX
GDG0F401.54
& START_BLOCK,ICODE,CMESSAGE) AUX_FIL1.119
AUX_FIL1.120
IF(ICODE.NE.0)CALL ABORT_IO('AUXFILE',CMESSAGE,ICODE,NFTAUX) AUX_FIL1.121
AUX_FIL1.122
C Check data time of AUX file is same as output file AUX_FIL1.123
AUX_FIL1.124
IF(ITEM_CODE.NE.0.AND..NOT.L_USER_PROG)THEN UDG4F304.217
DO K=1,6 AUX_FIL1.125
IF(FIXHD_AUX(K+20).NE.FIXHD_OUT(K+27))THEN AUX_FIL1.126
WRITE(6,'('' *ERROR* Data time of AUX data does not match'', AUX_FIL1.127
* '' verification time of dump'',/,'' AUX'',6I6,/'' Dump'',6I6)') AUX_FIL1.128
* (FIXHD_AUX(I),I=21,26),(FIXHD_OUT(I),I=28,33) AUX_FIL1.129
CALL ABORT
AUX_FIL1.130
ENDIF AUX_FIL1.131
ENDDO AUX_FIL1.132
ENDIF AD221292.143
AUX_FIL1.133
C Check resolution of AUX file is same as output resolution AUX_FIL1.134
AUX_FIL1.135
IF(INTHD_AUX(6).NE.INTHD_OUT(6).OR. AUX_FIL1.136
*INTHD_AUX(7).NE.INTHD_OUT(7))THEN AUX_FIL1.137
! Prevent code from exiting if comparison of dimensions of 10m UIE2F404.52
! u, v component of wind in the INTEGER header of AUX file and UIE2F404.53
! output dump shows that the ancilliary data has one less row. UIE2F404.54
IF(INTHD_AUX(6).EQ.INTHD_OUT(6).AND. UIE2F404.55
*INTHD_AUX(7)+1.EQ.INTHD_OUT(7))THEN UIE2F404.56
UIE2F404.57
WRITE(6,'('' *Warning* Assuming u or v component of wind as '', UIE2F404.58
* '' Dimensions of AUX file and output dump'', UIE2F404.59
* '' do not match, INTHD(7)='',2I5)') UIE2F404.60
* INTHD_AUX(7),INTHD_OUT(7) UIE2F404.61
UIE2F404.62
ELSE UIE2F404.63
WRITE(6,'('' *ERROR* Dimensions of AUX file and output dump'', AUX_FIL1.138
* '' do not match, INTHD(6)='',2I5,'' INTHD(7)='',2I5)') AUX_FIL1.139
* INTHD_AUX(6),INTHD_OUT(6) AUX_FIL1.140
* ,INTHD_AUX(7),INTHD_OUT(7) AUX_FIL1.141
CALL ABORT
AUX_FIL1.142
ENDIF UIE2F404.64
ENDIF AUX_FIL1.143
AUX_FIL1.144
C Check levels of AUX file are same as top levels in output file AUX_FIL1.145
AUX_FIL1.146
IF(LEN1_LEVDEPC_AUX.LE.0)THEN UDG4F304.218
J=LEN1_LEVDEPC_AUX+1 AUX_FIL1.147
DO K=P_LEVELS_OUT,P_LEVELS_OUT-LEN1_LEVDEPC_AUX+1,-1 AUX_FIL1.148
J=J-1 AUX_FIL1.149
IF(LEVDEPC_AUX(J).LT.LEVDEPC_OUT(K)-0.001*LEVDEPC_OUT(K) AUX_FIL1.150
* .OR.LEVDEPC_AUX(J).GT.LEVDEPC_OUT(K)+0.001*LEVDEPC_OUT(K))THEN AUX_FIL1.151
WRITE(6,'('' LEVEL'',I5)')K AUX_FIL1.152
WRITE(6,'('' AUX AKS'',5E12.5)') AUX_FIL1.153
* (LEVDEPC_AUX(I),I=1,LEN1_LEVDEPC_AUX) AUX_FIL1.154
WRITE(6,'('' OUT AKS'',5E12.5)') AUX_FIL1.155
* (LEVDEPC_OUT(I),I=1,LEN1_LEVDEPC_OUT) AUX_FIL1.156
CALL ABORT
AUX_FIL1.157
ENDIF AUX_FIL1.158
ENDDO AUX_FIL1.159
AUX_FIL1.160
IJ=2*LEN1_LEVDEPC_AUX+1 AUX_FIL1.161
DO K=P_LEVELS_OUT,P_LEVELS_OUT-LEN1_LEVDEPC_AUX+1,-1 AUX_FIL1.162
J=K+LEN1_LEVDEPC_OUT AUX_FIL1.163
IJ=IJ-1 AUX_FIL1.164
IF(ABS(LEVDEPC_AUX(IJ)-LEVDEPC_OUT(J)).GT.0.0001 AUX_FIL1.165
* .OR.ABS(LEVDEPC_AUX(IJ)-LEVDEPC_OUT(J)).GT.0.0001) AUX_FIL1.166
* THEN AUX_FIL1.167
WRITE(6,'('' LEVEL'',I5)')K AUX_FIL1.168
WRITE(6,'('' AUX BKS'',5E12.5)') AUX_FIL1.169
* (LEVDEPC_AUX(I+LEN1_LEVDEPC_AUX),I=1,LEN1_LEVDEPC_AUX) AUX_FIL1.170
WRITE(6,'('' OUT BKS'',5E12.5)') AUX_FIL1.171
* (LEVDEPC_OUT(I+LEN1_LEVDEPC_OUT),I=1,LEN1_LEVDEPC_OUT) AUX_FIL1.172
CALL ABORT
AUX_FIL1.173
ENDIF AUX_FIL1.174
ENDDO AUX_FIL1.175
AUX_FIL1.176
ENDIF UDG4F304.219
F_TYPE_TITLE='AUX data' UDG7F400.19
CALL F_TYPE
(LOOKUP_AUX,LEN2_LOOKUP_AUX,PP_NUM_AUX, UDG7F400.20
& N_TYPES_AUX,PP_LEN_AUX,PP_ITEMC_AUX,PP_TYPE_AUX, UDG7F400.21
& PP_POS_AUX,PP_LS_AUX,FIXHD_AUX, UDG7F400.22
*CALL ARGPPX
UDG7F400.23
& F_TYPE_TITLE) UDG7F400.24
AUX_FIL1.180
CL Transplant of fields controlled by namelist TRANS AD221292.144
AD221292.145
IF(ITEM_CODE.EQ.0)THEN AD221292.146
REWIND(5) CW300493.1
AD221292.147
DO J=1,10000 AD221292.148
AD221292.149
READ(5,TRANSP,ERR=100,END=100) UDG0F404.38
WRITE(6,TRANSP) AD221292.151
IF(LEV1.EQ.0.OR.LEV2.EQ.0.OR.ROW1.EQ.0.OR.ROW2.EQ.0.OR. UDG0F404.39
& COL1.EQ.0.OR.COL2.EQ.0)THEN UDG0F404.40
WRITE(6,*) 'ERROR : Reconfiguration CONTROL' UDG0F404.41
WRITE(6,*) 'Namelist TRANSP has entries set to zero' UDG0F404.42
WRITE(6,*) 'LEV1 = ',LEV1,' LEV2 = ',LEV2 UDG0F404.43
WRITE(6,*) 'ROW1 = ',ROW1,' ROW2 = ',ROW2 UDG0F404.44
WRITE(6,*) 'COL1 = ',COL1,' COL2 = ',COL2 UDG0F404.45
WRITE(6,*) 'Please correct transplant data panel in the ', UDG0F404.46
& 'UMUI and reprocess' UDG0F404.47
CALL ABORT
UDG0F404.48
END IF UDG0F404.49
AD221292.152
CALL LOCATE
(ITEMC,PP_ITEMC_AUX,N_TYPES_AUX,POS_AUX) AD221292.153
CALL LOCATE
(ITEMC,PP_ITEMC_OUT,N_TYPES_OUT,POS_OUT) AD221292.154
AD221292.155
DO I=LEV1,LEV2 AD221292.156
AD221292.157
*IF DEF,TIMER AD221292.158
CALL TIMER
('READFLDS',3) AD221292.159
*ENDIF AD221292.160
AD221292.161
CALL READFLDS
(NFTAUX,1,PP_POS_AUX(POS_AUX)+I-1,LOOKUP_AUX, GDG0F401.55
& LEN1_LOOKUP_OUT,D1_IN ,P_FIELD_OUT,FIXHD_AUX, GDG0F401.56
*CALL ARGPPX
GDG0F401.57
& ICODE,CMESSAGE) GDG0F401.58
IF(ICODE.EQ.1501)THEN UDG0F404.75
IF(LPOLARCHK)THEN UDG0F404.76
write(6,*) 'Averaging polar rows to make them constant' UDG0F404.77
! North polar row UDG0F404.78
RP_ROW_SUM=0.0 UDG0F404.79
DO K=1,ROW_LENGTH_IN UDG0F404.80
RP_ROW_SUM=RP_ROW_SUM+D1_IN(K) UDG0F404.81
END DO UDG0F404.82
DO K=1,ROW_LENGTH_IN UDG0F404.83
D1_IN(K)=RP_ROW_SUM/ROW_LENGTH_IN UDG0F404.84
END DO UDG0F404.85
! South polar row UDG0F404.86
RP_ROW_SUM=0.0 UDG0F404.87
DO K=1,ROW_LENGTH_IN UDG0F404.88
RP_ROW_SUM= UDG0F404.89
& RP_ROW_SUM+D1_IN((P_ROWS_IN-1)*ROW_LENGTH_IN+K) UDG0F404.90
END DO UDG0F404.91
DO K=1,ROW_LENGTH_OUT UDG0F404.92
D1_IN((P_ROWS_IN)*ROW_LENGTH_IN+K)= UDG0F404.93
& RP_ROW_SUM/ROW_LENGTH_IN UDG0F404.94
END DO UDG0F404.95
END IF UDG0F404.96
ELSE IF(ICODE.NE.0)THEN UDG0F404.97
CALL ABORT_IO
('AUXFILE',CMESSAGE,ICODE,NFTAUX) UDG0F404.98
END IF UDG0F404.99
AD221292.166
CALL READFLDS
(NFTOUT,1,PP_POS_OUT(POS_OUT)+I-1,LOOKUP_OUT, UDG1F405.1533
& LEN1_LOOKUP_OUT,D1_OUT ,P_FIELD_OUT,FIXHD_OUT, GDG0F401.60
*CALL ARGPPX
GDG0F401.61
& ICODE,CMESSAGE) GDG0F401.62
IF(ICODE.EQ.1501)THEN UDG0F404.100
IF(LPOLARCHK)THEN UDG0F404.101
write(6,*) 'Averaging polar rows to make them constant' UDG0F404.102
! North polar row UDG0F404.103
RP_ROW_SUM=0.0 UDG0F404.104
DO K=1,ROW_LENGTH_OUT UDG0F404.105
RP_ROW_SUM=RP_ROW_SUM+D1_OUT(K) UDG0F404.106
END DO UDG0F404.107
DO K=1,ROW_LENGTH_OUT UDG0F404.108
D1_OUT(K)=RP_ROW_SUM/ROW_LENGTH_OUT UDG0F404.109
END DO UDG0F404.110
! South polar row UDG0F404.111
RP_ROW_SUM=0.0 UDG0F404.112
DO K=1,ROW_LENGTH_OUT UDG0F404.113
RP_ROW_SUM= UDG0F404.114
& RP_ROW_SUM+D1_OUT((P_ROWS_OUT-1)*ROW_LENGTH_OUT+K) UDG0F404.115
END DO UDG0F404.116
DO K=1,ROW_LENGTH_OUT UDG0F404.117
D1_OUT((P_ROWS_OUT-1)*ROW_LENGTH_OUT+K)= UDG0F404.118
& RP_ROW_SUM/ROW_LENGTH_OUT UDG0F404.119
END DO UDG0F404.120
END IF UDG0F404.121
ELSE IF(ICODE.NE.0)THEN UDG0F404.122
CALL ABORT_IO
('AUXFILE',CMESSAGE,ICODE,NFTOUT) UDG0F404.123
END IF UDG0F404.124
AD221292.171
*IF DEF,TIMER AD221292.172
CALL TIMER
('READFLDS',4) AD221292.173
*ENDIF AD221292.174
AD221292.175
DO M=ROW1,ROW2 AD221292.176
DO N=COL1,COL2 AD221292.177
NN=(M-1)*INTHD_OUT(6)+N AD221292.178
D1_OUT(NN)=D1_IN(NN) AD221292.179
ENDDO AD221292.180
ENDDO AD221292.181
AD221292.182
*IF DEF,TIMER AD221292.183
CALL TIMER
('WRITFLDS',3) AD221292.184
*ENDIF AD221292.185
AD221292.186
CALL WRITFLDS
(NFTOUT,1,PP_POS_OUT(POS_OUT)+I-1,LOOKUP_OUT, GDG0F401.63
& LEN1_LOOKUP_OUT,D1_OUT,P_FIELD_OUT,FIXHD_OUT, GDG0F401.64
*CALL ARGPPX
GDG0F401.65
& ICODE,CMESSAGE) GDG0F401.66
IF(ICODE.NE.0)CALL ABORT_IO('AUX_FILE',CMESSAGE,ICODE,NFTOUT) AD221292.190
AD221292.191
*IF DEF,TIMER AD221292.192
CALL TIMER
('WRITFLDS',4) AD221292.193
*ENDIF AD221292.194
ENDDO AD221292.195
AD221292.196
ENDDO AD221292.197
AD221292.198
ELSE AD221292.199
AD221292.200
DO J=1,N_TYPES_AUX AUX_FIL1.181
AUX_FIL1.182
IF(PP_ITEMC_AUX(J).EQ.ITEM_CODE.OR.ITEM_CODE.LT.0)THEN AUX_FIL1.183
AUX_FIL1.184
CALL LOCATE
(PP_ITEMC_AUX(J),PP_ITEMC_AUX,N_TYPES_AUX,POS_AUX) AUX_FIL1.185
IF(L_USER_PROG)THEN UDG4F304.220
CALL LOCATE
(UP_ITEM_CODE,PP_ITEMC_OUT,N_TYPES_OUT,POS_OUT) UDG4F304.221
LFOUND=.TRUE. UDG4F304.222
ELSE UDG4F304.223
CALL LOCATE
(PP_ITEMC_AUX(J),PP_ITEMC_OUT,N_TYPES_OUT,POS_OUT) UDG4F304.224
ENDIF UDG4F304.225
N_FIELDS_AUX=PP_NUM_AUX(POS_AUX) AUX_FIL1.187
AUX_FIL1.188
DO I=1,N_FIELDS_AUX AUX_FIL1.189
AUX_FIL1.190
*IF DEF,TIMER AUX_FIL1.191
CALL TIMER
('READFLDS',3) AUX_FIL1.192
*ENDIF AUX_FIL1.193
AUX_FIL1.194
CALL READFLDS
(NFTAUX,1,PP_POS_AUX(POS_AUX)+I-1,LOOKUP_AUX, GDG0F401.67
& LEN1_LOOKUP_OUT,D1_OUT,P_FIELD_OUT,FIXHD_AUX, GDG0F401.68
*CALL ARGPPX
GDG0F401.69
& ICODE,CMESSAGE) GDG0F401.70
IF(ICODE.EQ.1501)THEN UDG0F404.50
IF(LPOLARCHK)THEN UDG0F404.51
write(6,*) 'Averaging polar rows to make them constant' UDG0F404.52
! North polar row UDG0F404.53
RP_ROW_SUM=0.0 UDG0F404.54
DO K=1,ROW_LENGTH_OUT UDG0F404.55
RP_ROW_SUM=RP_ROW_SUM+D1_OUT(K) UDG0F404.56
END DO UDG0F404.57
DO K=1,ROW_LENGTH_OUT UDG0F404.58
D1_OUT(K)=RP_ROW_SUM/ROW_LENGTH_OUT UDG0F404.59
END DO UDG0F404.60
! South polar row UDG0F404.61
RP_ROW_SUM=0.0 UDG0F404.62
DO K=1,ROW_LENGTH_OUT UDG0F404.63
RP_ROW_SUM= UDG0F404.64
& RP_ROW_SUM+D1_OUT((P_ROWS_OUT-1)*ROW_LENGTH_OUT+K) UDG0F404.65
END DO UDG0F404.66
DO K=1,ROW_LENGTH_OUT UDG0F404.67
D1_OUT((P_ROWS_OUT-1)*ROW_LENGTH_OUT+K)= UDG0F404.68
& RP_ROW_SUM/ROW_LENGTH_OUT UDG0F404.69
END DO UDG0F404.70
END IF UDG0F404.71
ELSE IF(ICODE.NE.0)THEN UDG0F404.72
CALL ABORT_IO
('AUXFILE',CMESSAGE,ICODE,NFTAUX) UDG0F404.73
END IF UDG0F404.74
AUX_FIL1.199
*IF DEF,TIMER AUX_FIL1.200
CALL TIMER
('READFLDS',4) AUX_FIL1.201
*ENDIF AUX_FIL1.202
AUX_FIL1.203
*IF DEF,TIMER AUX_FIL1.204
CALL TIMER
('WRITFLDS',3) AUX_FIL1.205
*ENDIF AUX_FIL1.206
AUX_FIL1.207
IF(L_USER_PROG)THEN UDG4F304.226
IF(LEN1_LEVDEPC_AUX.LE.0)THEN UDG4F304.227
C Single level user prognostic field UDG4F304.228
CALL WRITFLDS
(NFTOUT,1,PP_POS_OUT(POS_OUT),LOOKUP_OUT, GDG0F401.71
& LEN1_LOOKUP_OUT,D1_OUT,P_FIELD_OUT,FIXHD_OUT, GDG0F401.72
*CALL ARGPPX
GDG0F401.73
& ICODE,CMESSAGE) GDG0F401.74
IF(ICODE.NE.0)CALL ABORT_IO('AUX_FILE',CMESSAGE,ICODE,NFTAUX) UDG4F304.231
ELSE UDG4F304.232
C Multi level user prognostic field UDG4F304.233
CALL WRITFLDS
(NFTOUT,1,PP_POS_OUT(POS_OUT)+I-1,LOOKUP_OUT, GDG0F401.75
& LEN1_LOOKUP_OUT,D1_OUT,P_FIELD_OUT,FIXHD_OUT, GDG0F401.76
*CALL ARGPPX
GDG0F401.77
& ICODE,CMESSAGE) GDG0F401.78
IF(ICODE.NE.0)CALL ABORT_IO('AUX_FILE',CMESSAGE,ICODE,NFTAUX) UDG4F304.236
ENDIF UDG4F304.237
ELSE UDG4F304.238
C Tracer or UARS auxillary file output top N_FIELDS_AUX only. UDG4F304.239
CALL WRITFLDS
(NFTOUT,1,PP_POS_OUT(POS_OUT)+P_LEVELS_OUT+I-1 GDG0F401.79
& -N_FIELDS_AUX,LOOKUP_OUT,LEN1_LOOKUP_OUT, GDG0F401.80
& D1_OUT,P_FIELD_OUT,FIXHD_OUT, GDG0F401.81
*CALL ARGPPX
GDG0F401.82
& ICODE,CMESSAGE) GDG0F401.83
ENDIF UDG4F304.241
IF(ICODE.NE.0)CALL ABORT_IO('AUX_FILE',CMESSAGE,ICODE,NFTOUT) AUX_FIL1.211
AUX_FIL1.212
*IF DEF,TIMER AUX_FIL1.213
CALL TIMER
('WRITFLDS',4) AUX_FIL1.214
*ENDIF AUX_FIL1.215
ENDDO AUX_FIL1.216
AUX_FIL1.217
ENDIF AUX_FIL1.218
AUX_FIL1.219
ENDDO AUX_FIL1.220
AUX_FIL1.221
ENDIF AD221292.201
AD221292.202
100 CONTINUE AD221292.203
IF(.NOT.LFOUND.AND.L_USER_PROG)THEN UDG4F304.242
WRITE(6, UDG4F304.243
&'('' Requested user prognostic not found in ancillary file'')') UDG4F304.244
WRITE(6,'(''Item code = '',I3)') ITEM_CODE UDG4F304.245
CALL ABORT
UDG4F304.246
ENDIF UDG4F304.247
AUX_FIL1.222
RETURN AUX_FIL1.223
END AUX_FIL1.224
*ENDIF UDG4F304.248