Index: /trunk/LMDZ.VENUS/libf/phyvenus/photochemistry_venus.F90
===================================================================
--- /trunk/LMDZ.VENUS/libf/phyvenus/photochemistry_venus.F90	(revision 4175)
+++ /trunk/LMDZ.VENUS/libf/phyvenus/photochemistry_venus.F90	(revision 4176)
@@ -676,4 +676,12 @@
 
 indice_phot(nb_phot) = z3spec(1.0, i_cocl2, 2.0, i_cl, 1.0, i_co)
+
+!===========================================================
+!      H2SO4 + hv -> HSO3 + OH
+!===========================================================
+
+nb_phot = nb_phot + 1
+
+indice_phot(nb_phot) = z3spec(1.0, i_h2so4, 1.0, i_hso3, 1.0, i_oh)
 
 !===========================================================
Index: /trunk/LMDZ.VENUS/libf/phyvenus/photolysis_mod.F90
===================================================================
--- /trunk/LMDZ.VENUS/libf/phyvenus/photolysis_mod.F90	(revision 4175)
+++ /trunk/LMDZ.VENUS/libf/phyvenus/photolysis_mod.F90	(revision 4176)
@@ -5,5 +5,5 @@
 ! photolysis
 
-  integer, save :: nphot = 33             ! number of photolysis 
+  integer, save :: nphot = 34             ! number of photolysis 
 
 !$OMP THREADPRIVATE(nphot)
@@ -13,5 +13,5 @@
 ! spectral grid
 
-  integer, parameter :: nw = 194          ! number of spectral intervals (low-res)
+  integer, parameter :: nw = 208          ! number of spectral intervals (if mopt = 3)
   integer, save :: mopt                   ! high-res/low-res switch
 
@@ -51,5 +51,6 @@
   real, dimension(nw), save :: xsocs                                  ! cos absorption cross-section (cm2)
   real, dimension(nw), save :: xscocl2                                ! cocl2 absorption cross-section (cm2)
-  real, dimension(nw), save :: xsh2so4                                ! h2so4 absorption cross-section (cm2)
+  real, dimension(nw), save :: xsh2so4_hso3                           ! h2so4 absorption cross-section (cm2), hso3 + oh channel
+  real, dimension(nw), save :: xsh2so4_so3                            ! h2so4 absorption cross-section (cm2), so3 + h2o channel
   real, dimension(nw), save :: xsh2                                   ! h2 absorption cross-section (cm2)
   real, dimension(nw), save :: yieldh2                                ! h2 photodissociation yield
@@ -168,5 +169,5 @@
 ! read and grid h2so4 cross-sections
 
-  call rdxsh2so4(nw,wl,xsh2so4)
+  call rdxsh2so4(nw,wl,xsh2so4_hso3,xsh2so4_so3)
 
 ! read and grid h2 cross-sections
@@ -245,5 +246,5 @@
 !                 365-850 nm :  5.0  nm  
 !
-!     mopt = 2    low-resolution mode (162)
+!     mopt = 2    low-resolution mode (162 intervals)
 !
 !                    0-60 nm :  6.0 nm
@@ -260,6 +261,7 @@
 !                 415-815 nm : 50.0 nm
 !
-!     mopt = 3    venusian low-resolution mode (194)
-!                 (205-245 nm -> 1nm of resolution)
+!     mopt = 3   venusian low-resolution mode (208 intervals)
+!                205-245 nm -> 1nm of resolution,
+!                optimised for H2SO4 overtones
 !
 !                    0-60 nm :  6.0 nm
@@ -274,5 +276,10 @@
 !                 205-245 nm :  1.0 nm
 !                 245-415 nm : 10.0 nm
-!                 415-815 nm : 50.0 nm
+!                 415-565 nm : 50.0 nm
+!                 565-604 nm : 39.0 nm
+!                 604-608 nm :  1.0 nm
+!                 608-736 nm : 32.0 nm
+!                 736-745 nm :  1.0 nm
+!                 745-815 nm : 35.0 nm
 
       if (mopt == 1) then   ! high-res
@@ -562,5 +569,5 @@
       ENDDO
 
-! define wavelength intervals of width 5.0 nm from 205 to 245 nm:
+! define wavelength intervals of width 1.0 nm from 205 to 245 nm:
 
       wincr = 1
@@ -582,8 +589,58 @@
       ENDDO
 
-! define wavelength intervals of width 50.0 nm from 415 to 815 nm:
+! define wavelength intervals of width 50.0 nm from 415 to 565 nm:
 
       wincr = 50.0
