16 |
|
|
17 |
use aaam_bud_m, only: aaam_bud |
use aaam_bud_m, only: aaam_bud |
18 |
USE abort_gcm_m, ONLY: abort_gcm |
USE abort_gcm_m, ONLY: abort_gcm |
|
use aeropt_m, only: aeropt |
|
19 |
use ajsec_m, only: ajsec |
use ajsec_m, only: ajsec |
20 |
use calltherm_m, only: calltherm |
use calltherm_m, only: calltherm |
21 |
USE clesphys, ONLY: cdhmax, cdmmax, ecrit_hf, ecrit_ins, ecrit_mth, & |
USE clesphys, ONLY: cdhmax, cdmmax, ecrit_hf, ecrit_ins, ecrit_mth, & |
60 |
USE phytrac_m, ONLY: phytrac |
USE phytrac_m, ONLY: phytrac |
61 |
USE qcheck_m, ONLY: qcheck |
USE qcheck_m, ONLY: qcheck |
62 |
use radlwsw_m, only: radlwsw |
use radlwsw_m, only: radlwsw |
|
use readsulfate_m, only: readsulfate |
|
|
use readsulfate_preind_m, only: readsulfate_preind |
|
63 |
use yoegwd, only: sugwd |
use yoegwd, only: sugwd |
64 |
USE suphec_m, ONLY: rcpd, retv, rg, rlvtt, romega, rsigma, rtt |
USE suphec_m, ONLY: rcpd, retv, rg, rlvtt, romega, rsigma, rtt |
65 |
use time_phylmdz, only: itap, increment_itap |
use time_phylmdz, only: itap, increment_itap |
115 |
LOGICAL, PARAMETER:: ok_stratus = .FALSE. |
LOGICAL, PARAMETER:: ok_stratus = .FALSE. |
116 |
! Ajouter artificiellement les stratus |
! Ajouter artificiellement les stratus |
117 |
|
|
118 |
! pour phsystoke avec thermiques |
! pour phystoke avec thermiques |
119 |
REAL fm_therm(klon, llm + 1) |
REAL fm_therm(klon, llm + 1) |
120 |
REAL entr_therm(klon, llm) |
REAL entr_therm(klon, llm) |
121 |
real, save:: q2(klon, llm + 1, nbsrf) |
real, save:: q2(klon, llm + 1, nbsrf) |
303 |
REAL, PARAMETER:: t_coup = 234. |
REAL, PARAMETER:: t_coup = 234. |
304 |
REAL zphi(klon, llm) |
REAL zphi(klon, llm) |
305 |
|
|
306 |
! cf. Anne Mathieu variables pour la couche limite atmosphérique (hbtm) |
! cf. Anne Mathieu, variables pour la couche limite atmosphérique (hbtm) |
307 |
|
|
308 |
REAL, SAVE:: pblh(klon, nbsrf) ! Hauteur de couche limite |
REAL, SAVE:: pblh(klon, nbsrf) ! Hauteur de couche limite |
309 |
REAL, SAVE:: plcl(klon, nbsrf) ! Niveau de condensation de la CLA |
REAL, SAVE:: plcl(klon, nbsrf) ! Niveau de condensation de la CLA |
411 |
INTEGER:: ip_ebil = 0 ! print level for energy conservation diagnostics |
INTEGER:: ip_ebil = 0 ! print level for energy conservation diagnostics |
412 |
INTEGER:: if_ebil = 0 ! verbosity for diagnostics of energy conservation |
INTEGER:: if_ebil = 0 ! verbosity for diagnostics of energy conservation |
413 |
|
|
414 |
REAL d_t_ec(klon, llm) ! tendance due \`a la conversion Ec -> E thermique |
REAL d_t_ec(klon, llm) |
415 |
|
! tendance due \`a la conversion Ec en énergie thermique |
416 |
|
|
417 |
REAL ZRCPD |
REAL ZRCPD |
418 |
|
|
419 |
REAL t2m(klon, nbsrf), q2m(klon, nbsrf) ! temperature and humidity at 2 m |
REAL t2m(klon, nbsrf), q2m(klon, nbsrf) ! temperature and humidity at 2 m |
441 |
REAL topswad(klon), solswad(klon) ! aerosol direct effect |
REAL topswad(klon), solswad(klon) ! aerosol direct effect |
442 |
REAL topswai(klon), solswai(klon) ! aerosol indirect effect |
REAL topswai(klon), solswai(klon) ! aerosol indirect effect |
443 |
|
|
|
REAL aerindex(klon) ! POLDER aerosol index |
|
|
|
|
444 |
LOGICAL:: ok_ade = .false. ! apply aerosol direct effect |
LOGICAL:: ok_ade = .false. ! apply aerosol direct effect |
445 |
LOGICAL:: ok_aie = .false. ! apply aerosol indirect effect |
LOGICAL:: ok_aie = .false. ! apply aerosol indirect effect |
446 |
|
|
820 |
da = 0. |
da = 0. |
821 |
mp = 0. |
mp = 0. |
822 |
phi = 0. |
phi = 0. |
823 |
CALL concvl(dtphys, paprs, play, t_seri, q_seri, u_seri, v_seri, sig1, & |
CALL concvl(paprs, play, t_seri, q_seri, u_seri, v_seri, sig1, w01, & |
824 |
w01, d_t_con, d_q_con, d_u_con, d_v_con, rain_con, ibas_con, & |
d_t_con, d_q_con, d_u_con, d_v_con, rain_con, ibas_con, itop_con, & |
825 |
itop_con, upwd, dnwd, dnwd0, Ma, cape, iflagctrl, qcondc, pmflxr, & |
upwd, dnwd, dnwd0, Ma, cape, iflagctrl, qcondc, pmflxr, da, phi, mp) |
|
da, phi, mp) |
|
826 |
snow_con = 0. |
snow_con = 0. |
827 |
clwcon0 = qcondc |
clwcon0 = qcondc |
828 |
mfu = upwd + dnwd |
mfu = upwd + dnwd |
918 |
t_seri = t_seri + d_t_ajs |
t_seri = t_seri + d_t_ajs |
919 |
q_seri = q_seri + d_q_ajs |
q_seri = q_seri + d_q_ajs |
920 |
else |
else |
|
! Thermiques |
|
921 |
call calltherm(dtphys, play, paprs, pphi, u_seri, v_seri, t_seri, & |
call calltherm(dtphys, play, paprs, pphi, u_seri, v_seri, t_seri, & |
922 |
q_seri, d_u_ajs, d_v_ajs, d_t_ajs, d_q_ajs, fm_therm, entr_therm) |
q_seri, d_u_ajs, d_v_ajs, d_t_ajs, d_q_ajs, fm_therm, entr_therm) |
923 |
endif |
endif |
1103 |
ENDDO |
ENDDO |
1104 |
|
|
1105 |
! Introduce the aerosol direct and first indirect radiative forcings: |
! Introduce the aerosol direct and first indirect radiative forcings: |
1106 |
IF (ok_ade .OR. ok_aie) THEN |
tau_ae = 0. |
1107 |
! Get sulfate aerosol distribution : |
piz_ae = 0. |
1108 |
CALL readsulfate(dayvrai, time, firstcal, sulfate) |
cg_ae = 0. |
|
CALL readsulfate_preind(dayvrai, time, firstcal, sulfate_pi) |
|
|
|
|
|
CALL aeropt(play, paprs, t_seri, sulfate, rhcl, tau_ae, piz_ae, cg_ae, & |
|
|
aerindex) |
|
|
ELSE |
|
|
tau_ae = 0. |
|
|
piz_ae = 0. |
|
|
cg_ae = 0. |
|
|
ENDIF |
|
1109 |
|
|
1110 |
! Param\`etres optiques des nuages et quelques param\`etres pour |
! Param\`etres optiques des nuages et quelques param\`etres pour |
1111 |
! diagnostics : |
! diagnostics : |
1261 |
|
|
1262 |
! Accumuler les variables a stocker dans les fichiers histoire: |
! Accumuler les variables a stocker dans les fichiers histoire: |
1263 |
|
|
1264 |
! conversion Ec -> E thermique |
! conversion Ec en énergie thermique |
1265 |
DO k = 1, llm |
DO k = 1, llm |
1266 |
DO i = 1, klon |
DO i = 1, klon |
1267 |
ZRCPD = RCPD * (1. + RVTMP2 * q_seri(i, k)) |
ZRCPD = RCPD * (1. + RVTMP2 * q_seri(i, k)) |