| 1 | ********************************************************************* | 
|---|
| 2 | *                                                                   * | 
|---|
| 3 | *     Atmospheric Absorption for Rayleigh, Mie and Ozone.           * | 
|---|
| 4 | *                                                                   * | 
|---|
| 5 | *     Created: May-98                                               * | 
|---|
| 6 | *     Author: Aitor Ibarra Ibaibarriaga                             * | 
|---|
| 7 | *             Jose Carlos Gonzalez                                  * | 
|---|
| 8 | *                                                                   * | 
|---|
| 9 | *     Modified December-2002, January-2003                          * | 
|---|
| 10 | *     Author: Abelardo Moralejo (moralejo@pd.infn.it)               * | 
|---|
| 11 | *                                                                   * | 
|---|
| 12 | *     Now this accounts only for Rayleigh scattering. Mie and       * | 
|---|
| 13 | *     Ozone absorption are now treated separatedly.                 * | 
|---|
| 14 | *                                                                   * | 
|---|
| 15 | ********************************************************************* | 
|---|
| 16 | * | 
|---|
| 17 | * December 2002, Abelardo Moralejo: checked algorithms, removed | 
|---|
| 18 | * old/unnecessary code, fixed some bugs, added comments. | 
|---|
| 19 | * | 
|---|
| 20 | * Fixed bugs (of small influence) in Mie absorption implementation: there were | 
|---|
| 21 | * errors in the optical depths table, as well as a confusion: height a.s.l. | 
|---|
| 22 | * was used as if it was height above the telescope level. The latter error was | 
|---|
| 23 | * also present in the Ozone aborption implementation. | 
|---|
| 24 | * | 
|---|
| 25 | * On the other hand, now we have the tables AE_ABI and OZ_ABI with optical | 
|---|
| 26 | * depths between sea level and a height h (before it was between 2km a.s.l | 
|---|
| 27 | * and a height h). So that we can simulate also in the future a different | 
|---|
| 28 | * observation level. | 
|---|
| 29 | * | 
|---|
| 30 | * AM: WARNING: IF VERY LARGE zenith angle simulations are to be done (say | 
|---|
| 31 | * above 85 degrees, for neutrino primaries or any other purpose) this code | 
|---|
| 32 | * will have to be adapted accordingly and checked, since in principle it has | 
|---|
| 33 | * been written and tested to simulate the absorption of Cherenkov photons | 
|---|
| 34 | * arriving at the telescope from above. | 
|---|
| 35 | * | 
|---|
| 36 | * AM: WARNING 2: not to be used for wavelengths outside the range 250-700 nm | 
|---|
| 37 | * | 
|---|
| 38 | * January 2003, Abelardo Moralejo: found error in Ozone absorption treatment. | 
|---|
| 39 | * At large zenith angles, the air mass used was the one calculated for | 
|---|
| 40 | * Rayleigh scattering, but since the Ozone distribution is rather different | 
|---|
| 41 | * from the global distribution of air molecules, this is not a good | 
|---|
| 42 | * approximation. Now I have left in this code only the Rayleigh scattering, | 
|---|
| 43 | * and moved to atm.c the Mie scattering and Ozone absorption calculated in | 
|---|
| 44 | * a better way. | 
|---|
| 45 | * | 
|---|
| 46 | * AM, Jan 2003: added obslev as an argument of the function. Changed the | 
|---|
| 47 | * meaning of the argument height: now it is the true height above sea level | 
|---|
| 48 | * at which a photon has been emitted, before it was the height given by | 
|---|
| 49 | * Corsika, measured in the vertical of the observer and not in the vertical | 
|---|
| 50 | * of the emitting particle. | 
|---|
| 51 | * | 
|---|
| 52 | * @endtext | 
|---|
| 53 | c @code | 
|---|
| 54 |  | 
|---|
| 55 | SUBROUTINE attenu(wavelength, height, obslev, theta, tr_atmos) | 
|---|
| 56 |  | 
|---|
| 57 | REAL wavelength, height, obslev, theta, tr_atmos | 
|---|
| 58 | COMMON /ATMOS/   BATM,CATM,LAHG,LONG | 
|---|
| 59 | DOUBLE PRECISION BATM(4),CATM(4),LAHG(5),Lm(12) | 
|---|
| 60 | DOUBLE PRECISION H,RT, m | 
|---|
| 61 | DOUBLE PRECISION XR, T_Ray, RHO_TOT, RHO_FI | 
|---|
| 62 |  | 
|---|
| 63 | DOUBLE PRECISION Rcos2, Rsin2, pi, hscale | 
|---|
| 64 | DOUBLE PRECISION x1, x2, x3, x4 | 
|---|
| 65 | DOUBLE PRECISION e1, e2, e3, e4 | 
|---|
| 66 |  | 
|---|
| 67 | REAL LONG(12) | 
|---|
| 68 | INTEGER I | 
|---|
| 69 |  | 
|---|
| 70 | c--   BATM, CATM, LAHG: | 
|---|
| 71 | c--   some parameters of the US standard atmosphere (see Corsika manual, | 
|---|
| 72 | c--   appendix C). LAHG contains the limits of the 4 exponential layers, | 
|---|
| 73 | c--   in which the mass overburden is given by T = AATM + BATM * exp(-h/CATM) | 
|---|
| 74 | c--   The parameters AATM are not included in this code because they are not | 
|---|
| 75 | c--   needed. The last layer of the US standard atmosphere (in which T varies | 
|---|
| 76 | c--   linearly with h) is above 100 km and has not been included here for the | 
|---|
| 77 | c--   same reason. | 
|---|
| 78 | c-- | 
|---|
| 79 | DATA BATM / 1222.6562D0,1144.9069D0,1305.5948D0,540.1778D0 / | 
|---|
| 80 | DATA CATM / 994186.38D0,878153.55D0,636143.04D0,772170.16D0 / | 
|---|
| 81 | DATA LAHG / 0.,4.0D5,1.0D6,4.0D6,1.0D7 / | 
|---|
| 82 |  | 
|---|
| 83 | DATA Lm /3.70D5,3.85D5,4.0D5,4.17D5,4.17D5,4.35D5,5.0D5,5.56D5, | 
|---|
| 84 | +         5.99D5,6.33D5, 6.67D5,7.04D5 / | 
|---|
| 85 | DATA LONG / | 
|---|
| 86 | +    280.0, | 
|---|
| 87 | +    300.0, | 
|---|
| 88 | +    320.0, | 
|---|
| 89 | +    340.0, | 
|---|
| 90 | +    360.0, | 
|---|
| 91 | +    380.0, | 
|---|
| 92 | +    400.0, | 
|---|
| 93 | +    450.0, | 
|---|
| 94 | +    500.0, | 
|---|
| 95 | +    550.0, | 
|---|
| 96 | +    600.0, | 
|---|
| 97 | +    650.0 / | 
|---|
| 98 | DATA PI / 3.141592654D0 / | 
|---|
| 99 |  | 
|---|
| 100 | c--   Take same Earth radius as in CORSIKA | 
|---|
| 101 | parameter (rt = 6371315.D2) | 
|---|
| 102 |  | 
|---|
| 103 | c--   Scale-height for Exponential density profile | 
|---|
| 104 | parameter (hscale = 7.4d5) | 
|---|
| 105 |  | 
|---|
| 106 | c--   Mean free path for scattering Rayleigh XR (g/cm^2) | 
|---|
| 107 | parameter (XR=2.970D3) | 
|---|
| 108 |  | 
|---|
| 109 | c-- Set low limit of first atmospheric layer to the observation level | 
|---|
| 110 | c-- so that the traversed atmospheric depth in the Rayleigh scattering | 
|---|
| 111 | c-- will be calculated correctly. | 
|---|
| 112 |  | 
|---|
| 113 | LAHG(1) = obslev | 
|---|
| 114 |  | 
|---|
| 115 | c-- For the case of simulating a telescope higher than 4 km... | 
|---|
| 116 |  | 
|---|
| 117 | if (obslev .gt. LAHG(2)) then | 
|---|
| 118 | LAHG(2) = obslev | 
|---|
| 119 | end if | 
|---|
| 120 |  | 
|---|
| 121 | T_Ray = 1.0 | 
|---|
| 122 |  | 
|---|
| 123 |  | 
|---|
| 124 | c--   AM, Jan 2002: now the argument height is directly the height above | 
|---|
| 125 | c--   sea level, calculated in atm.c: | 
|---|
| 126 |  | 
|---|
| 127 | h = height | 
|---|
| 128 |  | 
|---|
| 129 | *********************************************************************** | 
|---|
| 130 | * | 
|---|
| 131 | *     LARGE ZENITH ANGLE FACTOR (AIR MASS FACTOR): | 
|---|
| 132 |  | 
|---|
| 133 | c--   Air mass factor "m" calculated using a one-exponential density | 
|---|
| 134 | c--   profile for the atmosphere, rho = rho_0 exp(-h/hscale) with | 
|---|
| 135 | c--   hscale = 7.4 km. The air mass factor is defined as I(theta)/I(0), | 
|---|
| 136 | c--   the ratio of the optical paths I (in g/cm2) traversed between two | 
|---|
| 137 | c--   given heights, at theta and at 0 deg z.a. | 
|---|
| 138 |  | 
|---|
| 139 | Rcos2 = rt * cos(theta)**2 | 
|---|
| 140 | Rsin2 = rt * sin(theta)**2 | 
|---|
| 141 |  | 
|---|
| 142 | * | 
|---|
| 143 | *     Obsolete lines: | 
|---|
| 144 | *     x1 = sqrt((2. * obslev + Rcos2) / (2. * hscale)) | 
|---|
| 145 | *     x2 = sqrt((2. * h      + Rcos2) / (2. * hscale)) | 
|---|
| 146 | *     x3 = sqrt((2. * obslev + rt)    / (2. * hscale)) | 
|---|
| 147 | *     x4 = sqrt((2. * h      + rt)    / (2. * hscale)) | 
|---|
| 148 | * | 
|---|
| 149 |  | 
|---|
| 150 | c--   AM, Dec 2002: slightly changed the calculation of the air mass factor, | 
|---|
| 151 | c--   for what I think is a better approximation (numerically the results are | 
|---|
| 152 | c--   almost exactly the same, this change is irrelevant!): | 
|---|
| 153 |  | 
|---|
| 154 | x1 = sqrt(Rcos2 / (2*hscale)) | 
|---|
| 155 | x2 = sqrt((2*(h-obslev) + Rcos2) / (2*hscale)) | 
|---|
| 156 | x3 = sqrt(rt / (2*hscale)) | 
|---|
| 157 | x4 = sqrt((2*(h-obslev) + rt) / (2*hscale)) | 
|---|
| 158 |  | 
|---|
| 159 | c--   AM Dec 2001, to avoid crash! Sometime a few photons seem to be | 
|---|
| 160 | c--   "corrupted" (have absurd values) in cer files... Next lines avoid the | 
|---|
| 161 | c--   crash. They will also return a -1 transmittance in the case the photon | 
|---|
| 162 | c--   comes exactly from the observation level, because in that case the | 
|---|
| 163 | c--   "air mass factor" would become infinity and the calculation is not valid! | 
|---|
| 164 |  | 
|---|
| 165 | if (abs(x3-x4) .lt. 1.e-10) then | 
|---|
| 166 | tr_atmos = -1. | 
|---|
| 167 | RETURN | 
|---|
| 168 | endif | 
|---|
| 169 |  | 
|---|
| 170 | e1 = derfc(x1) | 
|---|
| 171 | e2 = derfc(x2) | 
|---|
| 172 | e3 = derfc(x3) | 
|---|
| 173 | e4 = derfc(x4) | 
|---|
| 174 |  | 
|---|
| 175 | m = exp(-Rsin2 / (2. * hscale)) * ((e1 - e2) / (e3 - e4)) | 
|---|
| 176 |  | 
|---|
| 177 | ********************************************************************** | 
|---|
| 178 | *     RAYLEIGH SCATTERING (by the molecules in the atmosphere) | 
|---|
| 179 | *     SCATTERING M.F.P. FOR RAYLEIGH: XR = 2.970D3 | 
|---|
| 180 | ********************************************************************** | 
|---|
| 181 |  | 
|---|
| 182 | c--   Calculate the traversed "vertical thickness" of air using the | 
|---|
| 183 | c--   US Standard atmosphere: | 
|---|
| 184 |  | 
|---|
| 185 | RHO_TOT = 0.0 | 
|---|
| 186 |  | 
|---|
| 187 | DO 91 I=2,5 | 
|---|
| 188 | IF ( H .LT. LAHG(I) ) THEN | 
|---|
| 189 | RHO_TOT = RHO_TOT + | 
|---|
| 190 | +        BATM(I-1)*(EXP(-LAHG(I-1)/CATM(I-1) ) - | 
|---|
| 191 | +        EXP(-H/CATM(I-1))) | 
|---|
| 192 | GOTO 92 | 
|---|
| 193 | ELSE | 
|---|
| 194 | RHO_TOT = RHO_TOT + | 
|---|
| 195 | +        BATM(I-1)*(EXP(-LAHG(I-1)/CATM(I-1) ) - | 
|---|
| 196 | +        EXP(-LAHG(I)/CATM(I-1))) | 
|---|
| 197 | ENDIF | 
|---|
| 198 | 91   CONTINUE | 
|---|
| 199 |  | 
|---|
| 200 | c--   We now convert from "vertical thickness" to "slanted thickness" | 
|---|
| 201 | c--   traversed by the photon on its way to the telescope, simply | 
|---|
| 202 | c--   multiplying by the air mass factor m: | 
|---|
| 203 |  | 
|---|
| 204 | 92   RHO_FI = m*RHO_TOT | 
|---|
| 205 |  | 
|---|
| 206 | c--   Finally we calculate the transmission coefficient for the Rayleigh | 
|---|
| 207 | c--   scattering: | 
|---|
| 208 | c--   AM Dec 2002, introduced ABS below to account (in the future) for | 
|---|
| 209 | c--   possible photons coming from below the observation level. | 
|---|
| 210 |  | 
|---|
| 211 | T_Ray = EXP(-ABS(RHO_FI/XR)*(400.D0/wavelength)**4) | 
|---|
| 212 |  | 
|---|
| 213 | tr_atmos = T_Ray | 
|---|
| 214 |  | 
|---|
| 215 | RETURN | 
|---|
| 216 |  | 
|---|
| 217 | END | 
|---|