/[lmdze]/trunk/phylmd/physiq.f
ViewVC logotype

Diff of /trunk/phylmd/physiq.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/Sources/phylmd/physiq.f revision 227 by guez, Thu Nov 2 15:47:03 2017 UTC trunk/phylmd/physiq.f revision 306 by guez, Tue Sep 11 12:23:47 2018 UTC
# Line 18  contains Line 18  contains
18      USE abort_gcm_m, ONLY: abort_gcm      USE abort_gcm_m, ONLY: abort_gcm
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_ins, ksta, ksta_ter, ok_kzmin, &      USE clesphys, ONLY: cdhmax, cdmmax, ecrit_ins, ok_instan
          ok_instan  
22      USE clesphys2, ONLY: conv_emanuel, nbapp_rad, new_oliq, ok_orodr, ok_orolf      USE clesphys2, ONLY: conv_emanuel, nbapp_rad, new_oliq, ok_orodr, ok_orolf
23      USE clmain_m, ONLY: clmain      USE conf_interface_m, ONLY: conf_interface
24        USE pbl_surface_m, ONLY: pbl_surface
25      use clouds_gno_m, only: clouds_gno      use clouds_gno_m, only: clouds_gno
26      use comconst, only: dtphys      use comconst, only: dtphys
27      USE comgeomphy, ONLY: airephy      USE comgeomphy, ONLY: airephy
# Line 31  contains Line 31  contains
31      use conflx_m, only: conflx      use conflx_m, only: conflx
32      USE ctherm, ONLY: iflag_thermals, nsplit_thermals      USE ctherm, ONLY: iflag_thermals, nsplit_thermals
33      use diagcld2_m, only: diagcld2      use diagcld2_m, only: diagcld2
34      USE dimens_m, ONLY: llm, nqmx      USE dimensions, ONLY: llm, nqmx
35      USE dimphy, ONLY: klon      USE dimphy, ONLY: klon
36      USE dimsoil, ONLY: nsoilmx      USE dimsoil, ONLY: nsoilmx
37      use drag_noro_m, only: drag_noro      use drag_noro_m, only: drag_noro
# Line 150  contains Line 150  contains
150      REAL, save:: ftsoil(klon, nsoilmx, nbsrf)      REAL, save:: ftsoil(klon, nsoilmx, nbsrf)
151      ! soil temperature of surface fraction      ! soil temperature of surface fraction
152    
     REAL, save:: fevap(klon, nbsrf) ! evaporation  
153      REAL fluxlat(klon, nbsrf)      REAL fluxlat(klon, nbsrf)
154    
155      REAL, save:: fqsurf(klon, nbsrf)      REAL, save:: fqsurf(klon, nbsrf)
# Line 170  contains Line 169  contains
169      REAL, save:: zval(klon) ! Minimum de l'OESM      REAL, save:: zval(klon) ! Minimum de l'OESM
170      REAL, save:: rugoro(klon) ! longueur de rugosite de l'OESM      REAL, save:: rugoro(klon) ! longueur de rugosite de l'OESM
171      REAL zulow(klon), zvlow(klon)      REAL zulow(klon), zvlow(klon)
172      INTEGER igwd, itest(klon)      INTEGER ktest(klon)
173    
174      REAL, save:: agesno(klon, nbsrf) ! age de la neige      REAL, save:: agesno(klon, nbsrf) ! age de la neige
175      REAL, save:: run_off_lic_0(klon)      REAL, save:: run_off_lic_0(klon)
176    
177      ! Variables li\'ees \`a la convection d'Emanuel :      ! Variables li\'ees \`a la convection d'Emanuel :
178      REAL, save:: Ma(klon, llm) ! undilute upward mass flux      REAL, save:: Ma(klon, llm) ! undilute upward mass flux
     REAL, save:: qcondc(klon, llm) ! in-cld water content from convect  
