*IF DEF,MAKEBC SETPPIN1.2 C ******************************COPYRIGHT****************************** SETPPIN1.3 C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved. SETPPIN1.4 C SETPPIN1.5 C Use, duplication or disclosure of this code is subject to the SETPPIN1.6 C restrictions as set forth in the contract. SETPPIN1.7 C SETPPIN1.8 C Meteorological Office SETPPIN1.9 C London Road SETPPIN1.10 C BRACKNELL SETPPIN1.11 C Berkshire UK SETPPIN1.12 C RG12 2SZ SETPPIN1.13 C SETPPIN1.14 C If no contract has been raised with this copy of the code, the use, SETPPIN1.15 C duplication or disclosure of it is strictly prohibited. Permission SETPPIN1.16 C to do so must first be obtained in writing from the Head of Numerical SETPPIN1.17 C Modelling at the above address. SETPPIN1.18 C SETPPIN1.19 C ********************************************************************* SETPPIN1.20 !+ Subroutine SET_PPINDEX : Set up array PPINDEX for MAKEBC SETPPIN1.21 ! SETPPIN1.22 ! Subroutine Interface : SETPPIN1.23SUBROUTINE SET_PPINDEX ( 1SETPPIN1.24 & JPSTAR,JU,JV,JTHETA,JQ,JQCF,JTRACER, SETPPIN1.25 & LEN_PPINDEX,PPINDEX, SETPPIN1.26 & LEN1_LOOKUP,LEN2_LOOKUP,LOOKUP, SETPPIN1.27 & L_LSPICE,ICODE,CMESSAGE) SETPPIN1.28 SETPPIN1.29 IMPLICIT NONE SETPPIN1.30 SETPPIN1.31 ! Description : Initialise PPINDEX array and pointers. SETPPIN1.32 ! SETPPIN1.33 ! Method : This routine goes through the lookup table and sets up SETPPIN1.34 ! PPINDEX and the pointers to the data in the dump. SETPPIN1.35 ! SETPPIN1.36 ! Current Code Owner : Dave Robinson, NWP SETPPIN1.37 ! SETPPIN1.38 ! History : SETPPIN1.39 ! Version Date Comment SETPPIN1.40 ! ------- ---- ------- SETPPIN1.41 ! 4.4 10/10/97 Original Code SETPPIN1.42 ! SETPPIN1.43 ! Code Description : SETPPIN1.44 ! Language : FORTRAN 77 + common extensions SETPPIN1.45 ! This code is written to UMDP3 v6 programming standards. SETPPIN1.46 ! SETPPIN1.47 ! Declarations : SETPPIN1.48 ! SETPPIN1.49 ! Global Variables : SETPPIN1.50 SETPPIN1.51 ! Subroutine arguments SETPPIN1.52 ! Scalar arguments with intent(in) : SETPPIN1.53 SETPPIN1.54 Integer LEN_PPINDEX ! Dimension of PP_INDEX SETPPIN1.55 Integer LEN1_LOOKUP ! First dimension of Lookup table SETPPIN1.56 Integer LEN2_LOOKUP ! Second dimension of Lookup table SETPPIN1.57 SETPPIN1.58 Logical L_LSPICE ! T : Dumps contain QCF. SETPPIN1.59 SETPPIN1.60 ! Array arguments with intent(in) : SETPPIN1.61 SETPPIN1.62 Integer LOOKUP(LEN1_LOOKUP,LEN2_LOOKUP) ! Lookup table SETPPIN1.63 SETPPIN1.64 ! Scalar arguments with intent(inout) : SETPPIN1.65 SETPPIN1.66 ! Array arguments with intent(inout) : SETPPIN1.67 SETPPIN1.68 ! Scalar arguments with intent(out) : SETPPIN1.69 SETPPIN1.70 Integer JPSTAR ! Pointer to pstar SETPPIN1.71 Integer JU ! Pointer to u component SETPPIN1.72 Integer JV ! Pointer to v component SETPPIN1.73 Integer JTHETA ! Pointer to thetal SETPPIN1.74 Integer JQ ! Pointer to qt SETPPIN1.75 Integer JQCF ! Pointer to qcf SETPPIN1.76 Integer JTRACER ! Pointer to atm tracer 1 SETPPIN1.77 Integer ICODE ! Error code SETPPIN1.78 Character*80 CMESSAGE ! Error Message SETPPIN1.79 SETPPIN1.80 ! Array arguments with intent(out) : SETPPIN1.81 SETPPIN1.82 Integer PPINDEX(LEN_PPINDEX) ! Position of fields in LOOKUP SETPPIN1.83 SETPPIN1.84 ! Local parameters : SETPPIN1.85 SETPPIN1.86 ! Local scalars : SETPPIN1.87 SETPPIN1.88 Integer I ! Loop index SETPPIN1.89 SETPPIN1.90 !- End of Header SETPPIN1.91 SETPPIN1.92 JPSTAR = -1 SETPPIN1.93 JU = -1 SETPPIN1.94 JV = -1 SETPPIN1.95 JTHETA = -1 SETPPIN1.96 JQ = -1 SETPPIN1.97 JQCF = -1 SETPPIN1.98 JTRACER = -1 SETPPIN1.99 SETPPIN1.100 DO I=1,LEN2_LOOKUP SETPPIN1.101 IF ((JPSTAR.EQ.-1).AND.(LOOKUP(42,I) .EQ. 1)) THEN SETPPIN1.102 SETPPIN1.103 JPSTAR=LOOKUP(40,I) SETPPIN1.104 PPINDEX(1) = I SETPPIN1.105 SETPPIN1.106 ELSEIF ((JU.EQ.-1).AND.(LOOKUP(42,I) .EQ. 2)) THEN SETPPIN1.107 SETPPIN1.108 JU=LOOKUP(40,I) SETPPIN1.109 PPINDEX(2) = I SETPPIN1.110 ELSEIF ((JV.EQ.-1).AND.(LOOKUP(42,I) .EQ. 3)) THEN SETPPIN1.111 SETPPIN1.112 JV=LOOKUP(40,I) SETPPIN1.113 PPINDEX(3) = I SETPPIN1.114 SETPPIN1.115 ELSEIF ((JTHETA.EQ.-1).AND.(LOOKUP(42,I) .EQ. 5)) THEN SETPPIN1.116 SETPPIN1.117 JTHETA=LOOKUP(40,I) SETPPIN1.118 PPINDEX(5) = I SETPPIN1.119 SETPPIN1.120 ELSEIF ((JQ.EQ.-1).AND.(LOOKUP(42,I) .EQ. 11)) THEN SETPPIN1.121 SETPPIN1.122 JQ=LOOKUP(40,I) SETPPIN1.123 PPINDEX(11) = I SETPPIN1.124 SETPPIN1.125 ELSEIF ((JQCF.EQ.-1).AND.(LOOKUP(42,I) .EQ. 12)) THEN SETPPIN1.126 SETPPIN1.127 JQCF=LOOKUP(40,I) SETPPIN1.128 PPINDEX(12) = I SETPPIN1.129 SETPPIN1.130 ELSEIF ((LOOKUP(42,I) .GE. 61).AND.(LOOKUP(42,I) .LE. 89)) THEN SETPPIN1.131 SETPPIN1.132 IF (JTRACER.EQ.-1) THEN SETPPIN1.133 JTRACER=LOOKUP(40,I) SETPPIN1.134 PPINDEX(LOOKUP(42,I)) = I SETPPIN1.135 ENDIF SETPPIN1.136 SETPPIN1.137 ENDIF SETPPIN1.138 SETPPIN1.139 ENDDO SETPPIN1.140 SETPPIN1.141 ! Check consistency between namelist and dumps. SETPPIN1.142 IF (.not.L_LSPICE .and. JQCF .NE. -1) THEN SETPPIN1.143 WRITE (6,*) ' ' SETPPIN1.144 WRITE (6,*) ' Inconsistency between namelist and dumps.' SETPPIN1.145 WRITE (6,*) ' Dump contains QCF.' SETPPIN1.146 WRITE (6,*) ' Namelist indicate that dumps have no QCF.' SETPPIN1.147 WRITE (6,*) ' Check namelist & dumps and rerun.' SETPPIN1.148 ICODE = 1 SETPPIN1.149 CMESSAGE = 'SETPPIN1: Inconsistency between dumps & namelist.' SETPPIN1.150 GO TO 9999 ! Return SETPPIN1.151 ENDIF SETPPIN1.152 SETPPIN1.153 IF (JPSTAR.EQ.-1 .or. JU.EQ.-1 .or. JV.EQ.-1 .or. SETPPIN1.154 & JTHETA.EQ.-1 .or. JQ.EQ.-1 .or. SETPPIN1.155 & (JQCF.EQ.-1 .and. L_LSPICE) ) THEN SETPPIN1.156 ICODE = 1 UDR3F405.197 write (6,*) ' PStar or U/V or THETA or Q or QCF not in dump.' UDR3F405.198 CMESSAGE = ' PStar or U/V or THETA or Q or QCF not in dump.' SETPPIN1.158 WRITE (6,*) ' JPSTAR = ',JPSTAR SETPPIN1.159 WRITE (6,*) ' JU = ',JU SETPPIN1.160 WRITE (6,*) ' JV = ',JV SETPPIN1.161 WRITE (6,*) ' JTHETA = ',JTHETA SETPPIN1.162 WRITE (6,*) ' JQ = ',JQ SETPPIN1.163 WRITE (6,*) ' JQCF = ',JQCF SETPPIN1.164 GO TO 9999 ! Return SETPPIN1.165 ENDIF SETPPIN1.166 SETPPIN1.167 ! If no QCF, reset JQCF to prevent negative pointer. SETPPIN1.168 IF (JQCF .EQ. -1) THEN SETPPIN1.169 WRITE (6,*) ' ' SETPPIN1.170 WRITE (6,*) ' JQCF = ',JQCF SETPPIN1.171 WRITE (6,*) ' No QCF data in this dump.' SETPPIN1.172 JQCF = 1 SETPPIN1.173 ENDIF SETPPIN1.174 SETPPIN1.175 ! If no Tracers, reset JTRACER to prevent negative pointer. SETPPIN1.176 IF (JTRACER .EQ. -1) THEN SETPPIN1.177 WRITE (6,*) ' ' SETPPIN1.178 WRITE (6,*) ' JTRACER = ',JTRACER SETPPIN1.179 WRITE (6,*) ' No tracer data in this dump.' SETPPIN1.180 JTRACER = 1 SETPPIN1.181 ENDIF SETPPIN1.182 SETPPIN1.183 9999 RETURN SETPPIN1.184 END SETPPIN1.185 *ENDIF SETPPIN1.186