Changeset 2077


Ignore:
Timestamp:
Jul 3, 2014, 3:38:05 PM (10 years ago)
Author:
fhourdin
Message:

Modification relative à la phase mixte des nuages :

  1. on fait tendre t_glace_min vers t_glace_max (en principe 0°C) linéairerment entre p/ps = 0.8 et p/ps=1.
  2. Passage de tableau à la routine icefrac_lsc en remplacement d'une fonction scalaire.
  3. Changement de nom pour le module (le module icefrac_lsc_mod.F90 contenant maintenant la routine icefrac_lsc).

Mofication concerning the mixte phase of clouds

  1. t_glace_min -> t_glace_max when p/ps : 0.8 -> 1
  2. passing arrays instead of scalars to icefrac_lsc (which becomes a routine rather than a function).
  3. Changing the name microphys_mod.F90 -> icerfrac_lsc_mod.F90
Location:
LMDZ5/trunk/libf/phylmd
Files:
1 added
3 edited

Legend:

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

    r2006 r2077  
    1313  !
    1414  USE dimphy
    15   USE microphys_mod ! cloud microphysics (JBM 3/14)
     15  USE icefrac_lsc_mod ! cloud microphysics (JBM 3/14)
    1616  IMPLICIT none
    1717  !======================================================================
     
    165165  DATA appel1er /.TRUE./
    166166  !ym
     167
    167168  ice_thermo = iflag_ice_thermo .GE. 1
    168169  zdelq=0.0
     
    745746!         print*,zt(i),zrfl(i),zifl(i),'temp1'
    746747       ELSE ! of IF (iflag_t_glace.EQ.0)
     748         CALL icefrac_lsc(klon,zt(:),pplay(:,k)/paprs(:,1), &
     749&               t_glace_min,t_glace_max,exposant_glace,zfice(:))
    747750         if (iflag_fisrtilp_qsat.lt.1) then
    748751           DO i = 1, klon
    749752! JBM: icefrac_lsc is now a function contained in microphys_mod
    750               zfice(i) = icefrac_lsc(zt(i), t_glace_min, &
    751                                      t_glace_max, exposant_glace)
     753!             zfice(i) = icefrac_lsc(zt(i), t_glace_min, &
     754!                                    t_glace_max, exposant_glace)
    752755              zt(i) = zt(i) + (1.-zfice(i))*zcond(i) * RLVTT/RCPD/(1.0+RVTMP2*zq(i)) &
    753756                       +zfice(i)*zcond(i) * RLSTT/RCPD/(1.0+RVTMP2*zq(i))
     
    756759           DO i=1, klon
    757760! JBM: icefrac_lsc is now a function contained in microphys_mod
    758               zfice(i) = icefrac_lsc(zt(i), t_glace_min, &
    759                                      t_glace_max, exposant_glace)
     761!             zfice(i) = icefrac_lsc(zt(i), t_glace_min, &
     762!                                    t_glace_max, exposant_glace)
    760763!CR: ATTENTION zt different de Tbef: à corriger
    761764              zt(i) = zt(i) + (1.-zfice(i))*zcond(i) * RLVTT/RCPD/(1.0+RVTMP2*(zq(i)+zcond(i))) &
     
    790793         ENDDO
    791794       ELSE ! of IF (iflag_t_glace.EQ.0)
    792          DO i = 1, klon
    793             IF (rneb(i,k).GT.0.0) THEN
     795         CALL icefrac_lsc(klon,zt(:),pplay(:,k)/paprs(:,1), &
     796&               t_glace_min,t_glace_max,exposant_glace,zfice(:))
     797!        DO i = 1, klon
     798!           IF (rneb(i,k).GT.0.0) THEN
    794799! JBM: icefrac_lsc is now a function contained in microphys_mod
    795               zfice(i) = icefrac_lsc(zt(i), t_glace_min, &
    796                                      t_glace_max, exposant_glace)
    797             ENDIF
    798          ENDDO
     800!             zfice(i) = icefrac_lsc(zt(i), t_glace_min, &
     801!                                    t_glace_max, exposant_glace)
     802!           ENDIF
     803!        ENDDO
    799804       ENDIF
    800805     ENDIF
  • LMDZ5/trunk/libf/phylmd/newmicro.F90

    r2006 r2077  
    1212    reffclwc, cldnvi, lcc3d, lcc3dcon, lcc3dstra
    1313  USE phys_state_var_mod, ONLY: rnebcon, clwcon
    14   USE microphys_mod ! cloud microphysics (JBM 3/14)
     14  USE icefrac_lsc_mod ! cloud microphysics (JBM 3/14)
    1515  IMPLICIT NONE
    1616  ! ======================================================================
     
    202202  ELSE ! of IF (iflag_t_glace.EQ.0)
    203203    DO k = 1, klev
     204        CALL icefrac_lsc(klon,t(:,k),pplay(:,k)/paprs(:,1), &
     205&               t_glace_min,t_glace_max,exposant_glace,zfice(:,k))
     206 
     207
     208        ! JBM: icefrac_lsc is now a function contained in microphys_mod
     209!       zfice(i, k) = icefrac_lsc(t(i,k), t_glace_min, &
     210!                                 t_glace_max, exposant_glace)
    204211      DO i = 1, klon
    205212        ! -layer calculation
     
    207214        zrho(i, k) = pplay(i, k)/t(i, k)/rd ! kg/m3
    208215        dh(i, k) = rhodz(i, k)/zrho(i, k) ! m
    209         ! JBM: icefrac_lsc is now a function contained in microphys_mod
    210         zfice(i, k) = icefrac_lsc(t(i,k), t_glace_min, &
    211                                   t_glace_max, exposant_glace)
    212216        ! -IM Total Liquid/Ice water content
    213217        xflwc(i, k) = (1.-zfice(i,k))*pqlwp(i, k)
  • LMDZ5/trunk/libf/phylmd/nuage.F90

    r2006 r2077  
    55    cldtaupi, re, fl)
    66  USE dimphy
    7   USE microphys_mod ! cloud microphysics (JBM 3/14)
     7  USE icefrac_lsc_mod ! cloud microphysics (JBM 3/14)
    88  IMPLICIT NONE
    99  ! ======================================================================
     
    5454
    5555  INTEGER i, k
    56   REAL zflwp, zradef, zfice, zmsac
     56  REAL zflwp, zradef, zfice(klon), zmsac
    5757
    5858  REAL radius, rad_chaud
     
    9898
    9999  DO k = 1, klev
     100     IF (iflag_t_glace.EQ.0) THEN
     101       DO i = 1, klon
     102        zfice(i) = 1.0 - (t(i,k)-t_glace_min_old)/(273.13-t_glace_min_old)
     103        zfice(i) = min(max(zfice(i),0.0), 1.0)
     104        zfice(i) = zfice(i)**exposant_glace_old
     105       ENDDO
     106     ELSE ! of IF (iflag_t_glace.EQ.0)
     107! JBM: icefrac_lsc is now a function contained in microphys_mod
     108!       zfice(i) = icefrac_lsc(t(i,k), t_glace_min, &
     109!                           t_glace_max, exposant_glace)
     110         CALL icefrac_lsc(klon,t(:,k),pplay(:,k)/paprs(:,1), &
     111&               t_glace_min,t_glace_max,exposant_glace,zfice(:))
     112     ENDIF
     113
    100114    DO i = 1, klon
    101115      rad_chaud = rad_chau1
     
    104118      pclc(i, k) = max(pclc(i,k), seuil_neb)
    105119      zflwp = 1000.*pqlwp(i, k)/rg/pclc(i, k)*(paprs(i,k)-paprs(i,k+1))
    106       IF (iflag_t_glace.EQ.0) THEN
    107         zfice = 1.0 - (t(i,k)-t_glace_min_old)/(273.13-t_glace_min_old)
    108         zfice = min(max(zfice,0.0), 1.0)
    109         zfice = zfice**exposant_glace_old
    110       ELSE ! of IF (iflag_t_glace.EQ.0)
    111 ! JBM: icefrac_lsc is now a function contained in microphys_mod
    112         zfice = icefrac_lsc(t(i,k), t_glace_min, &
    113                             t_glace_max, exposant_glace)
    114       ENDIF
    115120
    116121      IF (ok_aie) THEN
     
    150155          ! effective radius as re/fl
    151156          !
    152         fl(i, k) = pclc(i, k)*(1.-zfice)
     157        fl(i, k) = pclc(i, k)*(1.-zfice(i))
    153158        re(i, k) = rad_chaud*fl(i, k)
    154159
     
    159164          ! cdnc.
    160165        radius = max(1.1E6*((pqlwp(i,k)*pplay(i,k)/(rd*t(i,k)))/(4./3.*rpi* &
    161           1000.*cdnc_pi(i,k)))**(1./3.), 3.)*(1.-zfice) + rad_froid*zfice
     166          1000.*cdnc_pi(i,k)))**(1./3.), 3.)*(1.-zfice(i)) + rad_froid*zfice(i)
    162167        cldtaupi(i, k) = 3.0/2.0*zflwp/radius
    163168      END IF ! ok_aie
    164169
    165       radius = rad_chaud*(1.-zfice) + rad_froid*zfice
    166       coef = coef_chau*(1.-zfice) + coef_froi*zfice
     170      radius = rad_chaud*(1.-zfice(i)) + rad_froid*zfice(i)
     171      coef = coef_chau*(1.-zfice(i)) + coef_froi*zfice(i)
    167172      pcltau(i, k) = 3.0/2.0*zflwp/radius
    168173      pclemi(i, k) = 1.0 - exp(-coef*zflwp)
Note: See TracChangeset for help on using the changeset viewer.