-      DO iw = 415, 815, 50
+      DO iw = 415, 515, 50
+        kw = kw + 1
+        wl(kw) = real(iw)
+        wu(kw) = wl(kw) + wincr
+        wc(kw) = (wl(kw) + wu(kw))/2.
+      ENDDO
+
+! define wavelength intervals of width 39.0 nm from 565 to 604 nm:
+
+      wincr = 39.0
+      DO iw = 565, 565, 39
+        kw = kw + 1
+        wl(kw) = real(iw)
+        wu(kw) = wl(kw) + wincr
+        wc(kw) = (wl(kw) + wu(kw))/2.
+      ENDDO
+
+! define wavelength intervals of width 1.0 nm from 604 to 608 nm:
+
+      wincr = 1.0
+      DO iw = 604, 607, 1
+        kw = kw + 1
+        wl(kw) = real(iw)
+        wu(kw) = wl(kw) + wincr
+        wc(kw) = (wl(kw) + wu(kw))/2.
+      ENDDO
+
+! define wavelength intervals of width 32.0 nm from 608 to 736 nm:
+
+      wincr = 32.0
+      DO iw = 608, 704, 32
+        kw = kw + 1
+        wl(kw) = real(iw)
+        wu(kw) = wl(kw) + wincr
+        wc(kw) = (wl(kw) + wu(kw))/2.
+      ENDDO
+
+! define wavelength intervals of width 1.0 nm from 736 to 745 nm:
+
+      wincr = 1.0
+      DO iw = 736, 744, 1
+        kw = kw + 1
+        wl(kw) = real(iw)
+        wu(kw) = wl(kw) + wincr
+        wc(kw) = (wl(kw) + wu(kw))/2.
+      ENDDO
+
+! define wavelength intervals of width 35.0 nm from 745 to 815 nm:
+
+      wincr = 35.0
+      DO iw = 745, 780, 35
         kw = kw + 1
         wl(kw) = real(iw)
@@ -3127,10 +3184,10 @@
 !==============================================================================
 
-      subroutine rdxsh2so4(nw, wl, yg)
+      subroutine rdxsh2so4(nw, wl, xsh2so4_hso3, xsh2so4_so3)
 
 !-----------------------------------------------------------------------------*
 !=  PURPOSE:                                                                 =*
-!=  Read H2SO4 cross-sections                                                  =*
-!=  JPL 2006 recommendation                                                  =*
+!=  Read H2SO4 cross-sections                                                =*
+!=  Frandsen et al., personal communication, 2026                            =*
 !-----------------------------------------------------------------------------*
 !=  PARAMETERS:                                                              =*
@@ -3142,5 +3199,5 @@
       USE mod_phys_lmdz_transfert_para, ONLY: bcast
 
-      IMPLICIT NONE
+      implicit none
 
 !     input
@@ -3151,11 +3208,13 @@
 !     output
 
-      real, dimension(nw) :: yg   ! h2so4 cross-sections (cm2)
+      real, dimension(nw) :: xsh2so4_hso3   ! h2so4 -> hso3 + oh cross-sections (cm2)
+      real, dimension(nw) :: xsh2so4_so3    ! h2so4 -> so3 + h2o cross-sections (cm2)
 
 !     local
 
       real, parameter :: deltax = 1.e-4
-      integer, parameter :: kdata = 100
+      integer, parameter :: kdata = 10000
       real, dimension(kdata) :: x1, y1
+      real, dimension(nw) :: yg
       integer :: i, n, ierr
       character*100 fil
@@ -3164,14 +3223,14 @@
       kin = 10
 
-!*** cross sections from JPL [2006]
-
-      fil = 'cross_sections/h2so4_cross_sections.txt'
+!*** cross sections
+
+      fil = 'cross_sections/h2so4_hdso4_frandsen_2026.txt'
       print*, 'section efficace h2so4: ', fil
 
-      if(is_master) then
-
-         n = 22
+      if (is_master) then
+
+      n = 9602
       OPEN(kin,FILE=fil,STATUS='OLD')
-      DO i = 1,3
+      DO i = 1,5
          READ(kin,*)
       ENDDO   
@@ -3187,5 +3246,5 @@
 
       CALL inter2(nw,wl,yg,n,x1,y1,ierr)
-  
+      
       IF (ierr .NE. 0) THEN
         WRITE(*,*) ierr, fil
@@ -3193,7 +3252,18 @@
       ENDIF
 