179      REAL, save:: sig1(klon, llm), w01(klon, llm)      REAL, save:: sig1(klon, llm), w01(klon, llm)
180    
181      ! Variables pour la couche limite (Alain Lahellec) :      ! Variables pour la couche limite (Alain Lahellec) :
182      REAL cdragh(klon) ! drag coefficient pour T and Q      REAL cdragh(klon) ! drag coefficient pour T and Q
183      REAL cdragm(klon) ! drag coefficient pour vent      REAL cdragm(klon) ! drag coefficient pour vent
184    
185      REAL ycoefh(klon, llm) ! coef d'echange pour phytrac      REAL coefh(klon, 2:llm) ! coef d'echange pour phytrac
186    
187      REAL, save:: ffonte(klon, nbsrf)      REAL, save:: ffonte(klon, nbsrf)
188      ! flux thermique utilise pour fondre la neige      ! flux thermique utilise pour fondre la neige
189    
190      REAL, save:: fqcalving(klon, nbsrf)      REAL fqcalving(klon, nbsrf)
191      ! flux d'eau "perdue" par la surface et necessaire pour limiter la      ! flux d'eau "perdue" par la surface et n\'ecessaire pour limiter
192      ! hauteur de neige, en kg / m2 / s      ! la hauteur de neige, en kg / m2 / s
193    
194      REAL zxffonte(klon), zxfqcalving(klon)      REAL zxffonte(klon)
195    
196      REAL, save:: pfrac_impa(klon, llm)! Produits des coefs lessivage impaction      REAL, save:: pfrac_impa(klon, llm)! Produits des coefs lessivage impaction
197      REAL, save:: pfrac_nucl(klon, llm)! Produits des coefs lessivage nucleation      REAL, save:: pfrac_nucl(klon, llm)! Produits des coefs lessivage nucleation
# Line 213  contains Line 211  contains
211      REAL rain_tiedtke(klon), snow_tiedtke(klon)      REAL rain_tiedtke(klon), snow_tiedtke(klon)
212    
213      REAL evap(klon) ! flux d'\'evaporation au sol      REAL evap(klon) ! flux d'\'evaporation au sol
214      real devap(klon) ! derivative of the evaporation flux at the surface      real dflux_q(klon) ! derivative of the evaporation flux at the surface
215      REAL sens(klon) ! flux de chaleur sensible au sol      REAL sens(klon) ! flux de chaleur sensible au sol
216      real dsens(klon) ! derivee du flux de chaleur sensible au sol      real dflux_t(klon) ! derivee du flux de chaleur sensible au sol
217      REAL, save:: dlw(klon) ! derivative of infra-red flux      REAL, save:: dlw(klon) ! derivative of infra-red flux
218      REAL bils(klon) ! bilan de chaleur au sol      REAL bils(klon) ! bilan de chaleur au sol
219      REAL fder(klon) ! Derive de flux (sensible et latente)      REAL fder(klon) ! Derive de flux (sensible et latente)
# Line 238  contains Line 236  contains
236      real, save:: clwcon(klon, llm), rnebcon(klon, llm)      real, save:: clwcon(klon, llm), rnebcon(klon, llm)
237      real, save:: clwcon0(klon, llm), rnebcon0(klon, llm)      real, save:: clwcon0(klon, llm), rnebcon0(klon, llm)
238    
239      REAL rhcl(klon, llm) ! humiditi relative ciel clair      REAL rhcl(klon, llm) ! humidit\'e relative ciel clair
240      REAL dialiq(klon, llm) ! eau liquide nuageuse      REAL dialiq(klon, llm) ! eau liquide nuageuse
241      REAL diafra(klon, llm) ! fraction nuageuse      REAL diafra(klon, llm) ! fraction nuageuse
242      REAL cldliq(klon, llm) ! eau liquide nuageuse      REAL cldliq(klon, llm) ! eau liquide nuageuse
# Line 248  contains Line 246  contains
246    
247      REAL flux_q(klon, nbsrf) ! flux turbulent d'humidite à la surface      REAL flux_q(klon, nbsrf) ! flux turbulent d'humidite à la surface
248      REAL flux_t(klon, nbsrf) ! flux turbulent de chaleur à la surface      REAL flux_t(klon, nbsrf) ! flux turbulent de chaleur à la surface
249      REAL flux_u(klon, nbsrf) ! flux turbulent de vitesse u à la surface  
250      REAL flux_v(klon, nbsrf) ! flux turbulent de vitesse v à la surface      REAL flux_u(klon, nbsrf), flux_v(klon, nbsrf)
251        ! tension du vent (flux turbulent de vent) à la surface, en Pa
252    
253      ! Le rayonnement n'est pas calcul\'e tous les pas, il faut donc que      ! Le rayonnement n'est pas calcul\'e tous les pas, il faut donc que
254      ! les variables soient r\'emanentes.      ! les variables soient r\'emanentes.
# Line 290  contains Line 289  contains
289      REAL, SAVE:: cteiCL(klon, nbsrf) ! cloud top instab. crit. couche limite      REAL, SAVE:: cteiCL(klon, nbsrf) ! cloud top instab. crit. couche limite
290      REAL, SAVE:: pblt(klon, nbsrf) ! T \`a la hauteur de couche limite      REAL, SAVE:: pblt(klon, nbsrf) ! T \`a la hauteur de couche limite
291      REAL, SAVE:: therm(klon, nbsrf)      REAL, SAVE:: therm(klon, nbsrf)
     REAL, SAVE:: trmb1(klon, nbsrf) ! deep_cape  
     REAL, SAVE:: trmb2(klon, nbsrf) ! inhibition  
     REAL, SAVE:: trmb3(klon, nbsrf) ! Point Omega  
292      ! Grandeurs de sorties      ! Grandeurs de sorties
293      REAL s_pblh(klon), s_lcl(klon), s_capCL(klon)      REAL s_pblh(klon), s_lcl(klon), s_capCL(klon)
294      REAL s_oliqCL(klon), s_cteiCL(klon), s_pblt(klon)      REAL s_oliqCL(klon), s_cteiCL(klon), s_pblt(klon)
295      REAL s_therm(klon), s_trmb1(klon), s_trmb2(klon)      REAL s_therm(klon)
     REAL s_trmb3(klon)  
296    
297      ! Variables pour la convection de K. Emanuel :      ! Variables pour la convection de K. Emanuel :
298    
# Line 331  contains Line 326  contains
326      INTEGER, save:: ibas_con(klon), itop_con(klon)      INTEGER, save:: ibas_con(klon), itop_con(klon)
327      real ema_pct(klon) ! Emanuel pressure at cloud top, in Pa      real ema_pct(klon) ! Emanuel pressure at cloud top, in Pa
328    
329      REAL, save:: rain_con(klon)      REAL rain_con(klon)
330      real rain_lsc(klon)      real rain_lsc(klon)
331      REAL, save:: snow_con(klon) ! neige (mm / s)      REAL snow_con(klon) ! neige (mm / s)
332      real snow_lsc(klon)      real snow_lsc(klon)
333      REAL d_ts(klon, nbsrf) ! variation of ftsol      REAL d_ts(klon, nbsrf) ! variation of ftsol
334    
# Line 369  contains Line 364  contains
364    
365      REAL zustrdr(klon), zvstrdr(klon)      REAL zustrdr(klon), zvstrdr(klon)
366      REAL zustrli(klon), zvstrli(klon)      REAL zustrli(klon), zvstrli(klon)
     REAL zustrph(klon), zvstrph(klon)  
367      REAL aam, torsfc      REAL aam, torsfc
368    
369      REAL ve_lay(klon, llm) ! transport meri. de l'energie a chaque niveau vert.      REAL ve_lay(klon, llm) ! transport meri. de l'energie a chaque niveau vert.
# Line 377  contains Line 371  contains
371      REAL ue_lay(klon, llm) ! transport zonal de l'energie a chaque niveau vert.      REAL ue_lay(klon, llm) ! transport zonal de l'energie a chaque niveau vert.
372      REAL uq_lay(klon, llm) ! transport zonal de l'eau a chaque niveau vert.      REAL uq_lay(klon, llm) ! transport zonal de l'eau a chaque niveau vert.
373    
     real date0  
374      REAL tsol(klon)      REAL tsol(klon)
375    
376      REAL d_t_ec(klon, llm)      REAL d_t_ec(klon, llm)
# Line 424  contains Line 417  contains
417         t2m = 0.         t2m = 0.
418         q2m = 0.         q2m = 0.
419         ffonte = 0.         ffonte = 0.
        fqcalving = 0.  
        rain_con = 0.  
        snow_con = 0.  
420         d_u_con = 0.         d_u_con = 0.
421         d_v_con = 0.         d_v_con = 0.
422         rnebcon0 = 0.         rnebcon0 = 0.
# Line 440  contains Line 430  contains
430         cteiCL =0. ! cloud top instab. crit. couche limite         cteiCL =0. ! cloud top instab. crit. couche limite
431         pblt =0.         pblt =0.
432         therm =0.         therm =0.
        trmb1 =0. ! deep_cape  
        trmb2 =0. ! inhibition  
        trmb3 =0. ! Point Omega  
433    
434         iflag_thermals = 0         iflag_thermals = 0
435         nsplit_thermals = 1         nsplit_thermals = 1
# Line 456  contains Line 443  contains
443    
444         frugs = 0.         frugs = 0.
445         CALL phyetat0(pctsrf, ftsol, ftsoil, fqsurf, qsol, fsnow, falbe, &         CALL phyetat0(pctsrf, ftsol, ftsoil, fqsurf, qsol, fsnow, falbe, &
446              fevap, rain_fall, snow_fall, solsw, sollw, dlw, radsol, frugs, &              rain_fall, snow_fall, solsw, sollw, dlw, radsol, frugs, agesno, &
447              agesno, zmea, zstd, zsig, zgam, zthe, zpic, zval, t_ancien, &              zmea, zstd, zsig, zgam, zthe, zpic, zval, t_ancien, q_ancien, &
448              q_ancien, ancien_ok, rnebcon, ratqs, clwcon, run_off_lic_0, sig1, &              ancien_ok, rnebcon, ratqs, clwcon, run_off_lic_0, sig1, w01, &
449              w01, ncid_startphy)              ncid_startphy)
450    
451         ! ATTENTION : il faudra a terme relire q2 dans l'etat initial         ! ATTENTION : il faudra a terme relire q2 dans l'etat initial
452         q2 = 1e-8         q2 = 1e-8
# Line 480  contains Line 467  contains
467            rugoro = 0.            rugoro = 0.
468         ENDIF         ENDIF
469    
        ecrit_ins = NINT(ecrit_ins / dtphys)  
   
470         ! Initialisation des sorties         ! Initialisation des sorties
471           call ini_histins(ok_newmicro)
        call ini_histins(dtphys, ok_newmicro)  
        CALL ymds2ju(annee_ref, 1, day_ref, 0., date0)  
        ! Positionner date0 pour initialisation de ORCHIDEE  
        print *, 'physiq date0: ', date0  
472         CALL phyredem0         CALL phyredem0
473           call conf_interface
474      ENDIF test_firstcal      ENDIF test_firstcal
475    
476      ! We will modify variables *_seri and we will not touch variables      ! We will modify variables *_seri and we will not touch variables
# Line 566  contains Line 548  contains
548         fsolsw(:, nsrf) = solsw * (1. - falbe(:, nsrf)) / (1. - albsol)         fsolsw(:, nsrf) = solsw * (1. - falbe(:, nsrf)) / (1. - albsol)
549      END forall      END forall
550    
551      CALL clmain(dtphys, pctsrf, t_seri, q_seri, u_seri, v_seri, julien, mu0, &      CALL pbl_surface(pctsrf, t_seri, q_seri, u_seri, v_seri, julien, mu0, &
552           ftsol, cdmmax, cdhmax, ksta, ksta_ter, ok_kzmin, ftsoil, qsol, &           ftsol, cdmmax, cdhmax, ftsoil, qsol, paprs, play, fsnow, fqsurf, &
553           paprs, play, fsnow, fqsurf, fevap, falbe, fluxlat, rain_fall, &           falbe, fluxlat, rain_fall, snow_fall, fsolsw, fsollw, frugs, agesno, &
554           snow_fall, fsolsw, fsollw, frugs, agesno, rugoro, d_t_vdf, d_q_vdf, &           rugoro, d_t_vdf, d_q_vdf, d_u_vdf, d_v_vdf, d_ts, flux_t, flux_q, &
555           d_u_vdf, d_v_vdf, d_ts, flux_t, flux_q, flux_u, flux_v, cdragh, &           flux_u, flux_v, cdragh, cdragm, q2, dflux_t, dflux_q, coefh, t2m, &
556           cdragm, q2, dsens, devap, ycoefh, t2m, q2m, u10m_srf, v10m_srf, &           q2m, u10m_srf, v10m_srf, pblh, capCL, oliqCL, cteiCL, pblT, therm, &
557           pblh, capCL, oliqCL, cteiCL, pblT, therm, trmb1, trmb2, trmb3, plcl, &           plcl, fqcalving, ffonte, run_off_lic_0)
          fqcalving, ffonte, run_off_lic_0)  
558    
559      ! Incr\'ementation des flux      ! Incr\'ementation des flux
560    
561      sens = - sum(flux_t * pctsrf, dim = 2)      sens = - sum(flux_t * pctsrf, dim = 2)
562      evap = - sum(flux_q * pctsrf, dim = 2)      evap = - sum(flux_q * pctsrf, dim = 2)
563      fder = dlw + dsens + devap      fder = dlw + dflux_t + dflux_q
564    
565      DO k = 1, llm      DO k = 1, llm
566         DO i = 1, klon         DO i = 1, klon
# Line 590  contains Line 571  contains
571         ENDDO         ENDDO
572      ENDDO      ENDDO
573    
     ! Update surface temperature:  
   
574      call assert(abs(sum(pctsrf, dim = 2) - 1.) <= EPSFRA, 'physiq: pctsrf')      call assert(abs(sum(pctsrf, dim = 2) - 1.) <= EPSFRA, 'physiq: pctsrf')
575      ftsol = ftsol + d_ts      ftsol = ftsol + d_ts ! update surface temperature
576      tsol = sum(ftsol * pctsrf, dim = 2)      tsol = sum(ftsol * pctsrf, dim = 2)
577      zxfluxlat = sum(fluxlat * pctsrf, dim = 2)      zxfluxlat = sum(fluxlat * pctsrf, dim = 2)
578      zt2m = sum(t2m * pctsrf, dim = 2)      zt2m = sum(t2m * pctsrf, dim = 2)
# Line 601  contains Line 580  contains
580      u10m = sum(u10m_srf * pctsrf, dim = 2)      u10m = sum(u10m_srf * pctsrf, dim = 2)
581      v10m = sum(v10m_srf * pctsrf, dim = 2)      v10m = sum(v10m_srf * pctsrf, dim = 2)
582      zxffonte = sum(ffonte * pctsrf, dim = 2)      zxffonte = sum(ffonte * pctsrf, dim = 2)
     zxfqcalving = sum(fqcalving * pctsrf, dim = 2)  
583      s_pblh = sum(pblh * pctsrf, dim = 2)      s_pblh = sum(pblh * pctsrf, dim = 2)
584      s_lcl = sum(plcl * pctsrf, dim = 2)      s_lcl = sum(plcl * pctsrf, dim = 2)
585      s_capCL = sum(capCL * pctsrf, dim = 2)      s_capCL = sum(capCL * pctsrf, dim = 2)
# Line 609  contains Line 587  contains
587      s_cteiCL = sum(cteiCL * pctsrf, dim = 2)      s_cteiCL = sum(cteiCL * pctsrf, dim = 2)
588      s_pblT = sum(pblT * pctsrf, dim = 2)      s_pblT = sum(pblT * pctsrf, dim = 2)
589      s_therm = sum(therm * pctsrf, dim = 2)      s_therm = sum(therm * pctsrf, dim = 2)
     s_trmb1 = sum(trmb1 * pctsrf, dim = 2)  
     s_trmb2 = sum(trmb2 * pctsrf, dim = 2)  
     s_trmb3 = sum(trmb3 * pctsrf, dim = 2)  
590    
591      ! Si une sous-fraction n'existe pas, elle prend la valeur moyenne :      ! Si une sous-fraction n'existe pas, elle prend la valeur moyenne :
592      DO nsrf = 1, nbsrf      DO nsrf = 1, nbsrf
# Line 623  contains Line 598  contains
598               u10m_srf(i, nsrf) = u10m(i)               u10m_srf(i, nsrf) = u10m(i)
599               v10m_srf(i, nsrf) = v10m(i)               v10m_srf(i, nsrf) = v10m(i)
600               ffonte(i, nsrf) = zxffonte(i)               ffonte(i, nsrf) = zxffonte(i)
              fqcalving(i, nsrf) = zxfqcalving(i)  
601               pblh(i, nsrf) = s_pblh(i)               pblh(i, nsrf) = s_pblh(i)
602               plcl(i, nsrf) = s_lcl(i)               plcl(i, nsrf) = s_lcl(i)
603               capCL(i, nsrf) = s_capCL(i)               capCL(i, nsrf) = s_capCL(i)
# Line 631  contains Line 605  contains
605               cteiCL(i, nsrf) = s_cteiCL(i)               cteiCL(i, nsrf) = s_cteiCL(i)
606               pblT(i, nsrf) = s_pblT(i)               pblT(i, nsrf) = s_pblT(i)
607               therm(i, nsrf) = s_therm(i)               therm(i, nsrf) = s_therm(i)
              trmb1(i, nsrf) = s_trmb1(i)  
              trmb2(i, nsrf) = s_trmb2(i)  
              trmb3(i, nsrf) = s_trmb3(i)  
608            end IF            end IF
609         ENDDO         ENDDO
610      ENDDO      ENDDO
# Line 645  contains Line 616  contains
616      if (conv_emanuel) then      if (conv_emanuel) then
617         CALL concvl(paprs, play, t_seri, q_seri, u_seri, v_seri, sig1, w01, &         CALL concvl(paprs, play, t_seri, q_seri, u_seri, v_seri, sig1, w01, &
618              d_t_con, d_q_con, d_u_con, d_v_con, rain_con, ibas_con, itop_con, &              d_t_con, d_q_con, d_u_con, d_v_con, rain_con, ibas_con, itop_con, &
619              upwd, dnwd, Ma, cape, iflagctrl, qcondc, pmflxr, da, phi, mp)              upwd, dnwd, Ma, cape, iflagctrl, clwcon0, pmflxr, da, phi, mp)
620         snow_con = 0.         snow_con = 0.
        clwcon0 = qcondc  
621         mfu = upwd + dnwd         mfu = upwd + dnwd
622    
623         zqsat = MIN(0.5, r2es * FOEEW(t_seri, rtt >= t_seri) / play)         zqsat = MIN(0.5, r2es * FOEEW(t_seri, rtt >= t_seri) / play)
# Line 668  contains Line 638  contains
638         conv_q = d_q_dyn + d_q_vdf / dtphys         conv_q = d_q_dyn + d_q_vdf / dtphys
639         conv_t = d_t_dyn + d_t_vdf / dtphys         conv_t = d_t_dyn + d_t_vdf / dtphys
640         z_avant = sum((q_seri + ql_seri) * zmasse, dim=2)         z_avant = sum((q_seri + ql_seri) * zmasse, dim=2)
641         CALL conflx(dtphys, paprs, play, t_seri(:, llm:1:- 1), &         CALL conflx(paprs, play, t_seri(:, llm:1:- 1), q_seri(:, llm:1:- 1), &
642              q_seri(:, llm:1:- 1), conv_t, conv_q, - evap, omega, &              conv_t, conv_q, - evap, omega, d_t_con, d_q_con, rain_con, &
643              d_t_con, d_q_con, rain_con, snow_con, mfu(:, llm:1:- 1), &              snow_con, mfu(:, llm:1:- 1), mfd(:, llm:1:- 1), pen_u, pde_u, &
644              mfd(:, llm:1:- 1), pen_u, pde_u, pen_d, pde_d, kcbot, kctop, &              pen_d, pde_d, kcbot, kctop, kdtop, pmflxr, pmflxs)
             kdtop, pmflxr, pmflxs)  
645         WHERE (rain_con < 0.) rain_con = 0.         WHERE (rain_con < 0.) rain_con = 0.
646         WHERE (snow_con < 0.) snow_con = 0.         WHERE (snow_con < 0.) snow_con = 0.
647         ibas_con = llm + 1 - kcbot         ibas_con = llm + 1 - kcbot
# Line 715  contains Line 684  contains
684         t_seri = t_seri + d_t_ajs         t_seri = t_seri + d_t_ajs
685         q_seri = q_seri + d_q_ajs         q_seri = q_seri + d_q_ajs
686      else      else
687         call calltherm(dtphys, play, paprs, pphi, u_seri, v_seri, t_seri, &         call calltherm(play, paprs, pphi, u_seri, v_seri, t_seri, q_seri, &
688              q_seri, d_u_ajs, d_v_ajs, d_t_ajs, d_q_ajs, fm_therm, entr_therm)              d_u_ajs, d_v_ajs, d_t_ajs, d_q_ajs, fm_therm, entr_therm)
689      endif      endif
690    
691      ! Caclul des ratqs      ! Caclul des ratqs
692    
     ! ratqs convectifs \`a l'ancienne en fonction de (q(z = 0) - q) / q  
     ! on \'ecrase le tableau ratqsc calcul\'e par clouds_gno  
693      if (iflag_cldcon == 1) then      if (iflag_cldcon == 1) then
694           ! ratqs convectifs \`a l'ancienne en fonction de (q(z = 0) - q) / q
695           ! on \'ecrase le tableau ratqsc calcul\'e par clouds_gno
696         do k = 1, llm         do k = 1, llm
697            do i = 1, klon            do i = 1, klon
698               if(ptconv(i, k)) then               if(ptconv(i, k)) then
# Line 757  contains Line 726  contains
726         ratqs = ratqss         ratqs = ratqss
727      endif      endif
728    
729      CALL fisrtilp(dtphys, paprs, play, t_seri, q_seri, ptconv, ratqs, &      CALL fisrtilp(paprs, play, t_seri, q_seri, ptconv, ratqs, d_t_lsc, &
730           d_t_lsc, d_q_lsc, d_ql_lsc, rneb, cldliq, rain_lsc, snow_lsc, &           d_q_lsc, d_ql_lsc, rneb, cldliq, rain_lsc, snow_lsc, pfrac_impa, &
731           pfrac_impa, pfrac_nucl, pfrac_1nucl, frac_impa, frac_nucl, prfl, &           pfrac_nucl, pfrac_1nucl, frac_impa, frac_nucl, prfl, psfl, rhcl)
          psfl, rhcl)  
732    
733      WHERE (rain_lsc < 0) rain_lsc = 0.      WHERE (rain_lsc < 0) rain_lsc = 0.
734      WHERE (snow_lsc < 0) snow_lsc = 0.      WHERE (snow_lsc < 0) snow_lsc = 0.
# Line 897  contains Line 865  contains
865    
866      IF (ok_orodr) THEN      IF (ok_orodr) THEN
867         ! S\'election des points pour lesquels le sch\'ema est actif :         ! S\'election des points pour lesquels le sch\'ema est actif :
        igwd = 0  
868         DO i = 1, klon         DO i = 1, klon
869            itest(i) = 0            ktest(i) = 0
870            IF (zpic(i) - zmea(i) > 100. .AND. zstd(i) > 10.) THEN            IF (zpic(i) - zmea(i) > 100. .AND. zstd(i) > 10.) THEN
871               itest(i) = 1               ktest(i) = 1
              igwd = igwd + 1  
872            ENDIF            ENDIF
873         ENDDO         ENDDO
874    
875         CALL drag_noro(klon, llm, dtphys, paprs, play, zmea, zstd, zsig, zgam, &         CALL drag_noro(paprs, play, zmea, zstd, zsig, zgam, zthe, zpic, zval, &
876              zthe, zpic, zval, itest, t_seri, u_seri, v_seri, zulow, zvlow, &              ktest, t_seri, u_seri, v_seri, zulow, zvlow, zustrdr, zvstrdr, &
877              zustrdr, zvstrdr, d_t_oro, d_u_oro, d_v_oro)              d_t_oro, d_u_oro, d_v_oro)
878    
879         ! ajout des tendances         ! ajout des tendances
880         DO k = 1, llm         DO k = 1, llm
# Line 922  contains Line 888  contains
888    
889      IF (ok_orolf) THEN      IF (ok_orolf) THEN
890         ! S\'election des points pour lesquels le sch\'ema est actif :         ! S\'election des points pour lesquels le sch\'ema est actif :
        igwd = 0  
891         DO i = 1, klon         DO i = 1, klon
892            itest(i) = 0            ktest(i) = 0
893            IF (zpic(i) - zmea(i) > 100.) THEN            IF (zpic(i) - zmea(i) > 100.) THEN
894               itest(i) = 1               ktest(i) = 1
              igwd = igwd + 1  
895            ENDIF            ENDIF
896         ENDDO         ENDDO
897    
898         CALL lift_noro(dtphys, paprs, play, zmea, zstd, zpic, itest, t_seri, &         CALL lift_noro(paprs, play, zmea, zstd, zpic, ktest, t_seri, u_seri, &
899              u_seri, v_seri, zulow, zvlow, zustrli, zvstrli, d_t_lif, &              v_seri, zulow, zvlow, zustrli, zvstrli, d_t_lif, d_u_lif, d_v_lif)
             d_u_lif, d_v_lif)  
900    
901         ! Ajout des tendances :         ! Ajout des tendances :
902         DO k = 1, llm         DO k = 1, llm
# Line 945  contains Line 908  contains
908         ENDDO         ENDDO
909      ENDIF      ENDIF
910    
911      ! Stress n\'ecessaires : toute la physique      CALL aaam_bud(rg, romega, pphis, zustrdr, zustrli, &
912             sum((u_seri - u) / dtphys * zmasse, dim = 2), zvstrdr, &
913      DO i = 1, klon           zvstrli, sum((v_seri - v) / dtphys * zmasse, dim = 2), paprs, u, v, &
914         zustrph(i) = 0.           aam, torsfc)
        zvstrph(i) = 0.  
     ENDDO  
     DO k = 1, llm  
        DO i = 1, klon  
           zustrph(i) = zustrph(i) + (u_seri(i, k) - u(i, k)) / dtphys &  
                * zmasse(i, k)  
           zvstrph(i) = zvstrph(i) + (v_seri(i, k) - v(i, k)) / dtphys &  
                * zmasse(i, k)  
        ENDDO  
     ENDDO  
   
     CALL aaam_bud(rg, romega, pphis, zustrdr, zustrli, zustrph, zvstrdr, &  
          zvstrli, zvstrph, paprs, u, v, aam, torsfc)  
915    
916      ! Calcul des tendances traceurs      ! Calcul des tendances traceurs
917      call phytrac(julien, time, firstcal, lafin, dtphys, t, paprs, play, mfu, &      call phytrac(julien, time, firstcal, lafin, t, paprs, play, mfu, mfd, &
918           mfd, pde_u, pen_d, ycoefh, fm_therm, entr_therm, u(:, 1), v(:, 1), &           pde_u, pen_d, coefh, cdragh, fm_therm, entr_therm, u(:, 1), v(:, 1), &
919           ftsol, pctsrf, frac_impa, frac_nucl, da, phi, mp, upwd, dnwd, &           ftsol, pctsrf, frac_impa, frac_nucl, da, phi, mp, upwd, dnwd, &
920           tr_seri, zmasse, ncid_startphy)           tr_seri, zmasse, ncid_startphy)
921    
# Line 1053  contains Line 1003  contains
1003      CALL histwrite_phy("dtsvdft", d_ts(:, is_ter))      CALL histwrite_phy("dtsvdft", d_ts(:, is_ter))
1004      CALL histwrite_phy("dtsvdfg", d_ts(:, is_lic))      CALL histwrite_phy("dtsvdfg", d_ts(:, is_lic))
1005      CALL histwrite_phy("dtsvdfi", d_ts(:, is_sic))      CALL histwrite_phy("dtsvdfi", d_ts(:, is_sic))
1006        CALL histwrite_phy("zxfqcalving", sum(fqcalving * pctsrf, dim = 2))
     DO nsrf = 1, nbsrf  
        CALL histwrite_phy("pourc_"//clnsurf(nsrf), pctsrf(:, nsrf) * 100.)  
        CALL histwrite_phy("fract_"//clnsurf(nsrf), pctsrf(:, nsrf))  
        CALL histwrite_phy("sens_"//clnsurf(nsrf), flux_t(:, nsrf))  
        CALL histwrite_phy("lat_"//clnsurf(nsrf), fluxlat(:, nsrf))  
        CALL histwrite_phy("tsol_"//clnsurf(nsrf), ftsol(:, nsrf))  
        CALL histwrite_phy("taux_"//clnsurf(nsrf), flux_u(:, nsrf))  
        CALL histwrite_phy("tauy_"//clnsurf(nsrf), flux_v(:, nsrf))  
        CALL histwrite_phy("rugs_"//clnsurf(nsrf), frugs(:, nsrf))  
        CALL histwrite_phy("albe_"//clnsurf(nsrf), falbe(:, nsrf))  
        CALL histwrite_phy("u10m_"//clnsurf(nsrf), u10m_srf(:, nsrf))  
        CALL histwrite_phy("v10m_"//clnsurf(nsrf), v10m_srf(:, nsrf))  
     END DO  
   
1007      CALL histwrite_phy("albs", albsol)      CALL histwrite_phy("albs", albsol)
1008      CALL histwrite_phy("tro3", wo * dobson_u * 1e3 / zmasse / rmo3 * md)      CALL histwrite_phy("tro3", wo * dobson_u * 1e3 / zmasse / rmo3 * md)
1009      CALL histwrite_phy("rugs", zxrugs)      CALL histwrite_phy("rugs", zxrugs)
# Line 1078  contains Line 1014  contains
1014      CALL histwrite_phy("s_oliqCL", s_oliqCL)      CALL histwrite_phy("s_oliqCL", s_oliqCL)
1015      CALL histwrite_phy("s_cteiCL", s_cteiCL)      CALL histwrite_phy("s_cteiCL", s_cteiCL)
1016      CALL histwrite_phy("s_therm", s_therm)      CALL histwrite_phy("s_therm", s_therm)
     CALL histwrite_phy("s_trmb1", s_trmb1)  
     CALL histwrite_phy("s_trmb2", s_trmb2)  
     CALL histwrite_phy("s_trmb3", s_trmb3)  
   
     if (conv_emanuel) then  
        CALL histwrite_phy("ptop", ema_pct)  
        CALL histwrite_phy("dnwd0", - mp)  
     end if  
   
1017      CALL histwrite_phy("temp", t_seri)      CALL histwrite_phy("temp", t_seri)
1018      CALL histwrite_phy("vitu", u_seri)      CALL histwrite_phy("vitu", u_seri)
1019      CALL histwrite_phy("vitv", v_seri)      CALL histwrite_phy("vitv", v_seri)
# Line 1100  contains Line 1027  contains
1027      CALL histwrite_phy("dtlw0", - cool0 / 86400.)      CALL histwrite_phy("dtlw0", - cool0 / 86400.)
1028      CALL histwrite_phy("msnow", sum(fsnow * pctsrf, dim = 2))      CALL histwrite_phy("msnow", sum(fsnow * pctsrf, dim = 2))
1029      call histwrite_phy("qsurf", sum(fqsurf * pctsrf, dim = 2))      call histwrite_phy("qsurf", sum(fqsurf * pctsrf, dim = 2))
1030        call histwrite_phy("flat", zxfluxlat)
1031    
1032        DO nsrf = 1, nbsrf
1033           CALL histwrite_phy("pourc_"//clnsurf(nsrf), pctsrf(:, nsrf) * 100.)
1034           CALL histwrite_phy("fract_"//clnsurf(nsrf), pctsrf(:, nsrf))
1035           CALL histwrite_phy("sens_"//clnsurf(nsrf), flux_t(:, nsrf))
1036           CALL histwrite_phy("lat_"//clnsurf(nsrf), fluxlat(:, nsrf))
1037           CALL histwrite_phy("tsol_"//clnsurf(nsrf), ftsol(:, nsrf))
1038           CALL histwrite_phy("taux_"//clnsurf(nsrf), flux_u(:, nsrf))
1039           CALL histwrite_phy("tauy_"//clnsurf(nsrf), flux_v(:, nsrf))
1040           CALL histwrite_phy("rugs_"//clnsurf(nsrf), frugs(:, nsrf))
1041           CALL histwrite_phy("albe_"//clnsurf(nsrf), falbe(:, nsrf))
1042           CALL histwrite_phy("u10m_"//clnsurf(nsrf), u10m_srf(:, nsrf))
1043           CALL histwrite_phy("v10m_"//clnsurf(nsrf), v10m_srf(:, nsrf))
1044        END DO
1045    
1046        if (conv_emanuel) then
1047           CALL histwrite_phy("ptop", ema_pct)
1048           CALL histwrite_phy("dnwd0", - mp)
1049        end if
1050    
1051      if (ok_instan) call histsync(nid_ins)      if (ok_instan) call histsync(nid_ins)
1052    
1053      IF (lafin) then      IF (lafin) then
1054         call NF95_CLOSE(ncid_startphy)         call NF95_CLOSE(ncid_startphy)
1055         CALL phyredem(pctsrf, ftsol, ftsoil, fqsurf, qsol, &         CALL phyredem(pctsrf, ftsol, ftsoil, fqsurf, qsol, fsnow, falbe, &
1056              fsnow, falbe, fevap, rain_fall, snow_fall, solsw, sollw, dlw, &              rain_fall, snow_fall, solsw, sollw, dlw, radsol, frugs, agesno, &
1057              radsol, frugs, agesno, zmea, zstd, zsig, zgam, zthe, zpic, zval, &              zmea, zstd, zsig, zgam, zthe, zpic, zval, t_ancien, q_ancien, &
1058              t_ancien, q_ancien, rnebcon, ratqs, clwcon, run_off_lic_0, sig1, &              rnebcon, ratqs, clwcon, run_off_lic_0, sig1, w01)
             w01)  
1059      end IF      end IF
1060    
1061      firstcal = .FALSE.      firstcal = .FALSE.

Legend:
Removed from v.227  
changed lines
  Added in v.306

  ViewVC Help
Powered by ViewVC 1.1.21