Changeset 5019 for LMDZ6/branches/cirrus


Ignore:
Timestamp:
Jul 5, 2024, 10:54:38 AM (2 months ago)
Author:
aborella
Message:

Modification et simplification du calcul de gammasat, modification du role de temp_nowater

Location:
LMDZ6/branches/cirrus/libf/phylmd
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/cirrus/libf/phylmd/lmdz_lscp_ini.F90

    r4951 r5019  
    4040  !$OMP THREADPRIVATE(ztfondue)
    4141
    42   REAL, SAVE, PROTECTED :: temp_nowater=233.15  ! temperature below which liquid water no longer exists
     42  REAL, SAVE, PROTECTED :: temp_nowater=235.15  ! temperature below which liquid water no longer exists
    4343  !$OMP THREADPRIVATE(temp_nowater)
    4444
     
    363363    CALL getin_p('tresh_cl',tresh_cl)
    364364    CALL getin_p('iflag_oldbug_fisrtilp',iflag_oldbug_fisrtilp)
     365    CALL getin_p('temp_nowater',temp_nowater)
    365366    ! for poprecip
    366367    CALL getin_p('ok_poprecip',ok_poprecip)
     
    441442    WRITE(lunout,*) 'lscp_ini, iflag_oldbug_fisrtilp', iflag_oldbug_fisrtilp
    442443    WRITE(lunout,*) 'lscp_ini, fl_cor_ebil', fl_cor_ebil
     444    WRITE(lunout,*) 'lscp_ini, temp_nowater', temp_nowater
    443445    ! for poprecip
    444446    WRITE(lunout,*) 'lscp_ini, ok_poprecip', ok_poprecip
  • LMDZ6/branches/cirrus/libf/phylmd/lmdz_lscp_tools.F90

    r4951 r5019  
    334334        CALL CALC_QSAT_ECMWF(klon,temp,qtot,pressure,RTT,2,.false.,qsi,dqsi)
    335335
    336     DO i=1,klon
    337 
    338         IF (temp(i) .GE. RTT) THEN
     336    DO i = 1, klon
     337
     338        IF ( temp(i) .GE. RTT ) THEN
    339339            ! warm clouds: condensation at saturation wrt liquid
    340             gammasat(i)=1.
    341             dgammasatdt(i)=0.
    342 
    343         ELSEIF ((temp(i) .LT. RTT) .AND. (temp(i) .GT. temp_nowater)) THEN
     340            gammasat(i) = 1.
     341            dgammasatdt(i) = 0.
     342
     343        ELSE
     344            ! cold clouds: qsi > qsl
    344345           
    345             IF (iflag_gammasat .GE. 2) THEN         
    346                gammasat(i)=qsl(i)/qsi(i)
    347                dgammasatdt(i)=(dqsl(i)*qsi(i)-dqsi(i)*qsl(i))/qsi(i)/qsi(i)
     346            ! homogeneous freezing of aerosols, according to
     347            ! Koop, 2000 and Ren and MacKenzie, 2005 (QJRMS)
     348            ! 'Cirrus regime'
     349            ! if f_homofreez > qsl / qsi, liquid nucleation
     350            ! if f_homofreez < qsl / qsi, homogeneous freezing of aerosols
     351            ! Note: f_homofreez = qsl / qsi for temp ~= -38degC
     352            f_homofreez = a_homofreez - temp(i) / b_homofreez
     353           
     354            IF ( iflag_gammasat .GE. 3 ) THEN
     355              ! condensation at homogeneous freezing threshold for temp < -38 degC
     356              ! condensation at liquid saturation for temp > -38 degC
     357              IF ( f_homofreez .LE. qsl(i) / qsi(i) ) THEN
     358                gammasat(i) = f_homofreez
     359                dgammasatdt(i) = - 1. / b_homofreez
     360              ELSE
     361                gammasat(i) = qsl(i) / qsi(i)
     362                dgammasatdt(i) = ( dqsl(i) * qsi(i) - dqsi(i) * qsl(i) ) / qsi(i) / qsi(i)
     363              ENDIF
     364
     365            ELSEIF ( iflag_gammasat .EQ. 2 ) THEN
     366              ! condensation at homogeneous freezing threshold for temp < -38 degC
     367              ! condensation at a threshold linearly decreasing between homogeneous
     368              ! freezing and ice saturation for -38 degC < temp < temp_nowater
     369              ! condensation at ice saturation for temp > temp_nowater
     370              ! If temp_nowater = 235.15 K, this is equivalent to iflag_gammasat = 1
     371              IF ( f_homofreez .LE. qsl(i) / qsi(i) ) THEN
     372                gammasat(i) = f_homofreez
     373                dgammasatdt(i) = - 1. / b_homofreez
     374              ELSEIF ( temp(i) .LE. temp_nowater ) THEN
     375                ! Here, we assume that f_homofreez = qsl / qsi for temp = -38 degC = 235.15 K
     376                dgammasatdt(i) = ( a_homofreez - 235.15 / b_homofreez - 1. ) &
     377                               / ( 235.15 - temp_nowater )
     378                gammasat(i) = dgammasatdt(i) * ( temp(i) - temp_nowater ) + 1.
     379              ELSE
     380                gammasat(i) = 1.
     381                dgammasatdt(i) = 0.
     382              ENDIF
     383
     384            ELSEIF ( iflag_gammasat .EQ. 1 ) THEN
     385              ! condensation at homogeneous freezing threshold for temp < -38 degC
     386              ! condensation at ice saturation for temp > -38 degC
     387              IF ( f_homofreez .LE. qsl(i) / qsi(i) ) THEN
     388                gammasat(i) = f_homofreez
     389                dgammasatdt(i) = - 1. / b_homofreez
     390              ELSE
     391                gammasat(i) = 1.
     392                dgammasatdt(i) = 0.
     393              ENDIF
     394
    348395            ELSE
    349                gammasat(i)=1.
    350                dgammasatdt(i)=0.
     396              ! condensation at ice saturation for temp < -38 degC
     397              ! condensation at ice saturation for temp > -38 degC
     398              gammasat(i) = 1.
     399              dgammasatdt(i) = 0.
     400
    351401            ENDIF
    352402
    353         ELSE
    354 
    355             IF (iflag_gammasat .GE.1) THEN
    356                ! homogeneous freezing of aerosols, according to
    357                ! Koop, 2000 and Ren and MacKenzie, 2005 (QJRMS)
    358                ! 'Cirrus regime'
    359                f_homofreez=a_homofreez-temp(i)/b_homofreez
    360                IF (f_homofreez .GT. qsl(i)/qsi(i)) THEN
    361                   gammasat(i)=qsl(i)/qsi(i)
    362                   dgammasatdt(i)=(dqsl(i)*qsi(i)-dqsi(i)*qsl(i))/qsi(i)/qsi(i)
    363                ELSE
    364                   gammasat(i)= (1.-delta_hetfreez) + delta_hetfreez * f_homofreez
    365                   dgammasatdt(i)=-delta_hetfreez/b_homofreez
    366                ENDIF
    367            
    368             ELSE
    369 
    370                gammasat(i)=1.
    371                dgammasatdt(i)=0.
    372 
    373             ENDIF
     403            ! Note that the delta_hetfreez parameter allows to linearly decrease the
     404            ! condensation threshold between the calculated threshold and the ice saturation
     405            ! for delta_hetfreez = 1, the threshold is the calculated condensation threshold
     406            ! for delta_hetfreez = 0, the threshold is the ice saturation
     407            gammasat(i) = ( 1. - delta_hetfreez ) + delta_hetfreez * gammasat(i)
     408            dgammasatdt(i) = delta_hetfreez * dgammasatdt(i)
    374409
    375410        ENDIF
Note: See TracChangeset for help on using the changeset viewer.