*IF DEF,A16_1A THETAW1A.2
C ******************************COPYRIGHT****************************** GTS2F400.10207
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.10208
C GTS2F400.10209
C Use, duplication or disclosure of this code is subject to the GTS2F400.10210
C restrictions as set forth in the contract. GTS2F400.10211
C GTS2F400.10212
C Meteorological Office GTS2F400.10213
C London Road GTS2F400.10214
C BRACKNELL GTS2F400.10215
C Berkshire UK GTS2F400.10216
C RG12 2SZ GTS2F400.10217
C GTS2F400.10218
C If no contract has been raised with this copy of the code, the use, GTS2F400.10219
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.10220
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.10221
C Modelling at the above address. GTS2F400.10222
C ******************************COPYRIGHT****************************** GTS2F400.10223
C GTS2F400.10224
CLL Subroutine THETAW-------------------------------------------------- THETAW1A.3
CLL THETAW1A.4
CLL Purpose: To calculate from temperatures,humidities the wet bulb THETAW1A.5
CLL potential temperature. THETAW1A.6
CLL THETAW1A.7
CLL D.Robinson <- programmer of some or all of previous code or changes THETAW1A.8
CLL THETAW1A.9
CLL Model Modification history from model version 3.0: THETAW1A.10
CLL version Date THETAW1A.11
CLL 3.2 13/07/93 Changed CHARACTER*(*) to CHARACTER*(80) for TS150793.204
CLL portability. Author Tracey Smith. TS150793.205
!LL 4.5 15/04/98 Added START,END arguments to enable duplicate GSM1F405.799
!LL halo calculations to be avoided. S.D.Mullerworth GSM1F405.800
CLL THETAW1A.12
CLL Programming standard : UM Doc Paper no 3 THETAW1A.13
CLL THETAW1A.14
CLL Logical components covered : D482 THETAW1A.15
CLL THETAW1A.16
CLL Project task : D482 THETAW1A.17
CLL THETAW1A.18
CLL External documentation : UMDP no THETAW1A.19
CLL THETAW1A.20
CLLEND ----------------------------------------------------------------- THETAW1A.21
C THETAW1A.22
C*L ARGUMENTS:----------------------------------------------------- THETAW1A.23
SUBROUTINE THETAW 1,4THETAW1A.24
1 (PRESS_REQD,THETA,Q,P,PSTAR,P_EXNER_HALF,TW, THETAW1A.25
2 AK,BK,AKH,BKH,P_FIELD,P_LEVELS,Q_LEVELS,T_REF, THETAW1A.26
& START,END, GSM1F405.801
3 CMESSAGE,ICODE) THETAW1A.27
C THETAW1A.28
IMPLICIT NONE THETAW1A.29
C THETAW1A.30
INTEGER THETAW1A.31
* P_FIELD ! IN No of points on a field THETAW1A.32
*,P_LEVELS ! IN NO OF MODEL LEVELS THETAW1A.33
*,Q_LEVELS ! IN NO OF HUMIDITY LEVELS THETAW1A.34
*,T_REF ! IN LEVEL OF MODEL USED TO CALC HEIGHT THETAW1A.35
&,START,END ! IN Range of points to calculate GSM1F405.802
*,ICODE ! OUT RETURN CODE THETAW1A.36
C THETAW1A.37
CHARACTER*(80) CMESSAGE TS150793.206
C THETAW1A.39
REAL THETAW1A.40
* P(P_FIELD,P_LEVELS) ! IN Pressure at each level and point THETAW1A.41
*,THETA(P_FIELD,P_LEVELS)! IN Potential temperature on all pts THETAW1A.42
*,P_EXNER_HALF(P_FIELD,P_LEVELS+1) ! IN EXNER Pressure at model THETAW1A.43
* ! half levels THETAW1A.44
*,PSTAR(P_FIELD) ! IN Surface pressure THETAW1A.45
*,Q(P_FIELD,Q_LEVELS) ! IN Specific humidity at full levels THETAW1A.46
*,MODEL_HALF_HEIGHT(P_FIELD,P_LEVELS+1)! IN Height of 1/2 levels THETAW1A.47
*,AKH(P_LEVELS+1) ! IN Value of "A" at mid layer THETAW1A.48
*,BKH(P_LEVELS+1) ! IN Value of "B" at mid layer THETAW1A.49
*,AK (P_LEVELS) ! IN Value of "A" at model level THETAW1A.50
*,BK (P_LEVELS) ! IN Value of "B" at model level THETAW1A.51
*,PRESS_REQD ! IN Pressure level required for THETAW THETAW1A.52
C THETAW1A.53
REAL THETAW1A.54
* TW(P_FIELD) ! OUT The WET BULB temperature. On THETAW1A.55
C ! output the TW at 1000mb ie thetaw THETAW1A.56
C THETAW1A.57
C*--------------------------------------------------------------- THETAW1A.58
C THETAW1A.59
C*L WORKSPACE USAGE---------------------------------------------- THETAW1A.60
C 10*P_FIELD THETAW1A.61
C DEFINE LOCAL WORKSPACE ARRAYS THETAW1A.62
REAL THETAW1A.63
* T(P_FIELD) ! Intial temperature at Press_reqd (Ta) THETAW1A.64
*,TW_TEMP(P_FIELD) ! A temporary store for temperature. THETAW1A.65
*,QAD(P_FIELD) ! SPECIFIC HUMIDITY AT PRESS_REQD THETAW1A.66
*,Q_SAT(P_FIELD) ! Saturation specific humidityEQD THETAW1A.67
*,PRESS_REQD_HORIZ(P_FIELD) ! PRESS_REQD BROADCAST OVER DOMAIN THETAW1A.68
*,LATENT_HEAT(P_FIELD) ! Latent heat of evaporation (fn(T)) THETAW1A.69
*,GG(P_FIELD) ! The 'G' used in equation (1.3) THETAW1A.70
*,GS ! The 'G' used in equation (1.3) THETAW1A.71
*,DIFF(P_FIELD) ! The difference between G(Tw) & G(Ti) THETAW1A.72
*,DGBYDT ! The function DG/DT Eqn (1.6) THETAW1A.73
*,FF(P_FIELD) ! The function DT/DP Eqn (1.5) THETAW1A.74
*,FF_NEXT(P_FIELD) ! The function DT/DP THETAW1A.75
C*--------------------------------------------------------------- THETAW1A.76
C THETAW1A.77
C*L EXTERNAL SUBROUTINES CALLED---------------------------------- THETAW1A.78
EXTERNAL V_INT,V_INT_T,QSAT THETAW1A.79
C*--------------------------------------------------------------- THETAW1A.80
C THETAW1A.81
*CALL C_R_CP
THETAW1A.82
*CALL C_G
THETAW1A.83
*CALL C_0_DG_C
THETAW1A.84
*CALL C_LHEAT
THETAW1A.85
*CALL C_EPSLON
THETAW1A.86
C THETAW1A.87
C---------------------------------------------------------------- THETAW1A.88
C DEFINE LOCAL VARIABLES THETAW1A.89
C---------------------------------------------------------------- THETAW1A.90
INTEGER THETAW1A.91
* I,K ! LOOP COUNTERS THETAW1A.92
*,J ! LOWEST ETA LEVEL WITH TEMP<T0 THETAW1A.93
*,LOOP THETAW1A.94
*,NLOOP THETAW1A.95
*,LOOP_FIELD(P_FIELD) THETAW1A.96
C THETAW1A.97
REAL THETAW1A.98
* DUMMY1 THETAW1A.99
*,DUMMY2 THETAW1A.100
*,COEFF ! COEFF USED IN THE CALCULATION OF LATENT HEAT THETAW1A.101
*,CPV ! SPECIFIC HEAT FOR WATER VAPOUR THETAW1A.102
*,MV ! Mol wt of water vapour THETAW1A.103
*,MD ! Mol wt of dry air THETAW1A.104
*,RSTAR ! Universal gas constant THETAW1A.105
*,TEMP1 ! THETAW1A.106
*,TEMP2 ! THETAW1A.107
*,PP ! THETAW1A.108
*,DELTAP ! Pressure increment THETAW1A.109
*,P_TARGET ! The target pressure (1000mb) THETAW1A.110
*,REAL_NLOOP ! Real NLOOP THETAW1A.111
*,REM ! Temp local variable THETAW1A.112
THETAW1A.113
DATA COEFF/2.34E3/ ! Used in the calculation of LATENT_H THETAW1A.114
DATA CPV/1850.0/ ! Specific heat of water vapour THETAW1A.115
DATA MV/0.01801/ ! Mol wt of water vapour KG/MOL THETAW1A.116
DATA MD/0.02896/ ! Mol wt of dry air KG/MOL THETAW1A.117
DATA RSTAR/8.314/ ! Universal gas constant THETAW1A.118
C THETAW1A.119
C THETAW1A.120
C------------------------------------------------------------------ THETAW1A.121
CL 1. Calculate the temperature and specific hum at the PRESS_REQ THETAW1A.122
C------------------------------------------------------------------ THETAW1A.123
THETAW1A.124
DO 1 I=START,END GSM1F405.803
PRESS_REQD_HORIZ(I)=PRESS_REQD THETAW1A.126
1 CONTINUE THETAW1A.127
THETAW1A.128
CALL V_INT_T
(T,PRESS_REQD_HORIZ,P(1,T_REF),PSTAR, THETAW1A.129
& P_EXNER_HALF,THETA,P_FIELD,P_LEVELS,T_REF,AKH,BKH GSM1F405.804
& ,START,END) GSM1F405.805
THETAW1A.131
THETAW1A.132
CALL V_INT
(P,PRESS_REQD_HORIZ,Q,QAD,P_FIELD,Q_LEVELS, THETAW1A.133
& DUMMY1,DUMMY2,.FALSE.,START,END) GSM1F405.806
THETAW1A.135
THETAW1A.136
C--------------------------------------------------------------------- THETAW1A.137
CL---------------------SECTION 2 ------------------------------------- THETAW1A.138
CL Calculate the function G for TA and QA (see eqn 3) doc no THETAW1A.139
C G(Tw)=Qa(Ta)*L(Ta)+Ta(Cp+QaCpv) THETAW1A.140
C Subscript a indicates initial values THETAW1A.141
C--------------------------------------------------------------------- THETAW1A.142
THETAW1A.143
THETAW1A.144
DO 20 I=START,END GSM1F405.807
LATENT_HEAT(I)=LC-COEFF*(T(I)-ZERODEGC) THETAW1A.146
GG(I)=QAD(I)*LATENT_HEAT(I)+T(I)*(CP+QAD(I)*CPV) ! Eqn 1.2 THETAW1A.147
20 CONTINUE THETAW1A.148
THETAW1A.149
C--------------------------------------------------------------------- THETAW1A.150
CL---------------------SECTION 3 ------------------------------------- THETAW1A.151
CL Calculate the function DG/DT (see eqn 5) doc no THETAW1A.152
CL G'(T)=(Mv*L(Ta)**2*Qs(T)/R*T**2) +Cp+Qa*Cpv THETAW1A.153
CL Iterate to find the Tw using 6 THETAW1A.154
CL T(i+1)=T(i)+(G(Tw)-G(Ti))/DG/DT(i) THETAW1A.155
C--------------------------------------------------------------------- THETAW1A.156
THETAW1A.157
DO 30 I=START,END GSM1F405.808
TW(I)=T(I) THETAW1A.159
30 CONTINUE THETAW1A.160
THETAW1A.161
LOOP=1 THETAW1A.162
10000 CONTINUE THETAW1A.163
THETAW1A.164
CALL QSAT
(Q_SAT(START),TW(START),PRESS_REQD_HORIZ(START) GSM1F405.809
& ,END-START+1) !Qs @ required Ta & P GSM1F405.810
C THETAW1A.166
DO 31 I=START,END GSM1F405.811
GS=Q_SAT(I)*LATENT_HEAT(I)+TW(I)*(CP+QAD(I)*CPV) ! Eqn 1.3 THETAW1A.168
THETAW1A.169
CL---------------------SECTION 3.1------------------------------------ THETAW1A.170
CL Find the difference between G(Tw)-G(Ti) THETAW1A.171
C--------------------------------------------------------------------- THETAW1A.172
THETAW1A.173
DIFF(I)=ABS(GG(I)-GS) ! Eqn 1.8 THETAW1A.174
IF(DIFF(I).GT.1.0) THEN THETAW1A.175
THETAW1A.176
CL---------------------SECTION 3.1------------------------------------ THETAW1A.177
CL Calculate the function DG/DT THETAW1A.178
C--------------------------------------------------------------------- THETAW1A.179
THETAW1A.180
TEMP1=RSTAR*TW(I)**2 THETAW1A.181
TEMP2=Q_SAT(I)*MV*LATENT_HEAT(I)**2 THETAW1A.182
DGBYDT=TEMP2/TEMP1 + CP + CPV*QAD(I) ! Eqn 1.6 THETAW1A.183
THETAW1A.184
CL---------------------SECTION 3.2------------------------------------ THETAW1A.185
CL Using the function DG/DT calculate an updated Temperature Tw THETAW1A.186
C--------------------------------------------------------------------- THETAW1A.187
THETAW1A.188
TW(I) = TW(I) - (GS-GG(I)) / DGBYDT ! Eqn 1.7 THETAW1A.189
THETAW1A.190
CL---------------------SECTION 3.3------------------------------------ THETAW1A.191
CL Using the new temperature Tw re-calculate GS First update LATENT_H THETAW1A.192
C--------------------------------------------------------------------- THETAW1A.193
THETAW1A.194
LATENT_HEAT(I)=LC-COEFF*(TW(I)-ZERODEGC) THETAW1A.195
THETAW1A.196
ENDIF THETAW1A.197
31 CONTINUE THETAW1A.198
THETAW1A.199
LOOP=LOOP+1 THETAW1A.200
THETAW1A.201
IF(LOOP.GT.10) THEN THETAW1A.202
ICODE=1 THETAW1A.203
CMESSAGE='THETAW Convergence failure in THETAW' THETAW1A.204
GOTO 9999 THETAW1A.205
ENDIF THETAW1A.206
THETAW1A.207
DO 32 I=START,END GSM1F405.812
IF(DIFF(I).GT.1.0) GOTO 10000 THETAW1A.209
32 CONTINUE THETAW1A.210
THETAW1A.211
C--------------------------------------------------------------------- THETAW1A.212
CL---------------------SECTION 4 ------------------------------------- THETAW1A.213
CL Having calculated now have to descend the sat adiabat down THETAW1A.214
CL to 1000mb solving:- THETAW1A.215
CL DT=(L*EPS/P*Es +R*T/Md)/(Cp*P+(EPS*Mv*L**2*Es/(R*T**2)) *DP THETAW1A.216
C--------------------------------------------------------------------- THETAW1A.217
THETAW1A.218
PP=PRESS_REQD THETAW1A.219
DELTAP=5000.0 ! Pressure increment in PASCALS THETAW1A.220
P_TARGET=100000.0 ! 1000 mb THETAW1A.221
REAL_NLOOP=(P_TARGET-PP)/DELTAP + 0.000001 THETAW1A.222
NLOOP=REAL_NLOOP THETAW1A.223
REM=REAL_NLOOP-NLOOP THETAW1A.224
IF(REM.GT.0.00001) THEN THETAW1A.225
NLOOP=NLOOP+1 THETAW1A.226
DELTAP=(P_TARGET-PP)/NLOOP THETAW1A.227
ENDIF THETAW1A.228
THETAW1A.229
CL Calculate DT/DP = F(T,P) THETAW1A.230
GSM1F405.813
DO 41 K=1,NLOOP THETAW1A.232
DO 40 I=START,END GSM1F405.814
TEMP1=(Q_SAT(I)*PP*MV*LATENT_HEAT(I)**2/(RSTAR*TW(I)**2)) + CP*PP THETAW1A.234
TEMP2=Q_SAT(I)*LATENT_HEAT(I)+RSTAR*TW(I)/MD THETAW1A.235
FF(I)=TEMP2/TEMP1 ! Eqn 1.5 THETAW1A.236
TW_TEMP(I)=FF(I)*DELTAP + TW(I) ! Eqn 1.10 THETAW1A.237
40 CONTINUE THETAW1A.238
THETAW1A.239
PP=PP+DELTAP THETAW1A.240
DO 42 I=START,END GSM1F405.815
PRESS_REQD_HORIZ(I)=PP THETAW1A.242
LATENT_HEAT(I)=LC-COEFF*(TW_TEMP(I)-ZERODEGC) THETAW1A.243
42 CONTINUE THETAW1A.244
THETAW1A.245
CALL QSAT
(Q_SAT(START),TW_TEMP(START),PRESS_REQD_HORIZ(START) GSM1F405.816
& ,END-START+1) !Qs @ Tw & P GSM1F405.817
THETAW1A.247
DO 43 I=START,END GSM1F405.818
TEMP1=(Q_SAT(I)*PP*MV*LATENT_HEAT(I)**2/(RSTAR*TW_TEMP(I)**2)) THETAW1A.249
* + CP*PP THETAW1A.250
TEMP2=Q_SAT(I)*LATENT_HEAT(I)+RSTAR*TW_TEMP(I)/MD THETAW1A.251
FF_NEXT(I)=TEMP2/TEMP1 THETAW1A.252
TW(I)=(FF(I)+FF_NEXT(I))*0.5*DELTAP + TW(I) ! Eqn 1.11 THETAW1A.253
LATENT_HEAT(I)=LC-COEFF*(TW(I)-ZERODEGC) THETAW1A.254
43 CONTINUE THETAW1A.255
41 CONTINUE THETAW1A.256
THETAW1A.257
9999 CONTINUE THETAW1A.258
RETURN THETAW1A.259
END THETAW1A.260
C THETAW1A.261
C THETAW1A.262
*ENDIF THETAW1A.263