Changeset 2795 for trunk/LMDZ.VENUS
- Timestamp:
- Sep 14, 2022, 1:40:00 PM (2 years ago)
- Location:
- trunk/LMDZ.VENUS/libf/phyvenus
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.VENUS/libf/phyvenus/chemparam_mod.F90
r2464 r2795 13 13 i_cocl2, i_s, i_so, i_so2, i_so3, & 14 14 i_s2o2, i_ocs, i_hso3, i_h2so4, i_s2, & 15 i_clso2, i_oscl, i_n2, i_he 15 i_clso2, i_oscl, i_n2, i_he, i_no2, & 16 i_no, i_n, i_n2d 16 17 17 18 INTEGER, SAVE :: i_h2oliq, i_h2so4liq … … 27 28 REAL, DIMENSION(:), SAVE, ALLOCATABLE :: M_tr 28 29 29 30 REAL, DIMENSION(:,:),SAVE, ALLOCATABLE :: no_emission 31 REAL, DIMENSION(:,:),SAVE, ALLOCATABLE :: o2_emission 30 32 !---------------------------------------------------------------------------- 31 33 ! DEF FOR CL_SCHEME = 1 (AURELIEN) … … 837 839 i_he=i 838 840 M_tr(i_he)=4.0026 841 CASE('no2') 842 i_no2=i 843 M_tr(i_no2)=46.0055 844 CASE('no') 845 i_no = i 846 M_tr(i_no)=30.0061 847 CASE('n') 848 i_n = i 849 M_tr(i_n)=14.0067 850 CASE('n2d') 851 i_n2d = i 852 M_tr(i_n2d)=14.0067 839 853 ! MICROPHYSICAL TRACERS FOR CL_SCHEME=1 840 854 CASE('h2oliq') -
trunk/LMDZ.VENUS/libf/phyvenus/moldiff_red.F90
r2791 r2795 60 60 real*8,dimension(:),allocatable,save :: wi,Wad,Uthermal,Lambdaexo,Hspecie 61 61 real*8,dimension(:),allocatable,save :: Mtot1,Mtot2,Mraf1,Mraf2 62 integer,parameter :: nb_esp_diff=1 562 integer,parameter :: nb_esp_diff=16 63 63 character(len=20),dimension(nb_esp_diff) :: ListeDiff 64 64 !ccccccccccccccccccccccccccccccccccccccccccccccccccccccc … … 125 125 ListeDiff(14)='n' 126 126 ListeDiff(15)='he' 127 ListeDiff(16)='n2d' 127 128 i_esc_h=1000 128 129 i_esc_h2=1000 -
trunk/LMDZ.VENUS/libf/phyvenus/photochemistry_venus.F90
r2780 r2795 1 subroutine photochemistry_venus(nz, n_lon, zlocal, ptimestep, p, t, tr, mumean, sza_input, lon, lat, nesp, iter, prod_tr, loss_tr )1 subroutine photochemistry_venus(nz, n_lon, zlocal, ptimestep, p, t, tr, mumean, sza_input, lon, lat, nesp, iter, prod_tr, loss_tr, em_no, em_o2) 2 2 3 3 use chemparam_mod … … 30 30 real, dimension(nz,nesp) :: prod_tr ! production (cm-3.s-1) 31 31 real, dimension(nz,nesp) :: loss_tr ! loss (cm-3.s-1) 32 real, dimension (nz) :: em_no ! volume emission rate of no 33 real, dimension (nz) :: em_o2 ! volume emission rate of o2(deltag) 32 34 33 35 !=================================================================== … … 38 40 39 41 !=================================================================== 40 ! local: 42 ! local: 41 43 !=================================================================== 42 44 … … 44 46 ! true : on-line calculation of photodissociation rates ! false : lookup table 45 47 46 logical, save :: jonline = . false.48 logical, save :: jonline = .true. 47 49 48 50 logical, save :: firstcall = .true. … … 51 53 real, dimension(nz) :: surfice1d, surfdust1d 52 54 55 integer :: ind_norec 56 integer :: ind_orec 57 53 58 ! photolysis lookup table (case jonline = .false.) 54 59 ! if prior to jvenus.20211025, set nztable = 201 below 55 60 56 integer, parameter :: nj = 19, nztable = 281, nsza = 27, nso2 = 1361 integer, parameter :: nj = 22, nztable = 281, nsza = 27, nso2 = 13 57 62 real, dimension(nso2,nsza,nztable,nj), save :: jphot 58 63 real, dimension(nztable), save :: table_colair … … 77 82 ! reaction rates 78 83 79 integer, parameter :: nb_phot_max = 30 84 integer, parameter :: nb_phot_max = 35 85 integer, parameter :: nb_phot = 22 80 86 integer, parameter :: nb_reaction_3_max = 12 81 integer, parameter :: nb_reaction_4_max = 8787 integer, parameter :: nb_reaction_4_max = 98 82 88 83 89 real, dimension(nz,nb_phot_max) :: v_phot … … 104 110 if (firstcall) then 105 111 !=================================================================== 106 ! initialisation of photolysis112 ! initialisation of photolysis 107 113 !=================================================================== 108 114 109 115 if (jonline) then 110 print*, ' Photochemistry: Read UV absorption cross-sections:'116 print*, 'photochemistry: Read UV absorption cross-sections:' 111 117 call init_photolysis 112 118 else 113 print*, ' Photochemistry: Read photolysis lookup table:'119 print*, 'photochemistry: Read photolysis lookup table:' 114 120 call init_chimie(nj, nztable, nsza, nso2, jphot, table_colair, table_colso2, table_sza) 115 121 end if … … 135 141 do iz = 1,nz 136 142 conc(iz) = p(iz)/(1.38E-19*t(iz)) 137 c(iz,:) = tr(iz,:)*conc(iz) 143 c(iz,:) = tr(iz,:)*conc(iz) 138 144 end do 139 145 … … 147 153 148 154 if (jonline) then 149 if (sza_input <= 95.) then ! day at 30 km155 if (sza_input <= 95.) then ! day at 30 km 150 156 call photolysis_online(nz, nb_phot_max, zlocal, p, & 151 157 t, mumean, i_co2,i_co, i_o, i_o1d, & … … 153 159 i_h, i_hcl, i_cl2, i_hocl, i_so2, i_so, & 154 160 i_so3, i_clo, i_ocs, i_cocl2, i_h2so4, i_cl,& 161 i_no2, i_no, i_n2, i_n2d, & 155 162 nesp, tr, sza_input, dist_sol, v_phot) 156 163 else ! night … … 158 165 end if 159 166 else 160 call phot(nj, nztable, nsza, nso2, sza_input, dist_sol, mumean, tr(:,i_co2), tr(:,i_so2), &167 call phot(nj, nztable, nsza, nso2, sza_input, dist_sol, mumean, tr(:,i_co2), tr(:,i_so2), & 161 168 jphot, table_colair, table_colso2, table_sza, nz, nb_phot_max, t, p, v_phot) 162 169 end if … … 166 173 !=================================================================== 167 174 168 call krates(hetero_ice, hetero_dust, nz, nesp, n j, c, conc, t, p, nb_phot_max, nb_reaction_3_max, &169 nb_reaction_4_max, v_3, v_4, v_phot, sza_input )175 call krates(hetero_ice, hetero_dust, nz, nesp, nb_phot, c, conc, t, p, nb_phot_max, nb_reaction_3_max, & 176 nb_reaction_4_max, v_3, v_4, v_phot, sza_input, ind_norec, ind_orec) 170 177 171 178 !=================================================================== … … 252 259 253 260 tr(iz,:) = max(c(iz,:)/conc(iz), 1.e-30) 254 255 ! save prod and loss espece261 262 ! save production and loss terms (for diagnostic only) 256 263 257 264 prod_tr(iz,:) = prod(:) … … 259 266 260 267 end do ! end of loop over vertical levels 261 262 !================== 263 !!!!! MODEL 1D !!!! ==> n_lon = 1 !!!! 264 !================== 265 266 !IF(n_lon .EQ. 1) THEN 267 !PRINT*,'On est en 1D' 268 !PRINT*,"DEBUT rate_save" 269 !CALL rate_save(nz,p(:),t(:),tr(:,:),nesp,v_phot(:,:),v_3(:,:),v_4(:,:)) 270 !PRINT*,"FIN rate_save" 271 !END IF 272 268 269 ! no and o2(delta) emissions 270 271 em_no(:) = c(:,i_o)*c(:,i_n)*v_4(:,ind_norec) !2.8e-17*(300./temp(:)))**0.5 272 em_o2(:) = c(:,i_o2dg)/4470. ! 4470 s : lafferty et al., 1998 273 273 274 end subroutine photochemistry_venus 274 275 … … 513 514 514 515 !=========================================================== 516 ! NO2 + hv -> NO + O 517 !=========================================================== 518 519 nb_phot = nb_phot + 1 520 521 indice_phot(nb_phot) = z3spec(1.0, i_no2, 1.0, i_no, 1.0, i_o) 522 523 !=========================================================== 524 ! NO + hv -> N + O 525 !=========================================================== 526 527 nb_phot = nb_phot + 1 528 529 indice_phot(nb_phot) = z3spec(1.0, i_no, 1.0, i_n, 1.0, i_o) 530 531 !=========================================================== 532 ! N2 + hv -> N(2D) + N 533 !=========================================================== 534 535 nb_phot = nb_phot + 1 536 537 indice_phot(nb_phot) = z3spec(1.0, i_n2, 1.0, i_n, 1.0, i_n2d) 538 539 !=========================================================== 515 540 ! a001 : O + O2 + CO2 -> O3 + CO2 516 541 !=========================================================== … … 727 752 728 753 indice_3(nb_reaction_3) = z3spec(2.0, i_h, 1.0, i_h2, 0.0, i_dummy) 754 755 !=========================================================== 756 ! d001 : NO2 + O -> NO + O2 757 !=========================================================== 758 759 nb_reaction_4 = nb_reaction_4 + 1 760 761 indice_4(nb_reaction_4) = z4spec(1.0, i_no2, 1.0, i_o, 1.0, i_no, 1.0, i_o2) 762 763 !=========================================================== 764 ! d002 : NO + O3 -> NO2 + O2 765 !=========================================================== 766 767 nb_reaction_4 = nb_reaction_4 + 1 768 769 indice_4(nb_reaction_4) = z4spec(1.0, i_no, 1.0, i_o3, 1.0, i_no2, 1.0, i_o2) 770 771 !=========================================================== 772 ! d003 : NO + HO2 -> NO2 + OH 773 !=========================================================== 774 775 nb_reaction_4 = nb_reaction_4 + 1 776 777 indice_4(nb_reaction_4) = z4spec(1.0, i_no, 1.0, i_ho2, 1.0, i_no2, 1.0, i_oh) 778 779 !=========================================================== 780 ! d004 : N + NO -> N2 + O 781 !=========================================================== 782 783 nb_reaction_4 = nb_reaction_4 + 1 784 785 indice_4(nb_reaction_4) = z4spec(1.0, i_n, 1.0, i_no, 1.0, i_n2, 1.0, i_o) 786 787 !=========================================================== 788 ! d005 : N + O2 -> NO + O 789 !=========================================================== 790 791 nb_reaction_4 = nb_reaction_4 + 1 792 793 indice_4(nb_reaction_4) = z4spec(1.0, i_n, 1.0, i_o2, 1.0, i_no, 1.0, i_o) 794 795 !=========================================================== 796 ! d006 : NO2 + H -> NO + OH 797 !=========================================================== 798 799 nb_reaction_4 = nb_reaction_4 + 1 800 801 indice_4(nb_reaction_4) = z4spec(1.0, i_no2, 1.0, i_h, 1.0, i_no, 1.0, i_oh) 802 803 !=========================================================== 804 ! d007 : N + O -> NO 805 !=========================================================== 806 807 nb_reaction_4 = nb_reaction_4 + 1 808 809 indice_4(nb_reaction_4) = z4spec(1.0, i_n, 1.0, i_o, 1.0, i_no, 0.0, i_dummy) 810 811 !=========================================================== 812 ! d008 : N + HO2 -> NO + OH 813 !=========================================================== 814 815 nb_reaction_4 = nb_reaction_4 + 1 816 817 indice_4(nb_reaction_4) = z4spec(1.0, i_n, 1.0, i_ho2, 1.0, i_no, 1.0, i_oh) 818 819 !=========================================================== 820 ! d009 : N + OH -> NO + H 821 !=========================================================== 822 823 nb_reaction_4 = nb_reaction_4 + 1 824 825 indice_4(nb_reaction_4) = z4spec(1.0, i_n, 1.0, i_oh, 1.0, i_no, 1.0, i_h) 826 827 !=========================================================== 828 ! d010 : N(2D) + O -> N + O 829 !=========================================================== 830 831 nb_phot = nb_phot + 1 832 833 indice_phot(nb_phot) = z3spec(1.0, i_n2d, 1.0, i_n, 0.0, i_dummy) 834 835 !=========================================================== 836 ! d011 : N(2D) + N2 -> N + N2 837 !=========================================================== 838 839 nb_phot = nb_phot + 1 840 841 indice_phot(nb_phot) = z3spec(1.0, i_n2d, 1.0, i_n, 0.0, i_dummy) 842 843 !=========================================================== 844 ! d012 : N(2D) + CO2 -> NO + CO 845 !=========================================================== 846 847 nb_reaction_4 = nb_reaction_4 + 1 848 849 indice_4(nb_reaction_4) = z4spec(1.0, i_n2d, 1.0, i_co2, 1.0, i_no, 1.0, i_co) 850 851 !=========================================================== 852 ! d013 : N + O + CO2 -> NO + CO2 853 !=========================================================== 854 855 nb_reaction_4 = nb_reaction_4 + 1 856 857 indice_4(nb_reaction_4) = z4spec(1.0, i_n, 1.0, i_o, 1.0, i_no, 0.0, i_dummy) 729 858 730 859 !=========================================================== … … 1374 1503 1375 1504 !=========================================================== 1376 ! i001: O2(Dg) + CO2 -> O2 + CO2 + hv1505 ! i001: O2(Dg) + CO2 -> O2 + CO2 1377 1506 !=========================================================== 1378 1507 … … 1401 1530 (nb_reaction_3 /= nb_reaction_3_max) .or. & 1402 1531 (nb_reaction_4 /= nb_reaction_4_max)) then 1403 print*, 'wrong dimensions in indice'1404 stop1532 print*, 'wrong dimensions in indice' 1533 stop 1405 1534 end if 1406 1535 … … 1438 1567 integer :: indcol, indsza, indso2 1439 1568 integer :: isza, iz, i, iso2, ij 1440 1441 1569 integer :: nb_phot_max 1442 1570 real, dimension(nz,nb_phot_max), INTENT(INOUT) :: v_phot … … 1576 1704 ! 18 cocl2 + hv -> cl + cl + co 1577 1705 ! 19 h2so4 + hv -> so3 + h2o 1706 ! 20 no2 + hv -> no + o 1707 ! 21 no + hv -> n + o 1708 ! 22 n2 + hv -> n + n 1578 1709 1579 1710 ! fill v_phot array … … 1622 1753 !====================================================================== 1623 1754 1624 subroutine krates(hetero_ice,hetero_dust, nz, nesp, nj, c, conc, t, p, nb_phot_max, nb_reaction_3_max, nb_reaction_4_max, v_3, v_4, v_phot,sza_input )1755 subroutine krates(hetero_ice,hetero_dust, nz, nesp, nj, c, conc, t, p, nb_phot_max, nb_reaction_3_max, nb_reaction_4_max, v_3, v_4, v_phot,sza_input, ind_norec, ind_orec) 1625 1756 1626 1757 !================================================================ … … 1644 1775 integer :: iz 1645 1776 logical, INTENT(IN) :: hetero_ice, hetero_dust 1646 real :: ak0, ak1, xpo, rate, pi, gam, bid 1777 integer :: ind_norec, ind_orec 1778 real :: ak0, ak1, xpo, rate, rate1, rate2, pi, gam 1647 1779 real :: k1a0, k1b0, k1ainf, k1a, k1b, fc, fx, x, y 1648 1780 real, dimension(nz) :: surfice1d, surfdust1d … … 1654 1786 c008, c009, c010, c011, c012, c013, c014, & 1655 1787 c015, c016, c017, c018, & 1656 d001, d002, d003, & 1788 d001, d002, d003, d004, d005, d006, d007, & 1789 d008, d009, d010, d011, d012, d013, & 1657 1790 e001, e002, e003, e004, e005, e006, e007, & 1658 1791 e008, e009, e010, e011, e012, e013, e014, & … … 1716 1849 v_3(:,nb_reaction_3) = a002(:) 1717 1850 1851 ind_orec = nb_reaction_3 1852 1718 1853 !--- a003: o + o3 -> o2 + o2 1719 1854 … … 1983 2118 ! jpl 2006 1984 2119 1985 d001(:) = 5.1E-12*exp(210./t(:)) 2120 d001(:) = 5.1e-12*exp(210./t(:)) 2121 2122 nb_reaction_4 = nb_reaction_4 + 1 2123 v_4(:,nb_reaction_4) = d001(:) 1986 2124 1987 2125 !--- d002: no + o3 -> no2 + o2 … … 1989 2127 ! jpl 2006 1990 2128 1991 d002(:) = 3.0E-12*exp(-1500./t(:)) 2129 d002(:) = 3.0e-12*exp(-1500./t(:)) 2130 2131 nb_reaction_4 = nb_reaction_4 + 1 2132 v_4(:,nb_reaction_4) = d002(:) 1992 2133 1993 2134 !--- d003: no + ho2 -> no2 + oh 1994 2135 1995 ! jpl 2006 1996 1997 d003(:) = 3.5E-12*exp(250./t(:)) 2136 ! jpl 2011 2137 2138 d003(:) = 3.3e-12*exp(270./t(:)) 2139 2140 nb_reaction_4 = nb_reaction_4 + 1 2141 v_4(:,nb_reaction_4) = d003(:) 2142 2143 2144 !--- d004: n + no -> n2 + o 2145 2146 ! jpl 2011 2147 2148 d004(:) = 2.1e-11*exp(100./t(:)) 2149 2150 nb_reaction_4 = nb_reaction_4 + 1 2151 v_4(:,nb_reaction_4) = d004(:) 2152 2153 !--- d005: n + o2 -> no + o 2154 2155 ! jpl 2011 2156 2157 d005(:) = 1.5e-11*exp(-3600./t(:)) 2158 2159 nb_reaction_4 = nb_reaction_4 + 1 2160 v_4(:,nb_reaction_4) = d005(:) 2161 2162 !--- d006: no2 + h -> no + oh 2163 2164 ! jpl 2011 2165 2166 d006(:) = 4.0e-10*exp(-340./t(:)) 2167 2168 nb_reaction_4 = nb_reaction_4 + 1 2169 v_4(:,nb_reaction_4) = d006(:) 2170 2171 !--- d007: n + o -> no 2172 2173 d007(:) = 2.8e-17*(300./t(:))**0.5 2174 2175 nb_reaction_4 = nb_reaction_4 + 1 2176 v_4(:,nb_reaction_4) = d007(:) 2177 2178 ind_norec = nb_reaction_4 2179 2180 !--- d008: n + ho2 -> no + oh 2181 2182 ! brune et al., j. chem. phys., 87, 1983 2183 2184 d008(:) = 2.19e-11 2185 2186 nb_reaction_4 = nb_reaction_4 + 1 2187 v_4(:,nb_reaction_4) = d008(:) 2188 2189 !--- d009: n + oh -> no + h 2190 2191 ! atkinson et al., j. phys. chem. ref. data, 18, 881, 1989 2192 2193 d009(:) = 3.8e-11*exp(85./t(:)) 2194 2195 nb_reaction_4 = nb_reaction_4 + 1 2196 v_4(:,nb_reaction_4) = d009(:) 2197 2198 !--- d010: n2d + o -> n + o 2199 2200 ! herron, j. phys. chem. ref. data, 1999 2201 2202 d010(:) = 3.3e-12*exp(-260./t(:)) 2203 2204 nb_phot = nb_phot + 1 2205 v_phot(:,nb_phot) = d010(:)*c(:,i_o) 2206 2207 !--- d011: n2d + n2 -> n + n2 2208 2209 ! herron, j. phys. chem. ref. data, 1999 2210 2211 d011(:) = 1.7e-14 2212 2213 nb_phot = nb_phot + 1 2214 v_phot(:,nb_phot) = d011(:)*c(:,i_n2) 2215 2216 !--- d012: n2d + co2 -> no + co 2217 2218 ! herron, j. phys. chem. ref. data, 1999 2219 2220 d012(:) = 3.6e-13 2221 2222 nb_reaction_4 = nb_reaction_4 + 1 2223 v_4(:,nb_reaction_4) = d012(:) 2224 2225 !--- d013: n + o + co2 -> no + co2 2226 2227 d013(:) = 1.83e-32 * (298./t(:))**0.5 2228 2229 nb_reaction_4 = nb_reaction_4 + 1 2230 v_4(:,nb_reaction_4) = d013(:) 1998 2231 1999 2232 !---------------------------------------------------------------------- … … 2003 2236 !--- e001: oh + co -> co2 + h 2004 2237 2005 ! jpl 2003 2006 2007 ! e001(:) = 1.5E-13*(1 + 0.6*p(:)/1013.) 2008 2009 ! mccabe et al., grl, 28, 3135, 2001 2010 2011 ! e001(:) = 1.57E-13 + 3.54E-33*conc(:) 2012 2013 ! jpl 2006 2014 2015 ! ak0 = 1.5E-13*(t(:)/300.)**(0.6) 2016 ! ak1 = 2.1E-9*(t(:)/300.)**(6.1) 2017 ! rate1 = ak0/(1. + ak0/(ak1/conc(:))) 2018 ! xpo1 = 1./(1. + alog10(ak0/(ak1/conc(:)))**2) 2019 2020 ! ak0 = 5.9E-33*(t(:)/300.)**(-1.4) 2021 ! ak1 = 1.1E-12*(t(:)/300.)**(1.3) 2022 ! rate2 = (ak0*conc(:))/(1. + ak0*conc(:)/ak1) 2023 ! xpo2 = 1./(1. + alog10((ak0*conc(:))/ak1)**2) 2024 2025 ! e001(:) = rate1*0.6**xpo1 + rate2*0.6**xpo2 2238 ! jpl 2015 2239 2240 do iz = 1,nz 2241 2242 ! branch 1 : oh + co -> h + co2 2243 2244 rate1 = 1.5e-13*(t(iz)/300.)**(0.0) 2245 2246 ! branch 2 : oh + co + m -> hoco + m 2247 2248 ak0 = 5.9e-33*(t(iz)/300.)**(-1.0) 2249 ak1 = 1.1e-12*(t(iz)/300.)**(1.3) 2250 rate2 = (ak0*conc(iz))/(1. + ak0*conc(iz)/ak1) 2251 xpo = 1./(1. + alog10((ak0*conc(iz))/ak1)**2) 2252 2253 e001(iz) = rate1 + rate2*0.6**xpo 2254 end do 2026 2255 2027 2256 ! joshi et al., 2006 2028 2257 2029 do iz = 1,nz 2030 k1a0 = 1.34*2.5*conc(iz) & 2031 *1/(1/(3.62E-26*t(iz)**(-2.739)*exp(-20./t(iz))) & 2032 + 1/(6.48E-33*t(iz)**(0.14)*exp(-57./t(iz)))) ! corrige de l'erreur publi 2033 k1b0 = 1.17E-19*t(iz)**(2.053)*exp(139./t(iz)) & 2034 + 9.56E-12*t(iz)**(-0.664)*exp(-167./t(iz)) 2035 k1ainf = 1.52E-17*t(iz)**(1.858)*exp(28.8/t(iz)) & 2036 + 4.78E-8*t(iz)**(-1.851)*exp(-318./t(iz)) 2037 x = k1a0/(k1ainf - k1b0) 2038 y = k1b0/(k1ainf - k1b0) 2039 fc = 0.628*exp(-1223./t(iz)) + (1. - 0.628)*exp(-39./t(iz)) & 2040 + exp(-t(iz)/255.) 2041 fx = fc**(1./(1. + (alog(x))**2)) ! corrige de l'erreur publi 2042 k1a = k1a0*((1. + y)/(1. + x))*fx 2043 k1b = k1b0*(1./(1.+x))*fx 2044 2045 e001(iz) = k1a + k1b 2046 end do 2258 ! do iz = 1,nz 2259 ! k1a0 = 1.34*2.5*conc(iz) & 2260 ! *1/(1/(3.62E-26*t(iz)**(-2.739)*exp(-20./t(iz))) & 2261 ! + 1/(6.48E-33*t(iz)**(0.14)*exp(-57./t(iz)))) ! typo in paper corrected 2262 ! k1b0 = 1.17E-19*t(iz)**(2.053)*exp(139./t(iz)) & 2263 ! + 9.56E-12*t(iz)**(-0.664)*exp(-167./t(iz)) 2264 ! k1ainf = 1.52E-17*t(iz)**(1.858)*exp(28.8/t(iz)) & 2265 ! + 4.78E-8*t(iz)**(-1.851)*exp(-318./t(iz)) 2266 ! x = k1a0/(k1ainf - k1b0) 2267 ! y = k1b0/(k1ainf - k1b0) 2268 ! fc = 0.628*exp(-1223./t(iz)) + (1. - 0.628)*exp(-39./t(iz)) & 2269 ! + exp(-t(iz)/255.) 2270 ! fx = fc**(1./(1. + (alog(x))**2)) ! typo in paper corrected 2271 ! k1a = k1a0*((1. + y)/(1. + x))*fx 2272 ! k1b = k1b0*(1./(1.+x))*fx 2273 ! e001(iz) = k1a + k1b 2274 ! end do 2047 2275 2048 2276 nb_reaction_4 = nb_reaction_4 + 1 … … 2978 3206 ! or reactions a + c -> b + c 2979 3207 ! or reactions a + ice -> b + c 2980 2981 3208 do iphot = 1,nb_phot_max 2982 3209 … … 4470 4697 i_v=i_v+1 4471 4698 !=============================== 4472 ! 30 o2(Dg) + CO2 -> O2 + CO2 + hv4699 ! 30 o2(Dg) + CO2 -> O2 + CO2 4473 4700 !=============================== 4474 4701 rate_local = vphot(i_lev,i_v)*traceur(i_lev,i_o2dg)*concentration(i_lev) -
trunk/LMDZ.VENUS/libf/phyvenus/photolysis_mod.F90
r2780 r2795 5 5 ! photolysis 6 6 7 integer, save :: nphot = 19! number of photolysis7 integer, save :: nphot = 22 ! number of photolysis 8 8 9 9 !$OMP THREADPRIVATE(nphot) 10 10 11 integer, parameter :: nabs = 1 6! number of absorbing gases11 integer, parameter :: nabs = 19 ! number of absorbing gases 12 12 13 13 ! spectral grid … … 46 46 real, dimension(nw), save :: xscocl2 ! cocl2 absorption cross-section (cm2) 47 47 real, dimension(nw), save :: xsh2so4 ! h2so4 absorption cross-section (cm2) 48 !real, dimension(nw), save :: xsh2 ! h2 absorption cross-section (cm2)49 !real, dimension(nw), save :: yieldh2 ! h2 photodissociation yield50 !real, dimension(nw), save :: xsno2, xsno2_220, xsno2_294 ! no2 absorption cross-section at 220-294 k (cm2)51 !real, dimension(nw), save :: yldno2_248, yldno2_298 ! no2 quantum yield at 248-298 k52 !real, dimension(nw), save :: xsno ! no absorption cross-section (cm2)53 !real, dimension(nw), save :: yieldno ! no photodissociation yield54 !real, dimension(nw), save :: xsn2 ! n2 absorption cross-section (cm2)55 !real, dimension(nw), save :: yieldn2 ! n2 photodissociation yield56 !real, dimension(nw), save :: xshdo ! hdo absorption cross-section (cm2)48 real, dimension(nw), save :: xsh2 ! h2 absorption cross-section (cm2) 49 real, dimension(nw), save :: yieldh2 ! h2 photodissociation yield 50 real, dimension(nw), save :: xsno2, xsno2_220, xsno2_294 ! no2 absorption cross-section at 220-294 k (cm2) 51 real, dimension(nw), save :: yldno2_248, yldno2_298 ! no2 quantum yield at 248-298 k 52 real, dimension(nw), save :: xsno ! no absorption cross-section (cm2) 53 real, dimension(nw), save :: yieldno ! no photodissociation yield 54 real, dimension(nw), save :: xsn2 ! n2 absorption cross-section (cm2) 55 real, dimension(nw), save :: yieldn2 ! n2 photodissociation yield 56 real, dimension(nw), save :: xshdo ! hdo absorption cross-section (cm2) 57 57 real, dimension(nw), save :: albedo ! surface albedo 58 58 … … 146 146 ! read and grid h2 cross-sections 147 147 148 !call rdxsh2(nw,wl,wc,xsh2,yieldh2)148 call rdxsh2(nw,wl,wc,xsh2,yieldh2) 149 149 150 150 ! read and grid no cross-sections 151 151 152 !call rdxsno(nw,wl,xsno,yieldno)152 call rdxsno(nw,wl,xsno,yieldno) 153 153 154 154 ! read and grid no2 cross-sections 155 155 156 !call rdxsno2(nw,wl,xsno2,xsno2_220,xsno2_294,yldno2_248,yldno2_298)156 call rdxsno2(nw,wl,xsno2,xsno2_220,xsno2_294,yldno2_248,yldno2_298) 157 157 158 158 ! read and grid n2 cross-sections 159 159 160 !call rdxsn2(nw,wl,xsn2,yieldn2)160 call rdxsn2(nw,wl,xsn2,yieldn2) 161 161 162 162 ! read and grid hdo cross-sections 163 163 164 !call rdxshdo(nw,wl,xshdo)164 call rdxshdo(nw,wl,xshdo) 165 165 166 166 ! set surface albedo … … 1543 1543 !============================================================================== 1544 1544 1545 !subroutine rdxshdo(nw, wl, yg)1545 subroutine rdxshdo(nw, wl, yg) 1546 1546 1547 1547 !-----------------------------------------------------------------------------* … … 1559 1559 !-----------------------------------------------------------------------------* 1560 1560 1561 !USE mod_phys_lmdz_para, ONLY: is_master1562 !USE mod_phys_lmdz_transfert_para, ONLY: bcast1563 1564 !IMPLICIT NONE1561 USE mod_phys_lmdz_para, ONLY: is_master 1562 USE mod_phys_lmdz_transfert_para, ONLY: bcast 1563 1564 IMPLICIT NONE 1565 1565 1566 1566 ! input 1567 1567 1568 !integer :: nw ! number of wavelength grid points1569 !real, dimension(nw) :: wl ! lower and central wavelength for each interval1568 integer :: nw ! number of wavelength grid points 1569 real, dimension(nw) :: wl ! lower and central wavelength for each interval 1570 1570 1571 1571 ! output 1572 1572 1573 !real, dimension(nw) :: yg ! hdo cross-sections (cm2)1573 real, dimension(nw) :: yg ! hdo cross-sections (cm2) 1574 1574 1575 1575 ! local 1576 1576 1577 !integer, parameter :: kdata = 9001578 !real, parameter :: deltax = 1.e-41579 !REAL x1(kdata)1580 !REAL y1(kdata)1581 !INTEGER ierr1582 !INTEGER i, n1583 !CHARACTER*100 fil1584 !integer :: kin, kout ! input/output logical units1585 1586 !kin = 101587 1588 !fil = '/cross_sections/hdo_composite_295K.txt'1589 !print*, 'section efficace HDO: ', fil1590 1591 !if(is_master) then1592 1593 !OPEN(UNIT=kin,FILE=fil,STATUS='old')1594 1595 !DO i = 1,171596 !read(kin,*)1597 !END DO1598 1599 !n = 8061600 !DO i = 1, n1601 !READ(kin,*) x1(i), y1(i)1602 !END DO1603 !CLOSE (kin)1604 1605 !CALL addpnt(x1,y1,kdata,n,x1(1)*(1.-deltax),0.)1606 !CALL addpnt(x1,y1,kdata,n, 0.,0.)1607 !CALL addpnt(x1,y1,kdata,n,x1(n)*(1.+deltax),0.)1608 !CALL addpnt(x1,y1,kdata,n, 1.e+38,0.)1609 !CALL inter2(nw,wl,yg,n,x1,y1,ierr)1610 !IF (ierr .NE. 0) THEN1611 !WRITE(*,*) ierr, fil1612 !STOP1613 !ENDIF1614 1615 !endif !is_master1616 1617 !call bcast(yg)1577 integer, parameter :: kdata = 900 1578 real, parameter :: deltax = 1.e-4 1579 REAL x1(kdata) 1580 REAL y1(kdata) 1581 INTEGER ierr 1582 INTEGER i, n 1583 CHARACTER*100 fil 1584 integer :: kin, kout ! input/output logical units 1585 1586 kin = 10 1587 1588 fil = '/cross_sections/hdo_composite_295K.txt' 1589 print*, 'section efficace HDO: ', fil 1590 1591 if(is_master) then 1592 1593 OPEN(UNIT=kin,FILE=fil,STATUS='old') 1594 1595 DO i = 1,17 1596 read(kin,*) 1597 END DO 1598 1599 n = 806 1600 DO i = 1, n 1601 READ(kin,*) x1(i), y1(i) 1602 END DO 1603 CLOSE (kin) 1604 1605 CALL addpnt(x1,y1,kdata,n,x1(1)*(1.-deltax),0.) 1606 CALL addpnt(x1,y1,kdata,n, 0.,0.) 1607 CALL addpnt(x1,y1,kdata,n,x1(n)*(1.+deltax),0.) 1608 CALL addpnt(x1,y1,kdata,n, 1.e+38,0.) 1609 CALL inter2(nw,wl,yg,n,x1,y1,ierr) 1610 IF (ierr .NE. 0) THEN 1611 WRITE(*,*) ierr, fil 1612 STOP 1613 ENDIF 1614 1615 endif !is_master 1616 1617 call bcast(yg) 1618 1618 1619 !end subroutine rdxshdo1619 end subroutine rdxshdo 1620 1620 1621 1621 !============================================================================== … … 2624 2624 !============================================================================== 2625 2625 2626 !subroutine rdxsh2(nw, wl, wc, yg, yieldh2)2626 subroutine rdxsh2(nw, wl, wc, yg, yieldh2) 2627 2627 2628 2628 !-----------------------------------------------------------------------------* … … 2635 2635 !-----------------------------------------------------------------------------* 2636 2636 2637 !USE mod_phys_lmdz_para, ONLY: is_master2638 !USE mod_phys_lmdz_transfert_para, ONLY: bcast2639 2640 !implicit none2637 USE mod_phys_lmdz_para, ONLY: is_master 2638 USE mod_phys_lmdz_transfert_para, ONLY: bcast 2639 2640 implicit none 2641 2641 2642 2642 ! input 2643 2643 2644 !integer :: nw ! number of wavelength grid points2645 !real, dimension(nw) :: wl, wc ! lower and central wavelength for each interval2644 integer :: nw ! number of wavelength grid points 2645 real, dimension(nw) :: wl, wc ! lower and central wavelength for each interval 2646 2646 2647 2647 ! output 2648 2648 2649 !real, dimension(nw) :: yg ! h2 cross-sections (cm2)2650 !real, dimension(nw) :: yieldh2 ! photodissociation yield2649 real, dimension(nw) :: yg ! h2 cross-sections (cm2) 2650 real, dimension(nw) :: yieldh2 ! photodissociation yield 2651 2651 2652 2652 ! local 2653 2653 2654 !integer, parameter :: kdata = 10002655 !real, parameter :: deltax = 1.e-42656 !real, dimension(kdata) :: x1, y1, x2, y22657 !real :: xl, xu2658 !integer :: i, iw, n, ierr2659 !integer :: kin, kout ! input/output logical units2660 !character*100 fil2661 2662 !kin = 102654 integer, parameter :: kdata = 1000 2655 real, parameter :: deltax = 1.e-4 2656 real, dimension(kdata) :: x1, y1, x2, y2 2657 real :: xl, xu 2658 integer :: i, iw, n, ierr 2659 integer :: kin, kout ! input/output logical units 2660 character*100 fil 2661 2662 kin = 10 2663 2663 2664 2664 ! h2 cross sections 2665 2665 2666 !fil = '/cross_sections/h2secef.txt'2667 !print*, 'section efficace H2: ', fil2668 2669 !if(is_master) then2670 2671 !OPEN(kin,FILE=fil,STATUS='OLD')2672 2673 !n = 7922674 !read(kin,*) ! avoid first line with wavelength = 0.2675 !DO i = 1, n2676 !READ(kin,*) x1(i), y1(i)2677 !ENDDO2678 !CLOSE(kin)2679 2680 !CALL addpnt(x1,y1,kdata,n,x1(1)*(1.-deltax),0.)2681 !CALL addpnt(x1,y1,kdata,n, 0.,0.)2682 !CALL addpnt(x1,y1,kdata,n,x1(n)*(1.+deltax),0.)2683 !CALL addpnt(x1,y1,kdata,n, 1E38,0.)2684 !CALL inter2(nw,wl,yg,n,x1,y1,ierr)2666 fil = '/cross_sections/h2secef.txt' 2667 print*, 'section efficace H2: ', fil 2668 2669 if(is_master) then 2670 2671 OPEN(kin,FILE=fil,STATUS='OLD') 2672 2673 n = 792 2674 read(kin,*) ! avoid first line with wavelength = 0. 2675 DO i = 1, n 2676 READ(kin,*) x1(i), y1(i) 2677 ENDDO 2678 CLOSE(kin) 2679 2680 CALL addpnt(x1,y1,kdata,n,x1(1)*(1.-deltax),0.) 2681 CALL addpnt(x1,y1,kdata,n, 0.,0.) 2682 CALL addpnt(x1,y1,kdata,n,x1(n)*(1.+deltax),0.) 2683 CALL addpnt(x1,y1,kdata,n, 1E38,0.) 2684 CALL inter2(nw,wl,yg,n,x1,y1,ierr) 2685 2685 2686 !IF (ierr .NE. 0) THEN2687 !WRITE(*,*) ierr, fil2688 !STOP2689 !ENDIF2690 2691 !endif !is_master2692 2693 !call bcast(yg)2686 IF (ierr .NE. 0) THEN 2687 WRITE(*,*) ierr, fil 2688 STOP 2689 ENDIF 2690 2691 endif !is_master 2692 2693 call bcast(yg) 2694 2694 2695 2695 ! photodissociation yield 2696 2696 2697 !fil = '/cross_sections/h2_ionef_schunknagy2000.txt'2698 2699 !if(is_master) then2700 2701 !OPEN(UNIT=kin,FILE=fil,STATUS='old')2702 2703 !n = 192704 !read(kin,*)2705 !DO i = 1, n2706 !READ(kin,*) xl, xu, y2(i)2707 !x2(i) = (xl + xu)/2.2708 !y2(i) = max(1. - y2(i),0.)2709 !END DO2710 !CLOSE (kin)2711 2712 !CALL addpnt(x2,y2,kdata,n,x2(1)*(1.-deltax),0.)2713 !CALL addpnt(x2,y2,kdata,n, 0.,0.)2714 !CALL addpnt(x2,y2,kdata,n,x2(n)*(1.+deltax),1.)2715 !CALL addpnt(x2,y2,kdata,n, 1.e+38,1.)2716 !CALL inter2(nw,wl,yieldh2,n,x2,y2,ierr)2717 !IF (ierr .NE. 0) THEN2718 !WRITE(*,*) ierr, fil2719 !STOP2720 !ENDIF2721 2722 !endif !is_master2723 2724 !call bcast(yieldh2)2725 2726 !end subroutine rdxsh22697 fil = '/cross_sections/h2_ionef_schunknagy2000.txt' 2698 2699 if(is_master) then 2700 2701 OPEN(UNIT=kin,FILE=fil,STATUS='old') 2702 2703 n = 19 2704 read(kin,*) 2705 DO i = 1, n 2706 READ(kin,*) xl, xu, y2(i) 2707 x2(i) = (xl + xu)/2. 2708 y2(i) = max(1. - y2(i),0.) 2709 END DO 2710 CLOSE (kin) 2711 2712 CALL addpnt(x2,y2,kdata,n,x2(1)*(1.-deltax),0.) 2713 CALL addpnt(x2,y2,kdata,n, 0.,0.) 2714 CALL addpnt(x2,y2,kdata,n,x2(n)*(1.+deltax),1.) 2715 CALL addpnt(x2,y2,kdata,n, 1.e+38,1.) 2716 CALL inter2(nw,wl,yieldh2,n,x2,y2,ierr) 2717 IF (ierr .NE. 0) THEN 2718 WRITE(*,*) ierr, fil 2719 STOP 2720 ENDIF 2721 2722 endif !is_master 2723 2724 call bcast(yieldh2) 2725 2726 end subroutine rdxsh2 2727 2727 2728 2728 !============================================================================== 2729 ! 2730 !subroutine rdxsno2(nw,wl,xsno2,xsno2_220,xsno2_294,yldno2_248, yldno2_298)2731 ! 2729 2730 subroutine rdxsno2(nw,wl,xsno2,xsno2_220,xsno2_294,yldno2_248, yldno2_298) 2731 2732 2732 !-----------------------------------------------------------------------------* 2733 2733 != PURPOSE: =* … … 2747 2747 != at each defined altitude level =* 2748 2748 !-----------------------------------------------------------------------------* 2749 ! 2750 ! use datafile_mod, only: datadir 2751 ! USE mod_phys_lmdz_para, ONLY: is_master 2752 ! USE mod_phys_lmdz_transfert_para, ONLY: bcast 2753 ! 2754 ! implicit none 2755 ! 2749 2750 USE mod_phys_lmdz_para, ONLY: is_master 2751 USE mod_phys_lmdz_transfert_para, ONLY: bcast 2752 2753 implicit none 2754 2756 2755 ! input 2757 ! 2758 !integer :: nw ! number of wavelength grid points2759 !real, dimension(nw) :: wl ! lower and central wavelength for each interval2760 !2756 2757 integer :: nw ! number of wavelength grid points 2758 real, dimension(nw) :: wl ! lower and central wavelength for each interval 2759 2761 2760 ! output 2762 ! 2763 !real, dimension(nw) :: xsno2, xsno2_220, xsno2_294 ! no2 cross-sections (cm2)2764 !real, dimension(nw) :: yldno2_248, yldno2_298 ! quantum yields at 248-298 k2765 ! 2761 2762 real, dimension(nw) :: xsno2, xsno2_220, xsno2_294 ! no2 cross-sections (cm2) 2763 real, dimension(nw) :: yldno2_248, yldno2_298 ! quantum yields at 248-298 k 2764 2766 2765 ! local 2767 ! 2768 !integer, parameter :: kdata = 280002769 !real, parameter :: deltax = 1.e-42770 !real, dimension(kdata) :: x1, x2, x3, x4, x5, y1, y2, y3, y4, y52771 !real, dimension(nw) :: yg1, yg2, yg3, yg4, yg52772 !real :: dum, qy2773 !integer :: i, iw, n, n1, n2, n3, n4, n5, ierr2774 !character*100 fil2775 !integer :: kin, kout ! input/output logical units2776 ! 2777 !kin = 102778 ! 2766 2767 integer, parameter :: kdata = 28000 2768 real, parameter :: deltax = 1.e-4 2769 real, dimension(kdata) :: x1, x2, x3, x4, x5, y1, y2, y3, y4, y5 2770 real, dimension(nw) :: yg1, yg2, yg3, yg4, yg5 2771 real :: dum, qy 2772 integer :: i, iw, n, n1, n2, n3, n4, n5, ierr 2773 character*100 fil 2774 integer :: kin, kout ! input/output logical units 2775 2776 kin = 10 2777 2779 2778 !*************** NO2 photodissociation 2780 ! 2779 2781 2780 ! Jenouvrier 1996 + Vandaele 1998 (JPL 2006) 2782 ! 2783 ! fil = trim(datadir)//'/cross_sections/no2_xs_jenouvrier.txt'2784 !print*, 'section efficace NO2: ', fil2785 ! 2786 ! if(is_master) then2787 ! 2788 !OPEN(UNIT=kin,FILE=fil,status='old')2789 !DO i = 1, 32790 !READ(kin,*)2791 ! ENDDO2792 !n1 = 100012793 !DO i = 1, n12794 !READ(kin,*) x1(i), y1(i)2795 !end do2796 ! 2797 !CALL addpnt(x1,y1,kdata,n1,x1(1)*(1.-deltax), 0.)2798 !CALL addpnt(x1,y1,kdata,n1, 0., 0.)2799 !CALL addpnt(x1,y1,kdata,n1,x1(n1)*(1.+deltax),0.)2800 !CALL addpnt(x1,y1,kdata,n1, 1.e+38, 0.)2801 !CALL inter2(nw,wl,yg1,n1,x1,y1,ierr)2802 ! 2803 ! endif !is_master2804 ! 2805 !call bcast(yg1)2806 ! 2807 ! fil = trim(datadir)//'/cross_sections/no2_xs_vandaele_294K.txt'2808 !print*, 'section efficace NO2: ', fil2809 ! 2810 ! if(is_master) then2811 ! 2812 !OPEN(UNIT=kin,FILE=fil,status='old')2813 !DO i = 1, 32814 !READ(kin,*)2815 ! ENDDO2816 !n2 = 279932817 !DO i = 1, n22818 !READ(kin,*) x2(i), y2(i)2819 !end do2820 ! 2821 !CALL addpnt(x2,y2,kdata,n2,x2(1)*(1.-deltax), 0.)2822 !CALL addpnt(x2,y2,kdata,n2, 0., 0.)2823 !CALL addpnt(x2,y2,kdata,n2,x2(n2)*(1.+deltax),0.)2824 !CALL addpnt(x2,y2,kdata,n2, 1.e+38, 0.)2825 !CALL inter2(nw,wl,yg2,n2,x2,y2,ierr)2826 ! 2827 ! endif !is_master2828 ! 2829 !call bcast(yg2)2830 ! 2831 ! fil = trim(datadir)//'/cross_sections/no2_xs_vandaele_220K.txt'2832 !print*, 'section efficace NO2: ', fil2833 ! 2834 ! if(is_master) then2835 ! 2836 !OPEN(UNIT=kin,FILE=fil,status='old')2837 !DO i = 1, 32838 !READ(kin,*)2839 ! ENDDO2840 !n3 = 279932841 ! DOi = 1, n32842 !READ(kin,*) x3(i), y3(i)2843 !end do2844 ! 2845 !CALL addpnt(x3,y3,kdata,n3,x3(1)*(1.-deltax), 0.)2846 !CALL addpnt(x3,y3,kdata,n3, 0., 0.)2847 !CALL addpnt(x3,y3,kdata,n3,x3(n3)*(1.+deltax),0.)2848 !CALL addpnt(x3,y3,kdata,n3, 1.e+38, 0.)2849 !CALL inter2(nw,wl,yg3,n3,x3,y3,ierr)2850 ! 2851 !do iw = 1, nw - 12852 !xsno2(iw) = yg1(iw)2853 !xsno2_294(iw) = yg2(iw)2854 !xsno2_220(iw) = yg3(iw)2855 !end do2856 ! 2857 ! endif !is_master2858 ! 2859 !call bcast(yg3)2860 !call bcast(xsno2)2861 !call bcast(xsno2_294)2862 !call bcast(xsno2_220)2863 ! 2781 2782 fil = 'cross_sections/no2_xs_jenouvrier.txt' 2783 print*, 'section efficace NO2: ', fil 2784 2785 if (is_master) then 2786 2787 OPEN(UNIT=kin,FILE=fil,status='old') 2788 DO i = 1, 3 2789 READ(kin,*) 2790 END DO 2791 n1 = 10001 2792 DO i = 1, n1 2793 READ(kin,*) x1(i), y1(i) 2794 end do 2795 2796 CALL addpnt(x1,y1,kdata,n1,x1(1)*(1.-deltax), 0.) 2797 CALL addpnt(x1,y1,kdata,n1, 0., 0.) 2798 CALL addpnt(x1,y1,kdata,n1,x1(n1)*(1.+deltax),0.) 2799 CALL addpnt(x1,y1,kdata,n1, 1.e+38, 0.) 2800 CALL inter2(nw,wl,yg1,n1,x1,y1,ierr) 2801 2802 end if !is_master 2803 2804 call bcast(yg1) 2805 2806 fil = 'cross_sections/no2_xs_vandaele_294K.txt' 2807 print*, 'section efficace NO2: ', fil 2808 2809 if (is_master) then 2810 2811 OPEN(UNIT=kin,FILE=fil,status='old') 2812 DO i = 1, 3 2813 READ(kin,*) 2814 END DO 2815 n2 = 27993 2816 DO i = 1, n2 2817 READ(kin,*) x2(i), y2(i) 2818 end do 2819 2820 CALL addpnt(x2,y2,kdata,n2,x2(1)*(1.-deltax), 0.) 2821 CALL addpnt(x2,y2,kdata,n2, 0., 0.) 2822 CALL addpnt(x2,y2,kdata,n2,x2(n2)*(1.+deltax),0.) 2823 CALL addpnt(x2,y2,kdata,n2, 1.e+38, 0.) 2824 CALL inter2(nw,wl,yg2,n2,x2,y2,ierr) 2825 2826 end if !is_master 2827 2828 call bcast(yg2) 2829 2830 fil = 'cross_sections/no2_xs_vandaele_220K.txt' 2831 print*, 'section efficace NO2: ', fil 2832 2833 if (is_master) then 2834 2835 OPEN(UNIT=kin,FILE=fil,status='old') 2836 DO i = 1, 3 2837 READ(kin,*) 2838 END DO 2839 n3 = 27993 2840 do i = 1, n3 2841 READ(kin,*) x3(i), y3(i) 2842 end do 2843 2844 CALL addpnt(x3,y3,kdata,n3,x3(1)*(1.-deltax), 0.) 2845 CALL addpnt(x3,y3,kdata,n3, 0., 0.) 2846 CALL addpnt(x3,y3,kdata,n3,x3(n3)*(1.+deltax),0.) 2847 CALL addpnt(x3,y3,kdata,n3, 1.e+38, 0.) 2848 CALL inter2(nw,wl,yg3,n3,x3,y3,ierr) 2849 2850 do iw = 1, nw - 1 2851 xsno2(iw) = yg1(iw) 2852 xsno2_294(iw) = yg2(iw) 2853 xsno2_220(iw) = yg3(iw) 2854 end do 2855 2856 end if !is_master 2857 2858 call bcast(yg3) 2859 call bcast(xsno2) 2860 call bcast(xsno2_294) 2861 call bcast(xsno2_220) 2862 2864 2863 ! photodissociation efficiency from jpl 2006 2865 ! 2866 ! fil = trim(datadir)//'/cross_sections/no2_yield_jpl2006.txt'2867 !print*, 'quantum yield NO2: ', fil2868 ! 2869 ! if(is_master) then2870 ! 2871 !OPEN(UNIT=kin,FILE=fil,STATUS='old')2872 !DO i = 1, 52873 !READ(kin,*)2874 ! ENDDO2875 !n = 252876 !n4 = n2877 !n5 = n2878 !DO i = 1, n2879 !READ(kin,*) x4(i), y4(i), y5(i)2880 !x5(i) = x4(i)2881 ! ENDDO2882 !CLOSE(kin)2883 ! 2884 !CALL addpnt(x4,y4,kdata,n4,x4(1)*(1.-deltax),y4(1))2885 !CALL addpnt(x4,y4,kdata,n4, 0.,y4(1))2886 !CALL addpnt(x4,y4,kdata,n4,x4(n4)*(1.+deltax), 0.)2887 !CALL addpnt(x4,y4,kdata,n4, 1.e+38, 0.)2888 !CALL inter2(nw,wl,yg4,n4,x4,y4,ierr)2889 !IF (ierr .NE. 0) THEN2890 !WRITE(*,*) ierr, fil2891 !STOP2892 ! ENDIF2893 ! 2894 ! endif !is_master2895 ! 2896 !call bcast(yg4)2897 ! 2898 ! if(is_master) then2899 ! 2900 !CALL addpnt(x5,y5,kdata,n5,x5(1)*(1.-deltax),y5(1))2901 !CALL addpnt(x5,y5,kdata,n5, 0.,y5(1))2902 !CALL addpnt(x5,y5,kdata,n5,x5(n5)*(1.+deltax), 0.)2903 !CALL addpnt(x5,y5,kdata,n5, 1.e+38, 0.)2904 !CALL inter2(nw,wl,yg5,n5,x5,y5,ierr)2905 !IF (ierr .NE. 0) THEN2906 !WRITE(*,*) ierr, fil2907 !STOP2908 ! ENDIF2909 ! 2910 !do iw = 1, nw - 12911 !yldno2_298(iw) = yg4(iw)2912 !yldno2_248(iw) = yg5(iw)2913 !end do2914 ! 2915 ! endif !is_master2916 ! 2917 !call bcast(yg5)2918 !call bcast(yldno2_298)2919 !call bcast(yldno2_248)2920 !2921 !end subroutine rdxsno22922 ! 2864 2865 fil = 'cross_sections/no2_yield_jpl2006.txt' 2866 print*, 'quantum yield NO2: ', fil 2867 2868 if (is_master) then 2869 2870 OPEN(UNIT=kin,FILE=fil,STATUS='old') 2871 DO i = 1, 5 2872 READ(kin,*) 2873 END DO 2874 n = 25 2875 n4 = n 2876 n5 = n 2877 DO i = 1, n 2878 READ(kin,*) x4(i), y4(i), y5(i) 2879 x5(i) = x4(i) 2880 END DO 2881 CLOSE(kin) 2882 2883 CALL addpnt(x4,y4,kdata,n4,x4(1)*(1.-deltax),y4(1)) 2884 CALL addpnt(x4,y4,kdata,n4, 0.,y4(1)) 2885 CALL addpnt(x4,y4,kdata,n4,x4(n4)*(1.+deltax), 0.) 2886 CALL addpnt(x4,y4,kdata,n4, 1.e+38, 0.) 2887 CALL inter2(nw,wl,yg4,n4,x4,y4,ierr) 2888 IF (ierr .NE. 0) THEN 2889 WRITE(*,*) ierr, fil 2890 STOP 2891 END IF 2892 2893 end if !is_master 2894 2895 call bcast(yg4) 2896 2897 if (is_master) then 2898 2899 CALL addpnt(x5,y5,kdata,n5,x5(1)*(1.-deltax),y5(1)) 2900 CALL addpnt(x5,y5,kdata,n5, 0.,y5(1)) 2901 CALL addpnt(x5,y5,kdata,n5,x5(n5)*(1.+deltax), 0.) 2902 CALL addpnt(x5,y5,kdata,n5, 1.e+38, 0.) 2903 CALL inter2(nw,wl,yg5,n5,x5,y5,ierr) 2904 IF (ierr .NE. 0) THEN 2905 WRITE(*,*) ierr, fil 2906 STOP 2907 END IF 2908 2909 do iw = 1, nw - 1 2910 yldno2_298(iw) = yg4(iw) 2911 yldno2_248(iw) = yg5(iw) 2912 end do 2913 2914 end if !is_master 2915 2916 call bcast(yg5) 2917 call bcast(yldno2_298) 2918 call bcast(yldno2_248) 2919 2920 end subroutine rdxsno2 2921 2923 2922 !============================================================================== 2924 2923 2925 !subroutine rdxsno(nw, wl, yg, yieldno)2924 subroutine rdxsno(nw, wl, yg, yieldno) 2926 2925 2927 2926 !-----------------------------------------------------------------------------* … … 2935 2934 !-----------------------------------------------------------------------------* 2936 2935 2937 ! use datafile_mod, only: datadir 2938 ! USE mod_phys_lmdz_para, ONLY: is_master 2939 ! USE mod_phys_lmdz_transfert_para, ONLY: bcast 2940 2941 ! implicit none 2936 USE mod_phys_lmdz_para, ONLY: is_master 2937 USE mod_phys_lmdz_transfert_para, ONLY: bcast 2938 2939 implicit none 2942 2940 2943 2941 ! input 2944 2942 2945 !integer :: nw ! number of wavelength grid points2946 !real, dimension(nw) :: wl ! lower wavelength for each interval2943 integer :: nw ! number of wavelength grid points 2944 real, dimension(nw) :: wl ! lower wavelength for each interval 2947 2945 2948 2946 ! output 2949 2947 2950 !real, dimension(nw) :: yg ! no cross-sections (cm2)2951 !real, dimension(nw) :: yieldno ! no photodissociation efficiency2948 real, dimension(nw) :: yg ! no cross-sections (cm2) 2949 real, dimension(nw) :: yieldno ! no photodissociation efficiency 2952 2950 2953 2951 ! local 2954 2952 2955 !integer, parameter :: kdata = 1102956 !real, parameter :: deltax = 1.e-42957 !real, dimension(kdata) :: x1, y1, x2, y22958 !integer :: i, iw, n, ierr2959 !character*100 fil2960 !integer :: kin, kout ! input/output logical units2961 2962 !kin = 102953 integer, parameter :: kdata = 110 2954 real, parameter :: deltax = 1.e-4 2955 real, dimension(kdata) :: x1, y1, x2, y2 2956 integer :: i, iw, n, ierr 2957 character*100 fil 2958 integer :: kin, kout ! input/output logical units 2959 2960 kin = 10 2963 2961 2964 2962 ! no cross-sections 2965 2963 2966 ! fil = trim(datadir)//'/cross_sections/no_xs_francisco.txt'2967 !print*, 'section efficace NO: ', fil2968 2969 ! if(is_master) then2970 2971 !OPEN(kin,FILE=fil,STATUS='OLD')2972 2973 !n = 992974 !DO i = 1, n2975 !READ(kin,*) x1(i), y1(i)2976 ! ENDDO2977 !CLOSE(kin)2978 2979 !CALL addpnt(x1,y1,kdata,n,x1(1)*(1.-deltax),0.)2980 !CALL addpnt(x1,y1,kdata,n, 0.,0.)2981 !CALL addpnt(x1,y1,kdata,n,x1(n)*(1.+deltax),0.)2982 !CALL addpnt(x1,y1,kdata,n, 1E38,0.)2983 2984 !CALL inter2(nw,wl,yg,n,x1,y1,ierr)2985 !IF (ierr .NE. 0) THEN2986 !WRITE(*,*) ierr, fil2987 !STOP2988 ! ENDIF2989 2990 ! endif !is_master2991 2992 !call bcast(yg)2964 fil = 'cross_sections/no_xs_francisco.txt' 2965 print*, 'section efficace NO: ', fil 2966 2967 if (is_master) then 2968 2969 OPEN(kin,FILE=fil,STATUS='OLD') 2970 2971 n = 99 2972 DO i = 1, n 2973 READ(kin,*) x1(i), y1(i) 2974 END DO 2975 CLOSE(kin) 2976 2977 CALL addpnt(x1,y1,kdata,n,x1(1)*(1.-deltax),0.) 2978 CALL addpnt(x1,y1,kdata,n, 0.,0.) 2979 CALL addpnt(x1,y1,kdata,n,x1(n)*(1.+deltax),0.) 2980 CALL addpnt(x1,y1,kdata,n, 1E38,0.) 2981 2982 CALL inter2(nw,wl,yg,n,x1,y1,ierr) 2983 IF (ierr .NE. 0) THEN 2984 WRITE(*,*) ierr, fil 2985 STOP 2986 END IF 2987 2988 end if !is_master 2989 2990 call bcast(yg) 2993 2991 2994 2992 ! photodissociation yield 2995 2993 2996 ! fil = trim(datadir)//'/cross_sections/noefdis.txt'2997 2998 ! if(is_master) then2999 3000 !OPEN(UNIT=kin,FILE=fil,STATUS='old')3001 3002 !n = 333003 !DO i = 1, n3004 !READ(kin,*) x2(n-i+1), y2(n-i+1)3005 !END DO3006 !CLOSE (kin)3007 3008 !CALL addpnt(x2,y2,kdata,n,x2(1)*(1.-deltax),0.)3009 !CALL addpnt(x2,y2,kdata,n, 0.,0.)3010 !CALL addpnt(x2,y2,kdata,n,x2(n)*(1.+deltax),1.)3011 !CALL addpnt(x2,y2,kdata,n, 1.e+38,1.)3012 !CALL inter2(nw,wl,yieldno,n,x2,y2,ierr)3013 !IF (ierr .NE. 0) THEN3014 !WRITE(*,*) ierr, fil3015 !STOP3016 ! ENDIF3017 3018 ! endif !is_master3019 3020 !call bcast(yieldno)3021 3022 !end subroutine rdxsno2994 fil = 'cross_sections/noefdis.txt' 2995 2996 if (is_master) then 2997 2998 OPEN(UNIT=kin,FILE=fil,STATUS='old') 2999 3000 n = 33 3001 DO i = 1, n 3002 READ(kin,*) x2(n-i+1), y2(n-i+1) 3003 END DO 3004 CLOSE (kin) 3005 3006 CALL addpnt(x2,y2,kdata,n,x2(1)*(1.-deltax),0.) 3007 CALL addpnt(x2,y2,kdata,n, 0.,0.) 3008 CALL addpnt(x2,y2,kdata,n,x2(n)*(1.+deltax),1.) 3009 CALL addpnt(x2,y2,kdata,n, 1.e+38,1.) 3010 CALL inter2(nw,wl,yieldno,n,x2,y2,ierr) 3011 IF (ierr .NE. 0) THEN 3012 WRITE(*,*) ierr, fil 3013 STOP 3014 END IF 3015 3016 end if !is_master 3017 3018 call bcast(yieldno) 3019 3020 end subroutine rdxsno 3023 3021 3024 3022 !============================================================================== 3025 3023 3026 !subroutine rdxsn2(nw, wl, yg, yieldn2)3024 subroutine rdxsn2(nw, wl, yg, yieldn2) 3027 3025 3028 3026 !-----------------------------------------------------------------------------* … … 3035 3033 !-----------------------------------------------------------------------------* 3036 3034 3037 ! use datafile_mod, only: datadir 3038 ! USE mod_phys_lmdz_para, ONLY: is_master 3039 ! USE mod_phys_lmdz_transfert_para, ONLY: bcast 3040 3041 ! implicit none 3035 USE mod_phys_lmdz_para, ONLY: is_master 3036 USE mod_phys_lmdz_transfert_para, ONLY: bcast 3037 3038 implicit none 3042 3039 3043 3040 ! input 3044 3041 3045 !integer :: nw ! number of wavelength grid points3046 !real, dimension(nw) :: wl ! lower wavelength for each interval3042 integer :: nw ! number of wavelength grid points 3043 real, dimension(nw) :: wl ! lower wavelength for each interval 3047 3044 3048 3045 ! output 3049 3046 3050 !real, dimension(nw) :: yg ! n2 cross-sections (cm2)3051 !real, dimension(nw) :: yieldn2 ! n2 photodissociation yield3047 real, dimension(nw) :: yg ! n2 cross-sections (cm2) 3048 real, dimension(nw) :: yieldn2 ! n2 photodissociation yield 3052 3049 3053 3050 ! local 3054 3051 3055 !integer, parameter :: kdata = 11003056 !real, parameter :: deltax = 1.e-43057 !real, dimension(kdata) :: x1, y1, x2, y23058 !real :: xl, xu3059 !integer :: i, iw, n, ierr3060 !integer :: kin, kout ! input/output logical units3061 !character*100 fil3062 3063 !kin = 103052 integer, parameter :: kdata = 1100 3053 real, parameter :: deltax = 1.e-4 3054 real, dimension(kdata) :: x1, y1, x2, y2 3055 real :: xl, xu 3056 integer :: i, iw, n, ierr 3057 integer :: kin, kout ! input/output logical units 3058 character*100 fil 3059 3060 kin = 10 3064 3061 3065 3062 ! n2 cross sections 3066 3063 3067 ! fil = trim(datadir)//'/cross_sections/n2secef_01nm.txt'3068 !print*, 'section efficace N2: ', fil3069 3070 ! if(is_master) then3071 3072 !OPEN(kin,FILE=fil,STATUS='OLD')3073 3074 !n = 10203075 !DO i = 1, n3076 !READ(kin,*) x1(i), y1(i)3077 ! ENDDO3078 !CLOSE(kin)3079 3080 !CALL addpnt(x1,y1,kdata,n,x1(1)*(1.-deltax),0.)3081 !CALL addpnt(x1,y1,kdata,n, 0.,0.)3082 !CALL addpnt(x1,y1,kdata,n,x1(n)*(1.+deltax),0.)3083 !CALL addpnt(x1,y1,kdata,n, 1E38,0.)3084 3085 !CALL inter2(nw,wl,yg,n,x1,y1,ierr)3064 fil = 'cross_sections/n2secef_01nm.txt' 3065 print*, 'section efficace N2: ', fil 3066 3067 if (is_master) then 3068 3069 OPEN(kin,FILE=fil,STATUS='OLD') 3070 3071 n = 1020 3072 DO i = 1, n 3073 READ(kin,*) x1(i), y1(i) 3074 END DO 3075 CLOSE(kin) 3076 3077 CALL addpnt(x1,y1,kdata,n,x1(1)*(1.-deltax),0.) 3078 CALL addpnt(x1,y1,kdata,n, 0.,0.) 3079 CALL addpnt(x1,y1,kdata,n,x1(n)*(1.+deltax),0.) 3080 CALL addpnt(x1,y1,kdata,n, 1E38,0.) 3081 3082 CALL inter2(nw,wl,yg,n,x1,y1,ierr) 3086 3083 3087 !IF (ierr .NE. 0) THEN3088 !WRITE(*,*) ierr, fil3089 !STOP3090 ! ENDIF3091 3092 ! endif !is_master3093 3094 !call bcast(yg)3084 IF (ierr .NE. 0) THEN 3085 WRITE(*,*) ierr, fil 3086 STOP 3087 END IF 3088 3089 end if !is_master 3090 3091 call bcast(yg) 3095 3092 3096 3093 ! photodissociation yield 3097 3094 3098 ! fil = trim(datadir)//'/cross_sections/n2_ionef_schunknagy2000.txt'3099 3100 ! if(is_master) then3101 3102 !OPEN(UNIT=kin,FILE=fil,STATUS='old')3103 3104 !n = 193105 !read(kin,*)3106 !DO i = 1, n3107 !READ(kin,*) xl, xu, y2(i)3108 !x2(i) = (xl + xu)/2.3109 !y2(i) = 1. - y2(i)3110 !END DO3111 !CLOSE (kin)3112 3113 !CALL addpnt(x2,y2,kdata,n,x2(1)*(1.-deltax),0.)3114 !CALL addpnt(x2,y2,kdata,n, 0.,0.)3115 !CALL addpnt(x2,y2,kdata,n,x2(n)*(1.+deltax),1.)3116 !CALL addpnt(x2,y2,kdata,n, 1.e+38,1.)3117 !CALL inter2(nw,wl,yieldn2,n,x2,y2,ierr)3118 !IF (ierr .NE. 0) THEN3119 !WRITE(*,*) ierr, fil3120 !STOP3121 ! ENDIF3122 3123 ! endif !is_master3124 3125 !call bcast(yieldn2)3126 3127 !end subroutine rdxsn23095 fil = 'cross_sections/n2_ionef_schunknagy2000.txt' 3096 3097 if (is_master) then 3098 3099 OPEN(UNIT=kin,FILE=fil,STATUS='old') 3100 3101 n = 19 3102 read(kin,*) 3103 DO i = 1, n 3104 READ(kin,*) xl, xu, y2(i) 3105 x2(i) = (xl + xu)/2. 3106 y2(i) = 1. - y2(i) 3107 END DO 3108 CLOSE (kin) 3109 3110 CALL addpnt(x2,y2,kdata,n,x2(1)*(1.-deltax),0.) 3111 CALL addpnt(x2,y2,kdata,n, 0.,0.) 3112 CALL addpnt(x2,y2,kdata,n,x2(n)*(1.+deltax),1.) 3113 CALL addpnt(x2,y2,kdata,n, 1.e+38,1.) 3114 CALL inter2(nw,wl,yieldn2,n,x2,y2,ierr) 3115 IF (ierr .NE. 0) THEN 3116 WRITE(*,*) ierr, fil 3117 STOP 3118 END IF 3119 3120 end if !is_master 3121 3122 call bcast(yieldn2) 3123 3124 end subroutine rdxsn2 3128 3125 3129 3126 !============================================================================== -
trunk/LMDZ.VENUS/libf/phyvenus/photolysis_online.F
r2780 r2795 7 7 $ i_cl2, i_hocl, i_so2, i_so, i_so3, 8 8 $ i_clo, i_ocs, i_cocl2, i_h2so4, i_cl, 9 $ nesp, rm,9 $ i_no2, i_no, i_n2, i_n2d, nesp, rm, 10 10 $ sza, dist_sol, v_phot) 11 11 … … 15 15 16 16 ! input 17 18 ! logical, intent(in) :: deutchem19 17 20 18 integer, intent(in) :: nesp ! total number of chemical species … … 24 22 $ i_oh, i_ho2, i_h2o2, i_h2o, i_h, i_hcl, 25 23 $ i_cl2, i_hocl, i_so2, i_so, i_so3, i_clo, 26 $ i_ocs, i_cocl2, i_h2so4 , i_cl 24 $ i_ocs, i_cl, i_cocl2, i_h2so4, i_no2, 25 $ i_no, i_n2, i_n2d 27 26 28 27 real, dimension(nlayer), intent(in) :: press, temp, zmmean ! pressure (hpa)/temperature (k)/mean molecular mass (g.mol-1) … … 67 66 integer :: j_o2_o, j_o2_o1d, j_co2_o, j_co2_o1d, j_o3_o1d, j_o3_o, 68 67 $ j_h2o, j_h2o2, j_ho2, j_h, j_hcl, j_cl2, j_hocl, j_so2, 69 $ j_so, j_so3, j_clo, j_ocs, j_cocl2, j_h2so4 68 $ j_so, j_so3, j_clo, j_ocs, j_cocl2, j_h2so4, j_no2, 69 $ j_no, j_n2 70 70 71 71 integer :: a_o2, a_co2, a_o3, a_h2o, a_h2o2, a_ho2, a_hcl, a_cl2, 72 72 $ a_hocl, a_so2, a_so, a_so3, a_clo, a_ocs, a_cocl2, 73 $ a_h2so4 73 $ a_h2so4, a_no2, a_no, a_n2 74 74 integer :: i, ilay, iw, ialt 75 75 real :: deltaj 76 logical :: deutchem 76 77 77 78 ! absorbing gas numbering … … 93 94 a_cocl2 = 15 ! cocl2 94 95 a_h2so4 = 16 ! h2so4 95 ! a_h2 = 7 ! h2 96 ! a_no = 8 ! no 97 ! a_no2 = 9 ! no2 98 ! a_n2 = 10 ! n2 96 a_no2 = 17 ! no2 97 a_no = 18 ! no 98 a_n2 = 19 ! n2 99 99 100 100 ! photodissociation rates numbering. … … 120 120 j_cocl2 = 18 ! cocl2 + hv -> 2cl + co 121 121 j_h2so4 = 19 ! h2so4 + hv -> so3 + h2o 122 ! j_h2 = 10 ! h2 + hv -> h + h 123 ! j_no = 11 ! no + hv -> n + o124 ! j_no2 = 12 ! no2 + hv -> no + o 125 ! j_n2 = 13 ! n2 + hv -> n + n 126 ! j_hdo_od = 14! hdo + hv -> od + h127 ! j_hdo_d = 15! hdo + hv -> d + oh122 j_no2 = 20 ! no2 + hv -> no + o 123 j_no = 21 ! no + hv -> n + o 124 j_n2 = 22 ! n2 + hv -> n(2d) + n 125 126 ! j_hdo_od = ! hdo + hv -> od + h 127 ! j_hdo_d = ! hdo + hv -> d + oh 128 128 129 129 !==== air column increments and rayleigh optical depth … … 164 164 ! no2: 165 165 166 !call setno2(nphot, nlayer, nw, wc, temp, xsno2, xsno2_220,167 !$ xsno2_294, yldno2_248, yldno2_298, j_no2,168 !$ colinc, rm(:,i_no2), dtgas(:,:,a_no2), sj)166 call setno2(nphot, nlayer, nw, wc, temp, xsno2, xsno2_220, 167 $ xsno2_294, yldno2_248, yldno2_298, j_no2, 168 $ colinc, rm(:,i_no2), dtgas(:,:,a_no2), sj) 169 169 170 170 !==== temperature independent optical depths and cross-sections … … 188 188 dtgas(ilay,iw,a_h2so4) = colinc(ilay)*rm(ilay,i_h2so4) 189 189 $ *xsh2so4(iw) 190 ! dtgas(ilay,iw,a_h2) = colinc(ilay)*rm(ilay,i_h2)*xsh2(iw) 191 ! dtgas(ilay,iw,a_no) = colinc(ilay)*rm(ilay,i_no)*xsno(iw) 192 ! dtgas(ilay,iw,a_n2) = colinc(ilay)*rm(ilay,i_n2)*xsn2(iw) 190 dtgas(ilay,iw,a_no) = colinc(ilay)*rm(ilay,i_no)*xsno(iw) 191 dtgas(ilay,iw,a_n2) = colinc(ilay)*rm(ilay,i_n2)*xsn2(iw) 193 192 end do 194 193 end do … … 221 220 sj(ilay,iw,j_cocl2) = xscocl2(iw) ! cocl2 222 221 sj(ilay,iw,j_h2so4) = xsh2so4(iw) ! h2so4 223 ! sj(ilay,iw,j_h2) = xsh2(iw)*yieldh2(iw) ! h2 224 ! sj(ilay,iw,j_no) = xsno(iw)*yieldno(iw) ! no 225 ! sj(ilay,iw,j_n2) = xsn2(iw)*yieldn2(iw) ! n2 222 sj(ilay,iw,j_no) = xsno(iw)*yieldno(iw) ! no 223 sj(ilay,iw,j_n2) = xsn2(iw)*yieldn2(iw) ! n2 226 224 end do 227 225 end do 228 226 229 ! !HDO cross section 227 ! hdo cross section 228 230 229 ! if (deutchem) then 231 230 ! do ilay=1,nlayer … … 238 237 ! endif 239 238 240 !==== set solidaerosol properties and optical depth241 242 tau = 0. ! no solid aerosols239 !==== set aerosol properties and optical depth 240 241 tau = 0. ! no solid aerosols for the present time 243 242 244 243 call setaer(nlayer,alt,tau,nw,dtaer,omaer,gaer) … … 293 292 end do 294 293 295 ! write(45,*) wc(iw), v_phot(nlayer,3), v_phot(nlayer,4)296 297 294 ! eliminate small values 298 295 … … 300 297 v_phot(:,1:nphot) = 0. 301 298 end where 302 299 303 300 end do ! iw 304 301 … … 438 435 439 436 yieldco2(:) = 1 437 440 438 if (wc(l) >= 167.) then 441 439 sj(i,l,j_co2_o) = sco2*yieldco2(l) … … 666 664 $ /(360. - 298.)*(temp - 298.) 667 665 end if 668 669 666 ! 219 nm photolysis treshold 670 671 667 if (wc(iw) <= 219.) then 672 668 sj(ilev,iw,j_so2) = xsso2 … … 763 759 764 760 !============================================================================== 765 ! 766 !subroutine setno2(nd, nlayer, nw, wc, tlay, xsno2, xsno2_220,767 !$ xsno2_294, yldno2_248, yldno2_298, j_no2,768 !$ colinc, rm, dt, sj)769 ! 761 762 subroutine setno2(nd, nlayer, nw, wc, tlay, xsno2, xsno2_220, 763 $ xsno2_294, yldno2_248, yldno2_298, j_no2, 764 $ colinc, rm, dt, sj) 765 770 766 !-----------------------------------------------------------------------------* 771 767 != PURPOSE: =* 772 768 != Set up the no2 temperature-dependent cross-sections and optical depth =* 773 769 !-----------------------------------------------------------------------------* 774 ! 775 !implicit none776 ! 770 771 implicit none 772 777 773 ! input: 778 ! 779 !integer :: nd ! number of photolysis rates780 !integer :: nlayer ! number of vertical layers781 !integer :: nw ! number of wavelength grid points782 !integer :: j_no2 ! photolysis index783 !real, dimension(nw) :: wc ! central wavelength for each interval784 !real, dimension(nw) :: xsno2, xsno2_220, xsno2_294 ! no2 absorption cross-section at 220-294 k (cm2)785 !real, dimension(nw) :: yldno2_248, yldno2_298 ! no2 quantum yield at 248-298 k786 !real, dimension(nlayer) :: tlay ! temperature (k)787 !real, dimension(nlayer) :: rm ! no2 mixing ratio788 !real, dimension(nlayer) :: colinc ! air column increment (molecule.cm-2)774 775 integer :: nd ! number of photolysis rates 776 integer :: nlayer ! number of vertical layers 777 integer :: nw ! number of wavelength grid points 778 integer :: j_no2 ! photolysis index 779 real, dimension(nw) :: wc ! central wavelength for each interval 780 real, dimension(nw) :: xsno2, xsno2_220, xsno2_294 ! no2 absorption cross-section at 220-294 k (cm2) 781 real, dimension(nw) :: yldno2_248, yldno2_298 ! no2 quantum yield at 248-298 k 782 real, dimension(nlayer) :: tlay ! temperature (k) 783 real, dimension(nlayer) :: rm ! no2 mixing ratio 784 real, dimension(nlayer) :: colinc ! air column increment (molecule.cm-2) 789 785 790 786 ! output: 791 787 792 !real, dimension(nlayer,nw) :: dt ! optical depth793 !real, dimension(nlayer,nw,nd) :: sj ! cross-section array (cm2)788 real, dimension(nlayer,nw) :: dt ! optical depth 789 real, dimension(nlayer,nw,nd) :: sj ! cross-section array (cm2) 794 790 795 791 ! local: 796 792 797 !integer :: ilev, iw798 !real :: temp, qy793 integer :: ilev, iw 794 real :: temp, qy 799 795 800 796 ! temperature dependance: jpl 2006 801 797 802 !do ilev = 1,nlayer803 !temp = max(220.,min(tlay(ilev),294.))804 !do iw = 1, nw - 1805 !if (wc(iw) < 238.) then806 !sj(ilev,iw,j_no2) = xsno2(iw)807 !else808 !sj(ilev,iw,j_no2) = xsno2_220(iw)809 !$ + (xsno2_294(iw) - xsno2_220(iw))810 !$ /(294. - 220.)*(temp - 220.)811 !end if798 do ilev = 1,nlayer 799 temp = max(220.,min(tlay(ilev),294.)) 800 do iw = 1, nw - 1 801 if (wc(iw) < 238.) then 802 sj(ilev,iw,j_no2) = xsno2(iw) 803 else 804 sj(ilev,iw,j_no2) = xsno2_220(iw) 805 $ + (xsno2_294(iw) - xsno2_220(iw)) 806 $ /(294. - 220.)*(temp - 220.) 807 end if 812 808 813 809 ! optical depth 814 810 815 !dt(ilev,iw) = colinc(ilev)*rm(ilev)*sj(ilev,iw,j_no2)816 !end do817 !end do811 dt(ilev,iw) = colinc(ilev)*rm(ilev)*sj(ilev,iw,j_no2) 812 end do 813 end do 818 814 819 815 ! quantum yield: jpl 2006 820 816 821 !do ilev = 1,nlayer822 !temp = max(248.,min(tlay(ilev),298.))823 !do iw = 1, nw - 1824 !qy = yldno2_248(iw) + (yldno2_298(iw) - yldno2_248(iw))825 !$ /(298. - 248.)*(temp - 248.)826 !sj(ilev,iw,j_no2) = sj(ilev,iw,j_no2)*qy827 !end do828 !end do829 ! 830 !end subroutine setno2817 do ilev = 1,nlayer 818 temp = max(248.,min(tlay(ilev),298.)) 819 do iw = 1, nw - 1 820 qy = yldno2_248(iw) + (yldno2_298(iw) - yldno2_248(iw)) 821 $ /(298. - 248.)*(temp - 248.) 822 sj(ilev,iw,j_no2) = sj(ilev,iw,j_no2)*qy 823 end do 824 end do 825 826 end subroutine setno2 831 827 832 828 !============================================================================== … … 867 863 gamma = 0.03 ! conrath parameter 868 864 869 do ilay = 1, nlayer - 1 870 do iw = 1, nw - 1 871 dtaer(ilay,iw) = 0. ! no aer for the moment 872 omaer(ilay,iw) = 0.622 873 gaer(ilay,iw) = 0.88 874 end do 875 end do 865 dtaer(:,:) = 0. 866 omaer(:,:) = 0. 867 gaer(:,:) = 0. 868 869 omaer(:,:) = omega 870 gaer(:,:) =g 871 872 ! optical depth profile: 873 874 tautot = 0. 875 do ilay = 1, nlayer-1 876 dz = alt(ilay+1) - alt(ilay) 877 tautot = tautot + exp(gamma*(1. - exp(alt(ilay)/scaleh)))*dz 878 end do 879 880 q0 = tau/tautot 881 do ilay = 1, nlayer-1 882 dz = alt(ilay+1) - alt(ilay) 883 dtaer(ilay,:) = q0*exp(gamma*(1. - exp(alt(ilay)/scaleh)))*dz 884 omaer(ilay,:) = omega 885 gaer(ilay,:) = g 886 end do 876 887 877 888 end subroutine setaer … … 960 971 omcld(i,iw) = 0. 961 972 gcld(i,iw) = 0. 962 end do973 end do 963 974 end do 964 975 c 965 976 c if you do not want any clouds, set clouds = .false. 966 977 c 967 978 clouds = .true. 968 979 c 969 980 if (.not. clouds) then 970 981 write(kout,*) 'no clouds' 971 982 return 972 983 end if 973 984 c 974 985 * cloud properties are set for each layer (not each level) 975 986 … … 1015 1026 * for g and omega, use averages weigthed by optical depth 1016 1027 1017 ! 1028 ! DO 11, i = 1, n !***** CHANGED!!See header!!***** 1018 1029 DO 11, i = 1, n-1 1019 1030 womd(i) = omd(i) * cd(i) … … 1024 1035 CALL inter3(nz,z,gz , n, zd,wgd,0) 1025 1036 1037 1026 1038 ! Imprimer Cz et imprimer cd pour comparer 1039 1027 1040 1028 1041 DO 15, i = 1, nz-1 … … 1047 1060 17 CONTINUE 1048 1061 1062 *_______________________________________________________________________ 1063 1049 1064 RETURN 1050 END 1065 END 1051 1066 1052 1067 !============================================================================== … … 1412 1427 ! CUPTN and CDNTN = calc. when TAU is TAUN 1413 1428 ! DIVISR = prevents division by zero 1414 1415 1429 do j = 0, nlev 1416 1430 tauc(j) = 0. … … 1716 1730 fdn(lev) = edn(lev)/mu1(lev) 1717 1731 fup(lev) = eup(lev)/mu1(lev) 1718 1719 1732 DO 60, lev = 2, nlayer + 1 1720 1733 fdr(lev) = EXP(-tausla(lev-1)) -
trunk/LMDZ.VENUS/libf/phyvenus/physiq_mod.F
r2788 r2795 456 456 allocate(prod_tr(klon,klev,nqmax)) 457 457 allocate(loss_tr(klon,klev,nqmax)) 458 allocate(no_emission(klon,klev)) 459 allocate(o2_emission(klon,klev)) 458 460 459 461 #ifdef CPP_XIOS … … 1070 1072 $ iter, 1071 1073 $ prod_tr, 1072 $ loss_tr) 1074 $ loss_tr, 1075 $ no_emission, 1076 $ o2_emission) 1073 1077 1074 1078 if (ok_sedim) then … … 2123 2127 2124 2128 ! tracers in gas phase, column densities 2129 2125 2130 do iq = 1,nqmax - nmicro 2126 2131 col_dens_tr(:,iq)=0. … … 2131 2136 call send_xios_field("col_"//tname(iq),col_dens_tr(:,iq)) 2132 2137 end do 2133 2134 2138 2135 2139 ! tracers in liquid phase, volume mixing ratio … … 2144 2148 end if 2145 2149 end if 2150 2151 ! aeronomical emissions 2152 2153 ! call send_xios_field("no_emission",no_emission) 2154 ! call send_xios_field("o2_emission",o2_emission) 2146 2155 2147 2156 ! chemical iterations -
trunk/LMDZ.VENUS/libf/phyvenus/phytrac_chimie.F
r2780 r2795 15 15 $ iter, 16 16 $ prod_tr, 17 $ loss_tr) 17 $ loss_tr, 18 $ no_emi, 19 $ o2_emi) 18 20 19 21 use chemparam_mod … … 48 50 !=================================================================== 49 51 50 real, dimension(nlon,nlev,nqmax) :: d_tr_chem ! chemical tendency for each tracer 51 integer, dimension(nlon,nlev) :: iter ! chemical iterations 52 real, dimension(nlon,nlev,nqmax) :: prod_tr, loss_tr ! produc and loss tracer 52 integer, dimension(nlon,nlev) :: iter ! chemical iterations 53 real, dimension(nlon,nlev,nqmax) :: d_tr_chem ! chemical tendency for each tracer 54 real, dimension(nlon,nlev,nqmax) :: prod_tr, loss_tr ! production and loss terms (for info) 55 real, dimension(nlon,nlev) :: no_emi ! no emission 56 real, dimension(nlon,nlev) :: o2_emi ! o2 emission 53 57 54 58 !=================================================================== … … 70 74 real, dimension(nlon,nlev) :: trac_sum 71 75 real, dimension(nlon,nlev,nqmax) :: ztrac ! local tracer mixing ratio 76 real, dimension(nlev) :: no_em 77 real, dimension(nlev) :: o2_em 72 78 73 79 !=================================================================== … … 299 305 $ nqmax, iter(ilon,:), 300 306 $ prod_tr(ilon,:,:), 301 $ loss_tr(ilon,:,:)) 307 $ loss_tr(ilon,:,:), 308 $ no_em, o2_em) 309 310 no_emi(ilon,:) = no_em(:) 311 o2_emi(ilon,:) = o2_em(:) 302 312 303 313 end do
Note: See TracChangeset
for help on using the changeset viewer.