*IF DEF,C80_1A,OR,DEF,UTILIO,OR,DEF,RECON,OR,DEF,FLDOP UIE3F404.43 C ******************************COPYRIGHT****************************** GTS2F400.7561 C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.7562 C GTS2F400.7563 C Use, duplication or disclosure of this code is subject to the GTS2F400.7564 C restrictions as set forth in the contract. GTS2F400.7565 C GTS2F400.7566 C Meteorological Office GTS2F400.7567 C London Road GTS2F400.7568 C BRACKNELL GTS2F400.7569 C Berkshire UK GTS2F400.7570 C RG12 2SZ GTS2F400.7571 C GTS2F400.7572 C If no contract has been raised with this copy of the code, the use, GTS2F400.7573 C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.7574 C to do so must first be obtained in writing from the Head of Numerical GTS2F400.7575 C Modelling at the above address. GTS2F400.7576 C ******************************COPYRIGHT****************************** GTS2F400.7577 C GTS2F400.7578 CLL SUBROUTINE PR_IFLD---------------------------------------- PRIFLD1A.3 CLL PRIFLD1A.4 CLL Purpose: Prints out selected values from integer data PRIFLD1A.5 CLL using information from associated PP header. PRIFLD1A.6 CLL PRIFLD1A.7 CLL Written by A. Dickinson PRIFLD1A.8 CLL PRIFLD1A.9 CLL Model Modification history from model version 3.0: PRIFLD1A.10 CLL version date PRIFLD1A.11 CLL 3.2 19/04/93 Code for new real missing data indicator. TJ050593.109 CLL Author: T.Johns Reviewer: A.Dickinson TJ050593.110 CLL 3.2 28/07/93 STOP WRITING OF FIELDS WHEN HEADERS ARE NOT SET. @DYALLOC.2947 CLL PRIFLD1A.12 CLL System component: R30/W30 PRIFLD1A.13 CLL PRIFLD1A.14 CLL System task: F3 PRIFLD1A.15 CLL PRIFLD1A.16 CLL Programming standard: PRIFLD1A.17 CLL Unified Model Documentation Paper No 3 PRIFLD1A.18 CLL Version No 1 15/1/90 PRIFLD1A.19 CLL PRIFLD1A.20 CLL Documentation: PRIFLD1A.21 CLL Unified Model Documentation Paper No F3 PRIFLD1A.22 CLL Version No 5 9/2/90 PRIFLD1A.23 CLL PRIFLD1A.24 CLL------------------------------------------------------------ PRIFLD1A.25 C*L Arguments:------------------------------------------------- PRIFLD1A.26SUBROUTINE PR_IFLD(LOOKUP,RLOOKUP,ID1,K) 4PRIFLD1A.27 PRIFLD1A.28 IMPLICIT NONE PRIFLD1A.29 PRIFLD1A.30 INTEGER PRIFLD1A.31 * K !IN Field number ie position in 2nd dim PRIFLD1A.32 * ! of LOOKUP PRIFLD1A.33 *,LOOKUP(64,*) !IN Integer equivalence of PP LOOKUP PRIFLD1A.34 *,ID1(*) !IN Kth field in integer equiv of data array PRIFLD1A.35 PRIFLD1A.36 REAL PRIFLD1A.37 * RLOOKUP(64,*) !IN Real equivalence of PP LOOKUP PRIFLD1A.38 PRIFLD1A.39 C ------------------------------------------------------------- PRIFLD1A.40 C*L External subroutines called:------------------------------- PRIFLD1A.41 C None PRIFLD1A.42 C-------------------------------------------------------------- PRIFLD1A.43 C*L Local control constants:----------------------------------- PRIFLD1A.44 INTEGER PRIFLD1A.45 * NS_PTS !PARAM No of points down to print PRIFLD1A.46 *,EW_PTS !PARAM No of points across to print PRIFLD1A.47 PARAMETER(NS_PTS=6,EW_PTS=5) PRIFLD1A.48 C ------------------------------------------------------------- PRIFLD1A.49 C Workspace usage:--------------------------------------------- PRIFLD1A.50 REAL LON(EW_PTS) ! Longitudes printed out PRIFLD1A.51 INTEGER I(EW_PTS) ! Index of values printed out PRIFLD1A.52 CHARACTER*12 DASH(EW_PTS) !Stores dashed lines PRIFLD1A.53 C*------------------------------------------------------------- PRIFLD1A.54 C Local variables:--------------------------------------------- PRIFLD1A.55 INTEGER PRIFLD1A.56 * N_ROWS ! No of rows in field PRIFLD1A.57 *,N_COLS ! No of colums in field PRIFLD1A.58 *,ROW ! Row number PRIFLD1A.59 *,R_INC,F_INC ! No of rows/points between printed lines PRIFLD1A.60 *,J,L ! Loop counts PRIFLD1A.61 *,EW_PRINT ! No of E-W values printed out PRIFLD1A.62 *,POS_MIN ! Position of Minimum value of field PRIFLD1A.63 *,POS_MAX ! Position of Maximum value of field PRIFLD1A.64 *,F_MIN ! Minimum value of field PRIFLD1A.65 *,F_MAX ! Maximum value of field PRIFLD1A.66 PRIFLD1A.67 REAL PRIFLD1A.68 * LAT ! Latitude PRIFLD1A.69 C-------------------------------------------------------------- PRIFLD1A.70 PRIFLD1A.71 *CALL CLOOKADD
PRIFLD1A.72 *CALL C_MDI
@DYALLOC.2948 PRIFLD1A.73 CL Internal structure: None PRIFLD1A.74 PRIFLD1A.75 C Initialise string used to create table boundaries PRIFLD1A.76 DO 50 J=1,EW_PTS PRIFLD1A.77 50 DASH(J)='------------' PRIFLD1A.78 @DYALLOC.2949 IF(LOOKUP(LBCODE,K).EQ.IMDI) THEN @DYALLOC.2950 C IF LBCODE IS MISSING DATA, ASSUME THAT THE FIELD IN DUMP @DYALLOC.2951 C HAS NOT BEEN WRITTEN TO BY STASH. @DYALLOC.2952 C THIS SHOULD ONLY OCCUR TO DIAGNOSTIC PARTS OF THE DUMP BEFORE @DYALLOC.2953 C FIRST WRITE BY STASH TO THAT AREA/HEADER. @DYALLOC.2954 WRITE(6,*) 'MESSAGE FROM PR_IFLD' @DYALLOC.2955 WRITE(6,*) 'LBCODE NOT SET; ASSUME DATA NOT SET. NO PRINT' @DYALLOC.2956 RETURN @DYALLOC.2957 END IF @DYALLOC.2958 PRIFLD1A.79 C No of rows and columns in field PRIFLD1A.80 N_ROWS=LOOKUP(LBROW,K) PRIFLD1A.81 N_COLS=LOOKUP(LBNPT,K) PRIFLD1A.82 PRIFLD1A.83 PRIFLD1A.84 IF(N_COLS.NE.0.AND.N_COLS.NE.IMDI)THEN TJ050593.111 PRIFLD1A.86 C No of E-W values to be printed PRIFLD1A.87 EW_PRINT=MIN(N_COLS,EW_PTS) PRIFLD1A.88 PRIFLD1A.89 C Calculate longitudes and addresses of values to be printed from 1st ro PRIFLD1A.90 I(1)=1 PRIFLD1A.91 LON(1)=RLOOKUP(BZX,K)+RLOOKUP(BDX,K) PRIFLD1A.92 DO 100 J=1,EW_PTS-2 PRIFLD1A.93 I(J+1)=I(J)+N_COLS/(EW_PTS-1) PRIFLD1A.94 LON(J+1)=LON(J)+RLOOKUP(BDX,K)*(N_COLS/(EW_PTS-1)) PRIFLD1A.95 100 CONTINUE PRIFLD1A.96 I(EW_PTS)=N_COLS PRIFLD1A.97 LON(EW_PTS)=RLOOKUP(BZX,K)+RLOOKUP(BDX,K)*N_COLS PRIFLD1A.98 PRIFLD1A.99 C Initialise row and field pointers PRIFLD1A.100 ROW=1 PRIFLD1A.101 LAT=RLOOKUP(BZY,K)+RLOOKUP(BDY,K) PRIFLD1A.102 R_INC=N_ROWS/(NS_PTS-1) PRIFLD1A.103 F_INC=R_INC*N_COLS PRIFLD1A.104 PRIFLD1A.105 C Print 1st row PRIFLD1A.106 WRITE(6,'(14X,9A12)')(DASH(J),J=1,EW_PRINT) PRIFLD1A.107 WRITE(6,'('' FIELD NO'',I4,'':''9(F10.3,2X))') PRIFLD1A.108 *K,(LON(J),J=1,EW_PRINT) PRIFLD1A.109 WRITE(6,'(14X,9A12)')(DASH(J),J=1,EW_PRINT) PRIFLD1A.110 PRIFLD1A.111 C Print remaining rows except last PRIFLD1A.112 DO 200 L=1,NS_PTS-1 PRIFLD1A.113 WRITE(6,'(1X,I3,'':'',F8.3,'':'',3X,9(I9,3X))')ROW,LAT, PRIFLD1A.114 *(ID1(I(J)),J=1,EW_PRINT) PRIFLD1A.115 DO 300 J=1,EW_PTS PRIFLD1A.116 I(J)=I(J)+F_INC PRIFLD1A.117 300 CONTINUE PRIFLD1A.118 ROW=ROW+R_INC PRIFLD1A.119 LAT=LAT+R_INC*RLOOKUP(BDY,K) PRIFLD1A.120 200 CONTINUE PRIFLD1A.121 PRIFLD1A.122 C Calculate addresses used to print values for last row PRIFLD1A.123 I(1)=1+(N_ROWS-1)*N_COLS PRIFLD1A.124 DO 400 J=1,EW_PTS-2 PRIFLD1A.125 I(J+1)=I(J)+N_COLS/(EW_PTS-1) PRIFLD1A.126 400 CONTINUE PRIFLD1A.127 I(EW_PTS)=N_ROWS*N_COLS PRIFLD1A.128 PRIFLD1A.129 C Set row pointers to last row PRIFLD1A.130 LAT=RLOOKUP(BZY,K)+RLOOKUP(BDY,K)*N_ROWS PRIFLD1A.131 ROW=N_ROWS PRIFLD1A.132 PRIFLD1A.133 C Print last row PRIFLD1A.134 WRITE(6,'(1X,I3,'':'',F8.3,'':'',3X,9(I9,3X))')ROW,LAT, PRIFLD1A.135 *(ID1(I(J)),J=1,EW_PRINT) PRIFLD1A.136 WRITE(6,'(14X,9A12)')(DASH(J),J=1,EW_PRINT) PRIFLD1A.137 ELSE PRIFLD1A.138 PRIFLD1A.139 C Print out summary of non standard fields PRIFLD1A.140 PRIFLD1A.141 EW_PRINT=MIN(EW_PTS,LOOKUP(LBLREC,K)) PRIFLD1A.142 WRITE(6,'(14X,9A12)')(DASH(J),J=1,EW_PRINT) PRIFLD1A.143 WRITE(6,'('' FIELD NO'',I4,'': DATA NOT ON MODEL GRID'' PRIFLD1A.144 *,'' SO FIRST FEW VALUES PRINTED'')')K PRIFLD1A.145 WRITE(6,'(14X,9A12)')(DASH(J),J=1,EW_PRINT) PRIFLD1A.146 WRITE(6,'(1X,3X,'':'',8X,'':'',3X,9(I9,3X))') PRIFLD1A.147 *(ID1(J),J=1,EW_PRINT) PRIFLD1A.148 WRITE(6,'(14X,9A12)')(DASH(J),J=1,EW_PRINT) PRIFLD1A.149 PRIFLD1A.150 ENDIF PRIFLD1A.151 PRIFLD1A.152 PRIFLD1A.153 C Print out max and min values of field PRIFLD1A.154 F_MIN=ID1(1) PRIFLD1A.155 F_MAX=ID1(1) PRIFLD1A.156 POS_MAX=1 PRIFLD1A.157 POS_MIN=1 PRIFLD1A.158 DO 500 J=1,N_ROWS*N_COLS PRIFLD1A.159 IF(ID1(J).GT.F_MAX)THEN PRIFLD1A.160 F_MAX=ID1(J) PRIFLD1A.161 POS_MAX=J PRIFLD1A.162 ENDIF PRIFLD1A.163 IF(ID1(J).LT.F_MIN)THEN PRIFLD1A.164 F_MIN=ID1(J) PRIFLD1A.165 POS_MIN=J PRIFLD1A.166 ENDIF PRIFLD1A.167 500 CONTINUE PRIFLD1A.168 PRIFLD1A.169 WRITE(6,'('' MINIMUM='',I8,'' POSITION='',I8, PRIFLD1A.170 *'' MAXIMUM='',I8,'' POSITION='',I8)') PRIFLD1A.171 *F_MIN,POS_MIN,F_MAX,POS_MAX PRIFLD1A.172 PRIFLD1A.173 WRITE(6,'('' '')') PRIFLD1A.174 PRIFLD1A.175 RETURN PRIFLD1A.176 END PRIFLD1A.177 PRIFLD1A.178 *ENDIF PRIFLD1A.179