Changeset 2006


Ignore:
Timestamp:
Apr 6, 2014, 1:31:28 PM (10 years ago)
Author:
fhourdin
Message:

Modification de la spécification de la plage de température pour
la phase mixte liquide/glace des nuages.
Contrôle par les paramètres t_glace_min/max, exposant_glace, iflag_t_glace

Modifying the specification of the mixte liquid/ice phase for cloud water.

Jean-Baptiste Madeleine

Location:
LMDZ5/trunk/libf/phylmd
Files:
1 added
6 edited

Legend:

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

    r2000 r2006  
    146146    INTEGER,SAVE :: iflag_pdf_omp
    147147    INTEGER,SAVE :: iflag_ice_thermo_omp
     148    INTEGER,SAVE :: iflag_t_glace_omp
    148149    REAL,SAVE :: rad_froid_omp, rad_chau1_omp, rad_chau2_omp
    149150    REAL,SAVE :: t_glace_min_omp, t_glace_max_omp
     151    REAL,SAVE :: exposant_glace_omp
    150152    REAL,SAVE :: rei_min_omp, rei_max_omp
    151153    REAL,SAVE :: inertie_sol_omp,inertie_sno_omp,inertie_ice_omp
     
    10061008
    10071009    !
     1010    !Config Key  = exposant_glace
     1011    !Config Desc = 
     1012    !Config Def  = 2.
     1013    !Config Help =
     1014    !
     1015    exposant_glace_omp = 1.
     1016    call getin('exposant_glace',exposant_glace_omp)
     1017
     1018    !
     1019    !Config Key  = iflag_t_glace
     1020    !Config Desc = 
     1021    !Config Def  = 0
     1022    !Config Help =
     1023    !
     1024    iflag_t_glace_omp = 0
     1025    call getin('iflag_t_glace',iflag_t_glace_omp)
     1026
     1027    !
    10081028    !Config Key  = iflag_ice_thermo
    10091029    !Config Desc = 
     
    17641784    t_glace_min = t_glace_min_omp
    17651785    t_glace_max = t_glace_max_omp
     1786    exposant_glace = exposant_glace_omp
     1787    iflag_t_glace = iflag_t_glace_omp
    17661788    iflag_ice_thermo = iflag_ice_thermo_omp
    17671789    rei_min = rei_min_omp
     
    19932015    write(lunout,*)' t_glace_min = ',t_glace_min
    19942016    write(lunout,*)' t_glace_max = ',t_glace_max
     2017    write(lunout,*)' exposant_glace = ',exposant_glace
     2018    write(lunout,*)' iflag_t_glace = ',iflag_t_glace
    19952019    write(lunout,*)' iflag_ice_thermo = ',iflag_ice_thermo
    19962020    write(lunout,*)' rei_min = ',rei_min
  • LMDZ5/trunk/libf/phylmd/fisrtilp.F90

    r1907 r2006  
    1313  !
    1414  USE dimphy
     15  USE microphys_mod ! cloud microphysics (JBM 3/14)
    1516  IMPLICIT none
    1617  !======================================================================
     
    2627  include "tracstoke.h"
    2728  include "fisrtilp.h"
     29  include "nuage.h" ! JBM (3/14)
    2830  include "iniprint.h"
    2931
     
    111113  REAL zoliq(klon), zcond(klon), zq(klon), zqn(klon), zdelq
    112114  REAL zoliqp(klon), zoliqi(klon)
    113   REAL ztglace, zt(klon)
    114   INTEGER nexpo ! exponentiel pour glace/eau
     115  REAL zt(klon)
     116! JBM (3/14) nexpo is replaced by exposant_glace
     117! REAL nexpo ! exponentiel pour glace/eau
     118! INTEGER, PARAMETER :: nexpo=6
     119  INTEGER exposant_glace_old
     120  REAL t_glace_min_old
    115121  REAL zdz(klon),zrho(klon),ztot      , zrhol(klon)
    116122  REAL zchau      ,zfroi      ,zfice(klon),zneb(klon)
     
    202208  !  nexpo regle la raideur de la transition eau liquide / eau glace.
    203209  !
    204   ztglace = RTT - 15.0
    205 !AJ<
    206   IF (ice_thermo) THEN
    207     nexpo = 2
    208   ELSE
    209     nexpo = 6
     210  IF (iflag_t_glace.EQ.0) THEN
     211!   ztglace = RTT - 15.0
     212    t_glace_min_old = RTT - 15.0
     213    !AJ<
     214    IF (ice_thermo) THEN
     215!     nexpo = 2
     216      exposant_glace_old = 2
     217    ELSE
     218!     nexpo = 6
     219      exposant_glace_old = 6
     220    ENDIF
    210221  ENDIF
     222 
    211223!!  RLVTT = 2.501e6 ! pas de redefinition des constantes physiques (jyg)
    212224!!  RLSTT = 2.834e6 ! pas de redefinition des constantes physiques (jyg)
     
    710722        endif
    711723     ELSE
     724       IF (iflag_t_glace.EQ.0) THEN
    712725         if (iflag_fisrtilp_qsat.lt.1) then
    713726           DO i = 1, klon
    714               zfice(i) = 1.0 - (zt(i)-ztglace) / (273.15-ztglace)
     727              zfice(i) = 1.0 - (zt(i)-t_glace_min_old) / (273.15-t_glace_min_old)
    715728              zfice(i) = MIN(MAX(zfice(i),0.0),1.0)
    716               zfice(i) = zfice(i)**nexpo
     729              zfice(i) = zfice(i)**exposant_glace_old
     730!             zfice(i) = zfice(i)**nexpo
    717731              zt(i) = zt(i) + (1.-zfice(i))*zcond(i) * RLVTT/RCPD/(1.0+RVTMP2*zq(i)) &
    718732                       +zfice(i)*zcond(i) * RLSTT/RCPD/(1.0+RVTMP2*zq(i))
     
    720734         else
    721735           DO i=1, klon
    722               zfice(i) = 1.0 - (zt(i)-ztglace) / (273.15-ztglace)
     736              zfice(i) = 1.0 - (zt(i)-t_glace_min_old) / (273.15-t_glace_min_old)
    723737              zfice(i) = MIN(MAX(zfice(i),0.0),1.0)
    724               zfice(i) = zfice(i)**nexpo
     738              zfice(i) = zfice(i)**exposant_glace_old
     739!             zfice(i) = zfice(i)**nexpo
    725740!CR: ATTENTION zt different de Tbef: à corriger
    726741              zt(i) = zt(i) + (1.-zfice(i))*zcond(i) * RLVTT/RCPD/(1.0+RVTMP2*(zq(i)+zcond(i))) &
     
    729744         endif
    730745!         print*,zt(i),zrfl(i),zifl(i),'temp1'
     746       ELSE ! of IF (iflag_t_glace.EQ.0)
     747         if (iflag_fisrtilp_qsat.lt.1) then
     748           DO i = 1, klon
     749! 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)
     752              zt(i) = zt(i) + (1.-zfice(i))*zcond(i) * RLVTT/RCPD/(1.0+RVTMP2*zq(i)) &
     753                       +zfice(i)*zcond(i) * RLSTT/RCPD/(1.0+RVTMP2*zq(i))
     754           ENDDO
     755         else
     756           DO i=1, klon
     757! 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)
     760!CR: ATTENTION zt different de Tbef: à corriger
     761              zt(i) = zt(i) + (1.-zfice(i))*zcond(i) * RLVTT/RCPD/(1.0+RVTMP2*(zq(i)+zcond(i))) &
     762                       +zfice(i)*zcond(i) * RLSTT/RCPD/(1.0+RVTMP2*(zq(i)+zcond(i)))
     763           ENDDO
     764         endif
     765!         print*,zt(i),zrfl(i),zifl(i),'temp1'
     766       ENDIF
    731767     ENDIF
    732768!>AJ
     
    743779!AJ<
    744780     IF (.NOT. ice_thermo) THEN
    745      DO i = 1, klon
    746         IF (rneb(i,k).GT.0.0) THEN
    747            zfice(i) = 1.0 - (zt(i)-ztglace) / (273.13-ztglace)
    748            zfice(i) = MIN(MAX(zfice(i),0.0),1.0)
    749            zfice(i) = zfice(i)**nexpo
    750      !!      zfice(i)=0.
    751         ENDIF
    752      ENDDO
     781       IF (iflag_t_glace.EQ.0) THEN
     782         DO i = 1, klon
     783            IF (rneb(i,k).GT.0.0) THEN
     784               zfice(i) = 1.0 - (zt(i)-t_glace_min_old) / (273.13-t_glace_min_old)
     785               zfice(i) = MIN(MAX(zfice(i),0.0),1.0)
     786               zfice(i) = zfice(i)**exposant_glace_old
     787!              zfice(i) = zfice(i)**nexpo
     788         !!      zfice(i)=0.
     789            ENDIF
     790         ENDDO
     791       ELSE ! of IF (iflag_t_glace.EQ.0)
     792         DO i = 1, klon
     793            IF (rneb(i,k).GT.0.0) THEN
     794! 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
     799       ENDIF
    753800     ENDIF
    754801     DO i = 1, klon
     
    895942        IF (rneb(i,k).GT.0.0.and.zprec_cond(i).gt.0.) THEN
    896943           !AA lessivage nucleation LMD5 dans la couche elle-meme
    897            if (t(i,k) .GE. ztglace) THEN
     944          IF (iflag_t_glace.EQ.0) THEN
     945           if (t(i,k) .GE. t_glace_min_old) THEN
    898946              zalpha_tr = a_tr_sca(3)
    899947           else
    900948              zalpha_tr = a_tr_sca(4)
    901949           endif
     950          ELSE ! of IF (iflag_t_glace.EQ.0)
     951           if (t(i,k) .GE. t_glace_min) THEN
     952              zalpha_tr = a_tr_sca(3)
     953           else
     954              zalpha_tr = a_tr_sca(4)
     955           endif
     956          ENDIF
    902957           zfrac_lessi = 1. - EXP(zalpha_tr*zprec_cond(i)/zneb(i))
    903958           pfrac_nucl(i,k)=pfrac_nucl(i,k)*(1.-zneb(i)*zfrac_lessi)
     
    915970        DO i = 1, klon
    916971           IF (rneb(i,k).GT.0.0.and.zprec_cond(i).gt.0.) THEN
    917               if (t(i,kk) .GE. ztglace) THEN
     972             IF (iflag_t_glace.EQ.0) THEN
     973              if (t(i,kk) .GE. t_glace_min_old) THEN
    918974                 zalpha_tr = a_tr_sca(1)
    919975              else
    920976                 zalpha_tr = a_tr_sca(2)
    921977              endif
     978             ELSE ! of IF (iflag_t_glace.EQ.0)
     979              if (t(i,kk) .GE. t_glace_min) THEN
     980                 zalpha_tr = a_tr_sca(1)
     981              else
     982                 zalpha_tr = a_tr_sca(2)
     983              endif
     984             ENDIF
    922985              zfrac_lessi = 1. - EXP(zalpha_tr*zprec_cond(i)/zneb(i))
    923986              pfrac_impa(i,kk)=pfrac_impa(i,kk)*(1.-zneb(i)*zfrac_lessi)
  • LMDZ5/trunk/libf/phylmd/newmicro.F90

    r1992 r2006  
    1212    reffclwc, cldnvi, lcc3d, lcc3dcon, lcc3dstra
    1313  USE phys_state_var_mod, ONLY: rnebcon, clwcon
     14  USE microphys_mod ! cloud microphysics (JBM 3/14)
    1415  IMPLICIT NONE
    1516  ! ======================================================================
     
    106107  PARAMETER (seuil_neb=0.001)
    107108
    108   INTEGER nexpo ! exponentiel pour glace/eau
    109   PARAMETER (nexpo=6)
    110   ! PARAMETER (nexpo=1)
     109! JBM (3/14) nexpo is replaced by exposant_glace
     110! INTEGER nexpo ! exponentiel pour glace/eau
     111! PARAMETER (nexpo=6)
     112! PARAMETER (nexpo=1)
     113! if iflag_t_glace=0, the old values are used:
     114  REAL, PARAMETER :: t_glace_min_old = 258.
     115  REAL, PARAMETER :: t_glace_max_old = 273.13
    111116
    112117  REAL rel, tc, rei
     
    180185  reice_pi = 0.
    181186
    182   DO k = 1, klev
    183     DO i = 1, klon
    184       ! -layer calculation
    185       rhodz(i, k) = (paprs(i,k)-paprs(i,k+1))/rg ! kg/m2
    186       zrho(i, k) = pplay(i, k)/t(i, k)/rd ! kg/m3
    187       dh(i, k) = rhodz(i, k)/zrho(i, k) ! m
    188       ! -Fraction of ice in cloud using a linear transition
    189       zfice(i, k) = 1.0 - (t(i,k)-t_glace_min)/(t_glace_max-t_glace_min)
    190       zfice(i, k) = min(max(zfice(i,k),0.0), 1.0)
    191       ! -IM Total Liquid/Ice water content
    192       xflwc(i, k) = (1.-zfice(i,k))*pqlwp(i, k)
    193       xfiwc(i, k) = zfice(i, k)*pqlwp(i, k)
    194     END DO
    195   END DO
     187  IF (iflag_t_glace.EQ.0) THEN
     188    DO k = 1, klev
     189      DO i = 1, klon
     190        ! -layer calculation
     191        rhodz(i, k) = (paprs(i,k)-paprs(i,k+1))/rg ! kg/m2
     192        zrho(i, k) = pplay(i, k)/t(i, k)/rd ! kg/m3
     193        dh(i, k) = rhodz(i, k)/zrho(i, k) ! m
     194        ! -Fraction of ice in cloud using a linear transition
     195        zfice(i, k) = 1.0 - (t(i,k)-t_glace_min_old)/(t_glace_max_old-t_glace_min_old)
     196        zfice(i, k) = min(max(zfice(i,k),0.0), 1.0)
     197        ! -IM Total Liquid/Ice water content
     198        xflwc(i, k) = (1.-zfice(i,k))*pqlwp(i, k)
     199        xfiwc(i, k) = zfice(i, k)*pqlwp(i, k)
     200      END DO
     201    END DO
     202  ELSE ! of IF (iflag_t_glace.EQ.0)
     203    DO k = 1, klev
     204      DO i = 1, klon
     205        ! -layer calculation
     206        rhodz(i, k) = (paprs(i,k)-paprs(i,k+1))/rg ! kg/m2
     207        zrho(i, k) = pplay(i, k)/t(i, k)/rd ! kg/m3
     208        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)
     212        ! -IM Total Liquid/Ice water content
     213        xflwc(i, k) = (1.-zfice(i,k))*pqlwp(i, k)
     214        xfiwc(i, k) = zfice(i, k)*pqlwp(i, k)
     215      END DO
     216    END DO
     217  ENDIF
    196218
    197219  IF (ok_cdnc) THEN
  • LMDZ5/trunk/libf/phylmd/nuage.F90

    r1992 r2006  
    55    cldtaupi, re, fl)
    66  USE dimphy
     7  USE microphys_mod ! cloud microphysics (JBM 3/14)
    78  IMPLICIT NONE
    89  ! ======================================================================
     
    3435
    3536  include "YOMCST.h"
     37  include "nuage.h" ! JBM 3/14
    3638
    3739  ! ym#include "dimensions.h"
     
    5456  REAL zflwp, zradef, zfice, zmsac
    5557
    56   REAL radius, rad_froid, rad_chaud, rad_chau1, rad_chau2
    57   PARAMETER (rad_chau1=13.0, rad_chau2=9.0, rad_froid=35.0)
     58  REAL radius, rad_chaud
     59! JBM (3/14) parameters already defined in nuage.h:
     60! REAL rad_froid, rad_chau1, rad_chau2
     61! PARAMETER (rad_chau1=13.0, rad_chau2=9.0, rad_froid=35.0)
    5862  ! cc      PARAMETER (rad_chaud=15.0, rad_froid=35.0)
    5963  ! sintex initial      PARAMETER (rad_chaud=10.0, rad_froid=30.0)
    6064  REAL coef, coef_froi, coef_chau
    6165  PARAMETER (coef_chau=0.13, coef_froi=0.09)
    62   REAL seuil_neb, t_glace
    63   PARAMETER (seuil_neb=0.001, t_glace=273.0-15.0)
    64   INTEGER nexpo ! exponentiel pour glace/eau
    65   PARAMETER (nexpo=6)
     66  REAL seuil_neb
     67  PARAMETER (seuil_neb=0.001)
     68! JBM (3/14) nexpo is replaced by exposant_glace
     69! REAL nexpo ! exponentiel pour glace/eau
     70! PARAMETER (nexpo=6.)
     71  REAL, PARAMETER :: t_glace_min_old = 258.
     72  INTEGER, PARAMETER :: exposant_glace_old = 6
     73
    6674
    6775  ! jq for the aerosol indirect effect
     
    96104      pclc(i, k) = max(pclc(i,k), seuil_neb)
    97105      zflwp = 1000.*pqlwp(i, k)/rg/pclc(i, k)*(paprs(i,k)-paprs(i,k+1))
    98       zfice = 1.0 - (t(i,k)-t_glace)/(273.13-t_glace)
    99       zfice = min(max(zfice,0.0), 1.0)
    100       zfice = zfice**nexpo
     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
    101115
    102116      IF (ok_aie) THEN
  • LMDZ5/trunk/libf/phylmd/nuage.h

    r1907 r2006  
    33!
    44      REAL rad_froid, rad_chau1, rad_chau2, t_glace_max, t_glace_min
     5      REAL exposant_glace
    56      REAL rei_min,rei_max
    67
     8      INTEGER iflag_t_glace
     9
    710      common /nuagecom/ rad_froid,rad_chau1, rad_chau2,t_glace_max,     &
    8      &                  t_glace_min,rei_min,rei_max
     11     &                  t_glace_min,exposant_glace,rei_min,rei_max,     &
     12     &                  iflag_t_glace
    913!$OMP THREADPRIVATE(/nuagecom/)
  • LMDZ5/trunk/libf/phylmd/physiq.F90

    r2003 r2006  
    512512  EXTERNAL fisrtilp  ! schema de condensation a grande echelle (pluie)
    513513  !AA
    514   EXTERNAL fisrtilp_tr ! schema de condensation a grande echelle (pluie)
     514! JBM (3/14) fisrtilp_tr not loaded
     515! EXTERNAL fisrtilp_tr ! schema de condensation a grande echelle (pluie)
    515516  !                          ! stockage des coefficients necessaires au
    516517  !                          ! lessivage OFF-LINE et ON-LINE
Note: See TracChangeset for help on using the changeset viewer.