14 |
|
|
15 |
USE indicesol, ONLY: is_oce |
USE indicesol, ONLY: is_oce |
16 |
USE dimphy, ONLY: klev, klon |
USE dimphy, ONLY: klev, klon |
|
USE conf_gcm_m, ONLY: prt_level |
|
17 |
USE suphec_m, ONLY: rcpd, rd, retv, rg, rkappa, rlstt, rlvtt, rtt |
USE suphec_m, ONLY: rcpd, rd, retv, rg, rkappa, rlstt, rlvtt, rtt |
18 |
USE yoethf_m, ONLY: r2es, r5ies, r5les, rvtmp2 |
USE yoethf_m, ONLY: r2es, r5ies, r5les, rvtmp2 |
19 |
USE fcttre, ONLY: dqsatl, dqsats, foede, foeew, qsatl, qsats, thermcep |
USE fcttre, ONLY: dqsatl, dqsats, foede, foeew, qsatl, qsats |
20 |
USE conf_phys_m, ONLY: iflag_pbl |
USE conf_phys_m, ONLY: iflag_pbl |
21 |
use clcdrag_m, only: clcdrag |
use clcdrag_m, only: clcdrag |
22 |
|
|
56 |
REAL, PARAMETER:: cd = 5. |
REAL, PARAMETER:: cd = 5. |
57 |
REAL, PARAMETER:: clam = 160. |
REAL, PARAMETER:: clam = 160. |
58 |
REAL, PARAMETER:: ratqs = 0.05 ! largeur de distribution de vapeur d'eau |
REAL, PARAMETER:: ratqs = 0.05 ! largeur de distribution de vapeur d'eau |
59 |
|
|
60 |
LOGICAL, PARAMETER:: richum = .TRUE. |
LOGICAL, PARAMETER:: richum = .TRUE. |
61 |
! utilise le nombre de Richardson humide |
! utilise le nombre de Richardson humide |
62 |
|
|
73 |
LOGICAL, PARAMETER:: opt_ec = .FALSE. |
LOGICAL, PARAMETER:: opt_ec = .FALSE. |
74 |
! formule du Centre Europeen dans l'atmosphere |
! formule du Centre Europeen dans l'atmosphere |
75 |
|
|
76 |
INTEGER i, k, kk |
INTEGER i, k |
77 |
REAL zgeop(klon, klev) |
REAL zgeop(klon, klev) |
78 |
REAL zmgeom(klon) |
REAL zmgeom(klon) |
79 |
REAL ri(klon) |
REAL ri(klon) |
86 |
REAL zt, zq, zcvm5, zcor, zqs, zfr, zdqs |
REAL zt, zq, zcvm5, zcor, zqs, zfr, zdqs |
87 |
logical zdelta |
logical zdelta |
88 |
REAL z2geomf, zalh2, alm2, zscfh, scfm |
REAL z2geomf, zalh2, alm2, zscfh, scfm |
|
REAL, PARAMETER:: t_coup = 273.15 |
|
89 |
REAL gamt(2:klev) ! contre-gradient pour la chaleur sensible: Kelvin/metre |
REAL gamt(2:klev) ! contre-gradient pour la chaleur sensible: Kelvin/metre |
90 |
|
|
91 |
!-------------------------------------------------------------------- |
!-------------------------------------------------------------------- |
149 |
|
|
150 |
! calculer Qs et dQs/dT: |
! calculer Qs et dQs/dT: |
151 |
|
|
152 |
IF (thermcep) THEN |
zdelta = RTT >=zt |
153 |
zdelta = RTT >=zt |
zcvm5 = merge(R5IES * RLSTT, R5LES * RLVTT, zdelta) / RCPD & |
154 |
zcvm5 = merge(R5IES * RLSTT, R5LES * RLVTT, zdelta) / RCPD & |
/ (1. + RVTMP2*zq) |
155 |
/ (1. + RVTMP2*zq) |
zqs = R2ES * FOEEW(zt, zdelta) / pplay(i, k) |
156 |
zqs = R2ES * FOEEW(zt, zdelta) / pplay(i, k) |
zqs = MIN(0.5, zqs) |
157 |
zqs = MIN(0.5, zqs) |
zcor = 1./(1.-RETV*zqs) |
158 |
zcor = 1./(1.-RETV*zqs) |
zqs = zqs*zcor |
159 |
zqs = zqs*zcor |
zdqs = FOEDE(zt, zdelta, zcvm5, zqs, zcor) |
|
zdqs = FOEDE(zt, zdelta, zcvm5, zqs, zcor) |
|
|
ELSE |
|
|
IF (zt < t_coup) THEN |
|
|
zqs = qsats(zt) / pplay(i, k) |
|
|
zdqs = dqsats(zt, zqs) |
|
|
ELSE |
|
|
zqs = qsatl(zt) / pplay(i, k) |
|
|
zdqs = dqsatl(zt, zqs) |
|
|
ENDIF |
|
|
ENDIF |
|
160 |
|
|
161 |
! calculer la fraction nuageuse (processus humide): |
! calculer la fraction nuageuse (processus humide): |
162 |
|
|