@@ -28,13 +28,24 @@ SUBROUTINE diagnostic_output_calc( &
28
28
,I_ACSWUPB ,I_ACSWUPBC ,I_ACSWDNB ,I_ACSWDNBC & ! Optional
29
29
,I_ACLWUPT ,I_ACLWUPTC ,I_ACLWDNT ,I_ACLWDNTC & ! Optional
30
30
,I_ACLWUPB ,I_ACLWUPBC ,I_ACLWDNB ,I_ACLWDNBC & ! Optional
31
+ ,athmp , aqvmp &
32
+ ,athcu , aqvcu , aucu , avcu &
33
+ ,athsh , aqvsh , aush , avsh &
34
+ ,athbl , aqvbl , aubl , avbl &
35
+ ,athralw , athrasw &
36
+ ,h_diabatic , qv_diabatic &
37
+ ,rthcuten , rqvcuten , rucuten , rvcuten &
38
+ ,rthshten , rqvshten , rushten , rvshten &
39
+ ,rthblten , rqvblten , rublten , rvblten &
40
+ ,rthratenlw , rthratensw &
31
41
,dt ,xtime &
32
42
,diag_print &
33
43
,bucket_mm , bucket_J &
34
44
,prec_acc_c , prec_acc_nc , snow_acc_nc &
35
45
,snowncv , prec_acc_dt , curr_secs2 &
36
46
,history_interval &
37
47
,itimestep &
48
+ ,cu_used , shcu_used , acc_phy_tend &
38
49
)
39
50
!----------------------------------------------------------------------
40
51
@@ -47,6 +58,38 @@ SUBROUTINE diagnostic_output_calc( &
47
58
!-- DIAG_PRINT print control: 0 - no diagnostics; 1 - dmudt only; 2 - all
48
59
!-- DT time step (second)
49
60
!-- XTIME forecast time
61
+ !-- ACSWUPT
62
+ !-- ACSWUPTC
63
+ !-- ACSWDNT
64
+ !-- ACSWDNTC
65
+ !-- ACSWUPB
66
+ !-- ACSWUPBC
67
+ !-- ACSWDNB
68
+ !-- ACSWDNBC
69
+ !-- ACLWUPT
70
+ !-- ACLWUPTC
71
+ !-- ACLWDNT
72
+ !-- ACLWDNTC
73
+ !-- ACLWUPB
74
+ !-- ACLWUPBC
75
+ !-- ACLWDNB
76
+ !-- ACLWDNBC
77
+ !-- ATHMPTEN Accumulated theta tendency from microphysics
78
+ !-- AQVMPTEN Accumulated qv tendency from microphysics
79
+ !-- ATHCUTEN Accumulated theta tendency from cumulus physics
80
+ !-- AQVCUTEN Accumulated qv tendency from cumulus physics
81
+ !-- AUCUTEN Accumulated u- wind tendency from cumulus physics
82
+ !-- AVCUTEN Accumulated v- wind tendency from cumulus physics
83
+ !-- ATHSHTEN Accumulated theta tendency from shallow cumulus
84
+ !-- AQVSHTEN Accumulated qv tendency from shallow cumulus
85
+ !-- AUSHTEN Accumulated u- wind tendency from shallow cumulus
86
+ !-- AVSHTEN Accumulated v- wind tendency from shallow cumulus
87
+ !-- ATHBLTEN Accumulated theta tendency from pbl physics
88
+ !-- AQVBLTEN Accumulated qv tendency from pbl physics
89
+ !-- AUBLTEN Accumulated u- wind tendency from pbl physics
90
+ !-- AVBLTEN Accumulated v- wind tendency from pbl physics
91
+ !-- ATHRATENLW Accumulated theta tendency from longwave radiation
92
+ !-- ATHRATENSW Accumulated theta tendency from shortwave radiation
50
93
!-- P8W 3D pressure array at full eta levels
51
94
!-- MU dry column hydrostatic pressure
52
95
!-- RAINC cumulus scheme precipitation since hour 0
@@ -124,6 +167,21 @@ SUBROUTINE diagnostic_output_calc( &
124
167
, PK1M
125
168
126
169
REAL , INTENT (IN ) :: DT, XTIME
170
+ INTEGER , INTENT (IN ) :: cu_used, shcu_used, acc_phy_tend
171
+ REAL , DIMENSION ( ims:ime, kms:kme, jms:jme ), INTENT (INOUT ) :: &
172
+ athmp,aqvmp &
173
+ ,athcu,aqvcu,aucu,avcu &
174
+ ,athsh,aqvsh,aush,avsh &
175
+ ,athbl,aqvbl,aubl,avbl &
176
+ ,athralw,athrasw
177
+
178
+ REAL , DIMENSION ( ims:ime, kms:kme, jms:jme ), INTENT (IN ) :: &
179
+ h_diabatic,qv_diabatic &
180
+ ,rthcuten,rqvcuten,rucuten,rvcuten &
181
+ ,rthshten,rqvshten,rushten,rvshten &
182
+ ,rthblten,rqvblten,rublten,rvblten &
183
+ ,rthratenlw,rthratensw
184
+
127
185
INTEGER , DIMENSION ( ims:ime , jms:jme ), INTENT (INOUT ) :: &
128
186
I_RAINC, &
129
187
I_RAINNC
@@ -159,6 +217,74 @@ SUBROUTINE diagnostic_output_calc( &
159
217
160
218
INTEGER :: idump
161
219
220
+ !-----------------------------------------------------------------
221
+ ! Compute physics tendency accumulations in a given time window
222
+
223
+ IF ( acc_phy_tend .gt. 0 ) THEN
224
+
225
+ ! !$OMP PARALLEL DO &
226
+ ! !$OMP PRIVATE ( ij )
227
+ DO ij = 1 , num_tiles
228
+
229
+ IF (mod (curr_secs2, history_interval* 60 .) == 0 .) THEN
230
+ WRITE (outstring,* ) ' Reseting accumulation to 0'
231
+ CALL wrf_debug ( 10 , TRIM (outstring) )
232
+ DO j= j_start(ij),j_end(ij)
233
+ DO k= kps,kpe
234
+ DO i= i_start(ij),i_end(ij)
235
+ athmp(i,k,j) = 0 .
236
+ aqvmp(i,k,j) = 0 .
237
+ IF ( cu_used == 1 ) THEN
238
+ athcu(i,k,j) = 0 .
239
+ aqvcu(i,k,j) = 0 .
240
+ aucu(i,k,j) = 0 .
241
+ avcu(i,k,j) = 0 .
242
+ END IF
243
+ IF ( shcu_used == 1 ) THEN
244
+ athsh(i,k,j) = 0 .
245
+ aqvsh(i,k,j) = 0 .
246
+ aush(i,k,j) = 0 .
247
+ avsh(i,k,j) = 0 .
248
+ END IF
249
+ athbl(i,k,j) = 0 .
250
+ aqvbl(i,k,j) = 0 .
251
+ aubl(i,k,j) = 0 .
252
+ avbl(i,k,j) = 0 .
253
+ athralw(i,k,j) = 0 .
254
+ athrasw(i,k,j) = 0 .
255
+ ENDDO
256
+ ENDDO
257
+ ENDDO
258
+ ENDIF
259
+ DO j= j_start(ij),j_end(ij)
260
+ DO k= kps,kpe
261
+ DO i= i_start(ij),i_end(ij)
262
+ athmp(i,k,j) = athmp(i,k,j) + h_diabatic(i,k,j)* dt
263
+ aqvmp(i,k,j) = aqvmp(i,k,j) + qv_diabatic(i,k,j)* dt
264
+ IF ( cu_used == 1 ) THEN
265
+ athcu(i,k,j) = athcu(i,k,j) + rthcuten(i,k,j)* dt
266
+ aqvcu(i,k,j) = aqvcu(i,k,j) + rqvcuten(i,k,j)* dt
267
+ aucu(i,k,j) = aucu(i,k,j) + rucuten(i,k,j)* dt
268
+ avcu(i,k,j) = avcu(i,k,j) + rvcuten(i,k,j)* dt
269
+ END IF
270
+ IF ( shcu_used == 1 ) THEN
271
+ athsh(i,k,j) = athsh(i,k,j) + rthshten(i,k,j)* dt
272
+ aqvsh(i,k,j) = aqvsh(i,k,j) + rqvshten(i,k,j)* dt
273
+ aush(i,k,j) = aush(i,k,j) + rushten(i,k,j)* dt
274
+ avsh(i,k,j) = avsh(i,k,j) + rvshten(i,k,j)* dt
275
+ END IF
276
+ athbl(i,k,j) = athbl(i,k,j) + rthblten(i,k,j)* dt
277
+ aqvbl(i,k,j) = aqvbl(i,k,j) + rqvblten(i,k,j)* dt
278
+ aubl(i,k,j) = aubl(i,k,j) + rublten(i,k,j)* dt
279
+ avbl(i,k,j) = avbl(i,k,j) + rvblten(i,k,j)* dt
280
+ athralw(i,k,j) = athralw(i,k,j) + rthratenlw(i,k,j)* dt
281
+ athrasw(i,k,j) = athrasw(i,k,j) + rthratensw(i,k,j)* dt
282
+ ENDDO
283
+ ENDDO
284
+ ENDDO
285
+ ENDDO
286
+ ENDIF
287
+
162
288
!-----------------------------------------------------------------
163
289
! Handle accumulations with buckets to prevent round- off truncation in long runs
164
290
! This is done every 360 minutes assuming time step fits exactly into 360 minutes
0 commit comments