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

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

File:
1 edited

Legend:

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