4 SUBROUTINE diagphy(airephy, tit, iprt, tops, topl, sols, soll, sens, evap, &
5 rain_fall, snow_fall, ts, d_etp_tot, d_qt_tot, d_ec_tot, fs_bound, &
62 REAL d_etp_tot, d_qt_tot, d_ec_tot
64 REAL fs_bound, fq_bound
67 REAL stops, stopl, ssols, ssoll
68 REAL ssens, sfront, slat
69 REAL airetot, zcpvap, zcwat, zcice
70 REAL rain_fall_tot, snow_fall_tot, evap_tot
102 stops = stops + tops(i)*airephy(i)
103 stopl = stopl + topl(i)*airephy(i)
104 ssols = ssols + sols(i)*airephy(i)
105 ssoll = ssoll + soll(i)*airephy(i)
106 ssens = ssens + sens(i)*airephy(i)
107 sfront = sfront + (evap(i)*zcpvap-rain_fall(i)*zcwat-snow_fall(i)*zcice)* &
109 evap_tot = evap_tot + evap(i)*airephy(i)
110 rain_fall_tot = rain_fall_tot + rain_fall(i)*airephy(i)
111 snow_fall_tot = snow_fall_tot + snow_fall(i)*airephy(i)
112 airetot = airetot + airephy(i)
114 stops = stops/airetot
115 stopl = stopl/airetot
116 ssols = ssols/airetot
117 ssoll = ssoll/airetot
118 ssens = ssens/airetot
119 sfront = sfront/airetot
120 evap_tot = evap_tot/airetot
121 rain_fall_tot = rain_fall_tot/airetot
122 snow_fall_tot = snow_fall_tot/airetot
124 slat = rlvtt*rain_fall_tot + rlstt*snow_fall_tot
126 fs_bound = stops - stopl - (ssols+ssoll) + ssens + sfront + slat
128 fq_bound = evap_tot - rain_fall_tot - snow_fall_tot
130 IF (iprt>=1)
WRITE (6, 6666) tit, pas, fs_bound, d_etp_tot, fq_bound, &
133 IF (iprt>=1)
WRITE (6, 6668) tit, pas, d_etp_tot + d_ec_tot - fs_bound, &
136 IF (iprt>=2)
WRITE (6, 6667) tit, pas, stops, stopl, ssols, ssoll, ssens, &
137 slat, evap_tot, rain_fall_tot + snow_fall_tot
141 6666
FORMAT (
'Phys. Flux Budget ', a15, 1i6, 2f8.2, 2(1pe13.5))
142 6667
FORMAT (
'Phys. Boundary Flux ', a15, 1i6, 6f8.2, 2(1pe13.5))
143 6668
FORMAT (
'Phys. Total Budget ', a15, 1i6, f8.2, 2(1pe13.5))
148 SUBROUTINE diagetpq(airephy, tit, iprt, idiag, idiag2, dtime, t, q, ql, qs, &
149 u, v,
paprs,
pplay, d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
215 INTEGER iprt, idiag, idiag2
221 REAL d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec
225 REAL h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot, h_qs_tot, qw_tot, ql_tot, &
243 REAL zh_dair_col(
klon)
246 REAL d_h_dair, d_h_qw, d_h_ql, d_h_qs
248 REAL airetot, zcpvap, zcwat, zcice
259 REAL h_vcol_pre(ndiag), h_dair_pre(ndiag), h_qw_pre(ndiag), &
260 h_ql_pre(ndiag), h_qs_pre(ndiag), qw_pre(ndiag), ql_pre(ndiag), &
261 qs_pre(ndiag), ec_pre(ndiag)
262 SAVE h_vcol_pre, h_dair_pre, h_qw_pre, h_ql_pre, h_qs_pre, qw_pre, ql_pre, &
271 zairm(i, k) = (paprs(i,k)-paprs(i,k+1))/
rg
296 zqw_col(i) = zqw_col(i) + q(i, k)*zairm(i, k)
297 zql_col(i) = zql_col(i) + ql(i, k)*zairm(i, k)
298 zqs_col(i) = zqs_col(i) + qs(i, k)*zairm(i, k)
300 zec_col(i) = zec_col(i) + 0.5*(u(i,k)**2+v(i,k)**2)*zairm(i, k)
302 zh_dair_col(i) = zh_dair_col(i) + rcpd*(1.-q(i,k)-ql(i,k)-qs(i,k))* &
304 zh_qw_col(i) = zh_qw_col(i) + zcpvap*q(i, k)*zairm(i, k)*t(i, k)
305 zh_ql_col(i) = zh_ql_col(i) + zcwat*ql(i, k)*zairm(i, k)*t(i, k) - &
306 rlvtt*ql(i, k)*zairm(i, k)
307 zh_qs_col(i) = zh_qs_col(i) + zcice*qs(i, k)*zairm(i, k)*t(i, k) - &
308 rlstt*qs(i, k)*zairm(i, k)
327 qw_tot = qw_tot + zqw_col(i)*airephy(i)
328 ql_tot = ql_tot + zql_col(i)*airephy(i)
329 qs_tot = qs_tot + zqs_col(i)*airephy(i)
330 ec_tot = ec_tot + zec_col(i)*airephy(i)
331 h_dair_tot = h_dair_tot + zh_dair_col(i)*airephy(i)
332 h_qw_tot = h_qw_tot + zh_qw_col(i)*airephy(i)
333 h_ql_tot = h_ql_tot + zh_ql_col(i)*airephy(i)
334 h_qs_tot = h_qs_tot + zh_qs_col(i)*airephy(i)
335 airetot = airetot + airephy(i)
338 qw_tot = qw_tot/airetot
339 ql_tot = ql_tot/airetot
340 qs_tot = qs_tot/airetot
341 ec_tot = ec_tot/airetot
342 h_dair_tot = h_dair_tot/airetot
343 h_qw_tot = h_qw_tot/airetot
344 h_ql_tot = h_ql_tot/airetot
345 h_qs_tot = h_qs_tot/airetot
347 h_vcol_tot = h_dair_tot + h_qw_tot + h_ql_tot + h_qs_tot
355 IF ((idiag2>0) .AND. (pas(idiag2)/=0))
THEN
356 d_h_vcol = (h_vcol_tot-h_vcol_pre(idiag2))/dtime
357 d_h_dair = (h_dair_tot-h_dair_pre(idiag2))/dtime
358 d_h_qw = (h_qw_tot-h_qw_pre(idiag2))/dtime
359 d_h_ql = (h_ql_tot-h_ql_pre(idiag2))/dtime
360 d_h_qs = (h_qs_tot-h_qs_pre(idiag2))/dtime
361 d_qw = (qw_tot-qw_pre(idiag2))/dtime
362 d_ql = (ql_tot-ql_pre(idiag2))/dtime
363 d_qs = (qs_tot-qs_pre(idiag2))/dtime
364 d_ec = (ec_tot-ec_pre(idiag2))/dtime
365 d_qt = d_qw + d_ql + d_qs
380 WRITE (6, 9000) tit, pas(idiag), d_qt, d_qw, d_ql, d_qs
381 9000
FORMAT (
'Phys. Watter Mass Budget (kg/m2/s)', a15, 1i6, 10(1pe14.6))
382 WRITE (6, 9001) tit, pas(idiag), d_h_vcol
383 9001
FORMAT (
'Phys. Enthalpy Budget (W/m2) ', a15, 1i6, 10(f8.2))
384 WRITE (6, 9002) tit, pas(idiag), d_ec
385 9002
FORMAT (
'Phys. Cinetic Energy Budget (W/m2) ', a15, 1i6, 10(f8.2))
390 pas(idiag) = pas(idiag) + 1
391 h_vcol_pre(idiag) = h_vcol_tot
392 h_dair_pre(idiag) = h_dair_tot
393 h_qw_pre(idiag) = h_qw_tot
394 h_ql_pre(idiag) = h_ql_tot
395 h_qs_pre(idiag) = h_qs_tot
396 qw_pre(idiag) = qw_tot
397 ql_pre(idiag) = ql_tot
398 qs_pre(idiag) = qs_tot
399 ec_pre(idiag) = ec_tot
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL pplay
subroutine diagetpq(airephy, tit, iprt, idiag, idiag2, dtime, t, q, ql, qs, u, v, paprs, pplay, d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL &zphi geo500!IM on interpole a chaque pas de temps le paprs
!$Id Turb_fcg_gcssold get_uvd hqturb_gcssold endif!large scale llm day day1 day day1 *dt_toga endif!time annee_ref dt_toga u_toga vq_toga w_prof vq_prof llm u(l)
subroutine diagphy(airephy, tit, iprt, tops, topl, sols, soll, sens, evap, rain_fall, snow_fall, ts, d_etp_tot, d_qt_tot, d_ec_tot, fs_bound, fq_bound)