Changeset 4105


Ignore:
Timestamp:
Mar 6, 2026, 2:36:42 PM (6 weeks ago)
Author:
mlefevre
Message:

Addition of the polysulfur species photolysis in the Venus PCM. S3 cross-section is available at https://owncloud.latmos.ipsl.fr/index.php/s/m2MPta9derMQGfD. S4 cross-section is available at https://owncloud.latmos.ipsl.fr/index.php/s/EXT8ewCFEJWZHfS. S8 cross-section is available at https://owncloud.latmos.ipsl.fr/index.php/s/mDrnxtjSX7rEGi6. ML

Location:
trunk/LMDZ.VENUS/libf/phyvenus
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.VENUS/libf/phyvenus/photolysis_mod.F90

    r4080 r4105  
    55! photolysis
    66
    7   integer, save :: nphot = 29             ! number of photolysis
     7  integer, save :: nphot = 34             ! number of photolysis
    88
    99!$OMP THREADPRIVATE(nphot)
    1010
    11   integer, parameter :: nabs  = 26        ! number of absorbing gases
     11  integer, parameter :: nabs  = 30        ! number of absorbing gases
    1212
    1313! spectral grid
     
    6161  real, dimension(nw), save :: yieldn2                                ! n2 photodissociation yield
    6262  real, dimension(nw), save :: xshdo                                  ! hdo absorption cross-section (cm2)
     63  real, dimension(nw), save :: xsh2s                                  ! h2s absorption cross-section (cm2)
     64  real, dimension(nw), save :: xss3                                   ! s3 absorption cross-section (cm2)
     65  real, dimension(nw), save :: xss4                                   ! s4 absorption cross-section (cm2)
     66  real, dimension(nw), save :: xss8                                   ! s8 absorption cross-section (cm2) 
    6367  real, dimension(nw), save :: albedo                                 ! surface albedo
    6468
     
    185189
    186190  call rdxshdo(nw,wl,xshdo)
     191
     192! read and grid h2s cross-sections
     193
     194  call rdxsh2s(nw,wl,xsh2s) 
     195
     196! read and grid s3 cross-sections
     197
     198  call rdxss3(nw,wl,xss3)
     199
     200! read and grid s4 cross-sections
     201
     202  call rdxss4(nw,wl,xss4) 
     203
     204! read and grid s8 cross-sections
     205
     206  call rdxss8(nw,wl,xss8)   
    187207
    188208! set surface albedo
     
    36813701      end subroutine rdxsn2
    36823702
     3703      subroutine rdxsh2s(nw, wl, yg)
     3704
     3705!-----------------------------------------------------------------------------*
     3706!=  PURPOSE:                                                                 =*
     3707!=  Read H2S cross-sections                                                  =*
     3708!=  JPL 2020 recommendation                                                  =*
     3709!-----------------------------------------------------------------------------*
     3710!=  PARAMETERS:                                                              =*
     3711!=  NW     - INTEGER, number of specified intervals + 1 in working        (I)=*
     3712!=           wavelength grid                                                 =*
     3713!-----------------------------------------------------------------------------*
     3714
     3715      USE mod_phys_lmdz_para, ONLY: is_master
     3716      USE mod_phys_lmdz_transfert_para, ONLY: bcast
     3717
     3718      IMPLICIT NONE
     3719
     3720!     input
     3721
     3722      integer :: nw               ! number of wavelength grid points
     3723      real, dimension(nw) :: wl   ! lower wavelength for each interval
     3724
     3725!     output
     3726
     3727      real, dimension(nw) :: yg   ! H2S cross-sections (cm2)
     3728
     3729!     local
     3730
     3731      real, parameter :: deltax = 1.e-4
     3732      integer, parameter :: kdata = 100
     3733      real, dimension(kdata) :: x1, y1
     3734      integer :: i, n, ierr
     3735      character*100 fil
     3736      integer :: kin, kout ! input/output logical units
     3737
     3738      kin = 10
     3739
     3740!*** cross sections from JPL [2020]
     3741
     3742      fil = 'cross_sections/h2s_cross_sections_jpl2020.txt'
     3743      print*, 'section efficace H2S: ', fil
     3744
     3745      if(is_master) then
     3746
     3747         n = 36
     3748      OPEN(kin,FILE=fil,STATUS='OLD')
     3749      DO i = 1,4
     3750         READ(kin,*)
     3751      ENDDO   
     3752      DO i = 1,n
     3753        READ(kin,*) x1(i), y1(i)
     3754      ENDDO
     3755      CLOSE(kin)
     3756
     3757      CALL addpnt(x1,y1,kdata,n,x1(1)*(1.-deltax),0.)
     3758      CALL addpnt(x1,y1,kdata,n,          0.,0.)
     3759      CALL addpnt(x1,y1,kdata,n,x1(n)*(1.+deltax),0.)
     3760      CALL addpnt(x1,y1,kdata,n,        1E38,0.)
     3761
     3762      CALL inter2(nw,wl,yg,n,x1,y1,ierr)
     3763      !print*,'H2S cross sections',nw,yg
     3764 
     3765      IF (ierr .NE. 0) THEN
     3766        WRITE(*,*) ierr, fil
     3767        STOP
     3768      ENDIF
     3769
     3770      endif !is_master
     3771
     3772      call bcast(yg)
     3773 
     3774      end subroutine rdxsh2s
     3775     
     3776      subroutine rdxss3(nw, wl, yg)
     3777
     3778!-----------------------------------------------------------------------------*
     3779!=  PURPOSE:                                                                 =*
     3780!=  Read S3 cross-sections                                                   =*
     3781!=  Billmers and Smith(1991) J. Phys. Chem. ; MPI-Mainz UV/VIS Spectral Atlas=*
     3782!-----------------------------------------------------------------------------*
     3783!=  PARAMETERS:                                                              =*
     3784!=  NW     - INTEGER, number of specified intervals + 1 in working        (I)=*
     3785!=           wavelength grid                                                 =*
     3786!-----------------------------------------------------------------------------*
     3787
     3788      USE mod_phys_lmdz_para, ONLY: is_master
     3789      USE mod_phys_lmdz_transfert_para, ONLY: bcast
     3790
     3791      IMPLICIT NONE
     3792
     3793!     input
     3794
     3795      integer :: nw               ! number of wavelength grid points
     3796      real, dimension(nw) :: wl   ! lower wavelength for each interval
     3797
     3798!     output
     3799
     3800      real, dimension(nw) :: yg   ! S3 cross-sections (cm2)
     3801
     3802!     local
     3803
     3804      real, parameter :: deltax = 1.e-4
     3805      integer, parameter :: kdata = 1000
     3806      real, dimension(kdata) :: x1, y1
     3807      integer :: i, n, ierr
     3808      character*100 fil
     3809      integer :: kin, kout ! input/output logical units
     3810
     3811      kin = 10
     3812
     3813!*** Billmers and Smith(1991) J. Phys. Chem. ; MPI-Mainz UV/VIS Spectral Atlas
     3814
     3815      !fil = 'cross_sections/s3_cross_sections_Billmers1991.txt'
     3816      fil = 'cross_sections/s3_cross_sections_frandsen.txt'
     3817      print*, 'section efficace S3: ', fil
     3818
     3819      if(is_master) then
     3820
     3821         !n = 6
     3822         n = 983
     3823      OPEN(kin,FILE=fil,STATUS='OLD')
     3824      DO i = 1,4
     3825         READ(kin,*)
     3826      ENDDO   
     3827      DO i = 1,n
     3828        READ(kin,*) x1(i), y1(i)
     3829      ENDDO
     3830      CLOSE(kin)
     3831
     3832      CALL addpnt(x1,y1,kdata,n,x1(1)*(1.-deltax),0.)
     3833      CALL addpnt(x1,y1,kdata,n,          0.,0.)
     3834      CALL addpnt(x1,y1,kdata,n,x1(n)*(1.+deltax),0.)
     3835      CALL addpnt(x1,y1,kdata,n,        1E38,0.)
     3836
     3837      CALL inter2(nw,wl,yg,n,x1,y1,ierr)
     3838!      print*,'S3 cross sections',nw,yg
     3839 
     3840      IF (ierr .NE. 0) THEN
     3841        WRITE(*,*) ierr, fil
     3842        STOP
     3843      ENDIF
     3844
     3845      endif !is_master
     3846
     3847      call bcast(yg)
     3848 
     3849      end subroutine rdxss3
     3850     
     3851      subroutine rdxss4(nw, wl, yg)!1, yg2)
     3852
     3853!-----------------------------------------------------------------------------*
     3854!=  PURPOSE:                                                                 =*
     3855!=  Read S4 cross-sections                                                   =*
     3856!=  Billmers and Smith(1991) J. Phys. Chem. ; MPI-Mainz UV/VIS Spectral Atlas=*
     3857!-----------------------------------------------------------------------------*
     3858!=  PARAMETERS:                                                              =*
     3859!=  NW     - INTEGER, number of specified intervals + 1 in working        (I)=*
     3860!=           wavelength grid                                                 =*
     3861!-----------------------------------------------------------------------------*
     3862
     3863      USE mod_phys_lmdz_para, ONLY: is_master
     3864      USE mod_phys_lmdz_transfert_para, ONLY: bcast
     3865
     3866      IMPLICIT NONE
     3867
     3868!     input
     3869
     3870      integer :: nw               ! number of wavelength grid points
     3871      real, dimension(nw) :: wl   ! lower wavelength for each interval
     3872
     3873!     output
     3874
     3875      real, dimension(nw) :: yg,yg1,yg2   ! S4 cross-sections (cm2)
     3876
     3877!     local
     3878
     3879      real, parameter :: deltax = 1.e-4
     3880      integer, parameter :: kdata = 1000
     3881      real, dimension(kdata) :: x1, y1
     3882      integer :: i, n, ierr, iw
     3883      character*100 fil
     3884      integer :: kin, kout ! input/output logical units
     3885
     3886      kin = 10
     3887
     3888!*** Billmers and Smith(1991) J. Phys. Chem. ; MPI-Mainz UV/VIS Spectral Atlas
     3889
     3890      !fil = 'cross_sections/s4_cross_sections_Billmers1991.txt'
     3891      fil = 'cross_sections/s4_cross_sections_frandsen.txt'
     3892      print*, 'section efficace S4: ', fil
     3893
     3894      if(is_master) then
     3895
     3896         !n = 7
     3897         n = 945
     3898      OPEN(kin,FILE=fil,STATUS='OLD')
     3899      DO i = 1,4
     3900         READ(kin,*)
     3901      ENDDO   
     3902      DO i = 1,n
     3903        READ(kin,*) x1(i), y1(i)
     3904      ENDDO
     3905      CLOSE(kin)
     3906
     3907      CALL addpnt(x1,y1,kdata,n,x1(1)*(1.-deltax),0.)
     3908      CALL addpnt(x1,y1,kdata,n,          0.,0.)
     3909      CALL addpnt(x1,y1,kdata,n,x1(n)*(1.+deltax),0.)
     3910      CALL addpnt(x1,y1,kdata,n,        1E38,0.)
     3911
     3912      CALL inter2(nw,wl,yg,n,x1,y1,ierr)
     3913      print*,'S4 cross sections',wl
     3914!      print*,'S4 cross sections',yg
     3915 
     3916      IF (ierr .NE. 0) THEN
     3917        WRITE(*,*) ierr, fil
     3918        STOP
     3919      ENDIF
     3920
     3921!      DO iw = 1,nw
     3922!              if (wl(iw) <= 492.) then
     3923!                yg1(iw) = 1./3. * yg(iw) !S4 + hv -> S2 + S2
     3924!                yg2(iw) = 2./3. * yg(iw) !S4 + hv -> S3 + S
     3925!              else
     3926!                yg1(iw) = 1.*yg(iw)
     3927!                yg2(iw) = 0.
     3928!            end if
     3929!      enddo     
     3930
     3931!     print*,'yg',yg
     3932!     print*,'yg1',yg1
     3933!     print*,'yg2',yg2
     3934
     3935      endif !is_master
     3936
     3937      call bcast(yg)
     3938      !call bcast(yg1)
     3939      !call bcast(yg2)
     3940 
     3941      end subroutine rdxss4           
     3942
     3943      subroutine rdxss8(nw, wl, yg)
     3944
     3945!-----------------------------------------------------------------------------*
     3946!=  PURPOSE:                                                                 =*
     3947!=  Read S8 cross-sections                                                   =*
     3948!=  Meyer 1976 / Zahnle 2016                                                 =*
     3949!-----------------------------------------------------------------------------*
     3950!=  PARAMETERS:                                                              =*
     3951!=  NW     - INTEGER, number of specified intervals + 1 in working        (I)=*
     3952!=           wavelength grid                                                 =*
     3953!-----------------------------------------------------------------------------*
     3954
     3955      USE mod_phys_lmdz_para, ONLY: is_master
     3956      USE mod_phys_lmdz_transfert_para, ONLY: bcast
     3957
     3958      IMPLICIT NONE
     3959
     3960!     input
     3961
     3962      integer :: nw               ! number of wavelength grid points
     3963      real, dimension(nw) :: wl   ! lower wavelength for each interval
     3964
     3965!     output
     3966
     3967      real, dimension(nw) :: yg   ! S8 cross-sections (cm2)
     3968
     3969!     local
     3970
     3971      real, parameter :: deltax = 1.e-4
     3972      integer, parameter :: kdata = 1000
     3973      real, dimension(kdata) :: x1, y1
     3974      integer :: i, n, ierr
     3975      character*100 fil
     3976      integer :: kin, kout ! input/output logical units
     3977
     3978      kin = 10
     3979
     3980!*** Meyer 1976 / Zahnle 2016
     3981
     3982!      fil = 'cross_sections/s8_cross_sections_visible.txt'
     3983      fil = 'cross_sections/s8_cross_sections_frandsen.txt'
     3984      print*, 'section efficace S8: ', fil
     3985
     3986      if(is_master) then
     3987
     3988          !n = 14!
     3989          n = 380
     3990      OPEN(kin,FILE=fil,STATUS='OLD')
     3991      DO i = 1,4
     3992         READ(kin,*)
     3993      ENDDO
     3994      DO i = 1,n
     3995        READ(kin,*) x1(i), y1(i)
     3996      ENDDO
     3997      CLOSE(kin)
     3998
     3999      CALL addpnt(x1,y1,kdata,n,x1(1)*(1.-deltax),0.)
     4000      CALL addpnt(x1,y1,kdata,n,          0.,0.)
     4001      CALL addpnt(x1,y1,kdata,n,x1(n)*(1.+deltax),0.)
     4002      CALL addpnt(x1,y1,kdata,n,        1E38,0.)
     4003
     4004      CALL inter2(nw,wl,yg,n,x1,y1,ierr)
     4005      !yg(:) = yg(:)/100.
     4006!      print*,'S8 cross sections',nw,yg
     4007
     4008      IF (ierr .NE. 0) THEN
     4009        WRITE(*,*) ierr, fil
     4010        STOP
     4011      ENDIF
     4012
     4013      endif !is_master
     4014
     4015      call bcast(yg)
     4016
     4017      end subroutine rdxss8       
     4018
    36834019!==============================================================================
    36844020 
  • trunk/LMDZ.VENUS/libf/phyvenus/photolysis_online.F

    r3755 r4105  
    88     $           i_osso_cis, i_osso_trans, i_s2o2_cyc, i_clso2,
    99     $           i_cl2so2, i_ocs, i_cocl2, i_h2so4,
    10      $           i_no2, i_no, i_n2, i_n2d,
     10     $           i_no2, i_no, i_n2, i_n2d, i_h2s, i_hs,
     11     $           i_s3, i_s4, i_s8,
    1112     &           nesp, rm, sza, dist_sol, v_phot)
    1213
     
    2627     $                       i_s2o2_cyc,
    2728     $                       i_clso2, i_cl2so2, i_ocs, i_cocl2, i_h2so4,
    28      $                       i_no2, i_no, i_n2, i_n2d
     29     $                       i_no2, i_no, i_n2, i_n2d, i_h2s, i_hs,
     30     $                       i_s3, i_s4, i_s8
    2931
    3032      real, dimension(nlayer), intent(in) :: press, temp, mmean      ! pressure (hpa)/temperature (k)/mean molecular mass (g.mol-1)
     
    7375     $           j_so2, j_so, j_so3, j_s2, j_osso_cis, j_osso_trans,
    7476     $           j_s2o2_cyc, j_clso2, j_cl2so2, j_ocs, j_cocl2, j_h2so4,
    75      $           j_no2, j_no, j_n2, j_h2
     77     $           j_no2, j_no, j_n2, j_h2, j_h2s, j_s3, j_s4_s2, j_s4_s3,
     78     $           j_s8
    7679
    7780      integer :: a_o2, a_co2, a_o3, a_h2o, a_h2o2, a_ho2, a_hcl, a_cl2,
    7881     $           a_hocl, a_clo, a_so2, a_so, a_so3, a_s2, a_osso_cis,
    7982     $           a_osso_trans, a_s2o2_cyc, a_clso2, a_cl2so2, a_ocs,
    80      $           a_cocl2, a_h2so4, a_no2, a_no, a_n2, a_h2
     83     $           a_cocl2, a_h2so4, a_no2, a_no, a_n2, a_h2, a_h2s, a_s3,
     84     $           a_s4, a_s8
    8185
    8286      integer :: nlev, i, ilay, ilev, iw, ialt
     
    112116      a_no         = 25     ! no
    113117      a_n2         = 26     ! n2
     118      a_h2s        = 27     ! h2s
     119      a_s3         = 28     ! s3
     120      a_s4         = 29     ! s4
     121      a_s8         = 30     ! s8     
    114122
    115123!     photodissociation rates numbering.
     
    145153      j_no         = 28     ! no + hv         -> n + o
    146154      j_n2         = 29     ! n2 + hv         -> n(2d) + n
     155      j_h2s        = 30     ! h2s + hv    -> hs + h
     156      j_s3         = 31     ! s3 + hv     -> s2 + s
     157      j_s4_s2      = 32     ! s4 + hv     -> s2 + s2
     158      j_s4_s3      = 33     ! s4 + hv     -> s3 + s
     159      j_s8         = 34     ! s8 + hv     -> s4 + s4     
    147160
    148161!     j_hdo_od  =           ! hdo + hv        -> od + h
     
    251264            dtgas(ilay,iw,a_no) = colinc(ilay)*rm(ilay,i_no)*xsno(iw)
    252265            dtgas(ilay,iw,a_n2) = colinc(ilay)*rm(ilay,i_n2)*xsn2(iw)
     266            dtgas(ilay,iw,a_h2s) = colinc(ilay)*rm(ilay,i_h2s)*xsh2s(iw)
     267            dtgas(ilay,iw,a_s3) = colinc(ilay)*rm(ilay,i_s3)*xss3(iw)
     268            dtgas(ilay,iw,a_s4) = colinc(ilay)*rm(ilay,i_s4)*xss4(iw)
     269            dtgas(ilay,iw,a_s8) = colinc(ilay)*rm(ilay,i_s8)*xss8(iw)           
    253270         end do
    254271      end do
     
    289306            sj(ilay,iw,j_no)  = xsno(iw)*yieldno(iw)     ! no
    290307            sj(ilay,iw,j_n2)  = xsn2(iw)*yieldn2(iw)     ! n2
     308            sj(ilay,iw,j_h2s)  = xsh2s(iw)               ! h2s
     309            sj(ilay,iw,j_s3)  = xss3(iw)                 ! s3
     310            sj(ilay,iw,j_s4) =  xss4(iw)                 ! s4
     311            sj(ilay,iw,j_s8)  = xss8(iw)                 ! s8           
    291312         end do
    292313      end do
Note: See TracChangeset for help on using the changeset viewer.