Ignore:
Timestamp:
Oct 11, 2007, 3:43:42 PM (17 years ago)
Author:
Laurent Fairhead
Message:

Mise a jour de la physique avec thermiques avec la version de FH d'aout 2007
LF

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/trunk/libf/phytherm/physiq.F

    r839 r852  
    189189
    190190      integer lmax_th(klon)
     191      integer limbas(klon)
    191192      real ratqscth(klon,klev)
    192193      real ratqsdiff(klon,klev)
     
    945946      REAL fluxu(klon,klev, nbsrf)   ! flux turbulent de vitesse u
    946947      REAL fluxv(klon,klev, nbsrf)   ! flux turbulent de vitesse v
     948
     949      REAL, DIMENSION(:,:,:), ALLOCATABLE, SAVE :: pbl_tke ! turb kinetic energy
     950c   !$OMP THREADPRIVATE(pbl_tke)
     951
    947952c
    948953      REAL zxfluxt(klon, klev)
     
    10661071c$OMP THREADPRIVATE(d_u_con,d_v_con)
    10671072      REAL d_t_lsc(klon,klev),d_q_lsc(klon,klev),d_ql_lsc(klon,klev)
     1073      REAL d_t_ajsb(klon,klev), d_q_ajsb(klon,klev)
    10681074      REAL d_t_ajs(klon,klev), d_q_ajs(klon,klev)
    10691075      REAL d_u_ajs(klon,klev), d_v_ajs(klon,klev)
     
    15541560         itaprad = 0
    15551561
     1562!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     1563!! Un petit travail à faire ici.
     1564!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     1565
     1566         if (iflag_pbl>1) then
     1567             PRINT*, "Using method MELLOR&YAMADA"
     1568         endif
     1569          ! NB! pbl_tke could/should be read and written from (re)startphy.nc
     1570          ALLOCATE(pbl_tke(klon,klev+1,nbsrf)) 
     1571          pbl_tke(:,:,:) = 1.e-8
     1572
     1573
    15561574         CALL phyetat0 ("startphy.nc",dtime,co2_ppm_etat0,solaire_etat0,
    15571575     .       rlat,rlon,pctsrf, ftsol,
     
    15611579     .       radsol,clesphy0,
    15621580     .       zmea,zstd,zsig,zgam,zthe,zpic,zval,rugoro,tabcntr0,
    1563      .       t_ancien, q_ancien, ancien_ok, rnebcon, ratqs,clwcon)
     1581     .       t_ancien, q_ancien, ancien_ok, rnebcon, ratqs,clwcon,
     1582     .       pbl_tke)
     1583
     1584
     1585
     1586
     1587!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     1588
    15641589
    15651590       DO i=1,klon
     
    16431668         ENDIF
    16441669
     1670           rugoro=0.
    16451671c34EK
    16461672         IF (ok_orodr) THEN
    1647            DO i=1,klon
    1648              rugoro(i) = MAX(1.0e-05, zstd(i)*zsig(i)/2.0)
    1649            ENDDO
     1673
     1674           rugoro=0.
     1675
     1676!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     1677! FH sans doute a enlever de finitivement ou, si on le garde, l'activer
     1678! justement quand ok_orodr = false.
     1679! ce rugoro est utilise par la couche limite et fait double emploi
     1680! avec les paramétrisations spécifiques de Francois Lott.
     1681!           DO i=1,klon
     1682!             rugoro(i) = MAX(1.0e-05, zstd(i)*zsig(i)/2.0)
     1683!           ENDDO
     1684!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     1685
    16501686           CALL SUGWD(klon,klev,paprs,pplay)
    16511687           DO i=1,klon
     
    20612097     d     wfbils,    wfbilo,    fluxt,   fluxu,  fluxv,
    20622098     -     dsens,     devap,     zxsnow,
    2063      -     zxfluxt,   zxfluxq,   q2m,     fluxq )
     2099     -     zxfluxt,   zxfluxq,   q2m,     fluxq, pbl_tke )
    20642100c
    20652101c
     
    22332269          DO i = 1, klon
    22342270            ema_pct(i)  = paprs(i,itop_con(i))
     2271            if (itop_con(i).gt.klev-3) then
     2272               print*,'La convection monte trop haut '
     2273               print*,'itop_con(,',i,',)=',itop_con(i)
     2274            endif
    22352275          ENDDO
    22362276          DO i = 1, klon
     
    23212361
    23222362
     2363      d_t_ajsb(:,:)=0.
     2364      d_q_ajsb(:,:)=0.
    23232365      d_t_ajs(:,:)=0.
    23242366      d_u_ajs(:,:)=0.
     
    23362378c  ====
    23372379         IF(prt_level>9)WRITE(lunout,*)'pas de convection'
    2338       else if(iflag_thermals.eq.0) then
    2339 
    2340 c  Ajustement sec
    2341 c  ==============
    2342          IF(prt_level>9)WRITE(lunout,*)'ajsec'
    2343          CALL ajsec(paprs, pplay, t_seri,q_seri, d_t_ajs, d_q_ajs)
    2344          t_seri(:,:) = t_seri(:,:) + d_t_ajs(:,:)
    2345          q_seri(:,:) = q_seri(:,:) + d_q_ajs(:,:)
     2380
     2381
    23462382      else
     2383
    23472384c  Thermiques
    23482385c  ==========
     
    23512388         print*,'JUSTE AVANT , iflag_thermals='
    23522389     s   ,iflag_thermals,'   nsplit_thermals=',nsplit_thermals
     2390
     2391
     2392         if (iflag_thermals.gt.1) then
    23532393         call calltherm(pdtphys
    23542394     s      ,pplay,paprs,pphi,weak_inversion
     
    23572397     s      ,fm_therm,entr_therm,zqasc,clwcon0th,lmax_th,ratqscth,
    23582398     s       ratqsdiff,zqsatth)
     2399         endif
    23592400
    23602401!        call calltherm(pdtphys
     
    23632404!    s      ,d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs
    23642405!    s      ,fm_therm,entr_therm)
     2406
     2407c  Ajustement sec
     2408c  ==============
     2409
     2410! Dans le cas où on active les thermiques, on fait partir l'ajustement
     2411! a partir du sommet des thermiques.
     2412! Dans le cas contraire, on demarre au niveau 1.
     2413
     2414         if (iflag_thermals.ge.13.or.iflag_thermals.eq.0) then
     2415
     2416         if(iflag_thermals.eq.0) then
     2417            IF(prt_level>9)WRITE(lunout,*)'ajsec'
     2418            limbas(:)=1
     2419         else
     2420            limbas(:)=lmax_th(:)
     2421         endif
     2422 
     2423! Attention : le call ajsec_convV2 n'est maintenu que momentanneement
     2424! pour des test de convergence numerique.
     2425! Le nouveau ajsec est a priori mieux, meme pour le cas
     2426! iflag_thermals = 0 (l'ancienne version peut faire des tendances
     2427! non nulles numeriquement pour des mailles non concernees.
     2428
     2429         if (iflag_thermals.eq.0) then
     2430            CALL ajsec_convV2(paprs, pplay, t_seri,q_seri
     2431     s      , d_t_ajsb, d_q_ajsb)
     2432         else
     2433            CALL ajsec(paprs, pplay, t_seri,q_seri,limbas
     2434     s      , d_t_ajsb, d_q_ajsb)
     2435         endif
     2436
     2437         t_seri(:,:) = t_seri(:,:) + d_t_ajsb(:,:)
     2438         q_seri(:,:) = q_seri(:,:) + d_q_ajsb(:,:)
     2439         d_t_ajs(:,:)=d_t_ajs(:,:)+d_t_ajsb(:,:)
     2440         d_q_ajs(:,:)=d_q_ajs(:,:)+d_q_ajsb(:,:)
     2441
     2442         endif
     2443
    23652444      endif
    23662445c
     
    23972476         ptconvth(:,:)=.false.
    23982477         ratqsc(:,:)=0.
    2399          print*,'avant clouds_gno'
     2478         print*,'avant clouds_gno thermique'
    24002479         call clouds_gno
    24012480     s   (klon,klev,q_seri,zqsat,clwcon0th,ptconvth,ratqsc,rnebcon0th)
     
    33213400     .      radsol,
    33223401     .      zmea,zstd,zsig,zgam,zthe,zpic,zval,rugoro,
    3323      .      t_ancien, q_ancien, rnebcon, ratqs, clwcon)
     3402     .      t_ancien, q_ancien, rnebcon, ratqs, clwcon,
     3403     .      pbl_tke)
    33243404      ENDIF
    33253405     
Note: See TracChangeset for help on using the changeset viewer.