5 |
rain_f, snow_f, solsw, sollw, sollwdown, fder, rlon, rlat, cufi,& |
rain_f, snow_f, solsw, sollw, sollwdown, fder, rlon, rlat, cufi,& |
6 |
cvfi, rugos, debut, lafin, agesno, rugoro, d_t, d_q, d_u, d_v,& |
cvfi, rugos, debut, lafin, agesno, rugoro, d_t, d_q, d_u, d_v,& |
7 |
d_ts, flux_t, flux_q, flux_u, flux_v, cdragh, cdragm, q2,& |
d_ts, flux_t, flux_q, flux_u, flux_v, cdragh, cdragm, q2,& |
8 |
dflux_t, dflux_q, zcoefh, zu1, zv1, t2m, q2m, u10m, v10m, & |
dflux_t, dflux_q, zcoefh, zu1, zv1, t2m, q2m, u10m, v10m, pblh,& |
9 |
pblh, capcl, oliqcl, cteicl, pblt, therm, trmb1, trmb2, trmb3,& |
capcl, oliqcl, cteicl, pblt, therm, trmb1, trmb2, trmb3, plcl,& |
10 |
plcl, fqcalving, ffonte, run_off_lic_0, & !IM "slab" ocean |
fqcalving, ffonte, run_off_lic_0, flux_o, flux_g, tslab, seaice) |
|
flux_o, flux_g, tslab, seaice) |
|
11 |
|
|
12 |
! From phylmd/clmain.F, v 1.6 2005/11/16 14:47:19 |
! From phylmd/clmain.F, v 1.6 2005/11/16 14:47:19 |
13 |
|
|
85 |
|
|
86 |
!$$$ PB ajout pour soil |
!$$$ PB ajout pour soil |
87 |
|
|
88 |
USE ioipsl |
USE histcom, ONLY : histbeg_totreg, histdef, histend, histsync |
89 |
USE interface_surf |
use histwrite_m, only: histwrite |
90 |
USE dimens_m |
use calendar, ONLY : ymds2ju |
91 |
USE indicesol |
USE dimens_m, ONLY : iim, jjm |
92 |
USE dimphy |
USE indicesol, ONLY : epsfra, is_lic, is_oce, is_sic, is_ter, nbsrf |
93 |
USE dimsoil |
USE dimphy, ONLY : klev, klon, zmasq |
94 |
USE temps |
USE dimsoil, ONLY : nsoilmx |
95 |
USE iniprint |
USE temps, ONLY : annee_ref, itau_phy |
96 |
USE yomcst |
USE dynetat0_m, ONLY : day_ini |
97 |
USE yoethf |
USE iniprint, ONLY : prt_level |
98 |
USE fcttre |
USE yomcst, ONLY : rd, rg, rkappa |
99 |
USE conf_phys_m |
USE conf_phys_m, ONLY : iflag_pbl |
100 |
USE gath_cpl, ONLY : gath2cpl |
USE gath_cpl, ONLY : gath2cpl |
101 |
|
use hbtm_m, only: hbtm |
102 |
|
|
103 |
IMPLICIT NONE |
IMPLICIT NONE |
104 |
|
|
224 |
|
|
225 |
! maf pour sorties IOISPL en cas de debugagage |
! maf pour sorties IOISPL en cas de debugagage |
226 |
|
|
227 |
CHARACTER*80 cldebug |
CHARACTER (80) cldebug |
228 |
SAVE cldebug |
SAVE cldebug |
229 |
CHARACTER*8 cl_surf(nbsrf) |
CHARACTER (8) cl_surf(nbsrf) |
230 |
SAVE cl_surf |
SAVE cl_surf |
231 |
INTEGER nhoridbg, nidbg |
INTEGER nhoridbg, nidbg |
232 |
SAVE nhoridbg, nidbg |
SAVE nhoridbg, nidbg |
251 |
! -- LOOP |
! -- LOOP |
252 |
|
|
253 |
REAL yt10m(klon), yq10m(klon) |
REAL yt10m(klon), yq10m(klon) |
254 |
!IM cf. AM : pbl, hbtm2 (Comme les autres diagnostics on cumule ds |
!IM cf. AM : pbl, hbtm (Comme les autres diagnostics on cumule ds |
255 |
! physiq ce qui permet de sortir les grdeurs par sous surface) |
! physiq ce qui permet de sortir les grdeurs par sous surface) |
256 |
REAL pblh(klon, nbsrf) |
REAL pblh(klon, nbsrf) |
257 |
REAL plcl(klon, nbsrf) |
REAL plcl(klon, nbsrf) |
290 |
PARAMETER (t_coup=273.15) |
PARAMETER (t_coup=273.15) |
291 |
|
|
292 |
CHARACTER (len=20) :: modname = 'clmain' |
CHARACTER (len=20) :: modname = 'clmain' |
|
LOGICAL check |
|
|
PARAMETER (check=.FALSE.) |
|
293 |
|
|
294 |
!------------------------------------------------------------ |
!------------------------------------------------------------ |
295 |
|
|
296 |
! initialisation Anne |
! initialisation Anne |
297 |
ytherm = 0. |
ytherm = 0. |
298 |
|
|
|
IF (check) THEN |
|
|
print *, modname, ' klon=', klon |
|
|
END IF |
|
|
|
|
299 |
IF (debugindex .AND. first_appel) THEN |
IF (debugindex .AND. first_appel) THEN |
300 |
first_appel = .FALSE. |
first_appel = .FALSE. |
301 |
|
|
444 |
END IF |
END IF |
445 |
END DO |
END DO |
446 |
|
|
|
IF (check) THEN |
|
|
print *, 'CLMAIN, nsrf, knon =', nsrf, knon |
|
|
END IF |
|
|
|
|
447 |
! variables pour avoir une sortie IOIPSL des INDEX |
! variables pour avoir une sortie IOIPSL des INDEX |
448 |
IF (debugindex) THEN |
IF (debugindex) THEN |
449 |
tabindx = 0. |
tabindx = 0. |
517 |
END DO |
END DO |
518 |
END DO |
END DO |
519 |
|
|
|
|
|
520 |
! calculer Cdrag et les coefficients d'echange |
! calculer Cdrag et les coefficients d'echange |
521 |
CALL coefkz(nsrf, knon, ypaprs, ypplay, & !IM 261103 |
CALL coefkz(nsrf, knon, ypaprs, ypplay, ksta, ksta_ter, yts,& |
522 |
ksta, ksta_ter, & !IM 261103 |
yrugos, yu, yv, yt, yq, yqsurf, ycoefm, ycoefh) |
|
yts, yrugos, yu, yv, yt, yq, yqsurf, ycoefm, ycoefh) |
|
523 |
!IM 081204 BEG |
!IM 081204 BEG |
524 |
!CR test |
!CR test |
525 |
IF (iflag_pbl==1) THEN |
IF (iflag_pbl==1) THEN |
574 |
yzlay(1:knon, 1) = rd*yt(1:knon, 1)/(0.5*(ypaprs(1:knon, & |
yzlay(1:knon, 1) = rd*yt(1:knon, 1)/(0.5*(ypaprs(1:knon, & |
575 |
1)+ypplay(1:knon, 1)))*(ypaprs(1:knon, 1)-ypplay(1:knon, 1))/rg |
1)+ypplay(1:knon, 1)))*(ypaprs(1:knon, 1)-ypplay(1:knon, 1))/rg |
576 |
DO k = 2, klev |
DO k = 2, klev |
577 |
yzlay(1:knon, k) = yzlay(1:knon, k-1) + rd*0.5*(yt(1:knon, k-1)+yt(1: & |
yzlay(1:knon, k) = yzlay(1:knon, k-1) & |
578 |
knon, k))/ypaprs(1:knon, k)*(ypplay(1:knon, k-1)-ypplay(1:knon, k))/ & |
+ rd*0.5*(yt(1:knon, k-1) +yt(1: knon, k)) & |
579 |
|
/ ypaprs(1:knon, k) *(ypplay(1:knon, k-1)-ypplay(1:knon, k))/ & |
580 |
rg |
rg |
581 |
END DO |
END DO |
582 |
DO k = 1, klev |
DO k = 1, klev |
583 |
yteta(1:knon, k) = yt(1:knon, k)*(ypaprs(1:knon, 1)/ypplay(1:knon, k)) & |
yteta(1:knon, k) = yt(1:knon, k)*(ypaprs(1:knon, 1) & |
584 |
**rkappa*(1.+0.61*yq(1:knon, k)) |
/ ypplay(1:knon, k))**rkappa * (1.+0.61*yq(1:knon, k)) |
585 |
END DO |
END DO |
586 |
yzlev(1:knon, 1) = 0. |
yzlev(1:knon, 1) = 0. |
587 |
yzlev(1:knon, klev+1) = 2.*yzlay(1:knon, klev) - yzlay(1:knon, klev-1) |
yzlev(1:knon, klev+1) = 2.*yzlay(1:knon, klev) - yzlay(1:knon, klev-1) |
633 |
! calculer la diffusion des vitesses "u" et "v" |
! calculer la diffusion des vitesses "u" et "v" |
634 |
!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
635 |
|
|
636 |
CALL clvent(knon, dtime, yu1, yv1, ycoefm, yt, yu, ypaprs, ypplay, ydelp, & |
CALL clvent(knon, dtime, yu1, yv1, ycoefm, yt, yu, ypaprs, ypplay, & |
637 |
y_d_u, y_flux_u) |
ydelp, y_d_u, y_flux_u) |
638 |
CALL clvent(knon, dtime, yu1, yv1, ycoefm, yt, yv, ypaprs, ypplay, ydelp, & |
CALL clvent(knon, dtime, yu1, yv1, ycoefm, yt, yv, ypaprs, ypplay, & |
639 |
y_d_v, y_flux_v) |
ydelp, y_d_v, y_flux_v) |
640 |
|
|
641 |
! pour le couplage |
! pour le couplage |
642 |
ytaux = y_flux_u(:, 1) |
ytaux = y_flux_u(:, 1) |
790 |
END DO |
END DO |
791 |
|
|
792 |
CALL stdlevvar(klon, knon, nsrf, zxli, uzon, vmer, tair1, qair1, zgeo1, & |
CALL stdlevvar(klon, knon, nsrf, zxli, uzon, vmer, tair1, qair1, zgeo1, & |
793 |
tairsol, qairsol, rugo1, psfce, patm, & |
tairsol, qairsol, rugo1, psfce, patm, yt2m, yq2m, yt10m, yq10m, & |
794 |
yt2m, yq2m, yt10m, yq10m, yu10m, yustar) |
yu10m, yustar) |
795 |
!IM 081204 END |
!IM 081204 END |
796 |
|
|
797 |
DO j = 1, knon |
DO j = 1, knon |
805 |
|
|
806 |
END DO |
END DO |
807 |
|
|
|
!IM cf AM : pbl, HBTM |
|
808 |
DO i = 1, knon |
DO i = 1, knon |
809 |
y_cd_h(i) = ycoefh(i, 1) |
y_cd_h(i) = ycoefh(i, 1) |
810 |
y_cd_m(i) = ycoefm(i, 1) |
y_cd_m(i) = ycoefm(i, 1) |
811 |
END DO |
END DO |
812 |
! print*, 'appel hbtm2' |
CALL hbtm(knon, ypaprs, ypplay, yt2m, yt10m, yq2m, yq10m, yustar, & |
813 |
CALL hbtm(knon, ypaprs, ypplay, yt2m, yt10m, yq2m, yq10m, yustar, y_flux_t, & |
y_flux_t, y_flux_q, yu, yv, yt, yq, ypblh, ycapcl, yoliqcl, & |
814 |
y_flux_q, yu, yv, yt, yq, ypblh, ycapcl, yoliqcl, ycteicl, ypblt, ytherm, & |
ycteicl, ypblt, ytherm, ytrmb1, ytrmb2, ytrmb3, ylcl) |
|
ytrmb1, ytrmb2, ytrmb3, ylcl) |
|
|
! print*, 'fin hbtm2' |
|
815 |
|
|
816 |
DO j = 1, knon |
DO j = 1, knon |
817 |
i = ni(j) |
i = ni(j) |