*IF DEF,A14_1A,OR,DEF,A14_1B APB5F401.69
C ******************************COPYRIGHT****************************** GTS2F400.4573
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.4574
C GTS2F400.4575
C Use, duplication or disclosure of this code is subject to the GTS2F400.4576
C restrictions as set forth in the contract. GTS2F400.4577
C GTS2F400.4578
C Meteorological Office GTS2F400.4579
C London Road GTS2F400.4580
C BRACKNELL GTS2F400.4581
C Berkshire UK GTS2F400.4582
C RG12 2SZ GTS2F400.4583
C GTS2F400.4584
C If no contract has been raised with this copy of the code, the use, GTS2F400.4585
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.4586
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.4587
C Modelling at the above address. GTS2F400.4588
C ******************************COPYRIGHT****************************** GTS2F400.4589
C GTS2F400.4590
CLL Subroutine: INIT_EMCORR-------------------------------------------- @DYALLOC.1118
CLL @DYALLOC.1119
CLL Purpose: Interface routine required to pass super arrays down into @DYALLOC.1120
CLL INIT_EMCORR2, which initialises the energy correction. @DYALLOC.1121
CLL @DYALLOC.1122
CLL Tested under compiler: cft77 @DYALLOC.1123
CLL Tested under OS version: UNICOS 6.1.5A @DYALLOC.1124
CLL @DYALLOC.1125
CLL Model Modification history: @DYALLOC.1126
CLL version date @DYALLOC.1127
CLL 3.2 30/03/93 Redefine INIT_EMCORR to become a new routine @DYALLOC.1128
CLL INIT_EMCORR2 and introduce a control interface @DYALLOC.1129
CLL routine INIT_EMCORR for dynamic allocation of @DYALLOC.1130
CLL main data arrays. @DYALLOC.1131
CLL 3.4 23/06/94 Arguments LLINTS,LWHITBROM added and passed to GSS1F304.836
CLL INIT_EMCORR2 S.J.Swarbrick GSS1F304.837
!LL 4.1 23/04/96 Added TYPFLDPT variables to pass down to APB5F401.70
! ENG_MASS_DIAG P.Burton APB5F401.71
CLL @DYALLOC.1132
CLL Programming standard: UM Doc Paper 3, version 2 (7/9/90) @DYALLOC.1133
CLL @DYALLOC.1134
CLL Logical components covered: C0 @DYALLOC.1135
CLL @DYALLOC.1136
CLL Project task: C0 @DYALLOC.1137
CLL @DYALLOC.1138
CLL External documentation: On-line UM document C1 - The top-level @DYALLOC.1139
CLL dynamic allocation @DYALLOC.1140
CLL @DYALLOC.1141
CLL ------------------------------------------------------------------- @DYALLOC.1142
C*L Interface and arguments: ------------------------------------------ @DYALLOC.1143
C @DYALLOC.1144
SUBROUTINE INIT_EMCORR( 1,1@DYALLOC.1145
*CALL ARGSIZE
@DYALLOC.1146
*CALL ARGD1
@DYALLOC.1147
*CALL ARGDUMA
@DYALLOC.1148
*CALL ARGPTRA
@DYALLOC.1149
*CALL ARGCONA
@DYALLOC.1150
& ICODE,CMESSAGE,LLINTS,LWHITBROM) GSS1F304.838
C @DYALLOC.1152
C*---------------------------------------------------------------------- @DYALLOC.1153
IMPLICIT NONE @DYALLOC.1154
LOGICAL LLINTS,LWHITBROM GSS1F304.839
C @DYALLOC.1155
C Subroutines called @DYALLOC.1156
C @DYALLOC.1157
EXTERNAL INIT_EMCORR2 @DYALLOC.1158
C @DYALLOC.1159
C Arguments @DYALLOC.1160
C @DYALLOC.1161
C Configuration-dependent sizes and arrays @DYALLOC.1162
C @DYALLOC.1163
*CALL TYPSIZE
@DYALLOC.1164
*CALL TYPD1
@DYALLOC.1165
*CALL TYPDUMA
@DYALLOC.1166
*CALL TYPPTRA
@DYALLOC.1167
*CALL CMAXSIZE
@DYALLOC.1168
*CALL TYPCONA
@DYALLOC.1169
C @DYALLOC.1170
*CALL C_MDI
@DYALLOC.1171
*IF DEF,MPP APB5F401.72
! Parallel variable common blocks APB5F401.73
*CALL PARVARS
APB5F401.74
*ENDIF APB5F401.75
C @DYALLOC.1172
INTEGER ICODE ! Work - Internal return code @DYALLOC.1173
CHARACTER*256 CMESSAGE ! Work - Internal error message @DYALLOC.1174
C @DYALLOC.1175
C Local variables @DYALLOC.1176
C @DYALLOC.1177
*CALL TYPFLDPT
APB5F401.76
C @DYALLOC.1180
IF(A_REALHD(19).EQ.RMDI .OR. @DYALLOC.1181
* A_REALHD(20).EQ.RMDI .OR. @DYALLOC.1182
* A_REALHD(21).EQ.RMDI) THEN @DYALLOC.1183
C @DYALLOC.1184
! Calculate TYPFLDPT variables to pass down for ENG_MASS_DIAG APB5F401.77
*CALL SETFLDPT
APB5F401.78
C @DYALLOC.1186
CALL INIT_EMCORR2
( P_FIELD,U_FIELD,ROW_LENGTH, APB5F401.79
& P_ROWS,P_LEVELS,Q_LEVELS,D1(JTHETA(1)), @DYALLOC.1188
& D1(JQCL(1)),D1(JQCF(1)),D1(JU(1)), @DYALLOC.1189
& D1(JV(1)),D1(JPSTAR),D1(JP_EXNER(1)), @DYALLOC.1190
& COS_P_LATITUDE,COS_U_LATITUDE, @DYALLOC.1191
& A_LEVDEPC(JDELTA_AK), @DYALLOC.1192
& A_LEVDEPC(JDELTA_BK), @DYALLOC.1193
& A_LEVDEPC(JAK),A_LEVDEPC(JBK),AKH,BKH, @DYALLOC.1194
& A_REALHD(18),A_REALHD(19),A_REALHD(20), @DYALLOC.1195
& A_REALHD(21), APB5F401.80
*CALL ARGFLDPT
APB5F401.81
& LLINTS,LWHITBROM) APB5F401.82
ENDIF @DYALLOC.1197
C @DYALLOC.1198
RETURN @DYALLOC.1199
END @DYALLOC.1200
CLL SUBROUTINE INIT_EMCORR2----------------------------------------- @DYALLOC.1201
CLL INEMCR1A.4
CLL PURPOSE : PART OF ENERGY CORRECTION SUITE OF ROUTINES INEMCR1A.5
CLL - TO INITIALISE ENERGY CORRECTION AT INEMCR1A.6
CLL START OF A NEW INTEGRATION INEMCR1A.7
CLL NOT SUITABLE FOR SINGLE COLUMN MODEL USE INEMCR1A.8
CLL INEMCR1A.9
CLL CODE WRITTEN FOR CRAY Y-MP BY D.GREGORY NOVEMBER 1991 INEMCR1A.10
CLL INEMCR1A.11
CLL MODEL MODIFICATION HISTORY FROM MODEL VERSION 3.0: INEMCR1A.12
CLL VERSION DATE INEMCR1A.13
CLL 3.2 30/03/93 Redefine INIT_EMCORR to become a new routine @DYALLOC.1202
CLL INIT_EMCORR2 and introduce a control interface @DYALLOC.1203
CLL routine INIT_EMCORR for dynamic allocation of @DYALLOC.1204
CLL main data arrays. @DYALLOC.1205
CLL 3.4 23/06/94 Arguments LLINTS, LWHITBROM added and passed to GSS1F304.841
CLL ENG_MASS_DIAG S.J.Swarbrick GSS1F304.842
!LL 4.1 23/04/96 Added TYPFLDPT arguments to pass down to APB5F401.83
! ENG_MASS_DIAG P.Burton APB5F401.84
CLL INEMCR1A.14
CLL PROGRAMMING STANDARDS : UNIFIED MODEL DOCUMENTATION PAPER NO. 4 INEMCR1A.15
CLL VERSION NO. 1 INEMCR1A.16
CLL INEMCR1A.17
CLL SYSTEM TASK : P## INEMCR1A.18
CLL INEMCR1A.19
CLL DOCUMENTATION : UNIFIED MODEL DOCUMENTATION PAPER P### INEMCR1A.20
CLL INEMCR1A.21
CLLEND----------------------------------------------------------------- INEMCR1A.22
C INEMCR1A.23
C*L ARGUMENTS--------------------------------------------------------- INEMCR1A.24
C INEMCR1A.25
SUBROUTINE INIT_EMCORR2(P_FIELD,U_FIELD,ROW_LENGTH, 1,1APB5F401.85
& P_ROWS,P_LEVELS,Q_LEVELS,THETA,QCL,QCF, INEMCR1A.27
& U,V,PSTAR,EXNER,AREA_P,AREA_UV,DELTA_AK, INEMCR1A.28
& DELTA_BK,AK,BK,AKH,BKH,TOT_FLUXES, INEMCR1A.29
& TOT_MASS_P,TOT_ENERGY,ENERGY_CORR, APB5F401.86
*CALL ARGFLDPT
APB5F401.87
& LLINTS,LWHITBROM) APB5F401.88
C INEMCR1A.31
IMPLICIT NONE INEMCR1A.32
LOGICAL LLINTS,LWHITBROM GSS1F304.845
*CALL C_R_CP
INEMCR1A.33
*CALL C_LHEAT
INEMCR1A.34
C INEMCR1A.35
C---------------------------------------------------------------------- INEMCR1A.36
C VECTOR LENGTHS AND START ADDRESSES INEMCR1A.37
C---------------------------------------------------------------------- INEMCR1A.38
C INEMCR1A.39
C INEMCR1A.40
INTEGER P_FIELD ! IN VECTOR LENGTH OF VARIABLES ON INEMCR1A.41
! P GRID INEMCR1A.42
C INEMCR1A.43
INTEGER U_FIELD ! IN VECTOR LENGTH OF VARIABLES ON INEMCR1A.44
! UV GRID INEMCR1A.45
C INEMCR1A.46
C INEMCR1A.49
INTEGER ROW_LENGTH ! IN NUMBER OF POINTS PER ROW INEMCR1A.50
C INEMCR1A.51
INTEGER P_ROWS ! IN NUMBER OF ROWS IN P GRID INEMCR1A.52
C INEMCR1A.53
INTEGER P_LEVELS ! IN NUMBER OF LEVELS IN VERTICAL INEMCR1A.54
C INEMCR1A.55
INTEGER Q_LEVELS ! IN NUMBER OF LEVELS WITH MOISTURE INEMCR1A.56
C INEMCR1A.57
! All TYPFLDPT arguments are intent IN APB5F401.89
*CALL TYPFLDPT
APB5F401.90
C INEMCR1A.58
C---------------------------------------------------------------------- INEMCR1A.59
C VARIABLES WHICH ARE INPUT INEMCR1A.60
C---------------------------------------------------------------------- INEMCR1A.61
C INEMCR1A.62
REAL THETA(P_FIELD,P_LEVELS) ! IN TEMPERATURE INEMCR1A.63
C INEMCR1A.64
REAL QCL(P_FIELD,P_LEVELS) ! IN CLOUD LIQUID WATER INEMCR1A.65
C INEMCR1A.66
REAL QCF(P_FIELD,P_LEVELS) ! IN CLOUD ICE INEMCR1A.67
C INEMCR1A.68
REAL U(U_FIELD,P_LEVELS) ! IN COMPONENT OF WIND INEMCR1A.69
C INEMCR1A.70
REAL V(U_FIELD,P_LEVELS) ! IN COMPONENT OF WIND INEMCR1A.71
C INEMCR1A.72
REAL AREA_P(P_FIELD) ! IN AREA OF CELLS IN P GRID INEMCR1A.73
C INEMCR1A.74
REAL AREA_UV(U_FIELD) ! IN AREA OF CELLS IN UV GRID INEMCR1A.75
C INEMCR1A.76
REAL DELTA_AK(P_LEVELS) ! IN |THICKNESS OF LAYERS IN INEMCR1A.77
C | INEMCR1A.78
REAL DELTA_BK(P_LEVELS) ! IN |ETA CO-ORDINATES INEMCR1A.79
C INEMCR1A.80
REAL AK(P_LEVELS) ! IN |ETA CO-ORDINATES OF INEMCR1A.81
C | INEMCR1A.82
REAL BK(P_LEVELS) ! IN |MID-LAYER POINTS INEMCR1A.83
C INEMCR1A.84
REAL AKH(P_LEVELS+1) ! IN |ETA CO-ORDINATES AT INEMCR1A.85
C | INEMCR1A.86
REAL BKH(P_LEVELS+1) ! IN |LAYER BOUNDARIES INEMCR1A.87
C INEMCR1A.88
REAL PSTAR(P_FIELD) ! IN PRESSURE AT SURFACE INEMCR1A.89
C INEMCR1A.90
REAL EXNER(P_FIELD,P_LEVELS+1) ! IN EXNER FUNCTION INEMCR1A.91
C INEMCR1A.92
C INEMCR1A.93
C---------------------------------------------------------------------- INEMCR1A.94
C VARIABLES WHICH ARE IN AND OUT INEMCR1A.95
C---------------------------------------------------------------------- INEMCR1A.96
C INEMCR1A.97
REAL ENERGY_CORR ! RATE OF TEMPERATURE RISE PER INEMCR1A.98
! SECOND TO COMPENSATE ENERGY LOSS INEMCR1A.99
C INEMCR1A.100
REAL TOT_ENERGY ! TOTAL ENERGY OF ATMOSPHERE INEMCR1A.101
C INEMCR1A.102
REAL TOT_MASS_P ! TOTAL MASS OF ATMOSPHERE INEMCR1A.103
C INEMCR1A.104
REAL TOT_FLUXES ! TOTAL DIABATIC FLUXES IN TO INEMCR1A.105
! ATMOSPHERE OVER A TIMESTEP INEMCR1A.106
C INEMCR1A.107
C INEMCR1A.108
C---------------------------------------------------------------------- INEMCR1A.109
C VARIABLES WHICH ARE DEFINED LOCALLY INEMCR1A.110
C---------------------------------------------------------------------- INEMCR1A.111
C INEMCR1A.112
REAL PART_MASS_P ! PARTIAL MASS OF ATMOSPHERE INEMCR1A.113
C INEMCR1A.114
C INEMCR1A.115
C---------------------------------------------------------------------- INEMCR1A.116
C INTERNAL LOOP COUNTERS INEMCR1A.117
C---------------------------------------------------------------------- INEMCR1A.118
C INEMCR1A.119
INTEGER I ! LOOP COUNTER INEMCR1A.120
C INEMCR1A.121
INTEGER J ! LOOP COUNTER INEMCR1A.122
C INEMCR1A.123
C INEMCR1A.124
C---------------------------------------------------------------------- INEMCR1A.125
C EXTERNAL SUBROUTINE CALLS - TIMER,ENG_MASS_DIAG INEMCR1A.126
C---------------------------------------------------------------------- INEMCR1A.127
C INEMCR1A.128
EXTERNAL TIMER,ENG_MASS_DIAG INEMCR1A.129
C INEMCR1A.130
C VARIABLES USED IN CONVERSION OF T TO THETA AND VICE VERSA INEMCR1A.131
C INEMCR1A.132
REAL INEMCR1A.133
& PU,PL INEMCR1A.134
*CALL P_EXNERC
INEMCR1A.135
C INEMCR1A.136
C*--------------------------------------------------------------------- INEMCR1A.137
C INEMCR1A.138
C CONVERT THETA TO TL (OR T) INEMCR1A.139
C INEMCR1A.140
IF(P_LEVELS.EQ.Q_LEVELS)THEN INEMCR1A.141
C INEMCR1A.142
DO J=1,P_LEVELS INEMCR1A.143
! Loop over all points, not including halos APB5F401.91
DO I=FIRST_FLD_PT,LAST_P_FLD_PT APB5F401.92
PU = PSTAR(I)*BKH(J+1) + AKH(J+1) INEMCR1A.145
PL = PSTAR(I)*BKH(J) + AKH(J) INEMCR1A.146
THETA(I,J) = (THETA(I,J) * INEMCR1A.147
& P_EXNER_C(EXNER(I,J+1),EXNER(I,J),PU,PL,KAPPA)) INEMCR1A.148
& - ((LC*QCL(I,J) + (LC+LF)*QCF(I,J))/CP) INEMCR1A.149
END DO INEMCR1A.150
END DO INEMCR1A.151
C INEMCR1A.152
ELSE INEMCR1A.153
C INEMCR1A.154
DO J=1,Q_LEVELS INEMCR1A.155
! Loop over all points, not including halos APB5F401.93
DO I=FIRST_FLD_PT,LAST_P_FLD_PT APB5F401.94
PU = PSTAR(I)*BKH(J+1) + AKH(J+1) INEMCR1A.157
PL = PSTAR(I)*BKH(J) + AKH(J) INEMCR1A.158
THETA(I,J) = (THETA(I,J) * INEMCR1A.159
& P_EXNER_C(EXNER(I,J+1),EXNER(I,J),PU,PL,KAPPA)) INEMCR1A.160
& - ((LC*QCL(I,J) + (LC+LF)*QCF(I,J))/CP) INEMCR1A.161
END DO INEMCR1A.162
END DO INEMCR1A.163
C INEMCR1A.164
DO J=Q_LEVELS+1,P_LEVELS INEMCR1A.165
! Loop over all points, not including halos APB5F401.95
DO I=FIRST_FLD_PT,LAST_P_FLD_PT APB5F401.96
PU = PSTAR(I)*BKH(J+1) + AKH(J+1) INEMCR1A.167
PL = PSTAR(I)*BKH(J) + AKH(J) INEMCR1A.168
THETA(I,J) = THETA(I,J) * INEMCR1A.169
& P_EXNER_C(EXNER(I,J+1),EXNER(I,J),PU,PL,KAPPA) INEMCR1A.170
END DO INEMCR1A.171
END DO INEMCR1A.172
C INEMCR1A.173
END IF INEMCR1A.174
C INEMCR1A.175
C CALCULATE MODIFIED TOTAL ENERGY AND MASS OF ATMOSPHERE INEMCR1A.176
C INEMCR1A.177
C INEMCR1A.178
C ZERO TOTAL ENERGY AND MASS BEFORE CALCULATION INEMCR1A.179
C INEMCR1A.180
TOT_MASS_P = 0.0 INEMCR1A.181
TOT_ENERGY = 0.0 INEMCR1A.182
PART_MASS_P = 0.0 INEMCR1A.183
C INEMCR1A.184
CALL ENG_MASS_DIAG
(THETA,U,V,AREA_P,AREA_UV,P_FIELD,U_FIELD, INEMCR1A.185
& ROW_LENGTH,P_ROWS,DELTA_AK, APB5F401.97
& DELTA_BK,AK,BK,TOT_ENERGY,TOT_MASS_P, INEMCR1A.187
& PART_MASS_P,P_LEVELS,PSTAR, APB5F401.98
*CALL ARGFLDPT
APB5F401.99
& LLINTS,LWHITBROM) APB5F401.100
C INEMCR1A.189
C INEMCR1A.190
C INITIAL RATE OF ENERGY CORRECTION TO ZERO INEMCR1A.191
C INEMCR1A.192
ENERGY_CORR = 0.0 INEMCR1A.193
C INEMCR1A.194
C ZERO ACCULATED DIABATIC FLUXES INEMCR1A.195
C INEMCR1A.196
TOT_FLUXES = 0.0 INEMCR1A.197
C INEMCR1A.198
C CONVERT TL (OR T) TO THETA INEMCR1A.199
C INEMCR1A.200
IF(P_LEVELS.EQ.Q_LEVELS)THEN INEMCR1A.201
C INEMCR1A.202
DO J=1,P_LEVELS INEMCR1A.203
! Loop over all points, not including halos APB5F401.101
DO I=FIRST_FLD_PT,LAST_P_FLD_PT APB5F401.102
PU = PSTAR(I)*BKH(J+1) + AKH(J+1) INEMCR1A.205
PL = PSTAR(I)*BKH(J) + AKH(J) INEMCR1A.206
THETA(I,J) = (THETA(I,J) + INEMCR1A.207
& ((LC*QCL(I,J)+(LC+LF)*QCF(I,J))/CP)) / INEMCR1A.208
& P_EXNER_C(EXNER(I,J+1),EXNER(I,J),PU,PL,KAPPA) INEMCR1A.209
END DO INEMCR1A.210
END DO INEMCR1A.211
C INEMCR1A.212
ELSE INEMCR1A.213
C INEMCR1A.214
DO J=1,Q_LEVELS INEMCR1A.215
! Loop over all points, not including halos APB5F401.103
DO I=FIRST_FLD_PT,LAST_P_FLD_PT APB5F401.104
PU = PSTAR(I)*BKH(J+1) + AKH(J+1) INEMCR1A.217
PL = PSTAR(I)*BKH(J) + AKH(J) INEMCR1A.218
THETA(I,J) = (THETA(I,J) + INEMCR1A.219
& ((LC*QCL(I,J)+(LC+LF)*QCF(I,J))/CP)) / INEMCR1A.220
& P_EXNER_C(EXNER(I,J+1),EXNER(I,J),PU,PL,KAPPA) INEMCR1A.221
END DO INEMCR1A.222
END DO INEMCR1A.223
C INEMCR1A.224
DO J=Q_LEVELS+1,P_LEVELS INEMCR1A.225
! Loop over all points, not including halos APB5F401.105
DO I=FIRST_FLD_PT,LAST_P_FLD_PT APB5F401.106
PU = PSTAR(I)*BKH(J+1) + AKH(J+1) INEMCR1A.227
PL = PSTAR(I)*BKH(J) + AKH(J) INEMCR1A.228
THETA(I,J) = THETA(I,J) / INEMCR1A.229
& P_EXNER_C(EXNER(I,J+1),EXNER(I,J),PU,PL,KAPPA) INEMCR1A.230
END DO INEMCR1A.231
END DO INEMCR1A.232
C INEMCR1A.233
END IF INEMCR1A.234
C INEMCR1A.235
RETURN INEMCR1A.236
END INEMCR1A.237
*ENDIF INEMCR1A.238