*IF DEF,A14_1A EMDIAG1A.2
C ******************************COPYRIGHT****************************** GTS2F400.2377
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.2378
C GTS2F400.2379
C Use, duplication or disclosure of this code is subject to the GTS2F400.2380
C restrictions as set forth in the contract. GTS2F400.2381
C GTS2F400.2382
C Meteorological Office GTS2F400.2383
C London Road GTS2F400.2384
C BRACKNELL GTS2F400.2385
C Berkshire UK GTS2F400.2386
C RG12 2SZ GTS2F400.2387
C GTS2F400.2388
C If no contract has been raised with this copy of the code, the use, GTS2F400.2389
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.2390
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.2391
C Modelling at the above address. GTS2F400.2392
C ******************************COPYRIGHT****************************** GTS2F400.2393
C GTS2F400.2394
CLL SUBROUTINE ENG_MASS_DIAG------------------------------------------ EMDIAG1A.3
CLL EMDIAG1A.4
CLL PURPOSE : PART OF ENERGY CORRECTION SUITE OF ROUTINES EMDIAG1A.5
CLL - TO GLOBALLY INTERGATE TOTAL ENERGY AMD MASS OF EMDIAG1A.6
CLL THE ATMOSPHERE EMDIAG1A.7
CLL EMDIAG1A.8
CLL NOT SUITABLE FOR SINGLE COLUMN MODEL USE EMDIAG1A.9
CLL EMDIAG1A.10
CLL CODE WRITTEN FOR CRAY Y-MP BY D.GREGORY FEBRUARY 1991 EMDIAG1A.11
CLL EMDIAG1A.12
CLL MODEL MODIFICATION HISTORY FROM MODEL VERSION 3.0: EMDIAG1A.13
CLL VERSION DATE EMDIAG1A.14
CLL 3.4 26/05/94 Argument LLINTS added and passed to CALC_RS GSS1F304.821
CLL DEF NOWHBR replaced by LOGICAL LWHITBROM GSS1F304.822
CLL S.J.Swarbrick GSS1F304.823
! 4.1 24/11/95 Changed interface to ENERGY/MASS_SUM to make APB5F401.8
! suitable for MPP use and added TYPFLDPT APB5F401.9
! arguments. P.Burton APB5F401.10
CLL EMDIAG1A.15
CLL PROGRAMMING STANDARDS : UNIFIED MODEL DOCUMENTATION PAPER NO. 4 EMDIAG1A.16
CLL VERSION NO. 1 EMDIAG1A.17
CLL EMDIAG1A.18
CLL SYSTEM TASK : P## EMDIAG1A.19
CLL EMDIAG1A.20
CLL DOCUMENTATION : UNIFIED MODEL DOCUMENTATION PAPER P### EMDIAG1A.21
CLL EMDIAG1A.22
CLLEND----------------------------------------------------------------- EMDIAG1A.23
C EMDIAG1A.24
C*L ARGUMENTS--------------------------------------------------------- EMDIAG1A.25
C EMDIAG1A.26
SUBROUTINE ENG_MASS_DIAG (TL,U,V,AREA_P,AREA_UV,P_FIELD, 2,17EMDIAG1A.27
& U_FIELD,ROW_LENGTH,ROWS, APB5F401.11
2 DELTA_AK,DELTA_BK,AK,BK,TOT_ENERGY, EMDIAG1A.29
3 TOT_MASS_P,PART_MASS_P,P_LEVELS,PSTAR, GSS1F304.824
*CALL ARGFLDPT
APB5F401.12
4 LLINTS,LWHITBROM) GSS1F304.825
C EMDIAG1A.31
IMPLICIT NONE EMDIAG1A.32
LOGICAL LLINTS,LWHITBROM GSS1F304.826
*CALL C_R_CP
EMDIAG1A.33
*CALL C_A
EMDIAG1A.34
C EMDIAG1A.35
C---------------------------------------------------------------------- EMDIAG1A.36
C VECTOR LENGTHS EMDIAG1A.37
C---------------------------------------------------------------------- EMDIAG1A.38
C EMDIAG1A.39
C EMDIAG1A.40
INTEGER P_FIELD ! IN VECTOR LENGTH OF VARIABLES ON EMDIAG1A.41
! P GRID EMDIAG1A.42
C EMDIAG1A.43
INTEGER U_FIELD ! IN VECTOR LENGTH OF VARIABLES ON EMDIAG1A.44
! UV GRID EMDIAG1A.45
C EMDIAG1A.46
C EMDIAG1A.49
INTEGER ROW_LENGTH ! IN NUMBER OF POINTS PER ROW EMDIAG1A.50
C EMDIAG1A.51
INTEGER ROWS ! IN NUMBER OF ROWS IN P GRID EMDIAG1A.52
C EMDIAG1A.53
INTEGER P_LEVELS ! IN NUMBER OF LEVELS IN VERTICAL EMDIAG1A.54
APB5F401.13
! All TYPFLDPT arguments are intent IN APB5F401.14
*CALL TYPFLDPT
APB5F401.15
APB5F401.16
C EMDIAG1A.55
C EMDIAG1A.56
C---------------------------------------------------------------------- EMDIAG1A.57
C VARIABLES WHICH ARE INPUT EMDIAG1A.58
C---------------------------------------------------------------------- EMDIAG1A.59
C EMDIAG1A.60
REAL TL(P_FIELD,P_LEVELS) !IN TEMPERATURE EMDIAG1A.61
C EMDIAG1A.62
REAL U(U_FIELD,P_LEVELS) !IN COMPONENT OF WIND EMDIAG1A.63
C EMDIAG1A.64
REAL V(U_FIELD,P_LEVELS) !IN COMPONENT OF WIND EMDIAG1A.65
C EMDIAG1A.66
REAL AREA_P(P_FIELD) !IN AREA OF CELLS IN P GRID EMDIAG1A.67
C EMDIAG1A.68
REAL AREA_UV(U_FIELD) !IN AREA OF CELLS IN UV GRID EMDIAG1A.69
C EMDIAG1A.70
REAL DELTA_AK(P_LEVELS) ! IN |THICKNESS OF LAYERS IN EMDIAG1A.71
C | EMDIAG1A.72
REAL DELTA_BK(P_LEVELS) ! IN |ETA CO-ORDINATES EMDIAG1A.73
C EMDIAG1A.74
REAL AK(P_LEVELS) ! IN |ETA CO-ORDINATES OF EMDIAG1A.75
C | EMDIAG1A.76
REAL BK(P_LEVELS) ! IN |MID-LAYER POINTS EMDIAG1A.77
C EMDIAG1A.78
REAL PSTAR(P_FIELD) !IN PRESSURE AT SURFACE EMDIAG1A.79
C EMDIAG1A.80
C EMDIAG1A.81
C---------------------------------------------------------------------- EMDIAG1A.82
C VARIABLES WHICH ARE IN AND OUT EMDIAG1A.83
C---------------------------------------------------------------------- EMDIAG1A.84
C EMDIAG1A.85
REAL TOT_ENERGY ! TOTAL ENERGY OF ATMOSPHERE EMDIAG1A.86
C EMDIAG1A.87
REAL TOT_MASS_P ! TOTAL MASS OF ATMOSPHERE EMDIAG1A.88
C EMDIAG1A.89
REAL PART_MASS_P ! PARTIAL MASS OF ATMOSPHERE EMDIAG1A.90
C EMDIAG1A.91
C EMDIAG1A.92
C---------------------------------------------------------------------- EMDIAG1A.93
C VARIABLES WHICH ARE DEFINED LOCALLY EMDIAG1A.94
C---------------------------------------------------------------------- EMDIAG1A.95
C EMDIAG1A.96
REAL PSTAR_DELBK(P_FIELD) ! PRESSURE_AT_SURFACE*DELTA_BK EMDIAG1A.97
C EMDIAG1A.98
REAL DELP_P(P_FIELD) ! MASS ELEMENTS ON P GRID EMDIAG1A.99
C EMDIAG1A.100
REAL DELP_UV(U_FIELD) ! MASS ELEMENTS ON UV GRID EMDIAG1A.101
C EMDIAG1A.102
REAL RS_P_K(P_FIELD) ! RADII ON P GRID EMDIAG1A.103
C EMDIAG1A.104
REAL RS_UV_K(U_FIELD) ! RADII ON UV GRID EMDIAG1A.105
C EMDIAG1A.106
REAL WORK(P_FIELD) ! DUMMY VARIABLE EMDIAG1A.107
C EMDIAG1A.108
REAL TS(P_FIELD) ! OUTPUT FROM SUBROUTINE CALC_RS EMDIAG1A.109
C EMDIAG1A.110
C EMDIAG1A.111
C---------------------------------------------------------------------- EMDIAG1A.112
C INTERNAL LOOP COUNTERS EMDIAG1A.113
C---------------------------------------------------------------------- EMDIAG1A.114
C EMDIAG1A.115
INTEGER I ! LOOP COUNTER EMDIAG1A.116
C EMDIAG1A.117
INTEGER K ! LOOP COUNTER EMDIAG1A.118
INTEGER POINTS ! Number of points for CALC_RS to process APB5F401.17
C EMDIAG1A.119
C---------------------------------------------------------------------- EMDIAG1A.120
C EXTERNAL SUBROUTINE CALLS - P_TO_UV,CALC_RS,ENERGY_SUM,MASS_SUM EMDIAG1A.121
C---------------------------------------------------------------------- EMDIAG1A.122
C EMDIAG1A.123
C*--------------------------------------------------------------------- EMDIAG1A.124
C EMDIAG1A.125
POINTS=LAST_P_VALID_PT-FIRST_VALID_PT+1 APB5F401.18
! Number of points to be processed by CALC_RS. For non-MPP runs this APB5F401.19
! is simply P_FIELD, for MPP, it is all the points, minus any APB5F401.20
! unused halo areas (ie. the halo above North pole row, and beneath APB5F401.21
! South pole row) APB5F401.22
C---------------------------------------------------------------------- EMDIAG1A.126
C ZERO MASS OF ATMOSPHERE EMDIAG1A.127
C---------------------------------------------------------------------- EMDIAG1A.128
C EMDIAG1A.129
TOT_MASS_P = 0.0 EMDIAG1A.130
PART_MASS_P = 0.0 EMDIAG1A.131
*IF DEF,MPP APB5F401.23
! QAN fix APB5F401.24
! Zero DELP_P and RS_P_Karray APB5F401.25
DO I=1,P_FIELD APB5F401.26
DELP_P(I)=0.0 APB5F401.27
RS_P_K(I)=0.0 APB5F401.28
ENDDO APB5F401.29
*ENDIF APB5F401.30
C EMDIAG1A.132
C---------------------------------------------------------------------- EMDIAG1A.133
C ZERO ENERGY OF ATMOSPHERE EMDIAG1A.134
C---------------------------------------------------------------------- EMDIAG1A.135
C EMDIAG1A.136
TOT_ENERGY = 0.0 EMDIAG1A.137
C EMDIAG1A.138
C====================================================================== EMDIAG1A.139
C MAIN LOOP OVER VERTICAL LEVELS EMDIAG1A.140
C====================================================================== EMDIAG1A.141
C EMDIAG1A.142
DO K=1,P_LEVELS EMDIAG1A.143
C EMDIAG1A.144
C---------------------------------------------------------------------- EMDIAG1A.145
C CALCULATE MASS OF LEVEL K AT EACH GRID POINT AND ALSO EMDIAG1A.146
C P*DELTA_BK AT EACH GRID POINT EMDIAG1A.147
C---------------------------------------------------------------------- EMDIAG1A.148
C EMDIAG1A.149
C EMDIAG1A.150
! Loop over all points, including halos APB5F401.31
DO I=FIRST_VALID_PT,LAST_P_VALID_PT APB5F401.32
PSTAR_DELBK(I) = -DELTA_BK(K)*PSTAR(I) EMDIAG1A.152
DELP_P(I) = -DELTA_AK(K) + PSTAR_DELBK(I) EMDIAG1A.153
END DO EMDIAG1A.154
C EMDIAG1A.155
C---------------------------------------------------------------------- EMDIAG1A.156
C INTERPOLATE DELP_P TO UV GRID EMDIAG1A.157
C---------------------------------------------------------------------- EMDIAG1A.158
C EMDIAG1A.159
CALL P_TO_UV
(DELP_P,DELP_UV,P_FIELD,U_FIELD,ROW_LENGTH,ROWS) EMDIAG1A.160
C EMDIAG1A.161
C---------------------------------------------------------------------- EMDIAG1A.162
C CALCULATE RADIUS OF SPHERE AT LEVEL K EMDIAG1A.163
C---------------------------------------------------------------------- EMDIAG1A.164
C EMDIAG1A.165
IF (.NOT.LWHITBROM) THEN GSS1F304.827
C GSS1F304.828
DO I=1,P_FIELD EMDIAG1A.167
RS_P_K(I) = A EMDIAG1A.168
END DO EMDIAG1A.169
C EMDIAG1A.170
DO I=1,U_FIELD EMDIAG1A.171
RS_UV_K(I) = A EMDIAG1A.172
END DO EMDIAG1A.173
C EMDIAG1A.174
ELSE GSS1F304.829
C GSS1F304.830
CALL CALC_RS
(PSTAR(FIRST_VALID_PT),AK,BK,TS(FIRST_VALID_PT), APB5F401.33
& WORK(FIRST_VALID_PT),RS_P_K(FIRST_VALID_PT), APB5F401.34
& POINTS,K,P_LEVELS,LLINTS) APB5F401.35
C EMDIAG1A.177
C EMDIAG1A.178
C---------------------------------------------------------------------- EMDIAG1A.179
C INTERPLOATE RADIUS OF SPHERE AT LEVEL K TO UV GRID EMDIAG1A.180
C---------------------------------------------------------------------- EMDIAG1A.181
C EMDIAG1A.182
CALL P_TO_UV
(RS_P_K,RS_UV_K,P_FIELD,U_FIELD,ROW_LENGTH,ROWS) EMDIAG1A.183
C EMDIAG1A.184
END IF GSS1F304.833
C EMDIAG1A.186
C---------------------------------------------------------------------- EMDIAG1A.187
C SUM CP*TL OVER GLOBE FOR LEVEL K AND ADD TO TOTAL ENERGY SUM EMDIAG1A.188
C---------------------------------------------------------------------- EMDIAG1A.189
C EMDIAG1A.190
CALL ENERGY_SUM
(TL(1,K),START_POINT_NO_HALO, APB5F401.36
& END_P_POINT_NO_HALO,P_FIELD, APB5F401.37
& AREA_P,DELP_P,RS_P_K,CP,TOT_ENERGY) APB5F401.38
C EMDIAG1A.194
C EMDIAG1A.195
C---------------------------------------------------------------------- EMDIAG1A.196
C SUM 0.5*U*U OVER GLOBE FOR LEVEL K AND ADD TO TOTAL ENERGY SUM EMDIAG1A.197
C---------------------------------------------------------------------- EMDIAG1A.198
C EMDIAG1A.199
! Loop over all points except North and South Halos APB5F401.39
DO I=FIRST_FLD_PT,LAST_U_FLD_PT APB5F401.40
WORK(I) = U(I,K)*U(I,K) EMDIAG1A.201
END DO EMDIAG1A.202
C EMDIAG1A.203
CALL ENERGY_SUM
(WORK,START_POINT_NO_HALO, APB5F401.41
& END_U_POINT_NO_HALO,U_FIELD, APB5F401.42
& AREA_UV,DELP_UV,RS_UV_K,0.5,TOT_ENERGY) APB5F401.43
C EMDIAG1A.207
C EMDIAG1A.208
C---------------------------------------------------------------------- EMDIAG1A.209
C SUM 0.5*V*V OVER GLOBE FOR LEVEL K AND ADD TO TOTAL ENERGY SUM EMDIAG1A.210
C---------------------------------------------------------------------- EMDIAG1A.211
C EMDIAG1A.212
! Loop over all points except North and South Halos APB5F401.44
DO I=FIRST_FLD_PT,LAST_U_FLD_PT APB5F401.45
WORK(I) = V(I,K)*V(I,K) EMDIAG1A.214
END DO EMDIAG1A.215
C EMDIAG1A.216
CALL ENERGY_SUM
(WORK,START_POINT_NO_HALO, APB5F401.46
& END_U_POINT_NO_HALO,U_FIELD, APB5F401.47
& AREA_UV,DELP_UV,RS_UV_K,0.5,TOT_ENERGY) APB5F401.48
C EMDIAG1A.220
C EMDIAG1A.221
C---------------------------------------------------------------------- EMDIAG1A.222
C SUM MASS OF LEVEL K OVER GLOBE AND ADD TO TOTAL ATMOSPHERIC MASS EMDIAG1A.223
C ON THE P_GRID EMDIAG1A.224
C---------------------------------------------------------------------- EMDIAG1A.225
C EMDIAG1A.226
CALL MASS_SUM
(DELP_P,RS_P_K,AREA_P, APB5F401.49
& START_POINT_NO_HALO,END_P_POINT_NO_HALO, APB5F401.50
& P_FIELD,TOT_MASS_P) APB5F401.51
C EMDIAG1A.230
C EMDIAG1A.231
C---------------------------------------------------------------------- EMDIAG1A.232
C SUM PSTAR*DELBK FOR LEVEL K OVER THE GLOBE ON THE P GRID EMDIAG1A.233
C---------------------------------------------------------------------- EMDIAG1A.234
C EMDIAG1A.235
CALL MASS_SUM
(PSTAR_DELBK,RS_P_K,AREA_P, APB5F401.52
& START_POINT_NO_HALO,END_P_POINT_NO_HALO, APB5F401.53
& P_FIELD,PART_MASS_P) APB5F401.54
C EMDIAG1A.239
IF (LWHITBROM) THEN GSS1F304.834
C EMDIAG1A.241
C---------------------------------------------------------------------- EMDIAG1A.242
C STORE RADIUS OF SPHERE AT LEVEL K INTO WORK TO ALLOW CALCULATION EMDIAG1A.243
C OF RADIUS AT LEVEL K+1 EMDIAG1A.244
C---------------------------------------------------------------------- EMDIAG1A.245
C EMDIAG1A.246
DO I=1,P_FIELD EMDIAG1A.247
WORK(I) = RS_P_K(I) EMDIAG1A.248
END DO EMDIAG1A.249
C EMDIAG1A.250
END IF GSS1F304.835
C EMDIAG1A.252
C====================================================================== EMDIAG1A.253
C END OF MAIN LOOP OVER LEVELS EMDIAG1A.254
C====================================================================== EMDIAG1A.255
C EMDIAG1A.256
END DO EMDIAG1A.257
C EMDIAG1A.258
RETURN EMDIAG1A.259
END EMDIAG1A.260
*ENDIF EMDIAG1A.261