Changeset 2543 for LMDZ5/branches


Ignore:
Timestamp:
Jun 6, 2016, 6:51:37 PM (8 years ago)
Author:
jbmadeleine
Message:

Ajout de l'option iflag_cloudth_vert=2 developpe par Jean Jouhaud pour l heterogeneite verticale sous maille des nuages.

Pour le moment, l ecart type de la pdf verticale vaut la moitie de l ecart type de la pdf horizontale.

Le iflag_cloudth_vert=1 conserve l heterogeneite verticale telle qu introduite par Arnaud Jam en Avril 2015.

Location:
LMDZ5/branches/testing/libf/phylmd
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/branches/testing/libf/phylmd/cloudth.F90

    r2408 r2543  
    2020#include "FCTTRE.h"
    2121#include "thermcell.h"
     22
     23#include "nuage.h"
     24
     25
     26
     27
    2228
    2329      INTEGER itap,ind1,ind2
     
    6268      REAL erf
    6369
    64       REAL, SAVE :: iflag_cloudth_vert, iflag_cloudth_vert_omp=0
    65 
    66 
    67       LOGICAL, SAVE :: first=.true.
     70
     71
     72!      LOGICAL, SAVE :: first=.true.
    6873
    6974
     
    7580! de converger sur une version nouvelle
    7681!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    77       IF (first) THEN
    78      !$OMP MASTER
    79      CALL getin('iflag_cloudth_vert',iflag_cloudth_vert_omp)
    80      !$OMP END MASTER
    81      !$OMP BARRIER
    82      iflag_cloudth_vert=iflag_cloudth_vert_omp
    83       first=.false.
    84       ENDIF
    85        IF (iflag_cloudth_vert==1) THEN
    86        CALL cloudth_vert(ngrid,klev,ind2,  &
     82!      IF (first) THEN
     83!     !$OMP MASTER
     84!     CALL getin('iflag_cloudth_vert',iflag_cloudth_vert_omp)
     85!     !$OMP END MASTER
     86!     !$OMP BARRIER
     87!     iflag_cloudth_vert=iflag_cloudth_vert_omp
     88!      first=.false.
     89!      ENDIF
     90
     91      IF (iflag_cloudth_vert.GE.1) THEN
     92      CALL cloudth_vert(ngrid,klev,ind2,  &
    8793     &           ztv,po,zqta,fraca, &
    8894     &           qcloud,ctot,zpspsk,paprs,ztla,zthl, &
    8995     &           ratqs,zqs,t)
    90        RETURN
    91        ENDIF
     96      RETURN
     97      ENDIF
    9298!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    93 
    9499
    95100
     
    285290#include "thermcell.h"
    286291
     292
     293#include "nuage.h"
     294
     295
     296     
    287297      INTEGER itap,ind1,ind2
    288298      INTEGER ngrid,klev,klon,l,ig
     
    438448
    439449
     450
     451
     452
     453
     454
     455       IF (iflag_cloudth_vert == 1) THEN
    440456!-------------------------------------------------------------------------------
    441457!  Version 2: Modification selon J.-Louis. On condense ?? partir de qsat-ratqs
     
    479495      qltot(ind1,ind2)=fraca(ind1,ind2)*qlth(ind1,ind2)+(1.-1.*fraca(ind1,ind2))*qlenv(ind1,ind2)
    480496
     497
     498
     499
     500
     501      ELSE IF (iflag_cloudth_vert == 2) THEN
     502
     503!-------------------------------------------------------------------------------
     504!  Version 3: Modification Jean Jouhaud. On condense a partir de -delta s
     505!-------------------------------------------------------------------------------
     506!      deltasenv=aenv*ratqs(ind1,ind2)*po(ind1)
     507!      deltasth=ath*ratqs(ind1,ind2)*zqta(ind1,ind2)
     508!      deltasenv=aenv*ratqs(ind1,ind2)*zqsatenv(ind1,ind2)
     509!      deltasth=ath*ratqs(ind1,ind2)*zqsatth(ind1,ind2)
     510      deltasenv=aenv*0.5*sigma1s
     511      deltasth=ath*0.5*sigma2s
     512     
     513      xenv1=-(senv+deltasenv)/(sqrt(2.)*sigma1s)
     514      xenv2=-(senv-deltasenv)/(sqrt(2.)*sigma1s)
     515      xth1=-(sth+deltasth)/(sqrt(2.)*sigma2s)
     516      xth2=-(sth-deltasth)/(sqrt(2.)*sigma2s)
     517!     coeffqlenv=(sigma1s)**2/(2*sqrtpi*deltasenv)
     518!     coeffqlth=(sigma2s)**2/(2*sqrtpi*deltasth)
     519     
     520      cth(ind1,ind2)=0.5*(1.-1.*erf(xth1))
     521      cenv(ind1,ind2)=0.5*(1.-1.*erf(xenv1))
     522      ctot(ind1,ind2)=fraca(ind1,ind2)*cth(ind1,ind2)+(1.-1.*fraca(ind1,ind2))*cenv(ind1,ind2)
     523
     524      IntJ=0.5*senv*(1-erf(xenv2))+(sigma1s/sqrt2pi)*exp(-1.*xenv2**2)
     525      IntI1=(((senv+deltasenv)**2+(sigma1s)**2)/(8*deltasenv))*(erf(xenv2)-erf(xenv1))
     526      IntI2=(sigma1s**2/(4*deltasenv*sqrtpi))*(xenv1*exp(-1.*xenv1**2)-xenv2*exp(-1.*xenv2**2))
     527      IntI3=((sqrt2*sigma1s*(senv+deltasenv))/(4*sqrtpi*deltasenv))*(exp(-1.*xenv1**2)-exp(-1.*xenv2**2))
     528
     529!      IntI1=0.5*(0.5*sqrtpi*(erf(xenv2)-erf(xenv1))+xenv1*exp(-1.*xenv1**2)-xenv2*exp(-1.*xenv2**2))
     530!      IntI2=xenv2*(exp(-1.*xenv2**2)-exp(-1.*xenv1**2))
     531!      IntI3=0.5*sqrtpi*xenv2**2*(erf(xenv2)-erf(xenv1))
     532
     533      qlenv(ind1,ind2)=IntJ+IntI1+IntI2+IntI3
     534!      qlenv(ind1,ind2)=IntJ
     535!      print*, qlenv(ind1,ind2),'VERIF EAU'
     536
     537      IntJ=0.5*sth*(1-erf(xth2))+(sigma2s/sqrt2pi)*exp(-1.*xth2**2)
     538      IntI1=(((sth+deltasth)**2+(sigma2s)**2)/(8*deltasth))*(erf(xth2)-erf(xth1))
     539      IntI2=(sigma2s**2/(4*deltasth*sqrtpi))*(xth1*exp(-1.*xth1**2)-xth2*exp(-1.*xth2**2))
     540      IntI3=((sqrt2*sigma2s*(sth+deltasth))/(4*sqrtpi*deltasth))*(exp(-1.*xth1**2)-exp(-1.*xth2**2))
     541     
     542      qlth(ind1,ind2)=IntJ+IntI1+IntI2+IntI3
     543!      qlth(ind1,ind2)=IntJ
     544!      print*, IntJ,IntI1,IntI2,IntI3,qlth(ind1,ind2),'VERIF EAU2'
     545      qltot(ind1,ind2)=fraca(ind1,ind2)*qlth(ind1,ind2)+(1.-1.*fraca(ind1,ind2))*qlenv(ind1,ind2)
     546     
     547
     548
     549
     550      ENDIF ! of if (iflag_cloudth_vert==1 or 2)
     551
     552
     553
    481554!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     555
     556
     557
    482558      if (cenv(ind1,ind2).lt.1.e-10.or.cth(ind1,ind2).lt.1.e-10) then
    483559      ctot(ind1,ind2)=0.
  • LMDZ5/branches/testing/libf/phylmd/conf_phys_m.F90

    r2542 r2543  
    165165    INTEGER,SAVE :: iflag_ice_thermo_omp
    166166    INTEGER,SAVE :: iflag_t_glace_omp
     167
     168
     169
     170    INTEGER,SAVE :: iflag_cloudth_vert_omp
     171
     172
     173   
    167174    REAL,SAVE :: rad_froid_omp, rad_chau1_omp, rad_chau2_omp
    168175    REAL,SAVE :: t_glace_min_omp, t_glace_max_omp
     
    11601167    call getin('iflag_t_glace',iflag_t_glace_omp)
    11611168
     1169
     1170
     1171
     1172
     1173    !
     1174    !Config Key  = iflag_cloudth_vert
     1175    !Config Desc = 
     1176    !Config Def  = 0
     1177    !Config Help =
     1178    !
     1179    iflag_cloudth_vert_omp = 0
     1180    call getin('iflag_cloudth_vert',iflag_cloudth_vert_omp)
     1181
     1182
     1183
     1184
     1185
     1186
     1187
     1188
     1189
     1190
    11621191    !
    11631192    !Config Key  = iflag_ice_thermo
     
    20442073    exposant_glace = exposant_glace_omp
    20452074    iflag_t_glace = iflag_t_glace_omp
     2075
     2076
     2077    iflag_cloudth_vert=iflag_cloudth_vert_omp
     2078
     2079
     2080
    20462081    iflag_ice_thermo = iflag_ice_thermo_omp
    20472082    rei_min = rei_min_omp
     
    23612396    write(lunout,*)' exposant_glace = ',exposant_glace
    23622397    write(lunout,*)' iflag_t_glace = ',iflag_t_glace
     2398
     2399
     2400
     2401    write(lunout,*)' iflag_cloudth_vert = ',iflag_cloudth_vert
     2402
     2403
     2404
    23632405    write(lunout,*)' iflag_ice_thermo = ',iflag_ice_thermo
    23642406    write(lunout,*)' rei_min = ',rei_min
  • LMDZ5/branches/testing/libf/phylmd/nuage.h

    r2298 r2543  
    99      REAL tmax_fonte_cv
    1010
    11       INTEGER iflag_t_glace,iflag_cld_cv
     11      INTEGER iflag_t_glace, iflag_cloudth_vert, iflag_cld_cv
    1212
    1313      common /nuagecom/ rad_froid,rad_chau1, rad_chau2,t_glace_max,     &
    1414     &                  t_glace_min,exposant_glace,rei_min,rei_max,     &
    1515     &                  tau_cld_cv,coefw_cld_cv,                        &
    16      &                  iflag_t_glace,iflag_cld_cv,tmax_fonte_cv
     16     &                  iflag_t_glace,iflag_cloudth_vert,iflag_cld_cv,  &
     17     &                  tmax_fonte_cv
    1718!$OMP THREADPRIVATE(/nuagecom/)
Note: See TracChangeset for help on using the changeset viewer.