*IF DEF,A16_1A FREEZE1A.2
C ******************************COPYRIGHT****************************** GTS2F400.3151
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.3152
C GTS2F400.3153
C Use, duplication or disclosure of this code is subject to the GTS2F400.3154
C restrictions as set forth in the contract. GTS2F400.3155
C GTS2F400.3156
C Meteorological Office GTS2F400.3157
C London Road GTS2F400.3158
C BRACKNELL GTS2F400.3159
C Berkshire UK GTS2F400.3160
C RG12 2SZ GTS2F400.3161
C GTS2F400.3162
C If no contract has been raised with this copy of the code, the use, GTS2F400.3163
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.3164
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.3165
C Modelling at the above address. GTS2F400.3166
C ******************************COPYRIGHT****************************** GTS2F400.3167
C GTS2F400.3168
CLL SUBROUTINE FREEZE------------------------------------------ FREEZE1A.3
CLL FREEZE1A.4
CLL PURPOSE: Calculates the true height and pressure of a temperature FREEZE1A.5
CLL surface with temperature T0. FREEZE1A.6
CLL T0 set in PHY_DIAG. T0=273.16K for freezing level FREEZE1A.7
CLL T0=253.16K for -20 degree C level FREEZE1A.8
CLL Tested under compiler CFT77 FREEZE1A.9
CLL Tested under OS version 5.1 FREEZE1A.10
CLL FREEZE1A.11
CLL J.Heming <- programmer of some or all of previous code or changes FREEZE1A.12
CLL D.Robinson <- programmer of some or all of previous code or changes FREEZE1A.13
CLL P.Smith <- programmer of some or all of previous code or changes APS3F304.1
CLL FREEZE1A.14
CLL Model Modification history from model version 3.0: FREEZE1A.15
CLL version Date FREEZE1A.16
CLL 3.4 23/8/94 Correct search for T0 to find highest occurence APS3F304.2
CLL avioding low level inversions PJS APS3F304.3
!LL 4.5 15/04/98 Start-end args added to enable dupicate halo GSM1F405.549
!LL calculations to be avoided. S.D.Mullerworth GSM1F405.550
CLL FREEZE1A.17
CLL Logical components covered D422,D421,D423 FREEZE1A.18
CLL Project TASK: D4 FREEZE1A.19
CLL FREEZE1A.20
CLL Programming standard: U M DOC Paper NO. 4, FREEZE1A.21
CLL FREEZE1A.22
CLL External documentation FREEZE1A.23
CLL FREEZE1A.24
CLLEND------------------------------------------------------------- FREEZE1A.25
C FREEZE1A.26
C*L ARGUMENTS:--------------------------------------------------- FREEZE1A.27
SUBROUTINE FREEZE( 4,1FREEZE1A.28
C data in FREEZE1A.29
& T0,P,THETA,T,P_EXNER_HALF,PSTAR,Q,MODEL_HALF_HEIGHT,OROG, FREEZE1A.30
C data out FREEZE1A.31
& Z_AT_T0,P_AT_T0, FREEZE1A.32
C constants in FREEZE1A.33
& POINTS,P_LEVELS,Q_LEVELS,L,AKH,BKH,START,END) GSM1F405.551
C* FREEZE1A.35
C*L FREEZE1A.36
C----------------------------------------------------------------------- FREEZE1A.37
IMPLICIT NONE FREEZE1A.38
C----------------------------------------------------------------------- FREEZE1A.39
EXTERNAL V_INT_Z FREEZE1A.40
C----------------------------------------------------------------------- FREEZE1A.41
INTEGER FREEZE1A.42
* POINTS ! IN NO OF POINTS FREEZE1A.43
*,P_LEVELS ! IN NO OF MODEL LEVELS FREEZE1A.44
*,Q_LEVELS ! IN NO OF HUMIDITY LEVELS FREEZE1A.45
*,L ! IN LEVEL OF MODEL USED TO CALC HEIGHT FREEZE1A.46
&,START,END ! IN Range of points to calculate GSM1F405.552
C----------------------------------------------------------------------- FREEZE1A.47
REAL FREEZE1A.48
* P(POINTS,P_LEVELS) ! IN PRESSURE AT FULL LEVELS FREEZE1A.49
*,THETA(POINTS,P_LEVELS) ! IN POTENTIAL TEMPERATURE " " " FREEZE1A.50
*,T(POINTS,P_LEVELS) ! IN TEMPERATURE AT FULL LEVELS FREEZE1A.51
*,P_EXNER_HALF(POINTS,P_LEVELS+1) ! IN EXNER PRESSURE AT MODEL FREEZE1A.52
* ! HALF LEVELS FREEZE1A.53
*,PSTAR(POINTS) ! IN SURFACE PRESSURE FREEZE1A.54
*,Q(POINTS,Q_LEVELS) ! SPECIFIC HUM AT FULL LEVELS FREEZE1A.55
*,MODEL_HALF_HEIGHT(POINTS,P_LEVELS+1)!IN HEIGHT OF HALF LVLS FREEZE1A.56
*,OROG(POINTS) ! IN MODEL OROGRAPHY FREEZE1A.57
*,T0 ! IN TEMP OF SURFACE IN K FREEZE1A.58
*,AKH(P_LEVELS+1) ! IN A values at half levels. FREEZE1A.59
*,BKH(P_LEVELS+1) ! IN B values at half levels. FREEZE1A.60
*,P_AT_T0(POINTS) ! OUT PRESSURE AT LEVEL WITH TEMP T0 FREEZE1A.61
*,Z_AT_T0(POINTS) ! OUT HEIGHT AT LEVEL WITH TEMP T0 FREEZE1A.62
C* FREEZE1A.63
C*L FREEZE1A.64
C----------------------------------------------------------------------- FREEZE1A.65
C Local Variables FREEZE1A.66
C----------------------------------------------------------------------- FREEZE1A.67
INTEGER FREEZE1A.68
* I,K ! LOOP COUNTERS FREEZE1A.69
*,J ! LOWEST ETA LEVEL WITH TEMP<T0 FREEZE1A.70
REAL FREEZE1A.71
* PJP1, PJ, PJM1 ! Pressure at half levels J+1,J,J-1 FREEZE1A.72
*,P_EXNER_FULL_JM1 ! EXNER PRESSURE AT FULL LEVEL J-1 FREEZE1A.73
*,P_EXNER_FULL_J ! " " " " " J FREEZE1A.74
*,DEL_EXNER_JM1 ! EXNER PRESSURE DIFF BET LEVELS FREEZE1A.75
* ! J-3/2 AND J-1/2 FREEZE1A.76
*,DEL_EXNER_J ! " " " " "J-1/2 AND J+1/2 FREEZE1A.77
*,TERM1,TERM2 ! FREEZE1A.78
*,LAPSE_RATE ! LAPSE RATE BETWEEN LEVELS J-1 AND J FREEZE1A.79
*,Z(POINTS,P_LEVELS)! HEIGHT OF POINTS WITH PRESSURE P FREEZE1A.80
C----------------------------------------------------------------------- FREEZE1A.81
C Note: these variables are temporary FREEZE1A.82
C----------------------------------------------------------------------- FREEZE1A.83
INTEGER I_F FREEZE1A.84
REAL T1,MULT FREEZE1A.85
C----------------------------------------------------------------------- FREEZE1A.86
C Constants FREEZE1A.87
C----------------------------------------------------------------------- FREEZE1A.88
C* FREEZE1A.89
*CALL C_R_CP
FREEZE1A.90
*CALL C_G
FREEZE1A.91
C----------------------------------------------------------------------- FREEZE1A.92
REAL CP_OVER_G FREEZE1A.93
PARAMETER(CP_OVER_G=CP/G) FREEZE1A.94
FREEZE1A.95
*CALL P_EXNERC
FREEZE1A.96
C----------------------------------------------------------------------- FREEZE1A.97
CL Calculate heights of full levels FREEZE1A.98
C----------------------------------------------------------------------- FREEZE1A.99
DO K=1,P_LEVELS FREEZE1A.100
CALL V_INT_Z
(P(1,K),P(1,L),PSTAR,P_EXNER_HALF,THETA,Q, FREEZE1A.101
& MODEL_HALF_HEIGHT,Z(1,K),POINTS,P_LEVELS,Q_LEVELS,L,AKH,BKH GSM1F405.553
& ,START,END) GSM1F405.554
ENDDO FREEZE1A.103
C----------------------------------------------------------------------- FREEZE1A.104
T1=T0 FREEZE1A.105
I_F=0 FREEZE1A.106
C----------------------------------------------------------------------- FREEZE1A.107
CL Search upwards for levels with temperature less than T0 where level APS3F304.4
CL below is greater than T0. Highest of these is used for calulations. APS3F304.5
C----------------------------------------------------------------------- FREEZE1A.109
DO 111 I=START,END GSM1F405.555
J=0 FREEZE1A.111
DO K=1,P_LEVELS FREEZE1A.112
IF (T(I,K).LT.T0) THEN APS3F304.6
IF (K.EQ.1) THEN APS3F304.7
J = K APS3F304.8
ELSEIF (T(I,K-1).GT.T0) THEN APS3F304.9
J = K APS3F304.10
ENDIF APS3F304.11
ENDIF APS3F304.12
ENDDO FREEZE1A.114
C----------------------------------------------------------------------- FREEZE1A.115
IF (J.GE.2) THEN FREEZE1A.116
I_F=I_F+1 FREEZE1A.117
C----------------------------------------------------------------------- FREEZE1A.118
CL Exner pressure at full levels FREEZE1A.119
C----------------------------------------------------------------------- FREEZE1A.120
PJP1 = AKH(J+1) + BKH(J+1)*PSTAR(I) FREEZE1A.121
PJ = AKH(J) + BKH(J) *PSTAR(I) FREEZE1A.122
PJM1 = AKH(J-1) + BKH(J-1)*PSTAR(I) FREEZE1A.123
P_EXNER_FULL_J = P_EXNER_C FREEZE1A.124
& (P_EXNER_HALF(I,J+1),P_EXNER_HALF(I,J),PJP1,PJ,KAPPA) FREEZE1A.125
P_EXNER_FULL_JM1 = P_EXNER_C FREEZE1A.126
& (P_EXNER_HALF(I,J),P_EXNER_HALF(I,J-1),PJ,PJM1,KAPPA) FREEZE1A.127
C----------------------------------------------------------------------- FREEZE1A.128
CL Exner pressure difference across half layers FREEZE1A.129
C----------------------------------------------------------------------- FREEZE1A.130
DEL_EXNER_J=P_EXNER_HALF(I,J)-P_EXNER_FULL_J FREEZE1A.131
DEL_EXNER_JM1=P_EXNER_FULL_JM1-P_EXNER_HALF(I,J) FREEZE1A.132
C----------------------------------------------------------------------- FREEZE1A.133
CL Denominator FREEZE1A.134
C----------------------------------------------------------------------- FREEZE1A.135
TERM2=CP_OVER_G*(THETA(I,J-1)*DEL_EXNER_JM1 FREEZE1A.136
* +THETA(I,J)*DEL_EXNER_J) FREEZE1A.137
C----------------------------------------------------------------------- FREEZE1A.138
CL Numerator FREEZE1A.139
C----------------------------------------------------------------------- FREEZE1A.140
TERM1=THETA(I,J-1)*P_EXNER_FULL_JM1-THETA(I,J)*P_EXNER_FULL_J FREEZE1A.141
C----------------------------------------------------------------------- FREEZE1A.142
CL Lapse rate between level j-1 and j FREEZE1A.143
C----------------------------------------------------------------------- FREEZE1A.144
LAPSE_RATE=TERM1/TERM2 FREEZE1A.145
MULT=(T(I,J-1)-T0)/LAPSE_RATE FREEZE1A.146
C----------------------------------------------------------------------- FREEZE1A.147
CL Calculate the height and pressure at level with temperature T0 FREEZE1A.148
C----------------------------------------------------------------------- FREEZE1A.149
Z_AT_T0(I)=Z(I,J-1)+(T(I,J-1)-T0)/LAPSE_RATE FREEZE1A.150
P_AT_T0(I)=P(I,J-1)*(T0/T(I,J-1))**(G/(R*LAPSE_RATE)) FREEZE1A.151
ELSE IF(J.EQ.1) THEN FREEZE1A.152
Z_AT_T0(I)=OROG(I) FREEZE1A.153
P_AT_T0(I)=PSTAR(I) FREEZE1A.154
ELSE ! J=0 FREEZE1A.155
Z_AT_T0(I)=-1 FREEZE1A.156
P_AT_T0(I)=-1 FREEZE1A.157
ENDIF FREEZE1A.158
111 CONTINUE FREEZE1A.159
C----------------------------------------------------------------------- FREEZE1A.160
RETURN FREEZE1A.161
END FREEZE1A.162
*ENDIF FREEZE1A.163