*IF DEF,A71_1A,AND,DEF,ATMOS GLW1F404.30
C ******************************COPYRIGHT****************************** GTS2F400.2989
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.2990
C GTS2F400.2991
C Use, duplication or disclosure of this code is subject to the GTS2F400.2992
C restrictions as set forth in the contract. GTS2F400.2993
C GTS2F400.2994
C Meteorological Office GTS2F400.2995
C London Road GTS2F400.2996
C BRACKNELL GTS2F400.2997
C Berkshire UK GTS2F400.2998
C RG12 2SZ GTS2F400.2999
C GTS2F400.3000
C If no contract has been raised with this copy of the code, the use, GTS2F400.3001
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.3002
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.3003
C Modelling at the above address. GTS2F400.3004
C ******************************COPYRIGHT****************************** GTS2F400.3005
C GTS2F400.3006
CLL SUBROUTINES FLDSTAT AND FLDDIAG --------------------------------- FLDSTAT1.3
CLL FLDSTAT1.4
CLL PURPOSE: FLDSTAT1.5
CLL CALCULATE VALUES OF increments of T,RH,U,V between timesteps FLDSTAT1.6
CLL FLDDIAG: FLDSTAT1.7
CLL PRINT VALUES OF max,min increments of T,RH,U,V between timesteps FLDSTAT1.8
CLL FLDSTAT1.9
CLL MODIFIED VERSION OF FLDDIAG FOR CRAY Y-MP BASED ON FLDSTAT1.10
CLL EARLIER ROUTINE BY S.BELL WRITTEN BY F. RAWLINS FLDSTAT1.11
CLL FLDSTAT1.12
CLL SUITABLE FOR ROTATED GRIDS FLDSTAT1.13
CLL FLDSTAT1.14
CLL RR / DR <- PROGRAMMER OF SOME OR ALL OF PREVIOUS CODE OR CHANGES FLDSTAT1.15
CLL FLDSTAT1.16
CLL MODEL MODIFICATION HISTORY FROM MODEL VERSION 3.0: FLDSTAT1.17
CLL VERSION DATE FLDSTAT1.18
CLL 4.2 8 Jan 97 Changes for MPP. Gather domains from each pe to ARR1F402.1
CLL provide full global fields on pe0 to be written ARR1F402.2
CLL and read from disk files (1 per pe). R.Rawlins ARR1F402.3
CLL 4.3 15 May 97 Correction to 4.2 change: V increments against V ARR0F403.40
CLL instead of U. Correct RH label. R.Rawlins ARR0F403.41
CLL 4.4 28 Aug 97 Change method of I/O from Fortran unformatted to ARR0F404.48
Cll C buffer streams with portable I/O, thus freeing ARR0F404.49
!LL 4.5 13/01/98 Replace reference to IOVARS comdeck to ATM_LSM GPB2F405.52
!LL P.Burton GPB2F405.53
CLL 4.5 25 Mar 98 Change formatting of printed diagnostics to cater ARR3F405.1
CLL for 10**7 points in horizontal field (from 10**5): ARR3F405.2
CLL needed for new op. resolution. Rick Rawlins ARR3F405.3
CLL FLDSTAT1.19
CLL PROGRAMMING STANDARD: UNIFIED MODEL DOCUMENTATION PAPER NO. 5, FLDSTAT1.20
CLL VERSION 4, DATED 31/05/90 FLDSTAT1.21
CLL FLDSTAT1.22
CLL SYSTEM TASK: increment diagnostics D67 FLDSTAT1.23
CLL FLDSTAT1.24
CLL DOCUMENTATION: None FLDSTAT1.25
CLL FLDSTAT1.26
CLLEND------------------------------------------------------------- FLDSTAT1.27
FLDSTAT1.28
SUBROUTINE FLDSTAT (NUP,NRP,ILENP,JLENP,LENTHP,LENUVP,KSTEP, 1,47FLDSTAT1.29
+ AK,BK,AKH,BKH,P_EXNER, FLDSTAT1.30
+ PSTAR,TH,Q,U,V, FLDSTAT1.31
& LTHETA,PRFLD_STEP,PRFLD_FIRST,PRFLD_LAST, ARR0F404.51
& NDEV_FLD,LEN_FLD_FILENAME,FLD_FILENAME) ARR0F404.52
C FLDSTAT1.33
C FLDSTAT GETS STATS FOR MEANS/MAX/MIN OF PROGNOSTIC VARIABLES FLDSTAT1.34
C PLUS STATS ON CHANGE SINCE LAST TIMESTEP FLDSTAT1.35
C IT CALLS FLDDIAG AND ALSO DOES I/O TO UNIT NDEV_FLD ARR0F404.53
C* FLDSTAT1.37
IMPLICIT NONE FLDSTAT1.38
FLDSTAT1.39
EXTERNAL FLDDIAG,QSAT FLDSTAT1.40
C FLDSTAT1.41
C*L ARGUMENTS:--------------------------------------------------- FLDSTAT1.42
FLDSTAT1.43
INTEGER FLDSTAT1.44
+ NUP, ! (IN) TOTAL NUMBER OF LEVELS FLDSTAT1.45
+ NRP, ! (IN) NUMBER OF WET LEVELS FLDSTAT1.46
+ ILENP, ! (IN) NUMBER OF POINTS ON ROW FLDSTAT1.47
+ JLENP, ! (IN) NUMBER OF ROWS FLDSTAT1.48
+ LENTHP, ! (IN) NUMBER OF POINTS IN MASS FIELD FLDSTAT1.49
+ LENUVP, ! (IN) NUMBER OF POINTS IN WIND FIELD FLDSTAT1.50
+ KSTEP, ! (IN) CURRENT MODEL TIMESTEP FLDSTAT1.51
+ PRFLD_STEP, ! (IN) STEP INTERVAL FOR PRINTING FLDSTAT1.52
+ PRFLD_FIRST, ! (IN) FIRST STEP FOR PRINTING FLDSTAT1.53
& PRFLD_LAST, ! (IN) LAST STEP FOR PRINTING ARR0F404.54
& NDEV_FLD, ! (IN) OUTPUT DEVICE NUMBER ARR0F404.55
& LEN_FLD_FILENAME ! (IN) Filename length of NDEV_FLD ARR0F404.56
ARR0F404.57
CHARACTER*80 FLD_FILENAME ! (IN) Filename of NDEV_FLD file ARR0F404.58
ARR0F404.59
LOGICAL FLDSTAT1.55
+ LTHETA ! (IN) THETA OR TEMPERATURE FLDSTAT1.56
REAL FLDSTAT1.57
+ AK(NUP),BK(NUP), ! (IN) HYBRID CO-ORDS - full levs FLDSTAT1.58
+ AKH(NUP+1),BKH(NUP+1), ! (IN) HYBRID CO-ORDS - 1/2 levs FLDSTAT1.59
+ P_EXNER(LENTHP,NUP+1), ! (IN) EXNER PRESSURE FLDSTAT1.60
+ PSTAR(LENTHP), ! (IN) PROG VARIABLE PSTAR FLDSTAT1.61
+ TH (LENTHP,NUP), ! (IN) THETA (LTHETA=.T. OR FLDSTAT1.62
C TEMPERATURE (LTHETA=.F.) FLDSTAT1.63
+ Q (LENTHP,NRP), ! (IN) PROG VARIABLE Q FLDSTAT1.64
+ U (LENUVP,NUP), ! (IN) PROG VARIABLE U FLDSTAT1.65
+ V (LENUVP,NUP) ! (IN) PROG VARIABLE V FLDSTAT1.66
FLDSTAT1.67
*CALL DECOMPTP
ARR1F402.4
*CALL PARVARS
ARR1F402.5
*CALL AMAXSIZE
ARR1F402.6
*CALL ATM_LSM
GPB2F405.54
*CALL CENVIR
ARR0F404.60
*CALL C_R_CP
ARR0F404.61
*CALL P_EXNERC
ARR0F404.62
ARR0F404.63
C*L WORKSPACE USAGE:------------------------------------------------- FLDSTAT1.68
C DYNAMIC SPACE FOR LAST TIMESTEP PROGNOSTIC VARIABLES FLDSTAT1.69
REAL WORKPTR(LENTHP),WORKUV(LENUVP), FLDSTAT1.70
+ P (LENTHP), ! WORKSPACE FOR PRESSURE FLDSTAT1.71
+ T (LENTHP,NUP), ! WORKSPACE FOR TEMPERATURE FLDSTAT1.72
+ RH (LENTHP,NRP) ! WORKSPACE FOR RELATIVE HUMIDITY FLDSTAT1.73
*IF DEF,MPP ARR1F402.8
REAL WORK_FULL(glsize(1)*glsize(2)) ARR1F402.9
& ,WORKPTR_FULL(glsize(1)*glsize(2)) ARR1F402.10
*ENDIF ARR1F402.11
INTEGER ARR1F402.12
& gather_pe ARR1F402.13
& ,info ! return code for MPP gather ARR1F402.14
ARR1F402.15
FLDSTAT1.74
INTEGER LEV, ! LEVEL COUNTER FLDSTAT1.75
& I, ! POINT COUNTER ARR0F404.64
& ICODE, ! ERROR RETURN CODE FROM I/O ARR0F404.65
& LEN_IO, ! I/O LENGTH RETURNED FROM I/O ARR0F404.66
& IPOS ! I/O POINTER ARR0F404.67
FLDSTAT1.78
REAL PLEV,PLEVP1 ! Pressures at half levels FLDSTAT1.79
! LEV and LEV+1 FLDSTAT1.80
REAL P_EXNER_FULL ! Exner pressure at full model FLDSTAT1.81
! levels. FLDSTAT1.82
REAL A_IO ! Error return from buffer i/o ARR0F404.68
FLDSTAT1.83
LOGICAL FIRST ! FIRST TIME THROUGH CODE? FLDSTAT1.84
DATA FIRST /.TRUE./ FLDSTAT1.85
SAVE FIRST ARR0F404.69
ARR1F402.16
gather_pe=0 ! only PE 0 for MPP gathering ARR1F402.17
FLDSTAT1.91
C ( THE LOGICAL DEVICE IS OPENED AT TOP LEVEL IN ROUTINE INITIAL) FLDSTAT1.92
ARR0F404.70
CL FLDSTAT1.94
CL GET TEMPERATURE OF EACH LEVEL FLDSTAT1.95
CL FLDSTAT1.96
DO LEV=1,NUP FLDSTAT1.97
IF(LTHETA) THEN FLDSTAT1.98
DO I=1,LENTHP FLDSTAT1.99
PLEVP1 = AKH(LEV+1) + BKH(LEV+1)*PSTAR(I) FLDSTAT1.100
PLEV = AKH(LEV) + BKH(LEV) *PSTAR(I) FLDSTAT1.101
P_EXNER_FULL = P_EXNER_C FLDSTAT1.102
+ (P_EXNER(I,LEV+1),P_EXNER(I,LEV),PLEVP1,PLEV,KAPPA) FLDSTAT1.103
T(I,LEV) = TH(I,LEV) * P_EXNER_FULL FLDSTAT1.104
ENDDO FLDSTAT1.105
ELSE FLDSTAT1.106
DO I=1,LENTHP FLDSTAT1.107
T(I,LEV)=TH(I,LEV) FLDSTAT1.108
ENDDO FLDSTAT1.109
ENDIF FLDSTAT1.110
ENDDO FLDSTAT1.111
CL FLDSTAT1.112
CL GET RELATIVE HUMIDITY FOR EACH LEVEL FLDSTAT1.113
CL FLDSTAT1.114
DO LEV=1,NRP FLDSTAT1.115
DO I=1,LENTHP FLDSTAT1.116
P(I)=AK(LEV) + BK(LEV)*PSTAR(I) FLDSTAT1.117
ENDDO FLDSTAT1.118
CALL QSAT
(WORKPTR,T(1,LEV),P,LENTHP) FLDSTAT1.119
DO I=1,LENTHP FLDSTAT1.120
RH(I,LEV)=Q(I,LEV)/WORKPTR(I)*100.0 FLDSTAT1.121
ENDDO FLDSTAT1.122
ENDDO FLDSTAT1.123
FLDSTAT1.124
IF(FIRST)THEN FLDSTAT1.125
FIRST=.FALSE. FLDSTAT1.126
WRITE(6,*) ' First call to FLDSTAT at step ',KSTEP
ARR0F404.71
ELSE FLDSTAT1.128
CL FLDSTAT1.129
CL READ PREVIOUS TIMESTEP AND CALL FLDDIAG TO GET STATS FLDSTAT1.130
CL FLDSTAT1.131
IF(MOD(KSTEP-PRFLD_FIRST,PRFLD_STEP).EQ.0) THEN FLDSTAT1.132
IPOS=0 ! Point to start of file ARR0F404.72
*IF DEF,MPP ARR1F402.18
CALL SETPOS_SINGLE
(NDEV_FLD,IPOS,ICODE) ARR0F404.73
CALL BUFFIN_SINGLE
(NDEV_FLD,WORKPTR,LENTHP,LEN_IO,A_IO) ARR0F404.74
ARR0F404.75
CALL GATHER_FIELD
(PSTAR,WORK_FULL, ARR1F402.19
& lasize(1),lasize(2),glsize(1),glsize(2), ARR1F402.20
& gather_pe,GC_ALL_PROC_GROUP,info) ARR1F402.21
IF(info.NE.0) THEN ! Check return code ARR1F402.22
write(6,*) 'FLDSTAT1: Error in GATHER_FIELD of PSTAR' ARR1F402.23
ENDIF ARR1F402.24
CALL GATHER_FIELD
(WORKPTR,WORKPTR_FULL, ARR1F402.25
& lasize(1),lasize(2),glsize(1),glsize(2), ARR1F402.26
& gather_pe,GC_ALL_PROC_GROUP,info) ARR1F402.27
IF(info.NE.0) THEN ! Check return code ARR1F402.28
write(6,*) 'FLDSTAT1: Error in GATHER_FIELD of PSTAR work' ARR1F402.29
ENDIF ARR1F402.30
ARR1F402.31
IF(mype.eq.gather_pe) THEN ARR1F402.32
CALL FLDDIAG
(WORK_FULL,WORKPTR_FULL,KSTEP, ARR1F402.33
& glsize(1)*glsize(2), 1,' PSTAR ') ARR1F402.34
ENDIF ! test on gather PE ARR1F402.35
*ELSE ARR1F402.36
CALL SETPOS
(NDEV_FLD,IPOS,ICODE) ARR0F404.76
CALL BUFFIN
(NDEV_FLD,WORKPTR,LENTHP,LEN_IO,A_IO) ARR0F404.77
CALL FLDDIAG
(PSTAR ,WORKPTR,KSTEP,LENTHP, 1,' PSTAR ') ARR1F402.37
*ENDIF ARR1F402.38
DO 10 LEV=1,NUP FLDSTAT1.136
*IF DEF,MPP ARR1F402.39
CALL BUFFIN_SINGLE
(NDEV_FLD,WORKPTR,LENTHP,LEN_IO,A_IO) ARR0F404.78
CALL GATHER_FIELD
(T(1,LEV),WORK_FULL, ARR1F402.40
& lasize(1),lasize(2),glsize(1),glsize(2), ARR1F402.41
& gather_pe,GC_ALL_PROC_GROUP,info) ARR1F402.42
IF(info.NE.0) THEN ! Check return code ARR1F402.43
write(6,*) 'FLDSTAT1: Error in GATHER_FIELD of T' ARR1F402.44
ENDIF ARR1F402.45
CALL GATHER_FIELD
(WORKPTR,WORKPTR_FULL, ARR1F402.46
& lasize(1),lasize(2),glsize(1),glsize(2), ARR1F402.47
& gather_pe,GC_ALL_PROC_GROUP,info) ARR1F402.48
IF(info.NE.0) THEN ! Check return code ARR1F402.49
write(6,*) 'FLDSTAT1: Error in GATHER_FIELD of T work' ARR1F402.50
ENDIF ARR1F402.51
ARR1F402.52
IF(mype.eq.gather_pe) THEN ARR1F402.53
CALL FLDDIAG
(WORK_FULL,WORKPTR_FULL,KSTEP, ARR1F402.54
& glsize(1)*glsize(2), LEV,' T ') ARR1F402.55
ENDIF ! test on gather PE ARR1F402.56
*ELSE ARR1F402.57
CALL BUFFIN
(NDEV_FLD,WORKPTR,LENTHP,LEN_IO,A_IO) ARR0F404.79
CALL FLDDIAG
(T(1,LEV),WORKPTR,KSTEP,LENTHP, LEV,' T ') ARR1F402.58
*ENDIF ARR1F402.59
10 CONTINUE FLDSTAT1.139
DO 11 LEV=1,NRP FLDSTAT1.140
*IF DEF,MPP ARR1F402.60
CALL BUFFIN_SINGLE
(NDEV_FLD,WORKPTR,LENTHP,LEN_IO,A_IO) ARR0F404.80
CALL GATHER_FIELD
(RH(1,LEV),WORK_FULL, ARR1F402.61
& lasize(1),lasize(2),glsize(1),glsize(2), ARR1F402.62
& gather_pe,GC_ALL_PROC_GROUP,info) ARR1F402.63
IF(info.NE.0) THEN ! Check return code ARR1F402.64
write(6,*) 'FLDSTAT1: Error in GATHER_FIELD of RH' ARR1F402.65
ENDIF ARR1F402.66
CALL GATHER_FIELD
(WORKPTR,WORKPTR_FULL, ARR1F402.67
& lasize(1),lasize(2),glsize(1),glsize(2), ARR1F402.68
& gather_pe,GC_ALL_PROC_GROUP,info) ARR1F402.69
IF(info.NE.0) THEN ! Check return code ARR1F402.70
write(6,*) 'FLDSTAT1: Error in GATHER_FIELD of RH work' ARR1F402.71
ENDIF ARR1F402.72
ARR1F402.73
IF(mype.eq.gather_pe) THEN ARR1F402.74
CALL FLDDIAG
(WORK_FULL,WORKPTR_FULL,KSTEP, ARR1F402.75
& glsize(1)*glsize(2), LEV,' RH ') ARR0F403.42
ENDIF ! test on gather PE ARR1F402.77
*ELSE ARR1F402.78
CALL BUFFIN
(NDEV_FLD,WORKPTR,LENTHP,LEN_IO,A_IO) ARR0F404.81
CALL FLDDIAG
(RH(1,LEV),WORKPTR,KSTEP,LENTHP, LEV,' RH ') ARR1F402.79
*ENDIF ARR1F402.80
11 CONTINUE FLDSTAT1.143
DO 12 LEV=1,NUP FLDSTAT1.144
*IF DEF,MPP ARR1F402.81
CALL BUFFIN_SINGLE
(NDEV_FLD,WORKUV,LENUVP,LEN_IO,A_IO) ARR0F404.82
CALL GATHER_FIELD
(U(1,LEV),WORK_FULL, ARR1F402.82
& lasize(1),lasize(2),glsize(1),glsize(2)-1, ARR1F402.83
& gather_pe,GC_ALL_PROC_GROUP,info) ARR1F402.84
IF(info.NE.0) THEN ! Check return code ARR1F402.85
write(6,*) 'FLDSTAT1: Error in GATHER_FIELD of U' ARR1F402.86
ENDIF ARR1F402.87
CALL GATHER_FIELD
(WORKUV ,WORKPTR_FULL, ARR1F402.88
& lasize(1),lasize(2),glsize(1),glsize(2)-1, ARR1F402.89
& gather_pe,GC_ALL_PROC_GROUP,info) ARR1F402.90
IF(info.NE.0) THEN ! Check return code ARR1F402.91
write(6,*) 'FLDSTAT1: Error in GATHER_FIELD of U work' ARR1F402.92
ENDIF ARR1F402.93
ARR1F402.94
IF(mype.eq.gather_pe) THEN ARR1F402.95
CALL FLDDIAG
(WORK_FULL,WORKPTR_FULL,KSTEP, ARR1F402.96
& glsize(1)*(glsize(2)-1), LEV,' U ') ARR1F402.97
ENDIF ! test on gather PE ARR1F402.98
*ELSE ARR1F402.99
CALL BUFFIN
(NDEV_FLD,WORKUV,LENUVP,LEN_IO,A_IO) ARR0F404.83
CALL FLDDIAG
(U(1,LEV),WORKUV ,KSTEP,LENUVP, LEV,' U ') ARR1F402.100
*ENDIF ARR1F402.101
12 CONTINUE FLDSTAT1.147
DO 13 LEV=1,NUP FLDSTAT1.148
*IF DEF,MPP ARR1F402.102
CALL BUFFIN_SINGLE
(NDEV_FLD,WORKUV,LENUVP,LEN_IO,A_IO) ARR0F404.84
CALL GATHER_FIELD
(V(1,LEV),WORK_FULL, ARR1F402.103
& lasize(1),lasize(2),glsize(1),glsize(2)-1, ARR1F402.104
& gather_pe,GC_ALL_PROC_GROUP,info) ARR1F402.105
IF(info.NE.0) THEN ! Check return code ARR1F402.106
write(6,*) 'FLDSTAT1: Error in GATHER_FIELD of V' ARR1F402.107
ENDIF ARR1F402.108
CALL GATHER_FIELD
(WORKUV ,WORKPTR_FULL, ARR1F402.109
& lasize(1),lasize(2),glsize(1),glsize(2)-1, ARR1F402.110
& gather_pe,GC_ALL_PROC_GROUP,info) ARR1F402.111
IF(info.NE.0) THEN ! Check return code ARR1F402.112
write(6,*) 'FLDSTAT1: Error in GATHER_FIELD of V work' ARR1F402.113
ENDIF ARR1F402.114
ARR1F402.115
IF(mype.eq.gather_pe) THEN ARR1F402.116
CALL FLDDIAG
(WORK_FULL,WORKPTR_FULL,KSTEP, ARR1F402.117
& glsize(1)*(glsize(2)-1), LEV,' V ') ARR1F402.118
ENDIF ! test on gather PE ARR1F402.119
*ELSE ARR1F402.120
CALL BUFFIN
(NDEV_FLD,WORKUV,LENUVP,LEN_IO,A_IO) ARR0F404.85
CALL FLDDIAG
(V(1,LEV),WORKUV ,KSTEP,LENUVP, LEV,' V ') ARR0F403.43
*ENDIF ARR1F402.122
13 CONTINUE FLDSTAT1.151
ENDIF FLDSTAT1.152
ENDIF FLDSTAT1.153
CL FLDSTAT1.154
CL CLOSE DEVICE IF LAST TIMESTEP FOR DIAGNOSTIC (AND DELETE) ARR0F404.86
CL FLDSTAT1.156
IF(KSTEP.EQ.PRFLD_LAST) THEN FLDSTAT1.157
*IF DEF,MPP ARR0F404.87
C Close and delete explicit file name ARR0F404.88
CALL CLOSE_SINGLE
(NDEV_FLD,FLD_FILENAME, ARR0F404.89
& LEN_FLD_FILENAME,1,1,ICODE) ARR0F404.90
*ELSE ARR0F404.91
C Close and delete file name referenced by environment variable ARR0F404.92
CALL FILE_CLOSE
(NDEV_FLD,FT_ENVIRON(NDEV_FLD), ARR0F404.93
& LEN_FT_ENVIR(NDEV_FLD),0,1,ICODE) ARR0F404.94
*ENDIF ARR0F404.95
ELSE FLDSTAT1.159
CL FLDSTAT1.160
CL SAVE THIS TIMESTEP TO TMP DISK FILE USING (UNIT NDEV_FLD) ARR0F404.96
CL FLDSTAT1.162
IPOS=0 ! Point to start of file ARR0F404.97
*IF DEF,MPP ARR0F404.98
CALL SETPOS_SINGLE
(NDEV_FLD,IPOS,ICODE) ARR0F404.99
CALL BUFFOUT_SINGLE
(NDEV_FLD,PSTAR,LENTHP,LEN_IO,A_IO) ARR0F404.100
ARR0F404.101
DO LEV=1,NUP ARR0F404.102
CALL BUFFOUT_SINGLE
(NDEV_FLD,T (1,LEV),LENTHP,LEN_IO,A_IO) ARR0F404.103
ENDDO ! LEV ARR0F404.104
DO LEV=1,NRP ARR0F404.105
CALL BUFFOUT_SINGLE
(NDEV_FLD,RH (1,LEV),LENTHP,LEN_IO,A_IO) ARR0F404.106
ENDDO ! LEV ARR0F404.107
DO LEV=1,NUP ARR0F404.108
CALL BUFFOUT_SINGLE
(NDEV_FLD,U (1,LEV),LENUVP,LEN_IO,A_IO) ARR0F404.109
ENDDO ! LEV ARR0F404.110
DO LEV=1,NUP ARR0F404.111
CALL BUFFOUT_SINGLE
(NDEV_FLD,V (1,LEV),LENUVP,LEN_IO,A_IO) ARR0F404.112
ENDDO ! LEV ARR0F404.113
*ELSE ARR0F404.114
CALL SETPOS
(NDEV_FLD,IPOS,ICODE) ARR0F404.115
CALL BUFFOUT
(NDEV_FLD,PSTAR,LENTHP,LEN_IO,A_IO) ARR0F404.116
ARR0F404.117
DO LEV=1,NUP ARR0F404.118
CALL BUFFOUT
(NDEV_FLD,T (1,LEV),LENTHP,LEN_IO,A_IO) ARR0F404.119
ENDDO ! LEV ARR0F404.120
DO LEV=1,NRP ARR0F404.121
CALL BUFFOUT
(NDEV_FLD,RH (1,LEV),LENTHP,LEN_IO,A_IO) ARR0F404.122
ENDDO ! LEV ARR0F404.123
DO LEV=1,NUP ARR0F404.124
CALL BUFFOUT
(NDEV_FLD,U (1,LEV),LENUVP,LEN_IO,A_IO) ARR0F404.125
ENDDO ! LEV ARR0F404.126
DO LEV=1,NUP ARR0F404.127
CALL BUFFOUT
(NDEV_FLD,V (1,LEV),LENUVP,LEN_IO,A_IO) ARR0F404.128
ENDDO ! LEV ARR0F404.129
*ENDIF ARR0F404.130
ENDIF FLDSTAT1.177
FLDSTAT1.178
RETURN FLDSTAT1.179
END FLDSTAT1.180
SUBROUTINE FLDDIAG(THIS,LAST,KSTEP,LENP,LEV,TITLE) 10FLDSTAT1.181
C FLDSTAT1.182
C CALC MAX MIN MEAN OF FIELD 'THIS' FLDSTAT1.183
C & MAX MIN MEAN AND RMS OF FIELD 'THIS' MINUS 'LAST' FLDSTAT1.184
C NO AREA WEIGHTING IS APPLIED FLDSTAT1.185
C LOCATION OF MAX/MIN IS ALSO PRINTED FLDSTAT1.186
FLDSTAT1.187
CLL Modification NF171193.157
CLL vn3.3 22/11/93 : Arrays THIS and LAST were declared before LENP(N.F NF171193.158
IMPLICIT NONE FLDSTAT1.188
FLDSTAT1.189
C FLDSTAT1.190
C*L ARGUMENTS:--------------------------------------------------- FLDSTAT1.191
FLDSTAT1.192
INTEGER FLDSTAT1.197
+ KSTEP, ! (IN) CURRENT TIMESTEP NO. FLDSTAT1.198
+ LENP, ! (IN) FIELD LENGTH FLDSTAT1.199
+ LEV ! (IN) MODEL LEVEL FLDSTAT1.200
FLDSTAT1.201
REAL NF171193.159
+ THIS(LENP), ! (IN) CURRENT FIELD NF171193.160
+ LAST(LENP) ! (IN) PREVIOUS FIELD NF171193.161
CHARACTER*6 TITLE ! (IN) FIELD TITLE FLDSTAT1.202
FLDSTAT1.203
C FLDSTAT1.204
C DYNAMIC SPACE FLDSTAT1.205
C FLDSTAT1.206
REAL FLDSTAT1.207
+ DIFF(LENP), FLDSTAT1.208
+ AMAX,AMIN,DMAX,DMIN,AMEAN,DMEAN,DRMS FLDSTAT1.209
FLDSTAT1.210
INTEGER FLDSTAT1.211
+ IPT, ! POINT COUNTER FLDSTAT1.212
+ IAMAX,IAMIN,IDMAX,IDMIN ! FIELD MAX, MIN NO. FLDSTAT1.213
FLDSTAT1.214
AMAX=THIS(1) FLDSTAT1.215
IAMAX=0 FLDSTAT1.216
DO 10 IPT=2,LENP FLDSTAT1.217
IF(THIS(IPT).GT.AMAX)THEN FLDSTAT1.218
AMAX=THIS(IPT) FLDSTAT1.219
IAMAX=IPT FLDSTAT1.220
ENDIF FLDSTAT1.221
10 CONTINUE FLDSTAT1.222
FLDSTAT1.223
AMIN=THIS(1) FLDSTAT1.224
IAMIN=0 FLDSTAT1.225
DO 11 IPT=2,LENP FLDSTAT1.226
IF(THIS(IPT).LT.AMIN)THEN FLDSTAT1.227
AMIN=THIS(IPT) FLDSTAT1.228
IAMIN=IPT FLDSTAT1.229
ENDIF FLDSTAT1.230
11 CONTINUE FLDSTAT1.231
FLDSTAT1.232
DO 12 IPT=1,LENP FLDSTAT1.233
DIFF(IPT)=THIS(IPT)-LAST(IPT) FLDSTAT1.234
12 CONTINUE FLDSTAT1.235
FLDSTAT1.236
DMAX=DIFF(1) FLDSTAT1.237
IDMAX=0 FLDSTAT1.238
DO 13 IPT=2,LENP FLDSTAT1.239
IF(DIFF(IPT).GT.DMAX)THEN FLDSTAT1.240
DMAX=DIFF(IPT) FLDSTAT1.241
IDMAX=IPT FLDSTAT1.242
ENDIF FLDSTAT1.243
13 CONTINUE FLDSTAT1.244
FLDSTAT1.245
DMIN=DIFF(1) FLDSTAT1.246
IDMIN=0 FLDSTAT1.247
DO 14 IPT=2,LENP FLDSTAT1.248
IF(DIFF(IPT).LT.DMIN)THEN FLDSTAT1.249
DMIN=DIFF(IPT) FLDSTAT1.250
IDMIN=IPT FLDSTAT1.251
ENDIF FLDSTAT1.252
14 CONTINUE FLDSTAT1.253
FLDSTAT1.254
AMEAN=THIS(1) FLDSTAT1.255
DO 15 IPT=2,LENP FLDSTAT1.256
AMEAN=THIS(IPT)+AMEAN FLDSTAT1.257
15 CONTINUE FLDSTAT1.258
AMEAN=AMEAN/LENP FLDSTAT1.259
FLDSTAT1.260
DMEAN=DIFF(1) FLDSTAT1.261
DO 16 IPT=2,LENP FLDSTAT1.262
DMEAN=DIFF(IPT)+DMEAN FLDSTAT1.263
16 CONTINUE FLDSTAT1.264
DMEAN=DMEAN/LENP FLDSTAT1.265
FLDSTAT1.266
DO 17 IPT=1,LENP FLDSTAT1.267
DIFF(IPT)=DIFF(IPT)*DIFF(IPT) FLDSTAT1.268
17 CONTINUE FLDSTAT1.269
FLDSTAT1.270
DRMS=DIFF(1) FLDSTAT1.271
DO 18 IPT=2,LENP FLDSTAT1.272
DRMS=DIFF(IPT)+DRMS FLDSTAT1.273
18 CONTINUE FLDSTAT1.274
DRMS=DRMS/LENP FLDSTAT1.275
DRMS=SQRT(DRMS) FLDSTAT1.276
IF(TITLE.EQ.' PSTAR ')THEN FLDSTAT1.277
C CONVERT TO MB FLDSTAT1.278
AMAX=AMAX*.01 FLDSTAT1.279
AMIN=AMIN*.01 FLDSTAT1.280
AMEAN=AMEAN*.01 FLDSTAT1.281
DMAX=DMAX*.01 FLDSTAT1.282
DMIN=DMIN*.01 FLDSTAT1.283
DMEAN=DMEAN*.01 FLDSTAT1.284
DRMS=DRMS*.01 FLDSTAT1.285
WRITE(6,*)' STEP TITLE LEV ', ARR3F405.4
* ' AMAX IAMAX AMIN IAMIN AMEAN ', ARR3F405.5
* ' DMAX IDMAX DMIN IDMIN DMEAN DRMS ' ARR3F405.6
ENDIF FLDSTAT1.289
WRITE(6,60)KSTEP,TITLE,LEV, FLDSTAT1.290
* AMAX,IAMAX,AMIN,IAMIN,AMEAN, FLDSTAT1.291
* DMAX,IDMAX,DMIN,IDMIN,DMEAN,DRMS FLDSTAT1.292
60 FORMAT(1X,I4,1X,A6,1X,I4,1X, ARR3F405.7
* F6.1,1X,I7,1X,F6.1,1X,I7,1X,F6.1,1X, ARR3F405.8
* F6.2,1X,I7,1X,F7.2,1X,I7,1X,F6.2,1X,F6.2) ARR3F405.9
RETURN FLDSTAT1.296
END FLDSTAT1.297
*ENDIF FLDSTAT1.298