1 SUBROUTINE thermcell_2002(ngrid, nlay, ptimestep, iflag_thermals, pplay, &
2 pplev, pphi, pu, pv,
pt, po, pduadj, pdvadj, pdtadj, pdoadj, fm0, entr0, &
3 fraca, wa_moy, r_aspect, l_mix, w2di, tho)
38 INTEGER ngrid, nlay, w2di, iflag_thermals
40 REAL ptimestep, l_mix, r_aspect
41 REAL pt(ngrid, nlay), pdtadj(ngrid, nlay)
42 REAL pu(ngrid, nlay), pduadj(ngrid, nlay)
43 REAL pv(ngrid, nlay), pdvadj(ngrid, nlay)
44 REAL po(ngrid, nlay), pdoadj(ngrid, nlay)
45 REAL pplay(ngrid, nlay), pplev(ngrid, nlay+1)
46 REAL pphi(ngrid, nlay)
47 REAL fraca(ngrid, nlay+1), zw2(ngrid, nlay+1)
49 INTEGER,
SAVE :: idetr = 3, lev_out = 1
55 INTEGER,
SAVE :: dvdq = 0, flagdq = 0, dqimpl = 1
56 LOGICAL,
SAVE :: debut = .
true.
104 CHARACTER (LEN=2) :: str2
105 CHARACTER (LEN=10) :: str10
107 CHARACTER (LEN=20) :: modname =
'thermcell2002'
108 CHARACTER (LEN=80) :: abort_message
110 LOGICAL vtest(
klon), down
125 IF (ngrid/=
klon)
THEN
127 print *,
'STOP dans convadj'
128 print *,
'ngrid =', ngrid
129 print *,
'klon =',
klon
140 zpspsk(ig, l) = (pplay(ig,l)/pplev(ig,1))**rkappa
141 zh(ig, l) = pt(ig, l)/zpspsk(ig, l)
142 zu(ig, l) = pu(ig, l)
143 zv(ig, l) = pv(ig, l)
144 zo(ig, l) = po(ig, l)
145 ztv(ig, l) = zh(ig, l)*(1.+0.61*zo(ig,l))
172 flagdq = (iflag_thermals-1000)/100
173 dvdq = (iflag_thermals-(1000+flagdq*100))/10
174 IF (flagdq==2) dqimpl = -1
175 IF (flagdq==3) dqimpl = 1
178 print *,
'TH flag th ', iflag_thermals, flagdq, dvdq, dqimpl
182 zlev(ig, l) = 0.5*(pphi(ig,l)+pphi(ig,l-1))/
rg
187 zlev(ig, nlay+1) = (2.*pphi(ig,
klev)-pphi(ig,
klev-1))/
rg
191 zlay(ig, l) = pphi(ig, l)/
rg
202 rho(ig, l) = pplay(ig, l)/(zpspsk(ig,l)*rd*zh(ig,l))
208 rhobarz(ig, l) = 0.5*(rho(ig,l)+rho(ig,l-1))
262 wa(ig, k, k+1) = 2.*
rg*(ztv(ig,k)-ztv(ig,k+1))/ztv(ig, k+1)* &
263 (zlev(ig,k+1)-zlev(ig,k))
265 DO l = k + 1, nlay - 1
267 wa(ig, k, l+1) = wa(ig, k, l) + 2.*
rg*(ztv(ig,k)-ztv(ig,l))/ztv(ig, l &
268 )*(zlev(ig,l+1)-zlev(ig,l))
272 wa(ig, k, nlay+1) = 0.
282 DO l = nlay, k + 1, -1
284 IF (wa(ig,k,l)<=1.e-10) lmax(ig, k) = l - 1
300 IF (l<=lmax(ig,k))
THEN
301 wa(ig, k, l) = sqrt(wa(ig,k,l))
302 wmax(ig, k) = max(wmax(ig,k), wa(ig,k,l))
312 pu_therm(ig, k) = sqrt(wmax(ig,k))
313 pv_therm(ig, k) = sqrt(wmax(ig,k))
325 zmax(ig) = max(zmax(ig), zlev(ig,lmax(ig,k))-zlev(ig,k))
339 zzz = rho(ig, k)*wmax(ig, k)*(zlev(ig,k+1)-zlev(ig,k))/ &
342 entr(ig, k) = entr(ig, k) + ptimestep*(zzz-entr(ig,k))/tho
346 ztva(ig, k) = ztv(ig, k)
356 larg_cons(ig, k) = 0.
357 larg_detr(ig, k) = 0.
375 IF (zw2(ig,l)<1.e-10 .AND. ztv(ig,l)>ztv(ig,l+1) .AND. &
376 entr(ig,l)>1.e-10)
THEN
380 ztva(ig, l) = ztv(ig, l)
382 fmc(ig, l+1) = entr(ig, l)
388 zw2(ig, l+1) = 2.*
rg*(ztv(ig,l)-ztv(ig,l+1))/ztv(ig, l+1)* &
389 (zlev(ig,l+1)-zlev(ig,l))
390 larg_detr(ig, l) = 0.
391 ELSE IF (zw2(ig,l)>=1.e-10 .AND. fmc(ig,l)+entr(ig,l)>1.e-10)
THEN
393 fmc(ig, l+1) = fmc(ig, l) + entr(ig, l)
402 ztva(ig, l) = (fmc(ig,l)*ztva(ig,l-1)+entr(ig,l)*ztv(ig,l))/ &
406 zw2(ig, l+1) = zw2(ig, l)*(fmc(ig,l)/fmc(ig,l+1))**2 + &
407 2.*
rg*(ztva(ig,l)-ztv(ig,l))/ztv(ig, l)*(zlev(ig,l+1)-zlev(ig,l))
409 IF (zw2(ig,l+1)<0.)
THEN
413 wa_moy(ig, l+1) = sqrt(zw2(ig,l+1))
415 IF (wa_moy(ig,l+1)>wmaxa(ig))
THEN
418 wmaxa(ig) = wa_moy(ig, l+1)
438 IF (l<=lmaxa(ig))
THEN
439 zw = max(wa_moy(ig,l), 1.e-10)
440 larg_cons(ig, l) = zmax(ig)*r_aspect*fmc(ig, l)/(rhobarz(ig,l)*zw)
447 IF (l<=lmaxa(ig))
THEN
450 larg_detr(ig, l) = sqrt(l_mix*zlev(ig,l))
472 IF (larg_cons(ig,l)>1.)
THEN
474 fraca(ig, l) = (larg_cons(ig,l)-larg_detr(ig,l))/(r_aspect*zmax(ig))
476 xxx(ig, l) = (lmaxa(ig)+1.-l)/(lmaxa(ig)+1.-lmix(ig))
478 fraca(ig, l) = fraca(ig, lmix(ig))
479 ELSE IF (idetr==1)
THEN
480 fraca(ig, l) = fraca(ig, lmix(ig))*xxx(ig, l)
481 ELSE IF (idetr==2)
THEN
482 fraca(ig, l) = fraca(ig, lmix(ig))*(1.-(1.-xxx(ig,l))**2)
484 fraca(ig, l) = fraca(ig, lmix(ig))*xxx(ig, l)**2
488 fraca(ig, l) = max(fraca(ig,l), 0.)
489 fraca(ig, l) = min(fraca(ig,l), 0.5)
490 fracd(ig, l) = 1. - fraca(ig, l)
491 fracc(ig, l) = larg_cons(ig, l)/(r_aspect*zmax(ig))
516 fm(ig, l) = fraca(ig, l)*wa_moy(ig, l)*rhobarz(ig, l)
519 IF (fracd(ig,l)<0.1)
THEN
520 abort_message =
'fracd trop petit'
524 wd(ig, l) = fm(ig, l)/(fracd(ig,l)*rhobarz(ig,l))
532 masse(ig, l) = (pplev(ig,l)-pplev(ig,l+1))/
rg
546 IF (fm(ig,l+1)*ptimestep>masse(ig,l) .AND. fm(ig,l+1)*ptimestep>masse( &
557 IF (entr(ig,l)*ptimestep>masse(ig,l))
THEN
567 IF (.NOT. fm(ig,l)>=0. .OR. .NOT. fm(ig,l)<=10.)
THEN
571 IF (.NOT. masse(ig,l)>=1.e-10 .OR. .NOT. masse(ig,l)<=1.e4)
THEN
581 IF (.NOT. entr(ig,l)>=0. .OR. .NOT. entr(ig,l)<=10.)
THEN
592 fm0 = fm0 + ptimestep*(fm-fm0)/tho
593 entr0 = entr0 + ptimestep*(entr-entr0)/tho
600 CALL dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse, zh, zdhadj, &
602 CALL dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse, zo, pdoadj, &
604 print *,
'THERMALS OPT 1'
605 ELSE IF (flagdq==1)
THEN
606 CALL dqthermcell2(ngrid, nlay, ptimestep, fm0, entr0, masse, fraca, zh, &
608 CALL dqthermcell2(ngrid, nlay, ptimestep, fm0, entr0, masse, fraca, zo, &
610 print *,
'THERMALS OPT 2'
612 CALL thermcell_dq(ngrid, nlay, dqimpl, ptimestep, fm0, entr0, masse, zh, &
613 zdhadj, zha, lev_out)
614 CALL thermcell_dq(ngrid, nlay, dqimpl, ptimestep, fm0, entr0, masse, zo, &
615 pdoadj, zoa, lev_out)
616 print *,
'THERMALS OPT 3', dqimpl
619 print *,
'TH VENT ', dvdq
622 CALL dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse, zu, pduadj, &
624 CALL dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse, zv, pdvadj, &
626 ELSE IF (dvdq==1)
THEN
627 CALL dvthermcell2(ngrid, nlay, ptimestep, fm0, entr0, masse, fraca, zmax, &
628 zu, zv, pduadj, pdvadj, zua, zva)
629 ELSE IF (dvdq==2)
THEN
630 CALL thermcell_dv2(ngrid, nlay, ptimestep, fm0, entr0, masse, fraca, &
631 zmax, zu, zv, pduadj, pdvadj, zua, zva, lev_out)
632 ELSE IF (dvdq==3)
THEN
633 CALL thermcell_dq(ngrid, nlay, dqimpl, ptimestep, fm0, entr0, masse, zu, &
634 pduadj, zua, lev_out)
635 CALL thermcell_dq(ngrid, nlay, dqimpl, ptimestep, fm0, entr0, masse, zv, &
636 pdvadj, zva, lev_out)
643 zf = 0.5*(fracc(ig,l)+fracc(ig,l+1))
645 thetath2(ig, l) = zf2*(zha(ig,l)-zh(ig,l))**2
646 wth2(ig, l) = zf2*(0.5*(wa_moy(ig,l)+wa_moy(ig,l+1)))**2
656 pdtadj(ig, l) = zdhadj(ig, l)*zpspsk(ig, l)
682 zla(ig, l) = (1.-fracd(ig,l))*zmax(ig)
683 zld(ig, l) = fracd(ig, l)*zmax(ig)
684 IF (1.-fracd(ig,l)>1.e-10) zwa(ig, l) = wd(ig, l)*fracd(ig, l)/ &
691 detr(ig, l) = fm(ig, l) + entr(ig, l) - fm(ig, l+1)
692 IF (detr(ig,l)<0.)
THEN
693 entr(ig, l) = entr(ig, l) - detr(ig, l)
710 SUBROUTINE thermcell_cld(ngrid, nlay, ptimestep, pplay, pplev, pphi, zlev, &
711 debut, pu, pv,
pt, po, pduadj, pdvadj, pdtadj, pdoadj, fm0, entr0, zqla, &
712 lmax, zmax_sec, wmax_sec, zw_sec, lmix_sec, ratqscth, ratqsdiff &
714 , r_aspect, l_mix, w2di, tho)
750 INTEGER ngrid, nlay, w2di
752 REAL ptimestep, l_mix, r_aspect
753 REAL pt(ngrid, nlay), pdtadj(ngrid, nlay)
754 REAL pu(ngrid, nlay), pduadj(ngrid, nlay)
755 REAL pv(ngrid, nlay), pdvadj(ngrid, nlay)
756 REAL po(ngrid, nlay), pdoadj(ngrid, nlay)
757 REAL pplay(ngrid, nlay), pplev(ngrid, nlay+1)
758 REAL pphi(ngrid, nlay)
768 INTEGER ig, k, l, lmaxa(
klon), lmix(
klon)
784 INTEGER lmix_sec(
klon)
791 REAL,
SAVE,
ALLOCATABLE :: zmax0(:), zmix0(:)
853 REAL zcor, zdelta, zcvm5, qlbef
855 REAL dqsat_dt, dt, num, denom
856 REAL reps, rlvcp, ddt0
869 REAL alim_star_tot(
klon), alim_star2(
klon)
870 REAL entr_star_tot(
klon)
871 REAL detr_star_tot(
klon)
882 REAL,
SAVE,
ALLOCATABLE :: f0(:)
887 LOGICAL,
SAVE :: first = .
true.
904 CHARACTER (LEN=20) :: modname =
'thermcell_cld'
905 CHARACTER (LEN=80) :: abort_message
907 LOGICAL vtest(
klon), down
924 ALLOCATE (zmix0(
klon))
925 ALLOCATE (zmax0(
klon))
932 IF (ngrid/=
klon)
THEN
934 print *,
'STOP dans convadj'
935 print *,
'ngrid =', ngrid
936 print *,
'klon =',
klon
962 IF ((.NOT. debut) .AND. (f0(ig)<1.e-10))
THEN
982 zo(ig, ll) = po(ig, ll)
984 zh(ig, ll) = pt(ig, ll)
995 tbef(ig) = pt(ig, ll)
996 zdelta = max(0., sign(1.,rtt-tbef(ig)))
997 qsatbef(ig) = r2es*foeew(tbef(ig), zdelta)/pplev(ig, ll)
998 qsatbef(ig) = min(0.5, qsatbef(ig))
999 zcor = 1./(1.-retv*qsatbef(ig))
1000 qsatbef(ig) = qsatbef(ig)*zcor
1001 zsat(ig) = (max(0.,po(ig,ll)-qsatbef(ig))>1.e-10)
1005 IF (zsat(ig) .AND. (1==1))
THEN
1006 qlbef = max(0., po(ig,ll)-qsatbef(ig))
1008 dt = 0.5*rlvcp*qlbef
1011 DO WHILE (abs(dt)>ddt0)
1013 tbef(ig) = tbef(ig) + dt
1014 zdelta = max(0., sign(1.,rtt-tbef(ig)))
1015 qsatbef(ig) = r2es*foeew(tbef(ig), zdelta)/pplev(ig, ll)
1016 qsatbef(ig) = min(0.5, qsatbef(ig))
1017 zcor = 1./(1.-retv*qsatbef(ig))
1018 qsatbef(ig) = qsatbef(ig)*zcor
1020 qlbef = po(ig, ll) - qsatbef(ig)
1021 zdelta = max(0., sign(1.,rtt-tbef(ig)))
1022 zcvm5 = r5les*(1.-zdelta) + r5ies*zdelta
1023 zcor = 1./(1.-retv*qsatbef(ig))
1024 dqsat_dt = foede(tbef(ig), zdelta, zcvm5, qsatbef(ig), zcor)
1025 num = -tbef(ig) + pt(ig, ll) + rlvcp*qlbef
1026 denom = 1. + rlvcp*dqsat_dt
1027 IF (denom<1.e-10)
THEN
1033 zl(ig, ll) = max(0., qlbef)
1035 zh(ig, ll) = pt(ig, ll) + rlvcp*zl(ig, ll)
1036 zo(ig, ll) = po(ig, ll) - zl(ig, ll)
1039 zqsat(ig, ll) = qsatbef(ig)
1052 zpspsk(ig, l) = (pplay(ig,l)/100000.)**rkappa
1055 zu(ig, l) = pu(ig, l)
1056 zv(ig, l) = pv(ig, l)
1063 ztv(ig, l) = zh(ig, l)/zpspsk(ig, l)
1065 ztv(ig, l) = ztv(ig, l)*(1.+retv*(zo(ig,l))-zl(ig,l))
1067 zthl(ig, l) = pt(ig, l)/zpspsk(ig, l)
1096 zlev(ig, l) = 0.5*(pphi(ig,l)+pphi(ig,l-1))/
rg
1101 zlev(ig, nlay+1) = (2.*pphi(ig,
klev)-pphi(ig,
klev-1))/
rg
1105 zlay(ig, l) = pphi(ig, l)/
rg
1111 deltaz(ig, l) = zlev(ig, l+1) - zlev(ig, l)
1123 rho(ig, l) = pplay(ig, l)/(zpspsk(ig,l)*rd*ztv(ig,l))
1129 rhobarz(ig, l) = 0.5*(rho(ig,l)+rho(ig,l-1))
1144 masse(ig, l) = (pplev(ig,l)-pplev(ig,l+1))/
rg
1189 alim_star(ig, l) = 0.
1200 DO k = nlay - 2, 1, -1
1202 IF (ztv(ig,k)>ztv(ig,k+1) .AND. ztv(ig,k+1)<=ztv(ig,k+2))
THEN
1215 IF (ztv(ig,l-1)>ztv(ig,l))
THEN
1224 IF (ztv(ig,l)>ztv(ig,l+1) .AND. l>=lmin(ig) .AND. l<lentr(ig))
THEN
1226 alim_star(ig, l) = max((ztv(ig,l)-ztv(ig,l+1)), 0.) &
1239 IF (alim_star(ig,1)<1.e-10)
THEN
1241 alim_star(ig, l) = 0.
1247 alim_star_tot(ig) = 0.
1248 entr_star_tot(ig) = 0.
1249 detr_star_tot(ig) = 0.
1253 alim_star_tot(ig) = alim_star_tot(ig) + alim_star(ig, k)
1259 IF (alim_star_tot(ig)>1.e-10)
THEN
1263 alim_star(ig, l) = alim_star(ig, l)/alim_star_tot(ig)
1273 ztva(ig, k) = ztv(ig, k)
1274 ztla(ig, k) = zthl(ig, k)
1276 zqta(ig, k) = po(ig, k)
1282 detr_star(ig, k) = 0.
1283 entr_star(ig, k) = 0.
1296 larg_cons(ig, k) = 0.
1297 larg_detr(ig, k) = 0.
1328 DO l = 1, lentr(ig) - 1
1329 dtheta(ig, l) = sqrt(10.*0.4*zlev(ig,l+1)**2*1.*((ztv(ig,l+1)- &
1330 ztv(ig,l))/(zlev(ig,l+1)-zlev(ig,l)))**2)
1336 IF (ztv(ig,l)>ztv(ig,l+1) .AND. alim_star(ig,l)>1.e-10 .AND. &
1337 zw2(ig,l)<1e-10)
THEN
1341 ztla(ig, l) = zthl(ig, l)
1344 zqta(ig, l) = po(ig, l)
1345 zqla(ig, l) = zl(ig, l)
1347 f_star(ig, l+1) = alim_star(ig, l)
1349 zw2(ig, l+1) = 2.*
rg*(ztv(ig,l)-ztv(ig,l+1))/ztv(ig, l+1)* &
1350 (zlev(ig,l+1)-zlev(ig,l))*0.4*pphi(ig, l)/(pphi(ig,l+1)-pphi(ig,l))
1351 w_est(ig, l+1) = zw2(ig, l+1)
1352 larg_detr(ig, l) = 0.
1354 ELSE IF ((zw2(ig,l)>=1e-10) .AND. (f_star(ig,l)+alim_star(ig, &
1359 IF ((test(ig)==1) .OR. ((.NOT. debut) .AND. (f0(ig)<1.e-10)))
THEN
1360 detr_star(ig, l) = 0.
1361 entr_star(ig, l) = 0.
1366 IF (zqla(ig,l-1)>1.e-10)
THEN
1370 w_est(ig, l+1) = zw2(ig, l)*((f_star(ig,l))**2)/(f_star(ig,l)+ &
1371 alim_star(ig,l))**2 + 2.*
rg*(ztva(ig,l-1)-ztv(ig,l))/ztv(ig, l)*( &
1372 zlev(ig,l+1)-zlev(ig,l))
1373 IF (w_est(ig,l+1)<0.)
THEN
1374 w_est(ig, l+1) = zw2(ig, l)
1377 IF ((w_est(ig,l+1)>w_est(ig,l)) .AND. (zlev(ig, &
1378 l+1)<zmax_sec(ig)) .AND. (zqla(ig,l-1)<1.e-10))
THEN
1379 detr_star(ig, l) = max(0., (rhobarz(ig, &
1380 l+1)*sqrt(w_est(ig,l+1))*sqrt(nu(ig,l)* &
1381 zlev(ig,l+1))-rhobarz(ig,l)*sqrt(w_est(ig,l))*sqrt(nu(ig,l)* &
1382 zlev(ig,l)))/(r_aspect*zmax_sec(ig)))
1383 ELSE IF ((zlev(ig,l+1)<zmax_sec(ig)) .AND. (zqla(ig, &
1385 detr_star(ig, l) = -f0(ig)*f_star(ig, lmix(ig))/(rhobarz(ig, &
1386 lmix(ig))*wmaxa(ig))*(rhobarz(ig,l+1)*sqrt(w_est(ig, &
1387 l+1))*((zmax_sec(ig)-zlev(ig,l+1))/((zmax_sec(ig)-zlev(ig, &
1388 lmix(ig)))))**2.-rhobarz(ig,l)*sqrt(w_est(ig, &
1389 l))*((zmax_sec(ig)-zlev(ig,l))/((zmax_sec(ig)-zlev(ig,lmix(ig &
1392 detr_star(ig, l) = 0.002*f0(ig)*f_star(ig, l)* &
1393 (zlev(ig,l+1)-zlev(ig,l))
1397 detr_star(ig, l) = 0.
1400 detr_star(ig, l) = detr_star(ig, l)/f0(ig)
1402 entr_star(ig, l) = 0.4*detr_star(ig, l)
1404 entr_star(ig, l) = 0.4*detr_star(ig, l)
1407 IF ((detr_star(ig,l))>f_star(ig,l))
THEN
1408 detr_star(ig, l) = f_star(ig, l)
1412 IF ((l<lentr(ig)))
THEN
1413 entr_star(ig, l) = 0.
1420 f_star(ig, l+1) = f_star(ig, l) + alim_star(ig, l) + &
1421 entr_star(ig, l) - detr_star(ig, l)
1429 IF (f_star(ig,l+1)>1.e-10)
THEN
1441 ztla(ig, l) = (f_star(ig,l)*ztla(ig,l-1)+(alim_star(ig, &
1442 l)+entr_star(ig,l))*zthl(ig,l))/(f_star(ig,l+1)+detr_star(ig,l))
1451 zqta(ig, l) = (f_star(ig,l)*zqta(ig,l-1)+(alim_star(ig, &
1452 l)+entr_star(ig,l))*po(ig,l))/(f_star(ig,l+1)+detr_star(ig,l))
1458 tbef(ig) = ztla(ig, l)*zpspsk(ig, l)
1459 zdelta = max(0., sign(1.,rtt-tbef(ig)))
1460 qsatbef(ig) = r2es*foeew(tbef(ig), zdelta)/pplev(ig, l)
1461 qsatbef(ig) = min(0.5, qsatbef(ig))
1462 zcor = 1./(1.-retv*qsatbef(ig))
1463 qsatbef(ig) = qsatbef(ig)*zcor
1464 zsat(ig) = (max(0.,zqta(ig,l)-qsatbef(ig))>1.e-10)
1466 IF (zsat(ig) .AND. (1==1))
THEN
1467 qlbef = max(0., zqta(ig,l)-qsatbef(ig))
1468 dt = 0.5*rlvcp*qlbef
1470 DO WHILE (abs(dt)>ddt0)
1472 tbef(ig) = tbef(ig) + dt
1473 zdelta = max(0., sign(1.,rtt-tbef(ig)))
1474 qsatbef(ig) = r2es*foeew(tbef(ig), zdelta)/pplev(ig, l)
1475 qsatbef(ig) = min(0.5, qsatbef(ig))
1476 zcor = 1./(1.-retv*qsatbef(ig))
1477 qsatbef(ig) = qsatbef(ig)*zcor
1478 qlbef = zqta(ig, l) - qsatbef(ig)
1480 zdelta = max(0., sign(1.,rtt-tbef(ig)))
1481 zcvm5 = r5les*(1.-zdelta) + r5ies*zdelta
1482 zcor = 1./(1.-retv*qsatbef(ig))
1483 dqsat_dt = foede(tbef(ig), zdelta, zcvm5, qsatbef(ig), zcor)
1484 num = -tbef(ig) + ztla(ig, l)*zpspsk(ig, l) + rlvcp*qlbef
1485 denom = 1. + rlvcp*dqsat_dt
1486 IF (denom<1.e-10)
THEN
1492 zqla(ig, l) = max(0., zqta(ig,l)-qsatbef(ig))
1493 zqla(ig, l) = max(0., qlbef)
1501 ztva(ig, l) = ztla(ig, l)*zpspsk(ig, l) + rlvcp*zqla(ig, l)
1502 ztva(ig, l) = ztva(ig, l)/zpspsk(ig, l)
1504 zha(ig, l) = ztva(ig, l)
1509 ztva(ig, l) = ztva(ig, l)*(1.+retv*(zqta(ig,l)-zqla(ig, &
1521 zqsatth(ig, l) = qsatbef(ig)
1530 zw2(ig, l+1) = zw2(ig, l)* &
1533 ((f_star(ig,l))**2)/(f_star(ig,l+1)+detr_star(ig,l))**2 + &
1535 2.*
rg*(ztva(ig,l)-ztv(ig,l))/ztv(ig, l)*(zlev(ig,l+1)-zlev(ig,l))
1541 IF (zw2(ig,l+1)<0.)
THEN
1542 linter(ig) = (l*(zw2(ig,l+1)-zw2(ig,l))-zw2(ig,l))/(zw2(ig,l+1)-zw2( &
1550 wa_moy(ig, l+1) = sqrt(zw2(ig,l+1))
1553 IF (wa_moy(ig,l+1)>wmaxa(ig))
THEN
1556 wmaxa(ig) = wa_moy(ig, l+1)
1560 print *,
'fin calcul zw2'
1564 lmax(ig) = lentr(ig)
1567 DO l = nlay, lentr(ig) + 1, -1
1568 IF (zw2(ig,l)<=1.e-10)
THEN
1575 IF (lmin(ig)>1)
THEN
1589 IF (l<=lmax(ig))
THEN
1590 IF (zw2(ig,l)<0.)
THEN
1591 print *,
'pb2 zw2<0'
1593 zw2(ig, l) = sqrt(zw2(ig,l))
1594 wmax(ig) = max(wmax(ig), zw2(ig,l))
1604 zlevinter(ig) = zlev(ig, 1)
1608 zlevinter(ig) = (zlev(ig,lmax(ig)+1)-zlev(ig,lmax(ig)))*linter(ig) + &
1609 zlev(ig, lmax(ig)) - lmax(ig)*(zlev(ig,lmax(ig)+1)-zlev(ig,lmax(ig)))
1612 zmax(ig) = max(zmax(ig), zlevinter(ig)-zlev(ig,1))
1613 zmax0(ig) = zmax(ig)
1614 WRITE (11, *)
'ig,lmax,linter', ig, lmax(ig), linter(ig)
1615 WRITE (12, *)
'ig,zlevinter,zmax', ig, zmax(ig), zlevinter(ig)
1619 CALL fermeture_seche(ngrid, nlay, pplay, pplev, pphi, zlev, rhobarz, f0, &
1620 zpspsk, alim, zh, zo, lentr, lmin, nu_min, nu_max, r_aspect, zmax_sec2, &
1623 print *,
'avant fermeture'
1639 entr_star_tot(ig) = entr_star_tot(ig) &
1643 detr_star_tot(ig) = detr_star_tot(ig) &
1645 -detr_star(ig, k) + entr_star(ig, k)
1650 IF (alim_star_tot(ig)<1.e-10)
THEN
1655 alim_star2(ig) = alim_star2(ig) + alim_star(ig, k)**2/(rho(ig,k)*( &
1656 zlev(ig,k+1)-zlev(ig,k)))
1658 IF ((zmax_sec(ig)>1.e-10) .AND. (1==1))
THEN
1659 f(ig) = wmax_sec(ig)/(max(500.,zmax_sec(ig))*r_aspect*alim_star2(ig))
1660 f(ig) = f(ig) + (f0(ig)-f(ig))*exp((-ptimestep/zmax_sec(ig))*wmax_sec &
1663 f(ig) = wmax(ig)/(max(500.,zmax(ig))*r_aspect*alim_star2(ig))
1664 f(ig) = f(ig) + (f0(ig)-f(ig))*exp((-ptimestep/zmax(ig))*wmax(ig))
1669 print *,
'apres fermeture'
1673 alim(ig, k) = f(ig)*alim_star(ig, k)
1689 detr(ig, k) = f(ig)*detr_star(ig, k)
1690 IF (detr(ig,k)<0.)
THEN
1695 entr(ig, k) = f(ig)*entr_star(ig, k)
1696 IF (entr(ig,k)<0.)
THEN
1717 fmc(ig, l+1) = fmc(ig, l) + alim(ig, l) + entr(ig, l) - detr(ig, l)
1721 IF (fmc(ig,l+1)<0.)
THEN
1722 print *,
'fmc1<0', l + 1, lmax(ig), fmc(ig, l+1)
1723 fmc(ig, l+1) = fmc(ig, l)
1724 detr(ig, l) = alim(ig, l) + entr(ig, l)
1744 print *,
'THERMCELL PB ig=', ig,
' l=', l
1745 abort_message =
'THERMCELL PB'
1750 IF ((zw2(ig,l+1)>1.e-10) .AND. (zw2(ig,l)>1.e-10) .AND. (l>=lentr(ig))) &
1752 IF (((fmc(ig,l+1)/(rhobarz(ig,l+1)*zw2(ig,l+1)))>(fmc(ig,l)/ &
1753 (rhobarz(ig,l)*zw2(ig,l)))))
THEN
1754 f_old = fmc(ig, l+1)
1755 fmc(ig, l+1) = fmc(ig, l)*rhobarz(ig, l+1)*zw2(ig, l+1)/ &
1756 (rhobarz(ig,l)*zw2(ig,l))
1757 detr(ig, l) = detr(ig, l) + f_old - fmc(ig, l+1)
1763 IF ((fmc(ig,l+1)>fmc(ig,l)) .AND. (l>lentr(ig)))
THEN
1764 f_old = fmc(ig, l+1)
1765 fmc(ig, l+1) = fmc(ig, l)
1766 detr(ig, l) = detr(ig, l) + f_old - fmc(ig, l+1)
1768 IF (detr(ig,l)>fmc(ig,l))
THEN
1769 detr(ig, l) = fmc(ig, l)
1770 entr(ig, l) = fmc(ig, l+1) - alim(ig, l)
1772 IF (fmc(ig,l+1)<0.)
THEN
1773 detr(ig, l) = detr(ig, l) + fmc(ig, l+1)
1775 print *,
'fmc2<0', l + 1, lmax(ig)
1787 IF (zw2(ig,l+1)>1.e-10)
THEN
1788 IF ((((fmc(ig,l+1))/(rhobarz(ig,l+1)*zw2(ig,l+1)))>1.))
THEN
1789 f_old = fmc(ig, l+1)
1790 fmc(ig, l+1) = rhobarz(ig, l+1)*zw2(ig, l+1)
1793 detr(ig, l) = detr(ig, l) + f_old - fmc(ig, l+1)
1795 zmax(ig) = zlev(ig, lmax(ig))
1796 print *,
'alpha>1', l + 1, lmax(ig)
1806 fmc(ig, lmax(ig)+1) = 0.
1807 entr(ig, lmax(ig)) = 0.
1808 detr(ig, lmax(ig)) = fmc(ig, lmax(ig)) + entr(ig, lmax(ig)) + &
1815 IF (fmc(ig,l)<0.)
THEN
1816 print *,
'fm1<0!!!',
'ig=', ig,
'l=', l,
'a=', alim(ig, l-1),
'e=', &
1817 entr(ig, l-1),
'f=', fmc(ig, l-1),
'd=', detr(ig, l-1),
'f+1=', &
1825 IF ((abs(fmc(ig,l+1)-fmc(ig,l)-alim(ig,l)-entr(ig,l)+ &
1826 detr(ig,l)))>1.e-4)
THEN
1831 IF (detr(ig,l)<0.)
THEN
1832 print *,
'detrdemi<0!!!'
1840 IF (lmix(ig)>1.)
THEN
1842 IF (((zw2(ig,lmix(ig)-1)-zw2(ig,lmix(ig)))*((zlev(ig,lmix(ig)))- &
1843 (zlev(ig,lmix(ig)+1)))-(zw2(ig,lmix(ig))- &
1844 zw2(ig,lmix(ig)+1))*((zlev(ig,lmix(ig)-1))- &
1845 (zlev(ig,lmix(ig)))))>1e-10)
THEN
1847 zmix(ig) = ((zw2(ig,lmix(ig)-1)-zw2(ig,lmix(ig)))*((zlev(ig,lmix(ig)) &
1848 )**2-(zlev(ig,lmix(ig)+1))**2)-(zw2(ig,lmix(ig))-zw2(ig, &
1849 lmix(ig)+1))*((zlev(ig,lmix(ig)-1))**2-(zlev(ig,lmix(ig)))**2))/ &
1850 (2.*((zw2(ig,lmix(ig)-1)-zw2(ig,lmix(ig)))*((zlev(ig,lmix(ig)))- &
1851 (zlev(ig,lmix(ig)+1)))-(zw2(ig,lmix(ig))- &
1852 zw2(ig,lmix(ig)+1))*((zlev(ig,lmix(ig)-1))-(zlev(ig,lmix(ig))))))
1854 zmix(ig) = zlev(ig, lmix(ig))
1861 IF ((zmax(ig)-zmix(ig))<=0.)
THEN
1862 zmix(ig) = 0.9*zmax(ig)
1867 zmix0(ig) = zmix(ig)
1873 IF (zmix(ig)>=zlev(ig,l) .AND. zmix(ig)<zlev(ig,l+1))
THEN
1882 IF (detr(ig,l)>(fmc(ig,l)+alim(ig,l))+entr(ig,l))
THEN
1883 print *,
'detr2>fmc2!!!',
'ig=', ig,
'l=', l,
'd=', detr(ig, l), &
1884 'f=', fmc(ig, l),
'lmax=', lmax(ig)
1890 print *,
'pb!fm=0 et f_star>0', l, lmax(ig)
1896 DO l = lmax(ig) + 1,
klev + 1
1919 IF (l<=lmax(ig) .AND. (test(ig)==1))
THEN
1920 zw = max(wa_moy(ig,l), 1.e-10)
1921 larg_cons(ig, l) = zmax(ig)*r_aspect*fmc(ig, l)/(rhobarz(ig,l)*zw)
1928 IF (l<=lmax(ig) .AND. (test(ig)==1))
THEN
1931 IF ((l_mix*zlev(ig,l))<0.)
THEN
1932 print *,
'pb l_mix*zlev<0'
1936 IF (zw2(ig,l)>1.e-10)
THEN
1937 larg_detr(ig, l) = sqrt((l_mix/zw2(ig,l))*zlev(ig,l))
1939 larg_detr(ig, l) = sqrt(l_mix*zlev(ig,l))
1963 IF (larg_cons(ig,l)>1. .AND. (test(ig)==1))
THEN
1965 fraca(ig, l) = (larg_cons(ig,l)-larg_detr(ig,l))/(r_aspect*zmax(ig))
1967 fraca(ig, l) = max(fraca(ig,l), 0.)
1968 fraca(ig, l) = min(fraca(ig,l), 0.5)
1969 fracd(ig, l) = 1. - fraca(ig, l)
1970 fracc(ig, l) = larg_cons(ig, l)/(r_aspect*zmax(ig))
1981 IF (test(ig)==1)
THEN
1982 fracazmix(ig) = (fraca(ig,lmix(ig)+1)-fraca(ig,lmix(ig)))/ &
1983 (zlev(ig,lmix(ig)+1)-zlev(ig,lmix(ig)))*zmix(ig) + &
1984 fraca(ig, lmix(ig)) - zlev(ig, lmix(ig))*(fraca(ig,lmix(ig)+1)-fraca( &
1985 ig,lmix(ig)))/(zlev(ig,lmix(ig)+1)-zlev(ig,lmix(ig)))
1991 IF (larg_cons(ig,l)>1. .AND. (test(ig)==1))
THEN
1992 IF (l>lmix(ig))
THEN
1994 IF (zmax(ig)-zmix(ig)<1.e-10)
THEN
1996 xxx(ig, l) = (lmax(ig)+1.-l)/(lmax(ig)+1.-lmix(ig))
1998 xxx(ig, l) = (zmax(ig)-zlev(ig,l))/(zmax(ig)-zmix(ig))
2001 fraca(ig, l) = fracazmix(ig)
2002 ELSE IF (idetr==1)
THEN
2003 fraca(ig, l) = fracazmix(ig)*xxx(ig, l)
2004 ELSE IF (idetr==2)
THEN
2005 fraca(ig, l) = fracazmix(ig)*(1.-(1.-xxx(ig,l))**2)
2007 fraca(ig, l) = fracazmix(ig)*xxx(ig, l)**2
2010 fraca(ig, l) = max(fraca(ig,l), 0.)
2011 fraca(ig, l) = min(fraca(ig,l), 0.5)
2012 fracd(ig, l) = 1. - fraca(ig, l)
2013 fracc(ig, l) = larg_cons(ig, l)/(r_aspect*zmax(ig))
2019 print *,
'fin calcul fraca'
2035 IF (test(ig)==1)
THEN
2036 fm(ig, l) = fraca(ig, l)*wa_moy(ig, l)*rhobarz(ig, l)
2038 IF (alim(ig,l-1)<1e-10 .AND. fm(ig,l)>fm(ig,l-1) .AND. l>lmix(ig)) &
2040 fm(ig, l) = fm(ig, l-1)
2048 IF (fracd(ig,l)<0.1 .AND. (test(ig)==1))
THEN
2049 abort_message =
'fracd trop petit'
2053 wd(ig, l) = fm(ig, l)/(fracd(ig,l)*rhobarz(ig,l))
2060 IF (test(ig)==0)
THEN
2061 fm(ig, l) = fmc(ig, l)
2070 masse(ig, l) = (pplev(ig,l)-pplev(ig,l+1))/
rg
2084 IF (fm(ig,l+1)*ptimestep>masse(ig,l) .AND. fm(ig,l+1)*ptimestep>masse( &
2086 print *,
'WARN!!! FM>M ig=', ig,
' l=', l,
' FM=', &
2087 fm(ig, l+1)*ptimestep,
' M=', masse(ig, l), masse(ig, l+1)
2094 IF ((alim(ig,l)+entr(ig,l))*ptimestep>masse(ig,l))
THEN
2095 print *,
'WARN!!! E>M ig=', ig,
' l=', l,
' E==', &
2096 (entr(ig,l)+alim(ig,l))*ptimestep,
' M=', masse(ig, l)
2103 IF (.NOT. fm(ig,l)>=0. .OR. .NOT. fm(ig,l)<=10.)
THEN
2107 IF (.NOT. masse(ig,l)>=1.e-10 .OR. .NOT. masse(ig,l)<=1.e4)
THEN
2117 IF (.NOT. alim(ig,l)>=0. .OR. .NOT. alim(ig,l)<=10.)
THEN
2130 IF (test(ig)==1)
THEN
2131 detr(ig, l) = fm(ig, l) + alim(ig, l) - fm(ig, l+1)
2132 IF (detr(ig,l)<0.)
THEN
2134 fm(ig, l+1) = fm(ig, l) + alim(ig, l)
2145 fm0 = fm0 + ptimestep*(fm-fm0)/tho
2146 entr0 = entr0 + ptimestep*(alim+entr-entr0)/tho
2161 CALL dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse, zthl, &
2163 CALL dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse, po, pdoadj, &
2166 CALL dqthermcell2(ngrid, nlay, ptimestep, fm0, entr0, masse, fraca, zh, &
2168 CALL dqthermcell2(ngrid, nlay, ptimestep, fm0, entr0, masse, fraca, zo, &
2173 CALL dvthermcell2(ngrid, nlay, ptimestep, fm0, entr0, masse, fraca, zmax, &
2174 zu, zv, pduadj, pdvadj, zua, zva)
2176 CALL dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse, zu, pduadj, &
2178 CALL dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse, zv, pdvadj, &
2202 pdtadj(ig, l) = zdthladj(ig, l)*zpspsk(ig, l)
2227 IF (zw2(ig,l)>1.e-10)
THEN
2228 fraca(ig, l) = fm(ig, l)/(rhobarz(ig,l)*zw2(ig,l))
2237 zla(ig, l) = (1.-fracd(ig,l))*zmax(ig)
2238 zld(ig, l) = fracd(ig, l)*zmax(ig)
2239 IF (1.-fracd(ig,l)>1.e-10) zwa(ig, l) = wd(ig, l)*fracd(ig, l)/ &
2251 IF (zqla(ig,k)>1e-10)
THEN
2253 zcon(ig) = zlev(ig, k)
2267 thetath2(ig, l) = zf2*(zha(ig,l)-zh(ig,l)/zpspsk(ig,l))**2
2268 wth2(ig, l) = zf2*(zw2(ig,l))**2
2270 wth3(ig, l) = zf2*(1-2.*fraca(ig,l))/(1-fraca(ig,l))*zw2(ig, l)* &
2271 zw2(ig, l)*zw2(ig, l)
2272 q2(ig, l) = zf2*(zqta(ig,l)*1000.-po(ig,l)*1000.)**2
2275 ratqscth(ig, l) = sqrt(q2(ig,l))/(po(ig,l)*1000.)
2284 ratqsdiff(:, :) = 0.
2287 sum = sum + alim_star(ig, l)*zqta(ig, l)*1000.
2294 sumdiff = sumdiff + alim_star(ig, l)*(zqta(ig,l)*1000.-sum)**2
2301 ratqsdiff(ig, l) = sqrt(sumdiff)/(po(ig,l)*1000.)
2312 SUBROUTINE thermcell_eau(ngrid, nlay, ptimestep, pplay, pplev, pphi, pu, pv, &
2313 pt, po, pduadj, pdvadj, pdtadj, pdoadj, fm0, entr0 &
2315 , r_aspect, l_mix, w2di, tho)
2351 INTEGER ngrid, nlay, w2di
2353 REAL ptimestep, l_mix, r_aspect
2354 REAL pt(ngrid, nlay), pdtadj(ngrid, nlay)
2355 REAL pu(ngrid, nlay), pduadj(ngrid, nlay)
2356 REAL pv(ngrid, nlay), pdvadj(ngrid, nlay)
2357 REAL po(ngrid, nlay), pdoadj(ngrid, nlay)
2358 REAL pplay(ngrid, nlay), pplev(ngrid, nlay+1)
2359 REAL pphi(ngrid, nlay)
2369 INTEGER ig, k, l, lmaxa(
klon), lmix(
klon)
2370 REAL zsortie1d(
klon)
2425 REAL zcor, zdelta, zcvm5, qlbef
2427 REAL dqsat_dt, dt, num, denom
2428 REAL reps, rlvcp, ddt0
2435 REAL entr_star_tot(
klon), entr_star2(
klon)
2437 REAL zlevinter(
klon)
2448 CHARACTER (LEN=20) :: modname =
'thermcell_eau'
2449 CHARACTER (LEN=80) :: abort_message
2451 LOGICAL vtest(
klon), down
2468 IF (ngrid/=
klon)
THEN
2470 print *,
'STOP dans convadj'
2471 print *,
'ngrid =', ngrid
2472 print *,
'klon =',
klon
2491 zo(ig, ll) = po(ig, ll)
2493 zh(ig, ll) = pt(ig, ll)
2504 tbef(ig) = pt(ig, ll)
2505 zdelta = max(0., sign(1.,rtt-tbef(ig)))
2506 qsatbef(ig) = r2es*foeew(tbef(ig), zdelta)/pplev(ig, ll)
2507 qsatbef(ig) = min(0.5, qsatbef(ig))
2508 zcor = 1./(1.-retv*qsatbef(ig))
2509 qsatbef(ig) = qsatbef(ig)*zcor
2510 zsat(ig) = (max(0.,po(ig,ll)-qsatbef(ig))>0.00001)
2515 qlbef = max(0., po(ig,ll)-qsatbef(ig))
2517 dt = 0.5*rlvcp*qlbef
2521 tbef(ig) = tbef(ig) + dt
2522 zdelta = max(0., sign(1.,rtt-tbef(ig)))
2523 qsatbef(ig) = r2es*foeew(tbef(ig), zdelta)/pplev(ig, ll)
2524 qsatbef(ig) = min(0.5, qsatbef(ig))
2525 zcor = 1./(1.-retv*qsatbef(ig))
2526 qsatbef(ig) = qsatbef(ig)*zcor
2528 qlbef = po(ig, ll) - qsatbef(ig)
2530 zdelta = max(0., sign(1.,rtt-tbef(ig)))
2531 zcvm5 = r5les*(1.-zdelta) + r5ies*zdelta
2532 zcor = 1./(1.-retv*qsatbef(ig))
2533 dqsat_dt = foede(tbef(ig), zdelta, zcvm5, qsatbef(ig), zcor)
2534 num = -tbef(ig) + pt(ig, ll) + rlvcp*qlbef
2535 denom = 1. + rlvcp*dqsat_dt
2539 zl(ig, ll) = max(0., qlbef)
2541 zh(ig, ll) = pt(ig, ll) + rlvcp*zl(ig, ll)
2542 zo(ig, ll) = po(ig, ll) - zl(ig, ll)
2556 zpspsk(ig, l) = (pplay(ig,l)/pplev(ig,1))**rkappa
2558 zu(ig, l) = pu(ig, l)
2559 zv(ig, l) = pv(ig, l)
2566 ztv(ig, l) = zh(ig, l)/zpspsk(ig, l)
2568 ztv(ig, l) = ztv(ig, l)*(1.+retv*(zo(ig,l))-zl(ig,l))
2570 zthl(ig, l) = pt(ig, l)/zpspsk(ig, l)
2599 zlev(ig, l) = 0.5*(pphi(ig,l)+pphi(ig,l-1))/
rg
2604 zlev(ig, nlay+1) = (2.*pphi(ig,
klev)-pphi(ig,
klev-1))/
rg
2608 zlay(ig, l) = pphi(ig, l)/
rg
2620 rho(ig, l) = pplay(ig, l)/(zpspsk(ig,l)*rd*ztv(ig,l))
2626 rhobarz(ig, l) = 0.5*(rho(ig,l)+rho(ig,l-1))
2680 entr_star(ig, l) = 0.
2689 DO k = nlay - 1, 1, -1
2691 IF (ztv(ig,k)>ztv(ig,k+1) .AND. ztv(ig,k+1)<ztv(ig,k+2))
THEN
2703 IF (ztv(ig,l-1)>ztv(ig,l))
THEN
2712 IF (ztv(ig,l)>ztv(ig,l+1) .AND. l>=lmin(ig) .AND. l<=lentr(ig))
THEN
2713 entr_star(ig, l) = (ztv(ig,l)-ztv(ig,l+1))*(zlev(ig,l+1)-zlev(ig,l))
2719 IF (lmin(ig)>1)
THEN
2721 entr_star(ig, l) = 0.
2727 entr_star_tot(ig) = 0.
2731 entr_star_tot(ig) = entr_star_tot(ig) + entr_star(ig, k)
2737 ztva(ig, k) = ztv(ig, k)
2744 ztva(ig, k) = ztv(ig, k)
2745 ztla(ig, k) = zthl(ig, k)
2747 zqta(ig, k) = po(ig, k)
2760 larg_cons(ig, k) = 0.
2761 larg_detr(ig, k) = 0.
2777 IF (ztv(ig,l)>ztv(ig,l+1) .AND. entr_star(ig,l)>1.e-10 .AND. &
2778 zw2(ig,l)<1e-10)
THEN
2780 ztla(ig, l) = zthl(ig, l)
2781 zqta(ig, l) = po(ig, l)
2782 zqla(ig, l) = zl(ig, l)
2784 f_star(ig, l+1) = entr_star(ig, l)
2786 zw2(ig, l+1) = 2.*
rg*(ztv(ig,l)-ztv(ig,l+1))/ztv(ig, l+1)* &
2787 (zlev(ig,l+1)-zlev(ig,l))*0.4*pphi(ig, l)/(pphi(ig,l+1)-pphi(ig,l))
2788 larg_detr(ig, l) = 0.
2789 ELSE IF ((zw2(ig,l)>=1e-10) .AND. (f_star(ig,l)+entr_star(ig, &
2791 f_star(ig, l+1) = f_star(ig, l) + entr_star(ig, l)
2794 ztla(ig, l) = (f_star(ig,l)*ztla(ig,l-1)+entr_star(ig,l)*zthl(ig,l))/ &
2796 zqta(ig, l) = (f_star(ig,l)*zqta(ig,l-1)+entr_star(ig,l)*po(ig,l))/ &
2803 tbef(ig) = ztla(ig, l)*zpspsk(ig, l)
2804 zdelta = max(0., sign(1.,rtt-tbef(ig)))
2805 qsatbef(ig) = r2es*foeew(tbef(ig), zdelta)/pplev(ig, l)
2806 qsatbef(ig) = min(0.5, qsatbef(ig))
2807 zcor = 1./(1.-retv*qsatbef(ig))
2808 qsatbef(ig) = qsatbef(ig)*zcor
2809 zsat(ig) = (max(0.,zqta(ig,l)-qsatbef(ig))>0.00001)
2814 qlbef = max(0., zqta(ig,l)-qsatbef(ig))
2815 dt = 0.5*rlvcp*qlbef
2817 tbef(ig) = tbef(ig) + dt
2818 zdelta = max(0., sign(1.,rtt-tbef(ig)))
2819 qsatbef(ig) = r2es*foeew(tbef(ig), zdelta)/pplev(ig, l)
2820 qsatbef(ig) = min(0.5, qsatbef(ig))
2821 zcor = 1./(1.-retv*qsatbef(ig))
2822 qsatbef(ig) = qsatbef(ig)*zcor
2823 qlbef = zqta(ig, l) - qsatbef(ig)
2825 zdelta = max(0., sign(1.,rtt-tbef(ig)))
2826 zcvm5 = r5les*(1.-zdelta) + r5ies*zdelta
2827 zcor = 1./(1.-retv*qsatbef(ig))
2828 dqsat_dt = foede(tbef(ig), zdelta, zcvm5, qsatbef(ig), zcor)
2829 num = -tbef(ig) + ztla(ig, l)*zpspsk(ig, l) + rlvcp*qlbef
2830 denom = 1. + rlvcp*dqsat_dt
2833 zqla(ig, l) = max(0., zqta(ig,l)-qsatbef(ig))
2837 ztva(ig, l) = ztla(ig, l)*zpspsk(ig, l) + rlvcp*zqla(ig, l)
2838 ztva(ig, l) = ztva(ig, l)/zpspsk(ig, l)
2839 ztva(ig, l) = ztva(ig, l)*(1.+retv*(zqta(ig,l)-zqla(ig,l))-zqla(ig,l))
2843 IF (zw2(ig,l)>=1.e-10 .AND. f_star(ig,l)+entr_star(ig,l)>1.e-10)
THEN
2847 zw2(ig, l+1) = zw2(ig, l)*(f_star(ig,l)/f_star(ig,l+1))**2 + &
2848 2.*
rg*(ztva(ig,l)-ztv(ig,l))/ztv(ig, l)*(zlev(ig,l+1)-zlev(ig,l))
2851 IF (zw2(ig,l+1)<0.)
THEN
2852 linter(ig) = (l*(zw2(ig,l+1)-zw2(ig,l))-zw2(ig,l))/(zw2(ig,l+1)-zw2( &
2857 wa_moy(ig, l+1) = sqrt(zw2(ig,l+1))
2859 IF (wa_moy(ig,l+1)>wmaxa(ig))
THEN
2862 wmaxa(ig) = wa_moy(ig, l+1)
2869 lmax(ig) = lentr(ig)
2872 DO l = nlay, lentr(ig) + 1, -1
2873 IF (zw2(ig,l)<=1.e-10)
THEN
2880 IF (lmin(ig)>1)
THEN
2893 IF (l<=lmax(ig))
THEN
2894 zw2(ig, l) = sqrt(zw2(ig,l))
2895 wmax(ig) = max(wmax(ig), zw2(ig,l))
2905 zlevinter(ig) = zlev(ig, 1)
2909 zlevinter(ig) = (zlev(ig,lmax(ig)+1)-zlev(ig,lmax(ig)))*linter(ig) + &
2910 zlev(ig, lmax(ig)) - lmax(ig)*(zlev(ig,lmax(ig)+1)-zlev(ig,lmax(ig)))
2911 zmax(ig) = max(zmax(ig), zlevinter(ig)-zlev(ig,lmin(ig)))
2919 IF (entr_star_tot(ig)<1.e-10)
THEN
2922 DO k = lmin(ig), lentr(ig)
2923 entr_star2(ig) = entr_star2(ig) + entr_star(ig, k)**2/(rho(ig,k)*( &
2924 zlev(ig,k+1)-zlev(ig,k)))
2927 f(ig) = wmax(ig)/(zmax(ig)*r_aspect*entr_star2(ig))*entr_star_tot(ig)
2930 f(ig) = f(ig) + (f0(ig)-f(ig))*exp(-ptimestep/zmax(ig)*wmax(ig))
2940 entr(ig, k) = f(ig)*entr_star(ig, k)
2945 DO l = 1, lmax(ig) - 1
2946 fmc(ig, l+1) = fmc(ig, l) + entr(ig, l)
2966 IF (l<=lmaxa(ig))
THEN
2967 zw = max(wa_moy(ig,l), 1.e-10)
2968 larg_cons(ig, l) = zmax(ig)*r_aspect*fmc(ig, l)/(rhobarz(ig,l)*zw)
2975 IF (l<=lmaxa(ig))
THEN
2978 larg_detr(ig, l) = sqrt(l_mix*zlev(ig,l))
3000 IF (lmix(ig)>1.)
THEN
3001 zmix(ig) = ((zw2(ig,lmix(ig)-1)-zw2(ig,lmix(ig)))*((zlev(ig,lmix(ig))) &
3002 **2-(zlev(ig,lmix(ig)+1))**2)-(zw2(ig,lmix(ig))-zw2(ig, &
3003 lmix(ig)+1))*((zlev(ig,lmix(ig)-1))**2-(zlev(ig,lmix(ig)))**2))/ &
3004 (2.*((zw2(ig,lmix(ig)-1)-zw2(ig,lmix(ig)))*((zlev(ig,lmix(ig)))- &
3005 (zlev(ig,lmix(ig)+1)))-(zw2(ig,lmix(ig))-zw2(ig,lmix(ig)+1))*((zlev( &
3006 ig,lmix(ig)-1))-(zlev(ig,lmix(ig))))))
3015 IF (zmix(ig)>=zlev(ig,l) .AND. zmix(ig)<zlev(ig,l+1))
THEN
3023 IF (larg_cons(ig,l)>1.)
THEN
3025 fraca(ig, l) = (larg_cons(ig,l)-larg_detr(ig,l))/(r_aspect*zmax(ig))
3027 fraca(ig, l) = max(fraca(ig,l), 0.)
3028 fraca(ig, l) = min(fraca(ig,l), 0.5)
3029 fracd(ig, l) = 1. - fraca(ig, l)
3030 fracc(ig, l) = larg_cons(ig, l)/(r_aspect*zmax(ig))
3041 fracazmix(ig) = (fraca(ig,lmix(ig)+1)-fraca(ig,lmix(ig)))/ &
3042 (zlev(ig,lmix(ig)+1)-zlev(ig,lmix(ig)))*zmix(ig) + &
3043 fraca(ig, lmix(ig)) - zlev(ig, lmix(ig))*(fraca(ig,lmix(ig)+1)-fraca(ig &
3044 ,lmix(ig)))/(zlev(ig,lmix(ig)+1)-zlev(ig,lmix(ig)))
3049 IF (larg_cons(ig,l)>1.)
THEN
3050 IF (l>lmix(ig))
THEN
3051 xxx(ig, l) = (zmax(ig)-zlev(ig,l))/(zmax(ig)-zmix(ig))
3053 fraca(ig, l) = fracazmix(ig)
3054 ELSE IF (idetr==1)
THEN
3055 fraca(ig, l) = fracazmix(ig)*xxx(ig, l)
3056 ELSE IF (idetr==2)
THEN
3057 fraca(ig, l) = fracazmix(ig)*(1.-(1.-xxx(ig,l))**2)
3059 fraca(ig, l) = fracazmix(ig)*xxx(ig, l)**2
3062 fraca(ig, l) = max(fraca(ig,l), 0.)
3063 fraca(ig, l) = min(fraca(ig,l), 0.5)
3064 fracd(ig, l) = 1. - fraca(ig, l)
3065 fracc(ig, l) = larg_cons(ig, l)/(r_aspect*zmax(ig))
3086 fm(ig, l) = fraca(ig, l)*wa_moy(ig, l)*rhobarz(ig, l)
3088 IF (entr(ig,l-1)<1e-10 .AND. fm(ig,l)>fm(ig,l-1) .AND. l>lmix(ig))
THEN
3089 fm(ig, l) = fm(ig, l-1)
3096 IF (fracd(ig,l)<0.1)
THEN
3097 abort_message =
'fracd trop petit'
3101 wd(ig, l) = fm(ig, l)/(fracd(ig,l)*rhobarz(ig,l))
3109 masse(ig, l) = (pplev(ig,l)-pplev(ig,l+1))/
rg
3123 IF (fm(ig,l+1)*ptimestep>masse(ig,l) .AND. fm(ig,l+1)*ptimestep>masse( &
3134 IF (entr(ig,l)*ptimestep>masse(ig,l))
THEN
3144 IF (.NOT. fm(ig,l)>=0. .OR. .NOT. fm(ig,l)<=10.)
THEN
3148 IF (.NOT. masse(ig,l)>=1.e-10 .OR. .NOT. masse(ig,l)<=1.e4)
THEN
3158 IF (.NOT. entr(ig,l)>=0. .OR. .NOT. entr(ig,l)<=10.)
THEN
3168 fm0 = fm0 + ptimestep*(fm-fm0)/tho
3169 entr0 = entr0 + ptimestep*(entr-entr0)/tho
3180 CALL dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse, zthl, &
3182 CALL dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse, po, pdoadj, &
3185 CALL dqthermcell2(ngrid, nlay, ptimestep, fm0, entr0, masse, fraca, zh, &
3187 CALL dqthermcell2(ngrid, nlay, ptimestep, fm0, entr0, masse, fraca, zo, &
3192 CALL dvthermcell2(ngrid, nlay, ptimestep, fm0, entr0, masse, fraca, zmax, &
3193 zu, zv, pduadj, pdvadj, zua, zva)
3195 CALL dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse, zu, pduadj, &
3197 CALL dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse, zv, pdvadj, &
3203 zf = 0.5*(fracc(ig,l)+fracc(ig,l+1))
3205 thetath2(ig, l) = zf2*(zha(ig,l)-zh(ig,l))**2
3206 wth2(ig, l) = zf2*(0.5*(wa_moy(ig,l)+wa_moy(ig,l+1)))**2
3217 pdtadj(ig, l) = zdthladj(ig, l)*zpspsk(ig, l)
3243 SUBROUTINE thermcell(ngrid, nlay, ptimestep, pplay, pplev, pphi, pu, pv, pt, &
3244 po, pduadj, pdvadj, pdtadj, pdoadj, fm0, entr0 &
3246 , r_aspect, l_mix, w2di, tho)
3280 INTEGER ngrid, nlay, w2di
3282 REAL ptimestep, l_mix, r_aspect
3283 REAL pt(ngrid, nlay), pdtadj(ngrid, nlay)
3284 REAL pu(ngrid, nlay), pduadj(ngrid, nlay)
3285 REAL pv(ngrid, nlay), pdvadj(ngrid, nlay)
3286 REAL po(ngrid, nlay), pdoadj(ngrid, nlay)
3287 REAL pplay(ngrid, nlay), pplev(ngrid, nlay+1)
3288 REAL pphi(ngrid, nlay)
3298 INTEGER ig, k, l, lmaxa(
klon), lmix(
klon)
3299 REAL zsortie1d(
klon)
3353 REAL entr_star_tot(
klon), entr_star2(
klon)
3355 REAL zlevinter(
klon)
3365 CHARACTER (LEN=20) :: modname =
'thermcell'
3366 CHARACTER (LEN=80) :: abort_message
3368 LOGICAL vtest(
klon), down
3383 IF (ngrid/=
klon)
THEN
3385 print *,
'STOP dans convadj'
3386 print *,
'ngrid =', ngrid
3387 print *,
'klon =',
klon
3398 zpspsk(ig, l) = (pplay(ig,l)/pplev(ig,1))**rkappa
3399 zh(ig, l) = pt(ig, l)/zpspsk(ig, l)
3400 zu(ig, l) = pu(ig, l)
3401 zv(ig, l) = pv(ig, l)
3402 zo(ig, l) = po(ig, l)
3403 ztv(ig, l) = zh(ig, l)*(1.+0.61*zo(ig,l))
3431 zlev(ig, l) = 0.5*(pphi(ig,l)+pphi(ig,l-1))/
rg
3436 zlev(ig, nlay+1) = (2.*pphi(ig,
klev)-pphi(ig,
klev-1))/
rg
3440 zlay(ig, l) = pphi(ig, l)/
rg
3451 rho(ig, l) = pplay(ig, l)/(zpspsk(ig,l)*rd*zh(ig,l))
3457 rhobarz(ig, l) = 0.5*(rho(ig,l)+rho(ig,l-1))
3511 entr_star(ig, l) = 0.
3520 DO k = nlay - 2, 1, -1
3522 IF (ztv(ig,k)>ztv(ig,k+1) .AND. ztv(ig,k+1)<=ztv(ig,k+2))
THEN
3534 IF (ztv(ig,l-1)>ztv(ig,l))
THEN
3543 IF (ztv(ig,l)>ztv(ig,l+1) .AND. l>=lmin(ig) .AND. l<=lentr(ig))
THEN
3544 entr_star(ig, l) = (ztv(ig,l)-ztv(ig,l+1))*(zlev(ig,l+1)-zlev(ig,l))
3550 IF (lmin(ig)>5)
THEN
3552 entr_star(ig, l) = 0.
3558 entr_star_tot(ig) = 0.
3562 entr_star_tot(ig) = entr_star_tot(ig) + entr_star(ig, k)
3566 print *,
'fin calcul entr_star'
3569 ztva(ig, k) = ztv(ig, k)
3581 larg_cons(ig, k) = 0.
3582 larg_detr(ig, k) = 0.
3598 IF (ztv(ig,l)>ztv(ig,l+1) .AND. entr_star(ig,l)>1.e-10 .AND. &
3599 zw2(ig,l)<1e-10)
THEN
3600 f_star(ig, l+1) = entr_star(ig, l)
3602 zw2(ig, l+1) = 2.*
rg*(ztv(ig,l)-ztv(ig,l+1))/ztv(ig, l+1)* &
3603 (zlev(ig,l+1)-zlev(ig,l))*0.4*pphi(ig, l)/(pphi(ig,l+1)-pphi(ig,l))
3604 larg_detr(ig, l) = 0.
3605 ELSE IF ((zw2(ig,l)>=1e-10) .AND. (f_star(ig,l)+entr_star(ig, &
3607 f_star(ig, l+1) = f_star(ig, l) + entr_star(ig, l)
3608 ztva(ig, l) = (f_star(ig,l)*ztva(ig,l-1)+entr_star(ig,l)*ztv(ig,l))/ &
3610 zw2(ig, l+1) = zw2(ig, l)*(f_star(ig,l)/f_star(ig,l+1))**2 + &
3611 2.*
rg*(ztva(ig,l)-ztv(ig,l))/ztv(ig, l)*(zlev(ig,l+1)-zlev(ig,l))
3614 IF (zw2(ig,l+1)<0.)
THEN
3616 IF (abs(zw2(ig,l+1)-zw2(ig,l))<1e-10)
THEN
3617 print *,
'pb linter'
3619 linter(ig) = (l*(zw2(ig,l+1)-zw2(ig,l))-zw2(ig,l))/(zw2(ig,l+1)-zw2( &
3624 IF (zw2(ig,l+1)<0.)
THEN
3625 print *,
'pb1 zw2<0'
3627 wa_moy(ig, l+1) = sqrt(zw2(ig,l+1))
3629 IF (wa_moy(ig,l+1)>wmaxa(ig))
THEN
3632 wmaxa(ig) = wa_moy(ig, l+1)
3636 print *,
'fin calcul zw2'
3640 lmax(ig) = lentr(ig)
3643 DO l = nlay, lentr(ig) + 1, -1
3644 IF (zw2(ig,l)<=1.e-10)
THEN
3651 IF (lmin(ig)>5)
THEN
3664 IF (l<=lmax(ig))
THEN
3665 IF (zw2(ig,l)<0.)
THEN
3666 print *,
'pb2 zw2<0'
3668 zw2(ig, l) = sqrt(zw2(ig,l))
3669 wmax(ig) = max(wmax(ig), zw2(ig,l))
3679 zlevinter(ig) = zlev(ig, 1)
3683 zlevinter(ig) = (zlev(ig,lmax(ig)+1)-zlev(ig,lmax(ig)))*linter(ig) + &
3684 zlev(ig, lmax(ig)) - lmax(ig)*(zlev(ig,lmax(ig)+1)-zlev(ig,lmax(ig)))
3685 zmax(ig) = max(zmax(ig), zlevinter(ig)-zlev(ig,lmin(ig)))
3688 print *,
'avant fermeture'
3694 IF (entr_star_tot(ig)<1.e-10)
THEN
3697 DO k = lmin(ig), lentr(ig)
3698 entr_star2(ig) = entr_star2(ig) + entr_star(ig, k)**2/(rho(ig,k)*( &
3699 zlev(ig,k+1)-zlev(ig,k)))
3702 f(ig) = wmax(ig)/(max(500.,zmax(ig))*r_aspect*entr_star2(ig))* &
3713 print *,
'apres fermeture'
3718 entr(ig, k) = f(ig)*entr_star(ig, k)
3723 DO l = 1, lmax(ig) - 1
3724 fmc(ig, l+1) = fmc(ig, l) + entr(ig, l)
3744 IF (l<=lmaxa(ig))
THEN
3745 zw = max(wa_moy(ig,l), 1.e-10)
3746 larg_cons(ig, l) = zmax(ig)*r_aspect*fmc(ig, l)/(rhobarz(ig,l)*zw)
3753 IF (l<=lmaxa(ig))
THEN
3756 IF ((l_mix*zlev(ig,l))<0.)
THEN
3757 print *,
'pb l_mix*zlev<0'
3759 larg_detr(ig, l) = sqrt(l_mix*zlev(ig,l))
3781 IF (lmix(ig)>1.)
THEN
3783 IF (((zw2(ig,lmix(ig)-1)-zw2(ig,lmix(ig)))*((zlev(ig,lmix(ig)))- &
3784 (zlev(ig,lmix(ig)+1)))-(zw2(ig,lmix(ig))- &
3785 zw2(ig,lmix(ig)+1))*((zlev(ig,lmix(ig)-1))- &
3786 (zlev(ig,lmix(ig)))))>1e-10)
THEN
3788 zmix(ig) = ((zw2(ig,lmix(ig)-1)-zw2(ig,lmix(ig)))*((zlev(ig,lmix(ig)) &
3789 )**2-(zlev(ig,lmix(ig)+1))**2)-(zw2(ig,lmix(ig))-zw2(ig, &
3790 lmix(ig)+1))*((zlev(ig,lmix(ig)-1))**2-(zlev(ig,lmix(ig)))**2))/ &
3791 (2.*((zw2(ig,lmix(ig)-1)-zw2(ig,lmix(ig)))*((zlev(ig,lmix(ig)))- &
3792 (zlev(ig,lmix(ig)+1)))-(zw2(ig,lmix(ig))- &
3793 zw2(ig,lmix(ig)+1))*((zlev(ig,lmix(ig)-1))-(zlev(ig,lmix(ig))))))
3795 zmix(ig) = zlev(ig, lmix(ig))
3802 IF ((zmax(ig)-zmix(ig))<0.)
THEN
3803 zmix(ig) = 0.99*zmax(ig)
3811 IF (zmix(ig)>=zlev(ig,l) .AND. zmix(ig)<zlev(ig,l+1))
THEN
3819 IF (larg_cons(ig,l)>1.)
THEN
3821 fraca(ig, l) = (larg_cons(ig,l)-larg_detr(ig,l))/(r_aspect*zmax(ig))
3823 fraca(ig, l) = max(fraca(ig,l), 0.)
3824 fraca(ig, l) = min(fraca(ig,l), 0.5)
3825 fracd(ig, l) = 1. - fraca(ig, l)
3826 fracc(ig, l) = larg_cons(ig, l)/(r_aspect*zmax(ig))
3837 fracazmix(ig) = (fraca(ig,lmix(ig)+1)-fraca(ig,lmix(ig)))/ &
3838 (zlev(ig,lmix(ig)+1)-zlev(ig,lmix(ig)))*zmix(ig) + &
3839 fraca(ig, lmix(ig)) - zlev(ig, lmix(ig))*(fraca(ig,lmix(ig)+1)-fraca(ig &
3840 ,lmix(ig)))/(zlev(ig,lmix(ig)+1)-zlev(ig,lmix(ig)))
3845 IF (larg_cons(ig,l)>1.)
THEN
3846 IF (l>lmix(ig))
THEN
3848 IF (zmax(ig)-zmix(ig)<1.e-10)
THEN
3850 xxx(ig, l) = (lmaxa(ig)+1.-l)/(lmaxa(ig)+1.-lmix(ig))
3852 xxx(ig, l) = (zmax(ig)-zlev(ig,l))/(zmax(ig)-zmix(ig))
3855 fraca(ig, l) = fracazmix(ig)
3856 ELSE IF (idetr==1)
THEN
3857 fraca(ig, l) = fracazmix(ig)*xxx(ig, l)
3858 ELSE IF (idetr==2)
THEN
3859 fraca(ig, l) = fracazmix(ig)*(1.-(1.-xxx(ig,l))**2)
3861 fraca(ig, l) = fracazmix(ig)*xxx(ig, l)**2
3864 fraca(ig, l) = max(fraca(ig,l), 0.)
3865 fraca(ig, l) = min(fraca(ig,l), 0.5)
3866 fracd(ig, l) = 1. - fraca(ig, l)
3867 fracc(ig, l) = larg_cons(ig, l)/(r_aspect*zmax(ig))
3873 print *,
'fin calcul fraca'
3889 fm(ig, l) = fraca(ig, l)*wa_moy(ig, l)*rhobarz(ig, l)
3891 IF (entr(ig,l-1)<1e-10 .AND. fm(ig,l)>fm(ig,l-1) .AND. l>lmix(ig))
THEN
3892 fm(ig, l) = fm(ig, l-1)
3899 IF (fracd(ig,l)<0.1)
THEN
3900 abort_message =
'fracd trop petit'
3904 wd(ig, l) = fm(ig, l)/(fracd(ig,l)*rhobarz(ig,l))
3912 masse(ig, l) = (pplev(ig,l)-pplev(ig,l+1))/
rg
3926 IF (fm(ig,l+1)*ptimestep>masse(ig,l) .AND. fm(ig,l+1)*ptimestep>masse( &
3937 IF (entr(ig,l)*ptimestep>masse(ig,l))
THEN
3947 IF (.NOT. fm(ig,l)>=0. .OR. .NOT. fm(ig,l)<=10.)
THEN
3951 IF (.NOT. masse(ig,l)>=1.e-10 .OR. .NOT. masse(ig,l)<=1.e4)
THEN
3961 IF (.NOT. entr(ig,l)>=0. .OR. .NOT. entr(ig,l)<=10.)
THEN
3973 detr(ig, l) = fm(ig, l) + entr(ig, l) - fm(ig, l+1)
3974 IF (detr(ig,l)<0.)
THEN
3975 entr(ig, l) = entr(ig, l) - detr(ig, l)
3983 fm0 = fm0 + ptimestep*(fm-fm0)/tho
3984 entr0 = entr0 + ptimestep*(entr-entr0)/tho
3991 CALL dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse, zh, zdhadj, &
3993 CALL dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse, zo, pdoadj, &
3996 CALL dqthermcell2(ngrid, nlay, ptimestep, fm0, entr0, masse, fraca, zh, &
3998 CALL dqthermcell2(ngrid, nlay, ptimestep, fm0, entr0, masse, fraca, zo, &
4003 CALL dvthermcell2(ngrid, nlay, ptimestep, fm0, entr0, masse, fraca, zmax, &
4004 zu, zv, pduadj, pdvadj, zua, zva)
4006 CALL dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse, zu, pduadj, &
4008 CALL dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse, zv, pdvadj, &
4014 zf = 0.5*(fracc(ig,l)+fracc(ig,l+1))
4016 thetath2(ig, l) = zf2*(zha(ig,l)-zh(ig,l))**2
4017 wth2(ig, l) = zf2*(0.5*(wa_moy(ig,l)+wa_moy(ig,l+1)))**2
4027 pdtadj(ig, l) = zdhadj(ig, l)*zpspsk(ig, l)
4053 zla(ig, l) = (1.-fracd(ig,l))*zmax(ig)
4054 zld(ig, l) = fracd(ig, l)*zmax(ig)
4055 IF (1.-fracd(ig,l)>1.e-10) zwa(ig, l) = wd(ig, l)*fracd(ig, l)/ &
4078 CALL writeg1d(1, nlay, wd,
'wd ',
'wd ')
4079 CALL writeg1d(1, nlay, zwa,
'wa ',
'wa ')
4080 CALL writeg1d(1, nlay, fracd,
'fracd ',
'fracd ')
4081 CALL writeg1d(1, nlay, fraca,
'fraca ',
'fraca ')
4082 CALL writeg1d(1, nlay, wa_moy,
'wam ',
'wam ')
4083 CALL writeg1d(1, nlay, zla,
'la ',
'la ')
4084 CALL writeg1d(1, nlay, zld,
'ld ',
'ld ')
4085 CALL writeg1d(1, nlay, pt,
'pt ',
'pt ')
4086 CALL writeg1d(1, nlay, zh,
'zh ',
'zh ')
4087 CALL writeg1d(1, nlay, zha,
'zha ',
'zha ')
4088 CALL writeg1d(1, nlay, zu,
'zu ',
'zu ')
4089 CALL writeg1d(1, nlay, zv,
'zv ',
'zv ')
4090 CALL writeg1d(1, nlay, zo,
'zo ',
'zo ')
4091 CALL writeg1d(1, nlay, wh,
'wh ',
'wh ')
4092 CALL writeg1d(1, nlay, wu,
'wu ',
'wu ')
4093 CALL writeg1d(1, nlay, wv,
'wv ',
'wv ')
4094 CALL writeg1d(1, nlay, wo,
'w15uo ',
'wXo ')
4095 CALL writeg1d(1, nlay, zdhadj,
'zdhadj ',
'zdhadj ')
4096 CALL writeg1d(1, nlay, pduadj,
'pduadj ',
'pduadj ')
4097 CALL writeg1d(1, nlay, pdvadj,
'pdvadj ',
'pdvadj ')
4098 CALL writeg1d(1, nlay, pdoadj,
'pdoadj ',
'pdoadj ')
4099 CALL writeg1d(1, nlay, entr,
'entr ',
'entr ')
4100 CALL writeg1d(1, nlay, detr,
'detr ',
'detr ')
4101 CALL writeg1d(1, nlay, fm,
'fm ',
'fm ')
4103 CALL writeg1d(1, nlay, pdtadj,
'pdtadj ',
'pdtadj ')
4104 CALL writeg1d(1, nlay, pplay,
'pplay ',
'pplay ')
4105 CALL writeg1d(1, nlay, pplev,
'pplev ',
'pplev ')
4109 CALL dt2f(pplev, pplay, pt, pdtadj, wh)
4110 CALL writeg1d(1, nlay, wh,
'wh2 ',
'wh2 ')
4122 SUBROUTINE dqthermcell(ngrid, nlay, ptimestep, fm, entr, masse, q, dq, qa)
4137 REAL masse(ngrid, nlay), fm(ngrid, nlay+1)
4138 REAL entr(ngrid, nlay)
4140 REAL dq(ngrid, nlay)
4150 detr(ig, k) = fm(ig, k) - fm(ig, k+1) + entr(ig, k)
4152 IF (detr(ig,k)<0.)
THEN
4153 entr(ig, k) = entr(ig, k) - detr(ig, k)
4158 IF (fm(ig,k+1)<0.)
THEN
4161 IF (entr(ig,k)<0.)
THEN
4169 qa(ig, 1) = q(ig, 1)
4174 IF ((fm(ig,k+1)+detr(ig,k))*ptimestep>1.e-5*masse(ig,k))
THEN
4175 qa(ig, k) = (fm(ig,k)*qa(ig,k-1)+entr(ig,k)*q(ig,k))/ &
4176 (fm(ig,k+1)+detr(ig,k))
4178 qa(ig, k) = q(ig, k)
4180 IF (qa(ig,k)<0.)
THEN
4183 IF (q(ig,k)<0.)
THEN
4192 wqd(ig, k) = fm(ig, k)*q(ig, k)
4193 IF (wqd(ig,k)<0.)
THEN
4200 wqd(ig, nlay+1) = 0.
4205 dq(ig, k) = (detr(ig,k)*qa(ig,k)-entr(ig,k)*q(ig,k)-wqd(ig,k)+wqd(ig,k+ &
4215 SUBROUTINE dvthermcell(ngrid, nlay, ptimestep, fm, entr, masse, fraca, larga, &
4216 u, v, du, dv, ua, va)
4231 REAL masse(ngrid, nlay), fm(ngrid, nlay+1)
4232 REAL fraca(ngrid, nlay+1)
4234 REAL entr(ngrid, nlay)
4236 REAL ua(ngrid, nlay)
4237 REAL du(ngrid, nlay)
4239 REAL va(ngrid, nlay)
4240 REAL dv(ngrid, nlay)
4254 detr(ig, k) = fm(ig, k) - fm(ig, k+1) + entr(ig, k)
4260 ua(ig, 1) = u(ig, 1)
4261 va(ig, 1) = v(ig, 1)
4266 IF ((fm(ig,k+1)+detr(ig,k))*ptimestep>1.e-5*masse(ig,k))
THEN
4269 gamma0 = masse(ig, k)*sqrt(0.5*(fraca(ig,k+1)+fraca(ig, &
4274 dua = ua(ig, k-1) - u(ig, k-1)
4275 dva = va(ig, k-1) - v(ig, k-1)
4277 gamma(ig, k) = gamma0*sqrt(dua**2+dva**2)
4278 ua(ig, k) = (fm(ig,k)*ua(ig,k-1)+(entr(ig,k)+gamma(ig, &
4279 k))*u(ig,k))/(fm(ig,k+1)+detr(ig,k)+gamma(ig,k))
4280 va(ig, k) = (fm(ig,k)*va(ig,k-1)+(entr(ig,k)+gamma(ig, &
4281 k))*v(ig,k))/(fm(ig,k+1)+detr(ig,k)+gamma(ig,k))
4283 dua = ua(ig, k) - u(ig, k)
4284 dva = va(ig, k) - v(ig, k)
4287 ua(ig, k) = u(ig, k)
4288 va(ig, k) = v(ig, k)
4296 wud(ig, k) = fm(ig, k)*u(ig, k)
4297 wvd(ig, k) = fm(ig, k)*v(ig, k)
4302 wud(ig, nlay+1) = 0.
4304 wvd(ig, nlay+1) = 0.
4309 du(ig, k) = ((detr(ig,k)+gamma(ig,k))*ua(ig,k)-(entr(ig,k)+gamma(ig, &
4310 k))*u(ig,k)-wud(ig,k)+wud(ig,k+1))/masse(ig, k)
4311 dv(ig, k) = ((detr(ig,k)+gamma(ig,k))*va(ig,k)-(entr(ig,k)+gamma(ig, &
4312 k))*v(ig,k)-wvd(ig,k)+wvd(ig,k+1))/masse(ig, k)
4318 SUBROUTINE dqthermcell2(ngrid, nlay, ptimestep, fm, entr, masse, frac, q, dq, &
4334 REAL masse(ngrid, nlay), fm(ngrid, nlay+1)
4335 REAL entr(ngrid, nlay), frac(ngrid, nlay)
4337 REAL dq(ngrid, nlay)
4348 detr(ig, k) = fm(ig, k) - fm(ig, k+1) + entr(ig, k)
4354 qa(ig, 1) = q(ig, 1)
4355 qe(ig, 1) = q(ig, 1)
4360 IF ((fm(ig,k+1)+detr(ig,k))*ptimestep>1.e-5*masse(ig,k))
THEN
4361 zf = 0.5*(frac(ig,k)+frac(ig,k+1))
4363 qa(ig, k) = (fm(ig,k)*qa(ig,k-1)+zf2*entr(ig,k)*q(ig,k))/ &
4364 (fm(ig,k+1)+detr(ig,k)+entr(ig,k)*zf*zf2)
4365 qe(ig, k) = (q(ig,k)-zf*qa(ig,k))*zf2
4367 qa(ig, k) = q(ig, k)
4368 qe(ig, k) = q(ig, k)
4376 wqd(ig, k) = fm(ig, k)*qe(ig, k)
4381 wqd(ig, nlay+1) = 0.
4386 dq(ig, k) = (detr(ig,k)*qa(ig,k)-entr(ig,k)*qe(ig,k)-wqd(ig,k)+wqd(ig,k &
4393 SUBROUTINE dvthermcell2(ngrid, nlay, ptimestep, fm, entr, masse, fraca, &
4394 larga,
u, v, du, dv, ua, va)
4409 REAL masse(ngrid, nlay), fm(ngrid, nlay+1)
4410 REAL fraca(ngrid, nlay+1)
4412 REAL entr(ngrid, nlay)
4414 REAL ua(ngrid, nlay)
4415 REAL du(ngrid, nlay)
4417 REAL va(ngrid, nlay)
4418 REAL dv(ngrid, nlay)
4433 detr(ig, k) = fm(ig, k) - fm(ig, k+1) + entr(ig, k)
4439 ua(ig, 1) = u(ig, 1)
4440 va(ig, 1) = v(ig, 1)
4441 ue(ig, 1) = u(ig, 1)
4442 ve(ig, 1) = v(ig, 1)
4447 IF ((fm(ig,k+1)+detr(ig,k))*ptimestep>1.e-5*masse(ig,k))
THEN
4450 gamma0 = masse(ig, k)*sqrt(0.5*(fraca(ig,k+1)+fraca(ig, &
4451 k)))*0.5/larga(ig)*1.
4454 zf = 0.5*(fraca(ig,k)+fraca(ig,k+1))
4459 dua = ua(ig, k-1) - u(ig, k-1)
4460 dva = va(ig, k-1) - v(ig, k-1)
4463 gamma(ig, k) = gamma0
4465 gamma(ig, k) = gamma0*sqrt(dua**2+dva**2)
4466 ua(ig, k) = (fm(ig,k)*ua(ig,k-1)+(zf2*entr(ig,k)+gamma(ig, &
4467 k))*u(ig,k))/(fm(ig,k+1)+detr(ig,k)+entr(ig,k)*zf*zf2+gamma(ig,k) &
4469 va(ig, k) = (fm(ig,k)*va(ig,k-1)+(zf2*entr(ig,k)+gamma(ig, &
4470 k))*v(ig,k))/(fm(ig,k+1)+detr(ig,k)+entr(ig,k)*zf*zf2+gamma(ig,k) &
4473 dua = ua(ig, k) - u(ig, k)
4474 dva = va(ig, k) - v(ig, k)
4475 ue(ig, k) = (u(ig,k)-zf*ua(ig,k))*zf2
4476 ve(ig, k) = (v(ig,k)-zf*va(ig,k))*zf2
4479 ua(ig, k) = u(ig, k)
4480 va(ig, k) = v(ig, k)
4481 ue(ig, k) = u(ig, k)
4482 ve(ig, k) = v(ig, k)
4490 wud(ig, k) = fm(ig, k)*ue(ig, k)
4491 wvd(ig, k) = fm(ig, k)*ve(ig, k)
4496 wud(ig, nlay+1) = 0.
4498 wvd(ig, nlay+1) = 0.
4503 du(ig, k) = ((detr(ig,k)+gamma(ig,k))*ua(ig,k)-(entr(ig,k)+gamma(ig, &
4504 k))*ue(ig,k)-wud(ig,k)+wud(ig,k+1))/masse(ig, k)
4505 dv(ig, k) = ((detr(ig,k)+gamma(ig,k))*va(ig,k)-(entr(ig,k)+gamma(ig, &
4506 k))*ve(ig,k)-wvd(ig,k)+wvd(ig,k+1))/masse(ig, k)
4512 SUBROUTINE thermcell_sec(ngrid, nlay, ptimestep, pplay, pplev, pphi, zlev, &
4513 pu, pv,
pt, po, pduadj, pdvadj, pdtadj, pdoadj, fm0, entr0 &
4515 , r_aspect, l_mix, w2di, tho)
4549 INTEGER ngrid, nlay, w2di
4551 REAL ptimestep, l_mix, r_aspect
4552 REAL pt(ngrid, nlay), pdtadj(ngrid, nlay)
4553 REAL pu(ngrid, nlay), pduadj(ngrid, nlay)
4554 REAL pv(ngrid, nlay), pdvadj(ngrid, nlay)
4555 REAL po(ngrid, nlay), pdoadj(ngrid, nlay)
4556 REAL pplay(ngrid, nlay), pplev(ngrid, nlay+1)
4557 REAL pphi(ngrid, nlay)
4567 INTEGER ig, k, l, lmaxa(
klon), lmix(
klon)
4568 REAL zsortie1d(
klon)
4622 REAL entr_star_tot(
klon), entr_star2(
klon)
4624 REAL zlevinter(
klon)
4634 CHARACTER (LEN=20) :: modname =
'thermcell_sec'
4635 CHARACTER (LEN=80) :: abort_message
4637 LOGICAL vtest(
klon), down
4652 IF (ngrid/=
klon)
THEN
4654 print *,
'STOP dans convadj'
4655 print *,
'ngrid =', ngrid
4656 print *,
'klon =',
klon
4667 zpspsk(ig, l) = (pplay(ig,l)/pplev(ig,1))**rkappa
4668 zh(ig, l) = pt(ig, l)/zpspsk(ig, l)
4669 zu(ig, l) = pu(ig, l)
4670 zv(ig, l) = pv(ig, l)
4671 zo(ig, l) = po(ig, l)
4672 ztv(ig, l) = zh(ig, l)*(1.+0.61*zo(ig,l))
4700 zlev(ig, l) = 0.5*(pphi(ig,l)+pphi(ig,l-1))/
rg
4705 zlev(ig, nlay+1) = (2.*pphi(ig,
klev)-pphi(ig,
klev-1))/
rg
4709 zlay(ig, l) = pphi(ig, l)/
rg
4720 rho(ig, l) = pplay(ig, l)/(zpspsk(ig,l)*rd*zh(ig,l))
4726 rhobarz(ig, l) = 0.5*(rho(ig,l)+rho(ig,l-1))
4780 entr_star(ig, l) = 0.
4789 DO k = nlay - 2, 1, -1
4791 IF (ztv(ig,k)>ztv(ig,k+1) .AND. ztv(ig,k+1)<=ztv(ig,k+2))
THEN
4803 IF (ztv(ig,l-1)>ztv(ig,l))
THEN
4812 IF (ztv(ig,l)>ztv(ig,l+1) .AND. l>=lmin(ig) .AND. l<=lentr(ig))
THEN
4813 entr_star(ig, l) = (ztv(ig,l)-ztv(ig,l+1))** &
4821 IF (lmin(ig)>1)
THEN
4823 entr_star(ig, l) = 0.
4829 entr_star_tot(ig) = 0.
4833 entr_star_tot(ig) = entr_star_tot(ig) + entr_star(ig, k)
4840 ztva(ig, k) = ztv(ig, k)
4852 larg_cons(ig, k) = 0.
4853 larg_detr(ig, k) = 0.
4869 IF (ztv(ig,l)>ztv(ig,l+1) .AND. entr_star(ig,l)>1.e-10 .AND. &
4870 zw2(ig,l)<1e-10)
THEN
4871 f_star(ig, l+1) = entr_star(ig, l)
4873 zw2(ig, l+1) = 2.*
rg*(ztv(ig,l)-ztv(ig,l+1))/ztv(ig, l+1)* &
4874 (zlev(ig,l+1)-zlev(ig,l))*0.4*pphi(ig, l)/(pphi(ig,l+1)-pphi(ig,l))
4875 larg_detr(ig, l) = 0.
4876 ELSE IF ((zw2(ig,l)>=1e-10) .AND. (f_star(ig,l)+entr_star(ig, &
4878 f_star(ig, l+1) = f_star(ig, l) + entr_star(ig, l)
4879 ztva(ig, l) = (f_star(ig,l)*ztva(ig,l-1)+entr_star(ig,l)*ztv(ig,l))/ &
4881 zw2(ig, l+1) = zw2(ig, l)*(f_star(ig,l)/f_star(ig,l+1))**2 + &
4882 2.*
rg*(ztva(ig,l)-ztv(ig,l))/ztv(ig, l)*(zlev(ig,l+1)-zlev(ig,l))
4885 IF (zw2(ig,l+1)<0.)
THEN
4887 IF (abs(zw2(ig,l+1)-zw2(ig,l))<1e-10)
THEN
4890 linter(ig) = (l*(zw2(ig,l+1)-zw2(ig,l))-zw2(ig,l))/(zw2(ig,l+1)-zw2( &
4895 IF (zw2(ig,l+1)<0.)
THEN
4898 wa_moy(ig, l+1) = sqrt(zw2(ig,l+1))
4900 IF (wa_moy(ig,l+1)>wmaxa(ig))
THEN
4903 wmaxa(ig) = wa_moy(ig, l+1)
4911 lmax(ig) = lentr(ig)
4914 DO l = nlay, lentr(ig) + 1, -1
4915 IF (zw2(ig,l)<=1.e-10)
THEN
4922 IF (lmin(ig)>1)
THEN
4935 IF (l<=lmax(ig))
THEN
4936 IF (zw2(ig,l)<0.)
THEN
4939 zw2(ig, l) = sqrt(zw2(ig,l))
4940 wmax(ig) = max(wmax(ig), zw2(ig,l))
4950 zlevinter(ig) = zlev(ig, 1)
4954 zlevinter(ig) = (zlev(ig,lmax(ig)+1)-zlev(ig,lmax(ig)))*linter(ig) + &
4955 zlev(ig, lmax(ig)) - lmax(ig)*(zlev(ig,lmax(ig)+1)-zlev(ig,lmax(ig)))
4956 zmax(ig) = max(zmax(ig), zlevinter(ig)-zlev(ig,lmin(ig)))
4965 IF (entr_star_tot(ig)<1.e-10)
THEN
4968 DO k = lmin(ig), lentr(ig)
4969 entr_star2(ig) = entr_star2(ig) + entr_star(ig, k)**2/(rho(ig,k)*( &
4970 zlev(ig,k+1)-zlev(ig,k)))
4973 f(ig) = wmax(ig)/(max(500.,zmax(ig))*r_aspect*entr_star2(ig))* &
4989 entr(ig, k) = f(ig)*entr_star(ig, k)
4995 IF ((entr(ig,l)*ptimestep)>(0.9*masse(ig,l)))
THEN
4996 entr(ig, l+1) = entr(ig, l+1) + entr(ig, l) - &
4997 0.9*masse(ig, l)/ptimestep
4998 entr(ig, l) = 0.9*masse(ig, l)/ptimestep
5005 DO l = 1, lmax(ig) - 1
5006 fmc(ig, l+1) = fmc(ig, l) + entr(ig, l)
5026 IF (l<=lmaxa(ig))
THEN
5027 zw = max(wa_moy(ig,l), 1.e-10)
5028 larg_cons(ig, l) = zmax(ig)*r_aspect*fmc(ig, l)/(rhobarz(ig,l)*zw)
5035 IF (l<=lmaxa(ig))
THEN
5038 IF ((l_mix*zlev(ig,l))<0.)
THEN
5043 IF (zw2(ig,l)>1.e-10)
THEN
5044 larg_detr(ig, l) = sqrt((l_mix/zw2(ig,l))*zlev(ig,l))
5046 larg_detr(ig, l) = sqrt(l_mix*zlev(ig,l))
5070 IF (lmix(ig)>1.)
THEN
5072 IF (((zw2(ig,lmix(ig)-1)-zw2(ig,lmix(ig)))*((zlev(ig,lmix(ig)))- &
5073 (zlev(ig,lmix(ig)+1)))-(zw2(ig,lmix(ig))- &
5074 zw2(ig,lmix(ig)+1))*((zlev(ig,lmix(ig)-1))- &
5075 (zlev(ig,lmix(ig)))))>1e-10)
THEN
5077 zmix(ig) = ((zw2(ig,lmix(ig)-1)-zw2(ig,lmix(ig)))*((zlev(ig,lmix(ig)) &
5078 )**2-(zlev(ig,lmix(ig)+1))**2)-(zw2(ig,lmix(ig))-zw2(ig, &
5079 lmix(ig)+1))*((zlev(ig,lmix(ig)-1))**2-(zlev(ig,lmix(ig)))**2))/ &
5080 (2.*((zw2(ig,lmix(ig)-1)-zw2(ig,lmix(ig)))*((zlev(ig,lmix(ig)))- &
5081 (zlev(ig,lmix(ig)+1)))-(zw2(ig,lmix(ig))- &
5082 zw2(ig,lmix(ig)+1))*((zlev(ig,lmix(ig)-1))-(zlev(ig,lmix(ig))))))
5084 zmix(ig) = zlev(ig, lmix(ig))
5091 IF ((zmax(ig)-zmix(ig))<0.)
THEN
5092 zmix(ig) = 0.99*zmax(ig)
5100 IF (zmix(ig)>=zlev(ig,l) .AND. zmix(ig)<zlev(ig,l+1))
THEN
5108 IF (larg_cons(ig,l)>1.)
THEN
5110 fraca(ig, l) = (larg_cons(ig,l)-larg_detr(ig,l))/(r_aspect*zmax(ig))
5112 fraca(ig, l) = max(fraca(ig,l), 0.)
5113 fraca(ig, l) = min(fraca(ig,l), 0.5)
5114 fracd(ig, l) = 1. - fraca(ig, l)
5115 fracc(ig, l) = larg_cons(ig, l)/(r_aspect*zmax(ig))
5126 fracazmix(ig) = (fraca(ig,lmix(ig)+1)-fraca(ig,lmix(ig)))/ &
5127 (zlev(ig,lmix(ig)+1)-zlev(ig,lmix(ig)))*zmix(ig) + &
5128 fraca(ig, lmix(ig)) - zlev(ig, lmix(ig))*(fraca(ig,lmix(ig)+1)-fraca(ig &
5129 ,lmix(ig)))/(zlev(ig,lmix(ig)+1)-zlev(ig,lmix(ig)))
5134 IF (larg_cons(ig,l)>1.)
THEN
5135 IF (l>lmix(ig))
THEN
5137 IF (zmax(ig)-zmix(ig)<1.e-10)
THEN
5139 xxx(ig, l) = (lmaxa(ig)+1.-l)/(lmaxa(ig)+1.-lmix(ig))
5141 xxx(ig, l) = (zmax(ig)-zlev(ig,l))/(zmax(ig)-zmix(ig))
5144 fraca(ig, l) = fracazmix(ig)
5145 ELSE IF (idetr==1)
THEN
5146 fraca(ig, l) = fracazmix(ig)*xxx(ig, l)
5147 ELSE IF (idetr==2)
THEN
5148 fraca(ig, l) = fracazmix(ig)*(1.-(1.-xxx(ig,l))**2)
5150 fraca(ig, l) = fracazmix(ig)*xxx(ig, l)**2
5153 fraca(ig, l) = max(fraca(ig,l), 0.)
5154 fraca(ig, l) = min(fraca(ig,l), 0.5)
5155 fracd(ig, l) = 1. - fraca(ig, l)
5156 fracc(ig, l) = larg_cons(ig, l)/(r_aspect*zmax(ig))
5178 fm(ig, l) = fraca(ig, l)*wa_moy(ig, l)*rhobarz(ig, l)
5180 IF (entr(ig,l-1)<1e-10 .AND. fm(ig,l)>fm(ig,l-1) .AND. l>lmix(ig))
THEN
5181 fm(ig, l) = fm(ig, l-1)
5188 IF (fracd(ig,l)<0.1)
THEN
5189 abort_message =
'fracd trop petit'
5193 wd(ig, l) = fm(ig, l)/(fracd(ig,l)*rhobarz(ig,l))
5201 masse(ig, l) = (pplev(ig,l)-pplev(ig,l+1))/
rg
5215 IF (fm(ig,l+1)*ptimestep>masse(ig,l) .AND. fm(ig,l+1)*ptimestep>masse( &
5226 IF (entr(ig,l)*ptimestep>masse(ig,l))
THEN
5236 IF (.NOT. fm(ig,l)>=0. .OR. .NOT. fm(ig,l)<=10.)
THEN
5240 IF (.NOT. masse(ig,l)>=1.e-10 .OR. .NOT. masse(ig,l)<=1.e4)
THEN
5250 IF (.NOT. entr(ig,l)>=0. .OR. .NOT. entr(ig,l)<=10.)
THEN
5262 detr(ig, l) = fm(ig, l) + entr(ig, l) - fm(ig, l+1)
5263 IF (detr(ig,l)<0.)
THEN
5264 entr(ig, l) = entr(ig, l) - detr(ig, l)
5272 fm0 = fm0 + ptimestep*(fm-fm0)/tho
5273 entr0 = entr0 + ptimestep*(entr-entr0)/tho
5280 CALL dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse, zh, zdhadj, &
5282 CALL dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse, zo, pdoadj, &
5285 CALL dqthermcell2(ngrid, nlay, ptimestep, fm0, entr0, masse, fraca, zh, &
5287 CALL dqthermcell2(ngrid, nlay, ptimestep, fm0, entr0, masse, fraca, zo, &
5292 CALL dvthermcell2(ngrid, nlay, ptimestep, fm0, entr0, masse, fraca, zmax, &
5293 zu, zv, pduadj, pdvadj, zua, zva)
5295 CALL dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse, zu, pduadj, &
5297 CALL dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse, zv, pdvadj, &
5303 zf = 0.5*(fracc(ig,l)+fracc(ig,l+1))
5305 thetath2(ig, l) = zf2*(zha(ig,l)-zh(ig,l))**2
5306 wth2(ig, l) = zf2*(0.5*(wa_moy(ig,l)+wa_moy(ig,l+1)))**2
5316 pdtadj(ig, l) = zdhadj(ig, l)*zpspsk(ig, l)
subroutine dvthermcell(ngrid, nlay, ptimestep, fm, entr, masse, fraca, larga, u, v, du, dv, ua, va)
subroutine thermcell_eau(ngrid, nlay, ptimestep, pplay, pplev, pphi, pu, pv,pt, po, pduadj, pdvadj, pdtadj, pdoadj, fm0, entr0
subroutine thermcell_sec(ngrid, nlay, ptimestep, pplay, pplev, pphi, zlev,pu, pv, pt, po, pduadj, pdvadj, pdtadj, pdoadj, fm0, entr0
subroutine thermcell_cld(ngrid, nlay, ptimestep, pplay, pplev, pphi, zlev,debut, pu, pv, pt, po, pduadj, pdvadj, pdtadj, pdoadj, fm0, entr0, zqla,lmax, zmax_sec, wmax_sec, zw_sec, lmix_sec, ratqscth, ratqsdiff
subroutine thermcell(ngrid, nlay, ptimestep, pplay, pplev, pphi, pu, pv, pt,po, pduadj, pdvadj, pdtadj, pdoadj, fm0, entr0
subroutine thermcell_2002(ngrid, nlay, ptimestep, iflag_thermals, pplay, pplev, pphi, pu, pv, pt, po, pduadj, pdvadj, pdtadj, pdoadj, fm0, entr0, fraca, wa_moy, r_aspect, l_mix, w2di, tho)
subroutine scopy(n, sx, incx, sy, incy)
subroutine dvthermcell2(ngrid, nlay, ptimestep, fm, entr, masse, fraca, larga, u, v, du, dv, ua, va)
!$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 false
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
!$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)
!$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 true
subroutine thermcell_dq(ngrid, nlay, impl, ptimestep, fm, entr, masse, q, dq, qa, lev_out)
subroutine dqthermcell(ngrid, nlay, ptimestep, fm, entr, masse, q, dq, qa)
subroutine abort_physic(modname, message, ierr)
INTERFACE SUBROUTINE RRTM_ECRT_140GP pt
subroutine thermcell_dv2(ngrid, nlay, ptimestep, fm, entr, masse, fraca, larga, u, v, du, dv, ua, va, lev_out)
subroutine fermeture_seche(ngrid, nlay, pplay, pplev, pphi, zlev, rhobarz, f0, zpspsk, alim_star, zh, zo, lentr, lmin, nu_min, nu_max, r_aspect, zmax, wmax)
subroutine dqthermcell2(ngrid, nlay, ptimestep, fm, entr, masse, frac, q, dq, qa)