Changeset 1507


Ignore:
Timestamp:
Apr 15, 2011, 12:44:31 PM (13 years ago)
Author:
idelkadi
Message:
  1. Introduction de nouvelles facon de calucler les ratqs pour firstilp quand iflag_cldcon>=7 : ratqs devient pronos

tic avec une relaxation vers un ratqs issu de la convection (ratqsc) quand celle-ci est active et une relaxation ve
rs ratqss dans le cas contraire.
Les constantes de temps sont a 3h en dur dans le code (en attendant mieux)
On met un coeff iflag_cldcon/100 devant ratqsc
On plafone le ratqs a 0.5 (la aussi en dur dans le code en attendant de stabiliser une facon de faire).

  1. Introduction de nouveaux diagnostics concernant la separation entre la contribution des thermiques et le reste d

ans fisrtilp (dq/tlscth, dq/tlscst,plulth, plulst)
Correction de la sortie de la hauteur des thermiques zmax_th

  1. Introduction d'une option iflag_wake=2 pour prendre en compte les precipitations issues de fisrtipl dans le forc

age des wake.

  1. Correction d'un bug sur l'identification des points affectes par les thermiques (ptconvth(:,k)=fm_therm(:,k+1)>0

.)

Location:
LMDZ5/trunk/libf/phylmd
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/fisrtilp.F90

    r1506 r1507  
    387387           if (iflag_cldcon <= 4) then
    388388              lognormale = .true.
    389            elseif (iflag_cldcon == 6) then
     389           elseif (iflag_cldcon >= 6) then
    390390              ! lognormale en l'absence des thermiques
    391391              lognormale = fraca(:,k) < 1e-10
  • LMDZ5/trunk/libf/phylmd/phys_local_var_mod.F90

    r1424 r1507  
    4040      REAL, SAVE, ALLOCATABLE :: d_t_eva(:,:),d_q_eva(:,:)
    4141      !$OMP THREADPRIVATE(d_t_eva,d_q_eva)
     42      REAL, SAVE, ALLOCATABLE :: d_t_lscst(:,:),d_q_lscst(:,:)
     43      !$OMP THREADPRIVATE(d_t_lscst,d_q_lscst)
     44      REAL, SAVE, ALLOCATABLE :: d_t_lscth(:,:),d_q_lscth(:,:)
     45      !$OMP THREADPRIVATE(d_t_lscth,d_q_lscth)
     46      REAL, SAVE, ALLOCATABLE :: plul_th(:),plul_st(:)
     47      !$OMP THREADPRIVATE(plul_th,plul_st)
    4248!tendances dues a oro et lif
    4349      REAL, SAVE, ALLOCATABLE :: d_t_oli(:,:)
     
    188194      allocate(d_u_ajs(klon,klev),d_v_ajs(klon,klev))
    189195      allocate(d_t_eva(klon,klev),d_q_eva(klon,klev))
     196      allocate(d_t_lscst(klon,klev),d_q_lscst(klon,klev))
     197      allocate(d_t_lscth(klon,klev),d_q_lscth(klon,klev))
     198      allocate(plul_st(klon),plul_th(klon))
    190199      allocate(d_t_vdf(klon,klev),d_q_vdf(klon,klev))
    191200      allocate(d_u_vdf(klon,klev),d_v_vdf(klon,klev))
     
    265274      deallocate(d_u_ajs,d_v_ajs)
    266275      deallocate(d_t_eva,d_q_eva)
     276      deallocate(d_t_lscst,d_q_lscst)
     277      deallocate(d_t_lscth,d_q_lscth)
     278      deallocate(plul_th,plul_th)
    267279      deallocate(d_t_vdf,d_q_vdf)
    268280      deallocate(d_u_vdf,d_v_vdf)
  • LMDZ5/trunk/libf/phylmd/phys_output_mod.F90

    r1492 r1507  
    499499  type(ctrl_out),save :: o_dteva        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dteva')
    500500  type(ctrl_out),save :: o_dqeva        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dqeva')
     501
     502!!!!!!!!!!!!!!!! Specifique thermiques
     503  type(ctrl_out),save :: o_dqlscth        = ctrl_out((/ 10, 10, 10, 10, 10 /),'dqlscth')
     504  type(ctrl_out),save :: o_dqlscst        = ctrl_out((/ 10, 10, 10, 10, 10 /),'dqlscst')
     505  type(ctrl_out),save :: o_dtlscth        = ctrl_out((/ 10, 10, 10, 10, 10 /),'dtlscth')
     506  type(ctrl_out),save :: o_dtlscst        = ctrl_out((/ 10, 10, 10, 10, 10 /),'dtlscst')
     507  type(ctrl_out),save :: o_plulth        = ctrl_out((/ 10, 10, 10, 10, 10 /),'plulth')
     508  type(ctrl_out),save :: o_plulst        = ctrl_out((/ 10, 10, 10, 10, 10 /),'plulst')
     509  type(ctrl_out),save :: o_lmaxth        = ctrl_out((/ 10, 10, 10, 10, 10 /),'lmaxth')
     510  type(ctrl_out),save :: o_ptconvth        = ctrl_out((/ 10, 10, 10, 10, 10 /),'ptconvth')
     511!!!!!!!!!!!!!!!!!!!!!!!!
     512
     513
    501514  type(ctrl_out),save :: o_ptconv       = ctrl_out((/ 4, 10, 10, 10, 10 /),'ptconv')
    502515  type(ctrl_out),save :: o_ratqs        = ctrl_out((/ 4, 10, 10, 10, 10 /),'ratqs')
     
    11611174! Wakes
    11621175 IF(iflag_con.EQ.3) THEN
    1163  IF (iflag_wake == 1) THEN
     1176 IF (iflag_wake >= 1) THEN
    11641177   CALL histdef2d(iff,o_ale_wk%flag,o_ale_wk%name, "ALE WK", "m2/s2")
    11651178   CALL histdef2d(iff,o_alp_wk%flag,o_alp_wk%name, "ALP WK", "m2/s2")
     
    11931206
    11941207if(iflag_thermals.gt.1) THEN
     1208 CALL histdef3d(iff,o_dqlscth%flag,o_dqlscth%name, "dQ therm.", "(kg/kg)/s")
     1209 CALL histdef3d(iff,o_dqlscst%flag,o_dqlscst%name, "dQ strat.", "(kg/kg)/s")
     1210 CALL histdef3d(iff,o_dtlscth%flag,o_dtlscth%name, "dQ therm.", "K/s")
     1211 CALL histdef3d(iff,o_dtlscst%flag,o_dtlscst%name, "dQ strat.", "K/s")
     1212 CALL histdef2d(iff,o_plulth%flag,o_plulth%name, "Rainfall therm.", "K/s")
     1213 CALL histdef2d(iff,o_plulst%flag,o_plulst%name, "Rainfall strat.", "K/s")
     1214 CALL histdef2d(iff,o_lmaxth%flag,o_lmaxth%name, "Upper level thermals", "")
     1215 CALL histdef3d(iff,o_ptconvth%flag,o_ptconvth%name, "POINTS CONVECTIFS therm.", " ")
    11951216 CALL histdef3d(iff,o_f_th%flag,o_f_th%name, "Thermal plume mass flux", "K/s")
    11961217 CALL histdef3d(iff,o_e_th%flag,o_e_th%name,"Thermal plume entrainment","K/s")
  • LMDZ5/trunk/libf/phylmd/phys_output_write.h

    r1492 r1507  
    583583       IF (o_mc%flag(iff)<=lev_files(iff)) THEN
    584584        if(iflag_thermals.gt.1)then
    585          zx_tmp_fi3d=dnwd+dnwd0+upwd+fm_therm
     585         zx_tmp_fi3d=dnwd+dnwd0+upwd+fm_therm(:,1:klev)
    586586        else
    587587         zx_tmp_fi3d=dnwd+dnwd0+upwd
     
    708708! Wakes
    709709      IF (iflag_con.EQ.3) THEN
    710       IF (iflag_wake.EQ.1) THEN
     710      IF (iflag_wake>=1) THEN
    711711       IF (o_ale_wk%flag(iff)<=lev_files(iff)) THEN
    712712       CALL histwrite_phy(nid_files(iff),o_ale_wk%name,itau_w,ale_wake)
     
    763763     &                     o_dqwak%name,itau_w,zx_tmp_fi3d)
    764764        ENDIF
    765       ENDIF ! iflag_wake.EQ.1
     765      ENDIF ! iflag_wake>=1
    766766
    767767        IF (o_Vprecip%flag(iff)<=lev_files(iff)) THEN
     
    13561356       ENDIF
    13571357
     1358!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     1359! Sorties specifiques a la separation thermiques/non thermiques
     1360       if (iflag_thermals>1) then
     1361
     1362       IF (o_dtlscth%flag(iff)<=lev_files(iff)) THEN
     1363      zx_tmp_fi3d(1:klon,1:klev)=d_t_lscth(1:klon,1:klev)/pdtphys
     1364      CALL
     1365     s histwrite_phy(nid_files(iff),o_dtlscth%name,itau_w,zx_tmp_fi3d)
     1366       ENDIF
     1367
     1368       IF (o_dtlscst%flag(iff)<=lev_files(iff)) THEN
     1369      zx_tmp_fi3d(1:klon,1:klev)=d_t_lscst(1:klon,1:klev)/pdtphys
     1370      CALL
     1371     s histwrite_phy(nid_files(iff),o_dtlscst%name,itau_w,zx_tmp_fi3d)
     1372       ENDIF
     1373
     1374       IF (o_dqlscth%flag(iff)<=lev_files(iff)) THEN
     1375      zx_tmp_fi3d(1:klon,1:klev)=d_q_lscth(1:klon,1:klev)/pdtphys
     1376      CALL
     1377     s histwrite_phy(nid_files(iff),o_dqlscth%name,itau_w,zx_tmp_fi3d)
     1378       ENDIF
     1379
     1380       IF (o_dqlscst%flag(iff)<=lev_files(iff)) THEN
     1381      zx_tmp_fi3d(1:klon,1:klev)=d_q_lscst(1:klon,1:klev)/pdtphys
     1382      CALL
     1383     s histwrite_phy(nid_files(iff),o_dqlscst%name,itau_w,zx_tmp_fi3d)
     1384       ENDIF
     1385
     1386       IF (o_plulth%flag(iff)<=lev_files(iff)) THEN
     1387      CALL histwrite_phy(nid_files(iff),o_plulth%name,itau_w,plul_th)
     1388       ENDIF
     1389
     1390       IF (o_plulst%flag(iff)<=lev_files(iff)) THEN
     1391      CALL histwrite_phy(nid_files(iff),o_plulst%name,itau_w,plul_st)
     1392       ENDIF
     1393
     1394      do k=1,klev
     1395      do i=1,klon
     1396          if (ptconvth(i,k)) then
     1397           zx_tmp_fi3d(i,k)=1.
     1398          else
     1399           zx_tmp_fi3d(i,k)=0.
     1400          endif
     1401      enddo
     1402      enddo
     1403       IF (o_ptconvth%flag(iff)<=lev_files(iff)) THEN
     1404      CALL
     1405     s  histwrite_phy(nid_files(iff),o_ptconvth%name,itau_w,zx_tmp_fi3d)
     1406       ENDIF
     1407
     1408      do i=1,klon
     1409           zx_tmp_fi2d(1:klon)=lmax_th(:)
     1410      enddo
     1411       IF (o_ptconvth%flag(iff)<=lev_files(iff)) THEN
     1412      CALL
     1413     s histwrite_phy(nid_files(iff),o_lmaxth%name,itau_w,zx_tmp_fi2d)
     1414       ENDIF
     1415
     1416      endif ! iflag_thermals>1
     1417
     1418!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     1419
    13581420       IF (o_dtvdf%flag(iff)<=lev_files(iff)) THEN
    13591421      zx_tmp_fi3d(1:klon,1:klev)=d_t_vdf(1:klon,1:klev)/pdtphys
     
    14331495       ENDIF
    14341496
    1435        IF (o_f0_th%flag(iff)<=lev_files(iff)) THEN
    1436       CALL histwrite_phy(nid_files(iff),o_zmax_th%name,itau_w,zmax0)
     1497       IF (o_zmax_th%flag(iff)<=lev_files(iff)) THEN
     1498       CALL histwrite_phy(nid_files(iff),o_zmax_th%name,itau_w,zmax_th)
    14371499       ENDIF
    14381500
  • LMDZ5/trunk/libf/phylmd/physiq.F

    r1506 r1507  
    173173      save iflag_ratqs
    174174c$OMP THREADPRIVATE(iflag_ratqs)
     175      real facteur,zfratqs1,zfratqs2
     176
    175177      REAL lambda_th(klon,klev),zz,znum,zden
    176178      REAL wmax_th(klon)
     
    924926      save fact_cldcon,facttemps
    925927c$OMP THREADPRIVATE(fact_cldcon,facttemps)
    926       real facteur
    927928
    928929      integer iflag_cldcon
     
    14401441cCR:04.12.07: initialisations poches froides
    14411442c Controle de ALE et ALP pour la fermeture convective (jyg)
    1442           if (iflag_wake.eq.1) then
     1443          if (iflag_wake>=1) then
    14431444            CALL ini_wake(0.,0.,it_wape_prescr,wape_prescr,fip_prescr
    14441445     s                  ,alp_bl_prescr, ale_bl_prescr)
     
    19341935! ajout des tendances de la diffusion turbulente
    19351936      CALL add_phys_tend(d_u_vdf,d_v_vdf,d_t_vdf,d_q_vdf,dql0,'vdf')
     1937
    19361938!-----------------------------------------------------------------------------------------
    19371939
     
    20542056      do k=1,klev
    20552057            do i=1,klon
    2056              if (iflag_wake.eq.1) then
     2058             if (iflag_wake>=1) then
    20572059             t_wake(i,k) = t_seri(i,k)
    20582060     .           +(1-wake_s(i))*wake_deltat(i,k)
     
    20712073            enddo
    20722074         enddo
     2075
    20732076     
    20742077cc--   Calcul de l'energie disponible ALE (J/kg) et de la puissance disponible ALP (W/m2)
     
    20812084c
    20822085ccalcul de ale_wake et alp_wake
    2083        if (iflag_wake.eq.1) then
     2086       if (iflag_wake>=1) then
    20842087         if (itap .le. it_wape_prescr) then
    20852088          do i = 1,klon
     
    23432346cpour la couche limite diffuse pour l instant
    23442347c
    2345       if (iflag_wake.eq.1) then
     2348      if (iflag_wake>=1) then
    23462349      DO k=1,klev
    23472350        DO i=1,klon
     
    23582361        ENDDO
    23592362      ENDDO
     2363
     2364      if (iflag_wake==2) then
     2365         dt_dwn(:,:)= dt_dwn(:,:)+(d_t_eva(:,:)+d_t_lsc(:,:))/dtime
     2366         dq_dwn(:,:)= dq_dwn(:,:)+(d_q_eva(:,:)+d_q_lsc(:,:))/dtime
     2367      endif
    23602368c
    23612369ccalcul caracteristiques de la poche froide
     
    24742482      endif
    24752483
     2484      do i=1,klon
     2485         zmax_th(i)=pphi(i,lmax_th(i))/rg
     2486      enddo
     2487
    24762488         endif
    24772489
     
    26042616         enddo
    26052617
    2606       else
     2618      else if (iflag_ratqs.eq.2) then
    26072619
    26082620         do k=1,klev
     
    26202632            enddo
    26212633         enddo
     2634
     2635      else if (iflag_ratqs==3) then
     2636         do k=1,klev
     2637           ratqss(:,k)=ratqsbas+(ratqshaut-ratqsbas)
     2638     s     *min( ((paprs(:,1)-pplay(:,k))/70000.)**2 , 1. )
     2639         enddo
     2640
     2641      else if (iflag_ratqs==4) then
     2642         do k=1,klev
     2643           ratqss(:,k)=ratqsbas+0.5*(ratqshaut-ratqsbas)
     2644     s     *( tanh( (50000.-pplay(:,k))/20000.) + 1.)
     2645         enddo
     2646
    26222647      endif
    26232648
     
    26592684!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    26602685         ratqs(:,:)=max(ratqs(:,:),ratqss(:,:))
    2661       else
     2686      else if (iflag_cldcon<=6) then
    26622687!   on ne prend que le ratqs stable pour fisrtilp
    26632688         ratqs(:,:)=ratqss(:,:)
     2689      else
     2690          zfratqs1=exp(-pdtphys/10800.)
     2691          zfratqs2=exp(-pdtphys/10800.)
     2692!         print*,'RAPPEL RATQS 1 ',zfratqs1,zfratqs2
     2693!    s    ,ratqss(1,14),ratqs(1,14),ratqsc(1,14)
     2694          do k=1,klev
     2695             do i=1,klon
     2696                if (ratqsc(i,k).gt.1.e-10) then
     2697                   ratqs(i,k)=ratqs(i,k)*zfratqs2
     2698     s             +(iflag_cldcon/100.)*ratqsc(i,k)*(1.-zfratqs2)
     2699                endif
     2700                ratqs(i,k)=min(ratqs(i,k)*zfratqs1
     2701     s          +ratqss(i,k)*(1.-zfratqs1),0.5)
     2702             enddo
     2703          enddo
    26642704      endif
     2705
    26652706
    26662707
     
    28442885      if (iflag_cldcon>=5) then
    28452886
    2846          ptconvth(:,:)=fm_therm(:,:)>0.
     2887        do k=1,klev
     2888         ptconvth(:,k)=fm_therm(:,k+1)>0.
     2889        enddo
    28472890
    28482891       if (iflag_coupl==4) then
     
    28902933
    28912934      ENDIF
     2935
     2936!     plulsc(:)=0.
     2937!     do k=1,klev,-1
     2938!        do i=1,klon
     2939!              zzz=prfl(:,k)+psfl(:,k)
     2940!           if (.not.ptconvth.zzz.gt.0.)
     2941!        enddo prfl, psfl,
     2942!     enddo
    28922943c
    28932944c 2. NUAGES STARTIFORMES
     
    33553406       IF (MOD(itap,NINT(freq_cosp/dtime)).EQ.0) THEN
    33563407
    3357 !       print*,'freq_cosp',freq_cosp
     3408       print*,'freq_cosp',freq_cosp
    33583409          mr_ozone=wo(:, :, 1) * dobson_u * 1e3 / zmasse
    33593410!       print*,'Dans physiq.F avant appel cosp ref_liq,ref_ice=',
     
    37143765
    37153766
     3767
     3768c=============================================================
     3769! Separation entre thermiques et non thermiques dans les sorties
     3770! de fisrtilp
     3771c=============================================================
     3772
     3773      if (iflag_thermals>1) then
     3774      d_t_lscth=0.
     3775      d_t_lscst=0.
     3776      d_q_lscth=0.
     3777      d_q_lscst=0.
     3778      do k=1,klev
     3779         do i=1,klon
     3780            if (ptconvth(i,k)) then
     3781                d_t_lscth(i,k)=d_t_eva(i,k)+d_t_lsc(i,k)
     3782                d_q_lscth(i,k)=d_q_eva(i,k)+d_q_lsc(i,k)
     3783            else
     3784                d_t_lscst(i,k)=d_t_eva(i,k)+d_t_lsc(i,k)
     3785                d_q_lscst(i,k)=d_q_eva(i,k)+d_q_lsc(i,k)
     3786            endif
     3787         enddo
     3788      enddo
     3789
     3790      do i=1,klon
     3791      plul_st(i)=prfl(i,lmax_th(i)+1)+psfl(i,lmax_th(i)+1)
     3792      plul_th(i)=prfl(i,1)+psfl(i,1)
     3793      enddo
     3794      endif
     3795
     3796 
    37163797#include "phys_output_write.h"
    37173798
Note: See TracChangeset for help on using the changeset viewer.