Changeset 3968 for trunk/LMDZ.GENERIC/libf/phystd/calc_rayleigh.F90
- Timestamp:
- Nov 20, 2025, 4:23:54 PM (41 hours ago)
- File:
-
- 1 edited
-
trunk/LMDZ.GENERIC/libf/phystd/calc_rayleigh.F90 (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.GENERIC/libf/phystd/calc_rayleigh.F90
r3863 r3968 102 102 103 103 if ((BWNV(L_NSPECTV+1).gt.60000.).and.(strictboundrayleigh)) then 104 message="Rayleigh scattering is unknown for wn>60000 cm-1 - some singularities are presentfor higher wavenumber - if you know what you are doing, use strictboundrayleigh=.false."104 message="Rayleigh scattering is unknown for wn>60000 cm-1 - all data is extrapolated for higher wavenumber - if you know what you are doing, use strictboundrayleigh=.false." 105 105 call abort_physic(subname,message,1) 106 106 elseif ((BWNV(L_NSPECTV+1).gt.60000.).and..not.(strictboundrayleigh)) then … … 160 160 T0(:) = 288.15 161 161 P0(:) = 1.01325e5 162 ! ng -> valid range of the measurements : 0.1807 - 1.8172 um 163 ng(:) = 1. + 1.1427e3*(5799.25/(128908.9**2 - wn**2) + 120.05/(89223.8**2 - wn**2) + 5.3334/(75037.5**2 - wn**2) + 4.3244/(67837.7**2 - wn**2) + 0.1218145e-4/(2418.136**2 - wn**2)) ! there is an error on the paper 1.1427e6 -> 1.1427e3 162 if (wn .lt. 55331) then 163 ! Sneep et al, 2005 164 ! doi:10.1016/j.jqsrt.2004.07.025 165 ! ng -> valid range of the measurements : 0.1807 - 1.8172 um 166 ng(:) = 1. + 1.1427e3*(5799.25/(128908.9**2 - wn**2) + 120.05/(89223.8**2 - wn**2) + 5.3334/(75037.5**2 - wn**2) + 4.3244/(67837.7**2 - wn**2) + 0.1218145e-4/(2418.136**2 - wn**2)) ! there is an error on the paper 1.1427e6 -> 1.1427e3 167 else 168 ! Cuthbertson and Cuthbertson, 1920 (extrapolation) 169 ! doi:10.1098/rspa.1920.0020 170 ng(:) = 1. + (6914.45/(156.85 - (wn*1e-4)**2))*1e-5 171 endif 164 172 Fk = 1.1364 + 25.3e-12*wn**2 165 173 tauvari(igas,:) = mass_frac(igas,:)*((ng(:)**2-1.)/(ng(:)**2+2.))**2 * Fk * (wn*100.)**4 ! wn*100 -> cm-1 to m-1 174 ! N=P/(kB*T) and muvar/1000 -> g/mol to kg/mol 175 tauconsti(igas,:) = 24.*pi**3 *6.022141E+023 / (g*(muvar(:)/1000.)*(P0(:)/(1.380649E-23*T0(:)))**2) 166 176 elseif(igas.eq.igas_N2)then 167 ! Thalman et al, 2014168 ! doi:10.1016/j.jqsrt.20 14.05.030177 ! Sneep et al, 2005 178 ! doi:10.1016/j.jqsrt.2004.07.025 169 179 T0(:) = 288.15 170 180 P0(:) = 1.01325e5 171 181 if(wn.gt.21360)then !between 21360 and 39370 cm-1. We extrapolate above. 172 ng(:) = 1. + (5677.465 + 318.81874e1 3/(14.4e9 - wn**2))*1e-8 !there is an error on the paper e12 -> e13182 ng(:) = 1. + (5677.465 + 318.81874e12/(14.4e9 - wn**2))*1e-8 !there is an error on the paper e12 -> e13 173 183 else !between 4860 and 21360 cm-1. We extrapolate below. 174 ng(:) = 1. + (6498.2 + 307.4335e13/(14.4e9 - wn**2))*1e-8 175 endif 176 Fk = 1.034 + 3.17e-12*wn 177 tauvari(igas,:) = mass_frac(igas,:)*((ng(:)**2-1.)/(ng(:)**2+2.))**2 * Fk * (wn*100.)**4 184 ng(:) = 1. + (6498.2 + 307.4335e12/(14.4e9 - wn**2))*1e-8 185 endif 186 Fk = 1.034 + 3.17e-12*wn**2 187 tauvari(igas,:) = mass_frac(igas,:)*((ng(:)**2-1.)/(ng(:)**2+2.))**2 * Fk * (wn*100.)**4 188 tauconsti(igas,:) = 24.*pi**3 *6.022141E+023 / (g*(muvar(:)/1000.)*(P0(:)/(1.380649E-23*T0(:)))**2) 178 189 elseif(igas.eq.igas_H2O)then 179 ! Harvey et al, 1998 180 ! doi:10.1063/1.556029 181 ! doi:10.1364/AO.35.001566 for wn<4840 cm-1 182 a0 = 0.244257733 183 a1 = 9.74634476e-3 184 a2 = -3.73234996e-3 185 a3 = 2.68678472e-4 186 a4 = 1.58920570e-3 187 a5 = 2.45934259e-3 188 a6 = 0.900704920 189 a7 = -1.66626219e-2 190 luv = 0.2292020 191 lir = 5.432937 192 Tr = 273.15 193 rhor = 1000. 194 T0(:) = tmid(:) 195 P0(:) = pmid(:)*scalep 196 lr = 0.589 197 rho(:) = mass_frac(igas,:)*muvar(:)/massmol(igas)*P0(:)/(8.314463*T0(:)/(muvar(:)/1000.)) 198 rhos(:) = rho(:)/rhor 199 ts(:) = T0(:)/Tr 200 201 b(:) = (a0 + a1*rhos(:) + a2*ts(:) + a3*ts(:)*(10000./wn/lr)**2 + a4/(10000./wn/lr)**2 + a5/((10000./wn/lr)**2 - luv**2) + a6/((10000./wn/lr)**2 - lir**2) + a7*rhos(:)**2)*rhos(:) 202 ! ng -> valid range of the measurements : 0.2 - 1.1 um 203 ng(:) = sqrt(2.*b(:)+1.)/sqrt(1.-b(:)) 190 Fk = (6.+3.*3e-4)/(6.-7.*3e-4) ! delta=3e-4 Murphy 1977 doi:10.1063/1.434794 204 191 if(wn<4840.) then ! necessary to prevent a singularity at 3230 cm-1 192 ! Ciddor, 1996 193 ! doi:10.1364/AO.35.001566 for wn<4840 cm-1 194 T0(:)=293.15 195 P0(:)=1333. 205 196 ng(:) = 1. + 1.022e-8*(295.235 + 2.6422*(wn*1e-4)**2 - 0.032380*(wn*1e-4)**4 + 0.004028*(wn*1e-4)**6) 206 endif 207 Fk = (6.+3.*3e-4)/(6.-7.*3e-4) ! delta=3e-4 Murphy 1977 doi:10.1063/1.434794 208 tauvari(igas,:) = mass_frac(igas,:)*((ng(:)**2-1.)/(ng(:)**2+2.))**2 * Fk * (wn*100.)**4 197 tauvari(igas,:) = mass_frac(igas,:)*((ng(:)**2-1.)/(ng(:)**2+2.))**2 * Fk * (wn*100.)**4 198 tauconsti(igas,:) = 24.*pi**3 *6.022141E+023 / (g*(muvar(:)/1000.)*(P0(:)/(1.380649E-23*T0(:)))**2) 199 elseif(wn>50000.) then 200 ! Barrell and Sears, 1939 (extrapolation) 201 ! doi:10.1098/rsta.1939.0004 202 T0(:)=273.15 203 P0(:)=101325. 204 ng(:) = 1. + (245.40+2.187*(1e4/wn)**(-2))*1e-6 205 tauvari(igas,:) = mass_frac(igas,:)*((ng(:)**2-1.)/(ng(:)**2+2.))**2 * Fk * (wn*100.)**4 206 tauconsti(igas,:) = 24.*pi**3 *6.022141E+023 / (g*(muvar(:)/1000.)*(P0(:)/(1.380649E-23*T0(:)))**2) 207 else 208 ! Harvey et al, 1998 209 ! doi:10.1063/1.556029 210 ! ng -> valid range of the measurements : 0.2 - 1.1 um 211 a0 = 0.244257733 212 a1 = 9.74634476e-3 213 a2 = -3.73234996e-3 214 a3 = 2.68678472e-4 215 a4 = 1.58920570e-3 216 a5 = 2.45934259e-3 217 a6 = 0.900704920 218 a7 = -1.66626219e-2 219 luv = 0.2292020 220 lir = 5.432937 221 Tr = 273.15 222 rhor = 1000. 223 T0(:) = tmid(:) 224 P0(:) = pmid(:)*scalep 225 lr = 0.589 226 rho(:) = mass_frac(igas,:)*muvar(:)/massmol(igas)*P0(:)/(8.314463*T0(:)/(muvar(:)/1000.)) 227 rhos(:) = rho(:)/rhor 228 ts(:) = T0(:)/Tr 229 b(:) = (a0 + a1*rhos(:) + a2*ts(:) + a3*ts(:)*(10000./wn/lr)**2 + a4/(10000./wn/lr)**2 + a5/((10000./wn/lr)**2 - luv**2) + a6/((10000./wn/lr)**2 - lir**2) + a7*rhos(:)**2)*rhos(:) 230 ng(:) = sqrt(2.*b(:)+1.)/sqrt(1.-b(:)) 231 tauvari(igas,:) = mass_frac(igas,:)*((ng(:)**2-1.)/(ng(:)**2+2.))**2 * Fk * (wn*100.)**4 232 tauconsti(igas,:) = 24.*pi**3 *6.022141E+023 / (g*(muvar(:)/1000.)*(P0(:)/(1.380649E-23*T0(:)))**2) 233 endif 209 234 elseif(igas.eq.igas_H2)then 210 235 ! Peck and Hung, 1977 … … 213 238 P0(:) = 1.01325e5 214 239 ! ng -> valid range of the measurements : 0.1680 - 1.6945 um 215 ng(:) = 1. + (14895.6/(180.7 - (wn*1e-4)**2) + 4903.7/(92.-(wn*1e-4)**2))*1e-6 240 if(wn<59534.) then 241 ng(:) = 1. + (14895.6/(180.7 - (wn*1e-4)**2) + 4903.7/(92.-(wn*1e-4)**2))*1e-6 242 else 243 ng(:) = 1. + (23.79 + 12307.2/(109.832-(wn*1e-4)**2))*1e-6 ! extrapolation 244 endif 216 245 Fk = (6.+3.*0.02)/(6.-7.*0.02) ! delta=0.02 Hansen 1974 217 246 tauvari(igas,:) = mass_frac(igas,:)*((ng(:)**2-1.)/(ng(:)**2+2.))**2 * Fk * (wn*100.)**4 247 tauconsti(igas,:) = 24.*pi**3 *6.022141E+023 / (g*(muvar(:)/1000.)*(P0(:)/(1.380649E-23*T0(:)))**2) 218 248 elseif(igas.eq.igas_He)then 219 249 ! Thalman et al, 2014 … … 225 255 Fk = 1. 226 256 tauvari(igas,:) = mass_frac(igas,:)*((ng(:)**2-1.)/(ng(:)**2+2.))**2 * Fk * (wn*100.)**4 257 tauconsti(igas,:) = 24.*pi**3 *6.022141E+023 / (g*(muvar(:)/1000.)*(P0(:)/(1.380649E-23*T0(:)))**2) 227 258 elseif(igas.eq.igas_CH4)then 228 259 ! Sneep et al, 2005 … … 234 265 Fk = 1. 235 266 tauvari(igas,:) = mass_frac(igas,:)*((ng(:)**2-1.)/(ng(:)**2+2.))**2 * Fk * (wn*100.)**4 267 tauconsti(igas,:) = 24.*pi**3 *6.022141E+023 / (g*(muvar(:)/1000.)*(P0(:)/(1.380649E-23*T0(:)))**2) 236 268 elseif(igas.eq.igas_CO)then 237 269 ! Sneep et al, 2005 … … 240 272 P0(:) = 1.01325e5 241 273 ! ng -> valid range of the measurements : 0.168 - 0.288 um 242 ng(:) = 1. + 22851e-8 + 0.456e4/(71427.**2 - wn**2) 274 if(wn<59809.) then 275 ng(:) = 1. + 22851e-8 + 0.456e4/(71427.**2 - wn**2) 276 else 277 ng(:) = 1.00028476-2.01518666e-9*wn+1.88043553e-14*wn**2 ! extrapolation from previous data 278 endif 243 279 Fk = 1.016 244 280 tauvari(igas,:) = mass_frac(igas,:)*((ng(:)**2-1.)/(ng(:)**2+2.))**2 * Fk * (wn*100.)**4 281 tauconsti(igas,:) = 24.*pi**3 *6.022141E+023 / (g*(muvar(:)/1000.)*(P0(:)/(1.380649E-23*T0(:)))**2) 245 282 elseif(igas.eq.igas_Ar)then 246 ! Thalman et al, 2014247 ! doi:10.1016/j.jqsrt.20 14.05.030283 ! Sneep et al, 2005 284 ! doi:10.1016/j.jqsrt.2004.07.025 248 285 T0(:) = 288.15 249 286 P0(:) = 1.01325e5 … … 252 289 Fk = 1. 253 290 tauvari(igas,:) = mass_frac(igas,:)*((ng(:)**2-1.)/(ng(:)**2+2.))**2 * Fk * (wn*100.)**4 291 tauconsti(igas,:) = 24.*pi**3 *6.022141E+023 / (g*(muvar(:)/1000.)*(P0(:)/(1.380649E-23*T0(:)))**2) 254 292 elseif(igas.eq.igas_O2)then 255 ! Thalman et al, 2014256 ! doi:10.1016/j.jqsrt.20 14.05.030293 ! Sneep et al, 2005 294 ! doi:10.1016/j.jqsrt.2004.07.025 257 295 T0(:) = 273.15 258 296 P0(:) = 1.01325e5 259 ! ng -> valid range of the measurements : 0.303 - 2.0 um 260 ng(:) = 1. + (20564.8 + 2.480899e13/(4.09e9 - wn**2))*1e-8 297 if (wn .lt. 18315) then 298 ! ng -> valid range of the measurements : > 0.546 um 299 ng(:) = 1. + (21351.3 + 21.85670/(4.09e9 - wn**2))*1e-8 300 elseif ((18315 .le. wn) .and. (wn .lt. 34722)) then 301 ! ng -> valid range of the measurements : 0.288 - 0.546 um 302 ng(:) = 1. + (20564.8 + 24.80899/(4.09e9 - wn**2))*1e-8 303 elseif ((34722 .le. wn) .and. (wn .lt. 45248)) then 304 ! ng -> valid range of the measurements : 0.288 - 0.221 um 305 ng(:) = 1. + (22120.4 + 20.31876/(4.09e9 - wn**2))*1e-8 306 else 307 ! ng -> valid range of the measurements : < 0.221 um 308 ng(:) = 1. + (23796.7 + 16.89884/(4.09e9 - wn**2))*1e-8 309 endif 261 310 Fk = 1.09 + 1.385e-11*wn**2 + 1.488e-20*wn**4 262 311 tauvari(igas,:) = mass_frac(igas,:)*((ng(:)**2-1.)/(ng(:)**2+2.))**2 * Fk * (wn*100.)**4 312 tauconsti(igas,:) = 24.*pi**3 *6.022141E+023 / (g*(muvar(:)/1000.)*(P0(:)/(1.380649E-23*T0(:)))**2) 263 313 else 264 314 print*,'No rayleigh scattering for ',trim(gnom(igas)),'. No data found.' 265 315 endif 266 267 tauconsti(igas,:) = 24.*pi**3 *6.022141E+023 / (g*(muvar(:)/1000.)*(P0(:)/(1.380649E-23*T0(:)))**2) 316 268 317 ! N=P/(kB*T) 269 318 ! pmid*scalep -> mbar to Pa … … 276 325 enddo !ngasmx 277 326 278 call black n(dble(wn*1e2),dble(tstellar),df)327 call blackl(dble(wn),dble(tstellar),df) 279 328 df=df*(BWNV(N+1)-BWNV(N))/Nfine 280 329 tauwei=tauwei+df … … 282 331 283 332 enddo !Nfine 333 ! We add a scalep because pressure in radiative transfer is in mbar 284 334 TAURAY(:,N)=tausum(:)*scalep/tauwei 285 ! scalep because tausum/tauwei is in SI units and dp on optcv is in hPa unit286 335 287 336 end do !L_NSPECTV
Note: See TracChangeset
for help on using the changeset viewer.
