Changeset 4176
- Timestamp:
- Apr 9, 2026, 11:48:44 AM (9 hours ago)
- Location:
- trunk/LMDZ.VENUS/libf/phyvenus
- Files:
-
- 3 edited
-
photochemistry_venus.F90 (modified) (1 diff)
-
photolysis_mod.F90 (modified) (15 diffs)
-
photolysis_online.F (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.VENUS/libf/phyvenus/photochemistry_venus.F90
r4118 r4176 676 676 677 677 indice_phot(nb_phot) = z3spec(1.0, i_cocl2, 2.0, i_cl, 1.0, i_co) 678 679 !=========================================================== 680 ! H2SO4 + hv -> HSO3 + OH 681 !=========================================================== 682 683 nb_phot = nb_phot + 1 684 685 indice_phot(nb_phot) = z3spec(1.0, i_h2so4, 1.0, i_hso3, 1.0, i_oh) 678 686 679 687 !=========================================================== -
trunk/LMDZ.VENUS/libf/phyvenus/photolysis_mod.F90
r4111 r4176 5 5 ! photolysis 6 6 7 integer, save :: nphot = 3 3! number of photolysis7 integer, save :: nphot = 34 ! number of photolysis 8 8 9 9 !$OMP THREADPRIVATE(nphot) … … 13 13 ! spectral grid 14 14 15 integer, parameter :: nw = 194 ! number of spectral intervals (low-res)15 integer, parameter :: nw = 208 ! number of spectral intervals (if mopt = 3) 16 16 integer, save :: mopt ! high-res/low-res switch 17 17 … … 51 51 real, dimension(nw), save :: xsocs ! cos absorption cross-section (cm2) 52 52 real, dimension(nw), save :: xscocl2 ! cocl2 absorption cross-section (cm2) 53 real, dimension(nw), save :: xsh2so4 ! h2so4 absorption cross-section (cm2) 53 real, dimension(nw), save :: xsh2so4_hso3 ! h2so4 absorption cross-section (cm2), hso3 + oh channel 54 real, dimension(nw), save :: xsh2so4_so3 ! h2so4 absorption cross-section (cm2), so3 + h2o channel 54 55 real, dimension(nw), save :: xsh2 ! h2 absorption cross-section (cm2) 55 56 real, dimension(nw), save :: yieldh2 ! h2 photodissociation yield … … 168 169 ! read and grid h2so4 cross-sections 169 170 170 call rdxsh2so4(nw,wl,xsh2so4 )171 call rdxsh2so4(nw,wl,xsh2so4_hso3,xsh2so4_so3) 171 172 172 173 ! read and grid h2 cross-sections … … 245 246 ! 365-850 nm : 5.0 nm 246 247 ! 247 ! mopt = 2 low-resolution mode (162 )248 ! mopt = 2 low-resolution mode (162 intervals) 248 249 ! 249 250 ! 0-60 nm : 6.0 nm … … 260 261 ! 415-815 nm : 50.0 nm 261 262 ! 262 ! mopt = 3 venusian low-resolution mode (194) 263 ! (205-245 nm -> 1nm of resolution) 263 ! mopt = 3 venusian low-resolution mode (208 intervals) 264 ! 205-245 nm -> 1nm of resolution, 265 ! optimised for H2SO4 overtones 264 266 ! 265 267 ! 0-60 nm : 6.0 nm … … 274 276 ! 205-245 nm : 1.0 nm 275 277 ! 245-415 nm : 10.0 nm 276 ! 415-815 nm : 50.0 nm 278 ! 415-565 nm : 50.0 nm 279 ! 565-604 nm : 39.0 nm 280 ! 604-608 nm : 1.0 nm 281 ! 608-736 nm : 32.0 nm 282 ! 736-745 nm : 1.0 nm 283 ! 745-815 nm : 35.0 nm 277 284 278 285 if (mopt == 1) then ! high-res … … 562 569 ENDDO 563 570 564 ! define wavelength intervals of width 5.0 nm from 205 to 245 nm:571 ! define wavelength intervals of width 1.0 nm from 205 to 245 nm: 565 572 566 573 wincr = 1 … … 582 589 ENDDO 583 590 584 ! define wavelength intervals of width 50.0 nm from 415 to 815 nm:591 ! define wavelength intervals of width 50.0 nm from 415 to 565 nm: 585 592 586 593 wincr = 50.0 587 DO iw = 415, 815, 50 594 DO iw = 415, 515, 50 595 kw = kw + 1 596 wl(kw) = real(iw) 597 wu(kw) = wl(kw) + wincr 598 wc(kw) = (wl(kw) + wu(kw))/2. 599 ENDDO 600 601 ! define wavelength intervals of width 39.0 nm from 565 to 604 nm: 602 603 wincr = 39.0 604 DO iw = 565, 565, 39 605 kw = kw + 1 606 wl(kw) = real(iw) 607 wu(kw) = wl(kw) + wincr 608 wc(kw) = (wl(kw) + wu(kw))/2. 609 ENDDO 610 611 ! define wavelength intervals of width 1.0 nm from 604 to 608 nm: 612 613 wincr = 1.0 614 DO iw = 604, 607, 1 615 kw = kw + 1 616 wl(kw) = real(iw) 617 wu(kw) = wl(kw) + wincr 618 wc(kw) = (wl(kw) + wu(kw))/2. 619 ENDDO 620 621 ! define wavelength intervals of width 32.0 nm from 608 to 736 nm: 622 623 wincr = 32.0 624 DO iw = 608, 704, 32 625 kw = kw + 1 626 wl(kw) = real(iw) 627 wu(kw) = wl(kw) + wincr 628 wc(kw) = (wl(kw) + wu(kw))/2. 629 ENDDO 630 631 ! define wavelength intervals of width 1.0 nm from 736 to 745 nm: 632 633 wincr = 1.0 634 DO iw = 736, 744, 1 635 kw = kw + 1 636 wl(kw) = real(iw) 637 wu(kw) = wl(kw) + wincr 638 wc(kw) = (wl(kw) + wu(kw))/2. 639 ENDDO 640 641 ! define wavelength intervals of width 35.0 nm from 745 to 815 nm: 642 643 wincr = 35.0 644 DO iw = 745, 780, 35 588 645 kw = kw + 1 589 646 wl(kw) = real(iw) … … 3127 3184 !============================================================================== 3128 3185 3129 subroutine rdxsh2so4(nw, wl, yg)3186 subroutine rdxsh2so4(nw, wl, xsh2so4_hso3, xsh2so4_so3) 3130 3187 3131 3188 !-----------------------------------------------------------------------------* 3132 3189 != PURPOSE: =* 3133 != Read H2SO4 cross-sections =*3134 != JPL 2006 recommendation=*3190 != Read H2SO4 cross-sections =* 3191 != Frandsen et al., personal communication, 2026 =* 3135 3192 !-----------------------------------------------------------------------------* 3136 3193 != PARAMETERS: =* … … 3142 3199 USE mod_phys_lmdz_transfert_para, ONLY: bcast 3143 3200 3144 IMPLICIT NONE3201 implicit none 3145 3202 3146 3203 ! input … … 3151 3208 ! output 3152 3209 3153 real, dimension(nw) :: yg ! h2so4 cross-sections (cm2) 3210 real, dimension(nw) :: xsh2so4_hso3 ! h2so4 -> hso3 + oh cross-sections (cm2) 3211 real, dimension(nw) :: xsh2so4_so3 ! h2so4 -> so3 + h2o cross-sections (cm2) 3154 3212 3155 3213 ! local 3156 3214 3157 3215 real, parameter :: deltax = 1.e-4 3158 integer, parameter :: kdata = 100 3216 integer, parameter :: kdata = 10000 3159 3217 real, dimension(kdata) :: x1, y1 3218 real, dimension(nw) :: yg 3160 3219 integer :: i, n, ierr 3161 3220 character*100 fil … … 3164 3223 kin = 10 3165 3224 3166 !*** cross sections from JPL [2006]3167 3168 fil = 'cross_sections/h2so4_ cross_sections.txt'3225 !*** cross sections 3226 3227 fil = 'cross_sections/h2so4_hdso4_frandsen_2026.txt' 3169 3228 print*, 'section efficace h2so4: ', fil 3170 3229 3171 if (is_master) then3172 3173 n = 223230 if (is_master) then 3231 3232 n = 9602 3174 3233 OPEN(kin,FILE=fil,STATUS='OLD') 3175 DO i = 1, 33234 DO i = 1,5 3176 3235 READ(kin,*) 3177 3236 ENDDO … … 3187 3246 3188 3247 CALL inter2(nw,wl,yg,n,x1,y1,ierr) 3189 3248 3190 3249 IF (ierr .NE. 0) THEN 3191 3250 WRITE(*,*) ierr, fil … … 3193 3252 ENDIF 3194 3253 3195 endif !is_master 3196 3197 call bcast(yg) 3254 do i = 1, nw - 1 3255 if (wl(i) < 200.) then 3256 xsh2so4_hso3(i) = yg(i) 3257 xsh2so4_so3(i) = 0. 3258 else 3259 xsh2so4_hso3(i) = 0. 3260 xsh2so4_so3(i) = yg(i) 3261 end if 3262 end do 3263 3264 end if !is_master 3265 3266 call bcast(xsh2so4_hso3) 3267 call bcast(xsh2so4_so3) 3198 3268 3199 3269 end subroutine rdxsh2so4 -
trunk/LMDZ.VENUS/libf/phyvenus/photolysis_online.F
r4158 r4176 74 74 $ j_hocl, j_clo, j_so2, j_so, j_so3, j_s2, j_osso_cis, 75 75 $ j_osso_trans, j_s2o2_cyc, j_clso2, j_cl2so2, j_ocs, 76 $ j_cocl2, j_h2so4 , j_no2, j_no, j_n2, j_h2, j_h2s,77 $ j_ s3, j_s4, j_s876 $ j_cocl2, j_h2so4_hso3, j_h2so4_so3, j_no2, j_no, j_n2, 77 $ j_h2, j_h2s, j_s3, j_s4, j_s8 78 78 79 79 integer :: a_o2, a_co2, a_o3, a_h2o, a_h2o2, a_ho2, a_hcl, a_cl2, … … 148 148 j_ocs = 24 ! ocs + hv -> co + s 149 149 j_cocl2 = 25 ! cocl2 + hv -> 2cl + co 150 j_h2so4 = 26 ! h2so4 + hv -> so3 + h2o 151 j_no2 = 27 ! no2 + hv -> no + o 152 j_no = 28 ! no + hv -> n + o 153 j_n2 = 29 ! n2 + hv -> n(2d) + n 154 j_h2s = 30 ! h2s + hv -> hs + h 155 j_s3 = 31 ! s3 + hv -> s2 + s 156 j_s4 = 32 ! s4 + hv -> s2 + s2 157 j_s8 = 33 ! s8 + hv -> s4 + s4 150 j_h2so4_hso3 = 26 ! h2so4 + hv -> hso3 + oh 151 j_h2so4_so3 = 27 ! h2so4 + hv -> so3 + h2o 152 j_no2 = 28 ! no2 + hv -> no + o 153 j_no = 29 ! no + hv -> n + o 154 j_n2 = 30 ! n2 + hv -> n(2d) + n 155 j_h2s = 31 ! h2s + hv -> hs + h 156 j_s3 = 32 ! s3 + hv -> s2 + s 157 j_s4 = 33 ! s4 + hv -> s2 + s2 158 j_s8 = 34 ! s8 + hv -> s4 + s4 158 159 159 160 ! j_hdo_od = ! hdo + hv -> od + h … … 254 255 $ *xscocl2(iw) 255 256 dtgas(ilay,iw,a_h2so4) = colinc(ilay)*rm(ilay,i_h2so4) 256 $ *xsh2so4 (iw)257 $ *xsh2so4_hso3(iw) 257 258 dtgas(ilay,iw,a_no) = colinc(ilay)*rm(ilay,i_no)*xsno(iw) 258 259 dtgas(ilay,iw,a_n2) = colinc(ilay)*rm(ilay,i_n2)*xsn2(iw) … … 263 264 264 265 ! cross-sections (merged loops for extra cache locality) 266 265 267 sj(ilay,iw,j_h2) = xsh2(iw) ! h2 266 268 sj(ilay,iw,j_h2o) = xsh2o(iw) ! h2o … … 279 281 sj(ilay,iw,j_ocs) = xsocs(iw) ! ocs 280 282 sj(ilay,iw,j_cocl2) = xscocl2(iw) ! cocl2 281 sj(ilay,iw,j_h2so4) = xsh2so4(iw) ! h2so4 283 sj(ilay,iw,j_h2so4_hso3) = xsh2so4_hso3(iw) ! h2so4, hso3 + oh channel 284 sj(ilay,iw,j_h2so4_so3) = xsh2so4_so3(iw) ! h2so4, so3 + h2o channel 282 285 sj(ilay,iw,j_no) = xsno(iw)*yieldno(iw) ! no 283 286 sj(ilay,iw,j_n2) = xsn2(iw)*yieldn2(iw) ! n2
Note: See TracChangeset
for help on using the changeset viewer.
