Ignore:
Timestamp:
Jul 9, 2010, 1:06:15 PM (14 years ago)
Author:
idelkadi
Message:

Nettoyage dans physiq.F des anciennes versions versions des options iflag_cldcon=5 ou 6.
Dans isrtilp.F, iflag_cldcon=5 : la version bi-gaussienne partout et iflag_cldcon=6 : bi-gaussiennes pour les thermiques et la lognormale ailleurs

File:
1 edited

Legend:

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

    r1403 r1411  
    11! $Id$
     2!
    23c#define IO_DEBUG
    34
     
    261262      CHARACTER*4 bb2
    262263      CHARACTER*2 bb3
     264c
    263265
    264266      real twriteSTD(klon,nlevSTD,nfiles)
     
    863865      REAL rflag(klon)          ! flag fonctionnement de convect
    864866      INTEGER iflagctrl(klon)          ! flag fonctionnement de convect
    865 
    866867c -- convect43:
    867868      INTEGER ntra              ! nb traceurs pour convect4.3
     
    12321233      call phys_state_var_init(read_climoz)
    12331234      call phys_output_var_init
     1235
    12341236      print*, '================================================='
    12351237cIM for NMC files
     
    12511253c         pmflxr=0.
    12521254c         pmflxs=0.
    1253 
    12541255        itau_con=0
    12551256        first=.false.
     
    14231424           ema_pcb(i)  = 0.
    14241425           ema_pct(i)  = 0.
    1425 c          ema_workcbmf(i) = 0.
     1426           ema_workcbmf(i) = 0.
    14261427          ENDDO
    14271428cIM15/11/02 rajout initialisation ibas_con,itop_con cf. SB =>BEG
     
    14481449c================================================================================
    14491450
    1450          ENDIF !debut
     1451         ENDIF
    14511452
    14521453           DO i=1,klon
     
    21702171     .        d_t_con,d_q_con,d_u_con,d_v_con,d_tr,
    21712172     .        rain_con, snow_con, ibas_con, itop_con, sigd,
    2172      .        ema_cbmf,upwd,dnwd,dnwd0,
     2173     .        upwd,dnwd,dnwd0,
    21732174     .        Ma,mip,Vprecip,cape,cin,tvp,Tconv,iflagctrl,
    21742175     .        pbase,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr,qcondc,wd,
     
    21892190
    21902191          ELSE ! ok_cvl
    2191 
    21922192c MAF conema3 ne contient pas les traceurs
    21932193          CALL conema3 (dtime,
     
    22292229
    22302230          DO i = 1, klon
    2231             ema_pcb(i)  = paprs(i,ibas_con(i))
     2231            ema_pcb(i)  = pbase(i)
    22322232          ENDDO
    22332233          DO i = 1, klon
     2234
    22342235! L'idicage de itop_con peut cacher un pb potentiel
    22352236! FH sous la dictee de JYG, CR
     
    22422243              endif
    22432244            endif
    2244           ENDDO     
     2245          ENDDO
     2246          DO i = 1, klon
     2247            ema_cbmf(i) = ema_workcbmf(i)
     2248          ENDDO     
    22452249      ELSE IF (iflag_con.eq.0) THEN
    22462250          write(lunout,*) 'On n appelle pas la convection'
     
    24592463c  ==============
    24602464
    2461 ! Dans le cas où on active les thermiques, on fait partir l'ajustement
     2465! Dans le cas où on active les thermiques, on fait partir l'ajustement
    24622466! a partir du sommet des thermiques.
    24632467! Dans le cas contraire, on demarre au niveau 1.
     
    25442548         if(prt_level.ge.9) print*,' CLOUDS_GNO OK'
    25452549
    2546 c-----------------------------------------------------------------------
    2547 c   par calcul direct de l'ecart-type
    2548 c-----------------------------------------------------------------------
    2549 
    2550       else if (iflag_cldcon>=5) then
    2551          wmax_th(:)=0.
    2552          zmax_th(:)=0.
    2553          do k=1,klev
    2554             do i=1,klon
    2555                wmax_th(i)=max(wmax_th(i),zw2(i,k))
    2556                if (detr_therm(i,k).gt.0.) zmax_th(i)=pphi(i,k)/rg
    2557             enddo
    2558          enddo
    2559          tau_overturning_th(:)=zmax_th(:)/max(0.5*wmax_th(:),0.1)
    2560          if(prt_level.ge.9)
    2561      &     write(lunout,*)'TAU TH OK ',
    2562      &     tau_overturning_th(1),detr_therm(1,3)
    2563 
    2564 c On impose que l'air autour de la fraction couverte par le thermique
    2565 c plus son air detraine durant tau_overturning_th soit superieur
    2566 c a 0.1 q_seri
    2567          zz=0.1
    2568          do k=1,klev
    2569             do i=1,klon
    2570                lambda_th(i,k)=0.5*(fraca(i,k)+fraca(i,k+1))+
    2571      s         tau_overturning_th(i)*detr_therm(i,k)
    2572      s         *rg/(paprs(i,k)-paprs(i,k+1))
    2573                znum=(1.-zz)*q_seri(i,k)
    2574                zden=zqasc(i,k)-zz*q_seri(i,k)
    2575                if (znum-lambda_th(i,k)*zden<0.) lambda_th(i,k)=znum/zden
    2576                lambda_th(i,k)=min(lambda_th(i,k),0.9)
    2577             enddo
    2578          enddo
    2579 
    2580          if(iflag_cldcon==5) then
    2581             do k=1,klev
    2582                do i=1,klon
    2583                   ratqsc(i,k)=sqrt(lambda_th(i,k)/(1.-lambda_th(i,k)))*
    2584      s            abs((zqasc(i,k)-q_seri(i,k))/q_seri(i,k))
    2585                enddo
    2586             enddo
    2587          else if(iflag_cldcon==6) then
    2588             do k=1,klev
    2589                do i=1,klon
    2590                   ratqsc(i,k)=sqrt(lambda_th(i,k))*
    2591      s            (zqasc(i,k)-q_seri(i,k))/q_seri(i,k)
    2592                enddo
    2593             enddo
    2594          endif
    2595 
    25962550      endif
    25972551
     
    26572611
    26582612      if (iflag_cldcon.eq.1 .or.iflag_cldcon.eq.2
    2659      s    .or.iflag_cldcon.ge.4) then
     2613     s    .or.iflag_cldcon.eq.4) then
    26602614
    26612615! On ajoute une constante au ratqsc*2 pour tenir compte de
     
    26922646      endif
    26932647
     2648      print*,'PHSYIQ NUAGES4'
    26942649
    26952650c
     
    28692824
    28702825c   On prend la somme des fractions nuageuses et des contenus en eau
    2871       cldfra(:,:)=min(max(cldfra(:,:),rnebcon(:,:)),1.)
    2872       cldliq(:,:)=cldliq(:,:)+rnebcon(:,:)*clwcon(:,:)
     2826
     2827      if (iflag_cldcon>=5) then
     2828
     2829! Si on est sur un point touche par la convection profonde et pas
     2830! par les thermiques, on prend la couverture nuageuse et l'eau nuageuse
     2831! de la convection profonde.
     2832
     2833         print*,'TEST SCHEMA DE NUAGES '
     2834         do k=1,klev
     2835            do i=1,klon
     2836               if (ptconv(i,k).and. .not. ptconvth(i,k)) then
     2837                   cldfra(i,k)=rnebcon(i,k)
     2838                   cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)
     2839               endif
     2840            enddo
     2841         enddo
     2842      else
     2843! Ancienne version
     2844         cldfra(:,:)=min(max(cldfra(:,:),rnebcon(:,:)),1.)
     2845         cldliq(:,:)=cldliq(:,:)+rnebcon(:,:)*clwcon(:,:)
     2846      endif
    28732847
    28742848      ENDIF
     
    33383312!     s        ref_liq,ref_ice
    33393313          call phys_cosp(itap,dtime,freq_cosp,
    3340      $                   ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP,
    3341      $                   ecrit_mth,ecrit_day,ecrit_hf,
    3342      $                   klon,klev,rlon,rlat,presnivs,overlap,
     3314     $                 ecrit_mth,ecrit_day,ecrit_hf,overlap,
     3315     $                   klon,klev,rlon,rlat,presnivs,
    33433316     $                   ref_liq,ref_ice,
    33443317     $                   pctsrf(:,is_ter)+pctsrf(:,is_lic),
     
    33493322     $                   pmflxr(:,1:klev),pmflxs(:,1:klev),
    33503323     $                   mr_ozone,cldtau, cldemi)
    3351 
    33523324!     L          calipso2D,calipso3D,cfadlidar,parasolrefl,atb,betamol,
    33533325!     L          cfaddbze,clcalipso2,dbze,cltlidarradar,
     
    34973469      wwriteSTD(:,:,4)=wlevSTD(:,:)
    34983470c
    3499 cIM initialisation 5eme fichier de sortie
    35003471cIM ajoute 5eme niveau 170310 BEG
    35013472      twriteSTD(:,:,5)=tlevSTD(:,:)
     
    36103581cIM global posePB#include "write_bilKP_ave.h"
    36113582c
    3612 
    36133583c Sauvegarder les valeurs de t et q a la fin de la physique:
    36143584c
     
    36693639      DO k = 1, klev
    36703640      DO i = 1, klon
    3671 cJYG/IM theta en debut du pas de temps
    3672 cJYG/IM       theta(i,k)=t(i,k)*(100000./pplay(i,k))**(RD/RCPD)
    3673 cJYG/IM theta en fin de pas de temps de physique
    3674         theta(i,k)=t_seri(i,k)*(100000./pplay(i,k))**(RD/RCPD)
     3641        theta(i,k)=t(i,k)*(100000./pplay(i,k))**(RD/RCPD)
    36753642      ENDDO
    36763643      ENDDO
Note: See TracChangeset for help on using the changeset viewer.