*IF DEF,A16_1A DIATHA1A.2
C ******************************COPYRIGHT****************************** GTS2F400.2161
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.2162
C GTS2F400.2163
C Use, duplication or disclosure of this code is subject to the GTS2F400.2164
C restrictions as set forth in the contract. GTS2F400.2165
C GTS2F400.2166
C Meteorological Office GTS2F400.2167
C London Road GTS2F400.2168
C BRACKNELL GTS2F400.2169
C Berkshire UK GTS2F400.2170
C RG12 2SZ GTS2F400.2171
C GTS2F400.2172
C If no contract has been raised with this copy of the code, the use, GTS2F400.2173
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.2174
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.2175
C Modelling at the above address. GTS2F400.2176
C ******************************COPYRIGHT****************************** GTS2F400.2177
C GTS2F400.2178
CLL SUBROUTINE THADV--------------------------------------------------- DIATHA1A.3
CLL DIATHA1A.4
CLL PURPOSE: Calculates thermal advection at pressure levels DIATHA1A.5
CLL Tested under compiler CFT77 DIATHA1A.6
CLL Tested under OS version 5.1 DIATHA1A.7
CLL DIATHA1A.8
CLL D.Robinson <- programmer of some or all of previous code or changes DIATHA1A.9
CLL DIATHA1A.10
CLL Model Modification history from model version 3.0: DIATHA1A.11
CLL version Date DIATHA1A.12
CLL 4.4 23/06/97 Initialise TH_TP. D. Robinson. GDR2F404.1
!LL 4.5 15/04/98 Added start-end arguments to V_INT and GSM1F405.610
!LL V_INT_T routines. S.D.Mullerworth GSM1F405.611
CLL DIATHA1A.13
CLL Logical components covered: D424 DIATHA1A.14
CLL DIATHA1A.15
CLL Project TASK: DIATHA1A.16
CLL DIATHA1A.17
CLL Programming standard: U M DOC Paper NO. 4, DIATHA1A.18
CLL DIATHA1A.19
CLL External documentation: DIATHA1A.20
CLL DIATHA1A.21
CLLEND------------------------------------------------------------------ DIATHA1A.22
C DIATHA1A.23
C*L ARGUMENTS:--------------------------------------------------------- DIATHA1A.24
SUBROUTINE DIA_THADV( 2,4DIATHA1A.25
C data in DIATHA1A.26
& U,V,THETA,PPT,PUV,PSTAR,PRESS_REQD,P_EXNER_HALF, DIATHA1A.27
C data out DIATHA1A.28
& TH_TP, DIATHA1A.29
C constants in DIATHA1A.30
& P_FIELD,U_FIELD,P_LEVELS,ROW_LENGTH,P_ROWS,SEC_U_LATITUDE, DIATHA1A.31
& EW_SPACE,NS_SPACE,AKH,BKH) DIATHA1A.32
C* DIATHA1A.33
C*L DIATHA1A.34
C----------------------------------------------------------------------- DIATHA1A.35
IMPLICIT NONE DIATHA1A.36
C----------------------------------------------------------------------- DIATHA1A.37
EXTERNAL V_INT_T,V_INT,UV_TO_P_FULL DIATHA1A.38
C----------------------------------------------------------------------- DIATHA1A.39
INTEGER DIATHA1A.40
* P_FIELD ! IN NO OF POINTS ON P/T GRID DIATHA1A.41
*,U_FIELD ! IN NO OF POINTS ON U/V GRID DIATHA1A.42
*,P_LEVELS ! IN NO OF MODEL LEVELS DIATHA1A.43
*,P_ROWS ! IN NO OF ROWS ON P/T GRID DIATHA1A.44
*,ROW_LENGTH ! IN NO OF COLUMNS DIATHA1A.45
C----------------------------------------------------------------------- DIATHA1A.46
REAL DIATHA1A.47
* U(U_FIELD,P_LEVELS) ! IN U FIELD AT FULL LEVELS DIATHA1A.48
*,V(U_FIELD,P_LEVELS) ! IN V FIELD AT FULL LEVELS DIATHA1A.49
*,THETA(P_FIELD,P_LEVELS) ! IN POTENTIAL TEMPERATURE " " DIATHA1A.50
*,PRESS_REQD ! IN PRESSURE AT WHICH TO DIATHA1A.51
* ! CALCULATE THERMAL ADVECTION DIATHA1A.52
*,TH_TP(P_FIELD) ! OUT THERMAL ADVECTION AT DIATHA1A.53
* ! REQUIRED LEVEL DIATHA1A.54
*,PPT(P_FIELD,P_LEVELS) ! IN PRESS FIELD AT P/T POINTS DIATHA1A.55
*,PUV(U_FIELD,P_LEVELS) ! IN PRESS FIELD AT U/V POINTS DIATHA1A.56
*,PSTAR(P_FIELD) ! IN SURFACE PRESSURE FIELD DIATHA1A.57
*,P_EXNER_HALF(P_FIELD,P_LEVELS+1) ! IN EXNER PRESSURE AT MODEL DIATHA1A.58
* ! HALF LEVELS DIATHA1A.59
*,SEC_U_LATITUDE(U_FIELD) ! IN 1/COS(LAT) AT U/V POINTS DIATHA1A.60
*,EW_SPACE ! IN LONGITUDE GRID SPACING DIATHA1A.61
*,NS_SPACE ! IN LATITUDE GRID SPACING DIATHA1A.62
* ! BOTH THE ABOVE IN DEGREES DIATHA1A.63
*,AKH,BKH ! IN Hybrid Coords. A and B DIATHA1A.64
* ! values on half levels. DIATHA1A.65
C* DIATHA1A.66
C*L DIATHA1A.67
C----------------------------------------------------------------------- DIATHA1A.68
C Local Variables DIATHA1A.69
C----------------------------------------------------------------------- DIATHA1A.70
INTEGER DIATHA1A.71
* I,J,K ! LOOP COUNTERS DIATHA1A.72
*,T_REF ! REFERENCE LEVEL FOR VERTICAL INTERPOLATION DIATHA1A.73
* ! OF TEMPERATURES DIATHA1A.74
C----------------------------------------------------------------------- DIATHA1A.75
REAL DIATHA1A.76
* LONG_SI_OVER_TWO_A ! LONGITUDE STEP INVERSE (IN RADIANS) DIATHA1A.77
* ! DIVIDED BY (2*EARTH'S RADIUS(A)) DIATHA1A.78
*,LAT_SI_OVER_TWO_A ! LATITUDE STEP INVERSE (IN RADIANS) DIATHA1A.79
* ! DIVIDED BY (2*EARTH'S RADIUS(A)) DIATHA1A.80
*,T_P(P_FIELD) ! TEMPERATURE FIELD ON REQUIRED LEVEL DIATHA1A.81
*,U_P(U_FIELD) ! U FIELD ON REQUIRED LEVEL DIATHA1A.82
*,V_P(U_FIELD) ! V FIELD ON REQUIRED LEVEL DIATHA1A.83
*,TH_UV(U_FIELD) ! THERMAL ADVECTION AT U/V POINTS DIATHA1A.84
*,PPT_REQ(P_FIELD) ! PRESSURE SURFACE REQUIRED ARRAY DIATHA1A.85
*,DUMMY1 ! DUMMY ARGUMENT1 DIATHA1A.86
*,DUMMY2 ! DUMMY ARGUMENT2 DIATHA1A.87
*,TERM1 ! 1st TERM USED IN CALCULATION DIATHA1A.88
*,TERM2 ! 2nd TERM USED IN CALCULATION DIATHA1A.89
C----------------------------------------------------------------------- DIATHA1A.90
C Constants required : A=radius of Earth, DIATHA1A.91
C RECIP_PI_OVER_180=180/Pi DIATHA1A.92
C----------------------------------------------------------------------- DIATHA1A.93
*CALL C_A
DIATHA1A.94
*CALL C_PI
DIATHA1A.95
T_REF=2 ! SET TO SECOND MODEL LEVEL DIATHA1A.96
C*---------------------------------------------------------------------- DIATHA1A.97
C----------------------------------------------------------------------- GDR2F404.2
CL Initialise TH_TP GDR2F404.3
C----------------------------------------------------------------------- GDR2F404.4
DO I=1,P_FIELD GDR2F404.5
TH_TP(I)=0.0 GDR2F404.6
ENDDO GDR2F404.7
C----------------------------------------------------------------------- DIATHA1A.98
CL Set up Pressure required array DIATHA1A.99
C----------------------------------------------------------------------- DIATHA1A.100
DO I=1,P_FIELD DIATHA1A.101
PPT_REQ(I)=PRESS_REQD DIATHA1A.102
ENDDO DIATHA1A.103
C----------------------------------------------------------------------- DIATHA1A.104
CL Interpolate the temperature field onto the required level DIATHA1A.105
C----------------------------------------------------------------------- DIATHA1A.106
CALL V_INT_T
(T_P,PPT_REQ,PPT(1,T_REF),PSTAR,P_EXNER_HALF, DIATHA1A.107
&THETA,P_FIELD,P_LEVELS,T_REF,AKH,BKH,1,P_FIELD) GSM1F405.612
C----------------------------------------------------------------------- DIATHA1A.109
CL Interpolate the U field onto the required level DIATHA1A.110
C----------------------------------------------------------------------- DIATHA1A.111
CALL V_INT
(PUV,PPT_REQ,U,U_P, DIATHA1A.112
&U_FIELD,P_LEVELS,DUMMY1,DUMMY2,.FALSE.,1,U_FIELD) GSM1F405.613
C----------------------------------------------------------------------- DIATHA1A.114
CL Interpolate the V field onto the required level DIATHA1A.115
C----------------------------------------------------------------------- DIATHA1A.116
CALL V_INT
(PUV,PPT_REQ,V,V_P, DIATHA1A.117
& U_FIELD,P_LEVELS,DUMMY1,DUMMY2,.FALSE.,1,U_FIELD) GSM1F405.614
C----------------------------------------------------------------------- DIATHA1A.119
CL Calculation of thermal advection DIATHA1A.120
C----------------------------------------------------------------------- DIATHA1A.121
C DIATHA1A.122
C *T4 _ *T1 Y = Latitude DIATHA1A.123
C ^ X = Longitude DIATHA1A.124
C dY dY= Latitude interval in radians DIATHA1A.125
C ^ dX= Longitude interval in radians DIATHA1A.126
C <---dX--*U,V---> A = Radius of Earth in metres DIATHA1A.127
C ^ T1-4= Temperatures in Kelvin (T_P) DIATHA1A.128
C ^ U,V= Wind components in m/s (U_P,V_P) DIATHA1A.129
C ^ DIATHA1A.130
C *T3 _ *T2 DIATHA1A.131
C DIATHA1A.132
C Term1 Term2 DIATHA1A.133
C d(Temp) ( U*(T1+T2-T3-T4) V*(T4+T1-T2-T3)) DIATHA1A.134
C Thermal advection = ------- = -( --------------- + ---------------) DIATHA1A.135
C Degrees/second d(Time) ( Cos(Y)*dX*2*A 2*dY*A ) DIATHA1A.136
C DIATHA1A.137
C----------------------------------------------------------------------- DIATHA1A.138
CL Calculate 1/(dX*2*A) and 1/(dY*2*A) DIATHA1A.139
C----------------------------------------------------------------------- DIATHA1A.140
LONG_SI_OVER_TWO_A = 0.5*RECIP_PI_OVER_180/EW_SPACE/A DIATHA1A.141
LAT_SI_OVER_TWO_A = 0.5*RECIP_PI_OVER_180/NS_SPACE/A DIATHA1A.142
C----------------------------------------------------------------------- DIATHA1A.143
DO I=1,U_FIELD-1 DIATHA1A.144
C----------------------------------------------------------------------- DIATHA1A.145
C Calculate terms for all cases DIATHA1A.146
C----------------------------------------------------------------------- DIATHA1A.147
TERM1=U_P(I)*(T_P(I+1)+T_P(I+1+ROW_LENGTH)-T_P(I+ROW_LENGTH) DIATHA1A.148
* -T_P(I))*SEC_U_LATITUDE(I)*LONG_SI_OVER_TWO_A DIATHA1A.149
C DIATHA1A.150
TERM2=V_P(I)*(T_P(I)+T_P(I+1)-T_P(I+1+ROW_LENGTH) DIATHA1A.151
* -T_P(I+ROW_LENGTH))*LAT_SI_OVER_TWO_A DIATHA1A.152
TH_UV(I)=-(TERM1+TERM2) DIATHA1A.153
ENDDO DIATHA1A.154
*IF DEF,GLOBAL DIATHA1A.155
C----------------------------------------------------------------------- DIATHA1A.156
C Recalculate terms for end of each row in the Global model DIATHA1A.157
C----------------------------------------------------------------------- DIATHA1A.158
DO I=ROW_LENGTH,U_FIELD,ROW_LENGTH DIATHA1A.159
TERM1=U_P(I)*(T_P(I+1-ROW_LENGTH)+T_P(I+1)-T_P(I+ROW_LENGTH) DIATHA1A.160
* -T_P(I))*SEC_U_LATITUDE(I)*LONG_SI_OVER_TWO_A DIATHA1A.161
C DIATHA1A.162
TERM2=V_P(I)*(T_P(I)+T_P(I+1-ROW_LENGTH)-T_P(I+1) DIATHA1A.163
* -T_P(I+ROW_LENGTH))*LAT_SI_OVER_TWO_A DIATHA1A.164
TH_UV(I)=-(TERM1+TERM2) DIATHA1A.165
ENDDO DIATHA1A.166
*ELSE DIATHA1A.167
C----------------------------------------------------------------------- DIATHA1A.168
CL For regional model first and last values in each row recalculated DIATHA1A.169
CL by extrapolation of adjacent two points DIATHA1A.170
C----------------------------------------------------------------------- DIATHA1A.171
DO I=ROW_LENGTH,U_FIELD,ROW_LENGTH DIATHA1A.172
J=I-ROW_LENGTH+1 DIATHA1A.173
TH_UV(I)=2.*TH_UV(I-1)-TH_UV(I-2) DIATHA1A.174
TH_UV(J)=2.*TH_UV(J+1)-TH_UV(J+2) DIATHA1A.175
ENDDO DIATHA1A.176
*ENDIF DIATHA1A.177
DIATHA1A.178
C----------------------------------------------------------------------- DIATHA1A.179
CL Interpolate thermal advection from U/V to P/T points DIATHA1A.180
C----------------------------------------------------------------------- DIATHA1A.181
CALL UV_TO_P_FULL
DIATHA1A.182
1(TH_UV,TH_TP,U_FIELD,P_FIELD,ROW_LENGTH,P_ROWS) DIATHA1A.183
C----------------------------------------------------------------------- DIATHA1A.184
DIATHA1A.185
RETURN DIATHA1A.186
END DIATHA1A.187
*ENDIF DIATHA1A.188