*IF DEF,C92_1A VINTTP1A.2 C ******************************COPYRIGHT****************************** GTS2F400.11683 C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.11684 C GTS2F400.11685 C Use, duplication or disclosure of this code is subject to the GTS2F400.11686 C restrictions as set forth in the contract. GTS2F400.11687 C GTS2F400.11688 C Meteorological Office GTS2F400.11689 C London Road GTS2F400.11690 C BRACKNELL GTS2F400.11691 C Berkshire UK GTS2F400.11692 C RG12 2SZ GTS2F400.11693 C GTS2F400.11694 C If no contract has been raised with this copy of the code, the use, GTS2F400.11695 C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.11696 C to do so must first be obtained in writing from the Head of Numerical GTS2F400.11697 C Modelling at the above address. GTS2F400.11698 C ******************************COPYRIGHT****************************** GTS2F400.11699 C GTS2F400.11700 CLL SUBROUTINE V_INT_TP---------------------------------------------- VINTTP1A.3 CLL VINTTP1A.4 CLL Purpose: To calculate the temperature along an VINTTP1A.5 CLL arbitrary pressure level. Assumes input data is VINTTP1A.6 CLL on model levels. VINTTP1A.7 CLL VINTTP1A.8 CLL A.Dickinson <- programmer of some or all of previous code or changes VINTTP1A.9 CLL D.Robinson <- programmer of some or all of previous code or changes VINTTP1A.10 CLL VINTTP1A.11 CLL Model Modification history from model version 3.0: VINTTP1A.12 CLL version Date VINTTP1A.13 CLL 3.1 09/02/93 VINTTP1A.14 CLL : NEW ALternative routine for OUTPUT temperatures VINTTP1A.15 CLL : on pressure levels. Defines EXNER at full levels VINTTP1A.16 CLL : so as to minimise errors for isothermal atmosphere VINTTP1A.17 CLL : Reduces large biases above 100hPA in stratosphere VINTTP1A.18 CLL : C Wilson 08/02/93 VINTTP1A.19 CLL 4.2 01/07/96 GSS5F402.216 CLL : Revised for CRAY T3E. Faster version of P_EXNER_C GSS5F402.217 CLL : introduced. Unneccessary calculation of pressure GSS5F402.218 CLL : removed. GSS5F402.219 CLL : New arguments START and END introduced to GSS5F402.220 CLL : facilitate the removal of duplicate calculations GSS5F402.221 CLL : when using domain decomposition in MPP mode. GSS5F402.222 CLL : Author: A. Dickinson Reviewer: F. Rawlins GSS5F402.223 CLL 4.5 09/01/98 CRAY T3E optimisation: replace rtor_v by powr_v GDR8F405.22 CLL Deborah Salmond GDR8F405.23 CLL GSS5F402.224 CLL VINTTP1A.20 CLL Documentation: The interpolation formulae are described in VINTTP1A.21 CLL unified model on-line documentation paper S1. VINTTP1A.22 CLL VINTTP1A.23 CLL ----------------------------------------------------------------- VINTTP1A.24 C VINTTP1A.25 C*L Arguments:------------------------------------------------------- VINTTP1A.26SUBROUTINE V_INT_TP 1VINTTP1A.27 *(T,P,PL,PSTAR,P_EXNER_HALF,THETA,POINTS,P_LEVELS,L,AKH,BKH) GSS5F402.225 ! *,START,END) GSS5F402.226 VINTTP1A.29 IMPLICIT NONE VINTTP1A.30 VINTTP1A.31 INTEGER VINTTP1A.32 * POINTS !IN Number of points per level GSS5F402.227 *,P_LEVELS !IN Number of model levels VINTTP1A.34 *,L !IN Reference level for below-surface T extrapolation VINTTP1A.35 ! Use L=2 VINTTP1A.36 *,START !IN First point to be processed in POINTS dimension GSS5F402.228 *,END !IN Last point to be processed in POINTS dimension GSS5F402.229 GSS5F402.230 REAL VINTTP1A.37 * T(POINTS) !OUT Temperature along input pressure surface VINTTP1A.38 *,P(POINTS) !IN Pressure surface on which results required VINTTP1A.39 *,PL(POINTS) !IN Pressure at reference level L VINTTP1A.40 *,PSTAR(POINTS) !IN Surface pressure VINTTP1A.41 *,P_EXNER_HALF(POINTS,P_LEVELS+1) !IN Exner pressure at model VINTTP1A.42 * ! half levels VINTTP1A.43 *,THETA(POINTS,P_LEVELS) !IN Potential temperature at full levels VINTTP1A.44 *,AKH(P_LEVELS+1) !IN Hybrid coords. A values at half levels. VINTTP1A.45 *,BKH(P_LEVELS+1) !IN Hybrid coords. B values at half levels. VINTTP1A.46 VINTTP1A.47 C Workspace usage:----------------------------------------------------- VINTTP1A.48 C VINTTP1A.49 REAL GSS5F402.231 * P_EXNER(POINTS) GSS5F402.232 C External subroutines called:----------------------------------------- VINTTP1A.51 C None GSS5F402.234 C*--------------------------------------------------------------------- VINTTP1A.53 C Define local variables:---------------------------------------------- VINTTP1A.54 REAL PTOP,PBOT,PKP2,PKP1,PK,PKM1,PPP1,PP,PPM1,P1,P2,P3 VINTTP1A.55 INTEGER I,K,IC GSS5F402.235 REAL P_EXNER_FULL_1,P_EXNER_FULL_2,TK,TERM1,TERM2, VINTTP1A.57 * P_EXNER_FULL_K,P_EXNER_FULL_KP1,P_EXNER_FULL_KM1 VINTTP1A.58 *,P_EXNER_FULL_L,P_EXNER_FULL_LM1 VINTTP1A.59 C---------------------------------------------------------------------- VINTTP1A.63 C Constants from comdecks:--------------------------------------------- VINTTP1A.64 *CALL C_EPSLON
VINTTP1A.65 *CALL C_G
VINTTP1A.66 *CALL C_R_CP
VINTTP1A.67 *CALL C_LAPSE
VINTTP1A.68 C---------------------------------------------------------------------- VINTTP1A.69 VINTTP1A.70 CL 1. Define local constants VINTTP1A.71 VINTTP1A.72 REAL CP_OVER_G,LAPSE_R_OVER_G VINTTP1A.73 PARAMETER(CP_OVER_G=CP/G) VINTTP1A.74 PARAMETER(LAPSE_R_OVER_G=LAPSE*R/G) VINTTP1A.75 VINTTP1A.76 *CALL P_EXNRC2
VINTTP1A.77 VINTTP1A.78 GSS5F402.236 IC=0 GSS5F402.237 START=1 GSS5F402.238 END =POINTS GSS5F402.239 CL 2. Special cases (i) Below ground VINTTP1A.79 CL (ii) Bottom of bottom layer VINTTP1A.80 CL (iii) Top of top layer and above VINTTP1A.81 VINTTP1A.82 *IF DEF,VECTLIB PXVECTLB.155 C Convert target pressure to Exner pressure GSS5F402.241 VINTTP1A.84 DO I=START,END GSS5F402.242 P_EXNER(I)=P(I)/PREF GSS5F402.244 ENDDO GSS5F402.245 CALL POWR_V
GDR8F405.24 &(END-START+1,P_EXNER(START),KAPPA,P_EXNER(START)) GDR8F405.25 *ENDIF GSS5F402.248 DO 200 I=START,END GSS5F402.249 GSS5F402.250 *IF -DEF,VECTLIB PXVECTLB.156 C Convert target pressure to Exner pressure VINTTP1A.85 GSS5F402.252 P_EXNER(I)=(P(I)/PREF)**KAPPA VINTTP1A.91 *ENDIF VINTTP1A.92 VINTTP1A.93 CL (i) Below ground: equation (3.15) VINTTP1A.94 CL A lapse rate of 6.5 deg/km is assumed. L is a VINTTP1A.95 CL reference level - usually the first level above the model's VINTTP1A.96 CL boundary layer. VINTTP1A.97 VINTTP1A.98 IF(P(I).GT.PSTAR(I))THEN VINTTP1A.99 VINTTP1A.100 P_EXNER_FULL_L = P_EXNER_C VINTTP1A.103 + (P_EXNER_HALF(I,L+1),P_EXNER_HALF(I,L), GSS5F402.253 + dummy1,dummy2,dummy3) GSS5F402.254 T(I)=THETA(I,L)*P_EXNER_FULL_L VINTTP1A.105 * *(P(I)/PL(I))**LAPSE_R_OVER_G VINTTP1A.109 IC=IC+1 GSS5F402.255 VINTTP1A.111 CL (ii) Bottom layer: equation (3.14) VINTTP1A.112 VINTTP1A.113 ELSE IF(P_EXNER(I).GT.P_EXNER_HALF(I,2)) THEN VINTTP1A.114 VINTTP1A.115 P_EXNER_FULL_1 = P_EXNER_C VINTTP1A.119 + (P_EXNER_HALF(I,2),P_EXNER_HALF(I,1), GSS5F402.256 + dummy1,dummy2,dummy3) GSS5F402.257 P_EXNER_FULL_2 = P_EXNER_C VINTTP1A.121 + (P_EXNER_HALF(I,3),P_EXNER_HALF(I,2), GSS5F402.258 + dummy1,dummy2,dummy3) GSS5F402.259 VINTTP1A.123 TK=THETA(I,1)*P_EXNER_FULL_1 VINTTP1A.124 VINTTP1A.125 TERM1=(TK-THETA(I,2)*P_EXNER_FULL_2) VINTTP1A.126 * *THETA(I,1)*(P_EXNER(I)-P_EXNER_FULL_1) VINTTP1A.127 VINTTP1A.128 TERM2=THETA(I,2)*(P_EXNER_HALF(I,2)-P_EXNER_FULL_2) VINTTP1A.129 * +THETA(I,1)*(P_EXNER_FULL_1-P_EXNER_HALF(I,2)) VINTTP1A.130 VINTTP1A.131 T(I)=TK+TERM1/TERM2 VINTTP1A.132 IC=IC+1 GSS5F402.260 VINTTP1A.133 ENDIF VINTTP1A.134 VINTTP1A.135 VINTTP1A.136 CL (iii) Top layer and above: equation (3.13) VINTTP1A.137 VINTTP1A.138 IF(P_EXNER(I).LE.P_EXNER_HALF(I,P_LEVELS))THEN VINTTP1A.139 VINTTP1A.140 P_EXNER_FULL_L = P_EXNER_C (P_EXNER_HALF(I,P_LEVELS+1), VINTTP1A.145 + P_EXNER_HALF(I,P_LEVELS), GSS5F402.261 + dummy1,dummy2,dummy3) GSS5F402.262 P_EXNER_FULL_LM1 = P_EXNER_C (P_EXNER_HALF(I,P_LEVELS), VINTTP1A.147 + P_EXNER_HALF(I,P_LEVELS-1), GSS5F402.263 + dummy1,dummy2,dummy3) GSS5F402.264 VINTTP1A.149 TK=THETA(I,P_LEVELS)*P_EXNER_FULL_L VINTTP1A.150 VINTTP1A.151 TERM1=(TK-THETA(I,P_LEVELS-1)*P_EXNER_FULL_LM1) VINTTP1A.152 * *THETA(I,P_LEVELS)*(P_EXNER_FULL_L-P_EXNER(I)) VINTTP1A.153 VINTTP1A.154 TERM2=THETA(I,P_LEVELS)*(P_EXNER_HALF(I,P_LEVELS)-P_EXNER_FULL_L) VINTTP1A.155 * +THETA(I,P_LEVELS-1)*(P_EXNER_FULL_LM1-P_EXNER_HALF(I,P_LEVELS)) VINTTP1A.156 VINTTP1A.157 T(I)=TK+TERM1/TERM2 VINTTP1A.158 IC=IC+1 GSS5F402.265 VINTTP1A.159 ENDIF VINTTP1A.160 VINTTP1A.161 200 CONTINUE VINTTP1A.162 VINTTP1A.163 C Loop over levels VINTTP1A.164 VINTTP1A.165 DO 300 K=2,P_LEVELS-1 VINTTP1A.166 VINTTP1A.167 IF(IC.EQ.END-START+1)GOTO 400 GSS5F402.266 GSS5F402.267 GSS5F402.268 CL 3. Middle levels: equation (3.12) VINTTP1A.168 CL Two alternatives are used depending on whether P_EXNER(I) falls in VINTTP1A.169 CL the top or bottom half of layer k. VINTTP1A.170 VINTTP1A.171 DO 310 I=1,POINTS VINTTP1A.172 VINTTP1A.173 VINTTP1A.174 P_EXNER_FULL_K = P_EXNER_C (P_EXNER_HALF(I,K+1), VINTTP1A.178 + P_EXNER_HALF(I,K),dummy1,dummy2,dummy3) GSS5F402.269 VINTTP1A.180 C Top half of layer k. VINTTP1A.181 VINTTP1A.182 IF(P_EXNER(I).GT.P_EXNER_HALF(I,K+1))THEN GSS5F402.270 IF(P_EXNER(I).LE.P_EXNER_FULL_K)THEN GSS5F402.271 VINTTP1A.185 P_EXNER_FULL_KP1 = P_EXNER_C (P_EXNER_HALF(I,K+2), VINTTP1A.187 + P_EXNER_HALF(I,K+1),dummy1,dummy2,dummy3) GSS5F402.272 VINTTP1A.189 TK=THETA(I,K)*P_EXNER_FULL_K VINTTP1A.190 VINTTP1A.191 TERM1=(THETA(I,K+1)*P_EXNER_FULL_KP1-TK) VINTTP1A.192 * *THETA(I,K)*(P_EXNER_FULL_K-P_EXNER(I)) VINTTP1A.193 VINTTP1A.194 TERM2=THETA(I,K)*(P_EXNER_FULL_K-P_EXNER_HALF(I,K+1)) VINTTP1A.195 * +THETA(I,K+1)*(P_EXNER_HALF(I,K+1)-P_EXNER_FULL_KP1) VINTTP1A.196 VINTTP1A.197 T(I)=TK+TERM1/TERM2 VINTTP1A.198 IC=IC+1 GSS5F402.273 VINTTP1A.199 ENDIF GSS5F402.274 ENDIF VINTTP1A.200 VINTTP1A.201 C Bottom half of layer k. VINTTP1A.202 VINTTP1A.203 VINTTP1A.204 IF(P_EXNER(I).GT.P_EXNER_FULL_K)THEN GSS5F402.275 IF(P_EXNER(I).LE.P_EXNER_HALF(I,K))THEN GSS5F402.276 VINTTP1A.207 P_EXNER_FULL_KM1 = P_EXNER_C (P_EXNER_HALF(I,K), VINTTP1A.209 + P_EXNER_HALF(I,K-1),dummy1,dummy2,dummy3) GSS5F402.277 VINTTP1A.211 TK=THETA(I,K)*P_EXNER_FULL_K VINTTP1A.212 VINTTP1A.213 TERM1=(THETA(I,K-1)*P_EXNER_FULL_KM1-TK) VINTTP1A.214 * *THETA(I,K)*(P_EXNER(I)-P_EXNER_FULL_K) VINTTP1A.215 VINTTP1A.216 TERM2=THETA(I,K)*(P_EXNER_HALF(I,K)-P_EXNER_FULL_K) VINTTP1A.217 * +THETA(I,K-1)*(P_EXNER_FULL_KM1-P_EXNER_HALF(I,K)) VINTTP1A.218 VINTTP1A.219 T(I)=TK+TERM1/TERM2 VINTTP1A.220 IC=IC+1 GSS5F402.278 VINTTP1A.221 ENDIF GSS5F402.279 ENDIF VINTTP1A.222 VINTTP1A.223 310 CONTINUE VINTTP1A.224 VINTTP1A.225 300 CONTINUE VINTTP1A.226 GSS5F402.280 400 CONTINUE GSS5F402.281 VINTTP1A.227 RETURN VINTTP1A.228 END VINTTP1A.229 VINTTP1A.230 *ENDIF VINTTP1A.231