-      endif !is_master
-
-      call bcast(yg)
+      do i = 1, nw - 1
+         if (wl(i) < 200.) then
+            xsh2so4_hso3(i) = yg(i)
+            xsh2so4_so3(i)  = 0.
+         else
+            xsh2so4_hso3(i) = 0.
+            xsh2so4_so3(i)  = yg(i)
+         end if
+      end do
+
+      end if !is_master
+
+      call bcast(xsh2so4_hso3)
+      call bcast(xsh2so4_so3)
  
       end subroutine rdxsh2so4
Index: /trunk/LMDZ.VENUS/libf/phyvenus/photolysis_online.F
===================================================================
--- /trunk/LMDZ.VENUS/libf/phyvenus/photolysis_online.F	(revision 4175)
+++ /trunk/LMDZ.VENUS/libf/phyvenus/photolysis_online.F	(revision 4176)
@@ -74,6 +74,6 @@
      $           j_hocl, j_clo, j_so2, j_so, j_so3, j_s2, j_osso_cis, 
      $           j_osso_trans, j_s2o2_cyc, j_clso2, j_cl2so2, j_ocs, 
-     $           j_cocl2, j_h2so4, j_no2, j_no, j_n2, j_h2, j_h2s, 
-     $           j_s3, j_s4, j_s8
+     $           j_cocl2, j_h2so4_hso3, j_h2so4_so3, j_no2, j_no, j_n2, 
+     $           j_h2, j_h2s, j_s3, j_s4, j_s8
 
       integer :: a_o2, a_co2, a_o3, a_h2o, a_h2o2, a_ho2, a_hcl, a_cl2,
@@ -148,12 +148,13 @@
       j_ocs        = 24     ! ocs + hv        -> co + s
       j_cocl2      = 25     ! cocl2 + hv      -> 2cl + co 
-      j_h2so4      = 26     ! h2so4 + hv      -> so3 + h2o
-      j_no2        = 27     ! no2 + hv        -> no + o
-      j_no         = 28     ! no + hv         -> n + o
-      j_n2         = 29     ! n2 + hv         -> n(2d) + n
-      j_h2s        = 30     ! h2s + hv        -> hs + h
-      j_s3         = 31     ! s3 + hv         -> s2 + s
-      j_s4         = 32     ! s4 + hv         -> s2 + s2
-      j_s8         = 33     ! s8 + hv         -> s4 + s4      
+      j_h2so4_hso3 = 26     ! h2so4 + hv      -> hso3 + oh
+      j_h2so4_so3  = 27     ! h2so4 + hv      -> so3 + h2o
+      j_no2        = 28     ! no2 + hv        -> no + o
+      j_no         = 29     ! no + hv         -> n + o
+      j_n2         = 30     ! n2 + hv         -> n(2d) + n
+      j_h2s        = 31     ! h2s + hv        -> hs + h
+      j_s3         = 32     ! s3 + hv         -> s2 + s
+      j_s4         = 33     ! s4 + hv         -> s2 + s2
+      j_s8         = 34     ! s8 + hv         -> s4 + s4      
 
 !     j_hdo_od  =           ! hdo + hv        -> od + h
@@ -254,5 +255,5 @@
      $                               *xscocl2(iw)
             dtgas(ilay,iw,a_h2so4) = colinc(ilay)*rm(ilay,i_h2so4)
-     $                               *xsh2so4(iw)
+     $                               *xsh2so4_hso3(iw)
             dtgas(ilay,iw,a_no) = colinc(ilay)*rm(ilay,i_no)*xsno(iw)
             dtgas(ilay,iw,a_n2) = colinc(ilay)*rm(ilay,i_n2)*xsn2(iw)
@@ -263,4 +264,5 @@
             
             ! cross-sections (merged loops for extra cache locality)
+
             sj(ilay,iw,j_h2) = xsh2(iw)                  ! h2
             sj(ilay,iw,j_h2o) = xsh2o(iw)                ! h2o
@@ -279,5 +281,6 @@
             sj(ilay,iw,j_ocs) = xsocs(iw)                ! ocs
             sj(ilay,iw,j_cocl2) = xscocl2(iw)            ! cocl2
-            sj(ilay,iw,j_h2so4) = xsh2so4(iw)            ! h2so4
+            sj(ilay,iw,j_h2so4_hso3) = xsh2so4_hso3(iw)  ! h2so4, hso3 + oh channel
+            sj(ilay,iw,j_h2so4_so3) = xsh2so4_so3(iw)    ! h2so4, so3 + h2o channel
             sj(ilay,iw,j_no)  = xsno(iw)*yieldno(iw)     ! no
             sj(ilay,iw,j_n2)  = xsn2(iw)*yieldn2(iw)     ! n2
