Changeset 4205 for trunk/LMDZ.VENUS


Ignore:
Timestamp:
Apr 29, 2026, 4:03:35 PM (9 days ago)
Author:
mlefevre
Message:

Venus PCM. Update of the polysulfur condensation scheme. ML

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.VENUS/libf/phyvenus/cloudvenus/polysulfur_condens.F

    r4108 r4205  
    2020!----------------------------------------------------------------------------
    2121      real :: rat
     22      ! Saturation vapor pressure of Sx (Pa)
    2223      real :: psats2,psats3,psats4,psats8
     24      ! Saturation vapor pressure of Sx (Pa) from Lyons et al., 2008
    2325      real :: psats2l,psats3l,psats4l,psats8l
     26      ! Saturation vapor pressure of Sx (Pa) from Zahnle et al., 2016
    2427      real :: psats2z,psats3z,psats4z,psats8z
     28      ! VMR equivalent of P_sat of Sx
    2529      real :: qsats2,qsats3,qsats4,qsats8
    26       real :: mms2,mms3,mms4,mms8
    27       real*8, dimension(nblon,nblev) :: s2t,s3t,s4t,s8t
    28       real*8 :: epss2,epss3,epss4,epss8
     30      ! Ratios of Sx molec mass over Venus atm mean molec mass
     31      real, parameter :: epss2 = 64.13/43.44
     32      real, parameter :: epss3 = 96.198/43.44
     33      real, parameter :: epss4 = 128.26/43.44
     34      real, parameter :: epss8 = 256.52/43.44
     35      ! Local total VMR of Sx
     36      real, dimension(nblon,nblev) :: s2t,s3t,s4t,s8t
    2937
    3038! >>> Program starts here:
    3139
    32       mms2 = 64.13 ! S2 molecular mass
    33       mms3 = 96.198 ! S3 molecular mass
    34       mms4 = 128.26 ! S4 molecular mass
    35       mms8 = 256.52 ! S8 molecular mass
    36       epss2 = mms2/43.44
    37       epss3 = mms3/43.44
    38       epss4 = mms4/43.44
    39       epss8 = mms8/43.44
    40        
     40      ! Init of total Sx
    4141      s2t(:,:) = s2(:,:) + s2con(:,:)
    4242      s3t(:,:) = s3(:,:) + s3con(:,:)
    4343      s4t(:,:) = s4(:,:) + s4con(:,:)
    4444      s8t(:,:) = s8(:,:) + s8con(:,:)
    45       s2con(:,:) = 0.0
    46       s3con(:,:) = 0.0
    47       s4con(:,:) = 0.0
    48       s8con(:,:) = 0.0
     45      ! Condensed parts then set up to minimal value
     46      s2con(:,:) = 1e-30
     47      s3con(:,:) = 1e-30
     48      s4con(:,:) = 1e-30
     49      s8con(:,:) = 1e-30
     50      ! Gas part set up to total
     51      s2(:,:) = s2t(:,:)
     52      s3(:,:) = s3t(:,:)
     53      s4(:,:) = s4t(:,:)
     54      s8(:,:) = s8t(:,:)
    4955
    50       DO i = 1,nblon
     56
     57      ! Loop all over Venus
    5158      DO k = 1,nblev
    52         !Lyons 2008 ; Rimmer 2021
    53         psats2l = 1e5*10**(7.0240 - 6091.2/(TT(i,k))) ! S2
    54         psats3l = 1e5*10**(6.3428 - 6202.2/(TT(i,k))) ! S3
    55         psats4l = 1e5*10**(6.0028 - 6047.5/(TT(i,k))) ! S4
    56         psats8l = 1e5*10**(4.1879 - 3269.1/(TT(i,k))) ! S8
    57         !Zahnle 2016
    58         if (TT(i,k).gt.413) then
    59                 psats2z = 1e5*exp (16.1 - 14000/TT(i,k) )
    60                 psats8z = 1e5*exp (9.6 - 7510/TT(i,k) )
    61         else
    62                 psats2z = 1e5*exp (27. - 18500/TT(i,k) )
    63                 psats8z = 1e5*exp (20. - 11800/TT(i,k) )
    64         endif
    65         psats2 = psats2z
    66         psats8 = psats8z       
    67         rat = (psats2z/psats2l + psats8z/psats8l)/2.
    68         psats3 = rat*psats3l
    69         psats4 = rat*psats4l
     59        DO i = 1,nblon
     60          !Lyons 2008 ; Rimmer 2021
     61          psats2l = 1e5*10**(7.0240 - 6091.2/(TT(i,k))) ! S2
     62          psats3l = 1e5*10**(6.3428 - 6202.2/(TT(i,k))) ! S3
     63          psats4l = 1e5*10**(6.0028 - 6047.5/(TT(i,k))) ! S4
     64          psats8l = 1e5*10**(4.1879 - 3269.1/(TT(i,k))) ! S8
     65          !Zahnle 2016
     66          if (TT(i,k).gt.413.) then
     67            psats2z = 1e5*exp(16.1 - 14000./TT(i,k))
     68            psats8z = 1e5*exp(9.6 - 7510./TT(i,k))
     69          else
     70            psats2z = 1e5*exp(27. - 18500./TT(i,k))
     71            psats8z = 1e5*exp(20. - 11800./TT(i,k))
     72          endif
     73          psats2 = psats2z
     74          psats8 = psats8z
     75          !Zahnle 2016 does not have S3, S4.
     76          !Using the average of the ratio between the two sets
     77          rat = (psats2z/psats2l + psats8z/psats8l)/2.
     78          psats3 = rat*psats3l
     79          psats4 = rat*psats4l
    7080
    71         qsats2 = epss2*psats2/(PP(i,k) - psats2)   
    72         qsats3 = epss3*psats3/(PP(i,k) - psats3)
    73         qsats4 = epss4*psats4/(PP(i,k) - psats4)
    74         qsats8 = epss8*psats8/(PP(i,k) - psats8)
     81          ! Check the atm P condition to Psat S2
     82          ! If condition is met, condensation
     83          ! Otherwise  Sx_gas and Sx_cond stays as initialized         
     84          if (PP(i,k).gt.psats2) then
     85            qsats2 = psats2/(PP(i,k))
     86            if (s2t(i,k).gt.qsats2) then
     87              s2con(i,k) = s2t(i,k) - qsats2
     88              s2(i,k) = qsats2
     89            endif
     90          endif
    7591
    76         if (s2t(i,k).gt.qsats2) then
    77           s2con(i,k) = s2t(i,k) - qsats2
    78           s2(i,k) = qsats2
    79         endif
    80         if (s3t(i,k).gt.qsats3) then
    81           s3con(i,k) = s3t(i,k) - qsats3
    82           s3(i,k) = qsats3
    83         endif
    84         if (s4t(i,k).gt.qsats4) then
    85           s4con(i,k) = s4t(i,k) - qsats4
    86           s4(i,k) = qsats4
    87         endif 
    88         if (s8t(i,k).gt.qsats8) then
    89           s8con(i,k) = s8t(i,k) - qsats8
    90           s8(i,k) = qsats8
    91         endif                   
    92        
    93       ENDDO
     92          ! Check the atm P condition to Psat S3
     93          ! If condition is met, condensation
     94          ! Otherwise  Sx_gas and Sx_cond stays as initialized         
     95          if (PP(i,k).gt.psats3) then
     96            qsats3 = psats3/(PP(i,k))
     97            if (s3t(i,k).gt.qsats3) then
     98              s3con(i,k) = s3t(i,k) - qsats3
     99              s3(i,k) = qsats3
     100            endif
     101          endif
     102
     103          ! Check the atm P condition to Psat S4
     104          ! If condition is met, condensation
     105          ! Otherwise  Sx_gas and Sx_cond stays as initialized         
     106          if (PP(i,k).gt.psats4) then
     107            qsats4 = psats4/(PP(i,k))
     108            if (s4t(i,k).gt.qsats4) then
     109              s4con(i,k) =s4t(i,k) - qsats4
     110              s4(i,k) = qsats4
     111            endif
     112          endif
     113
     114          ! Check the atm P condition to Psat S8
     115          ! If condition is met, condensation
     116          ! Otherwise  Sx_gas and Sx_cond stays as initialized         
     117          if (PP(i,k).gt.psats8) then
     118            qsats8 = psats8/(PP(i,k))
     119            if (s8t(i,k).gt.qsats8) then
     120              s8con(i,k) = s8t(i,k) - qsats8
     121              s8(i,k) = qsats8
     122            endif
     123          endif
     124        ENDDO
    94125      ENDDO
    95126
Note: See TracChangeset for help on using the changeset viewer.