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
File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.