Package ivs :: Package observations :: Module airmass
[hide private]
[frames] | no frames]

Module airmass

source code

Calculate airmass according to various models.

Functions [hide private]
 
_deg2rad(degrees) source code
 
_rad2deg(radians) source code
 
_sec(radians) source code
 
get_modelnames() source code
 
airmass(zz, model='Pickering2002')
Calculate the airmass from an interpolative model
source code
Function Details [hide private]

airmass(zz, model='Pickering2002')

source code 

Calculate the airmass from an interpolative model

Input:
  @param z: array with zenith angles (90-altitude in degrees) 
  @type z: ndarray
  @param model: name of the model
  @type model: string

Output:
  @return: airmass
  @rtype: ndarray
  
  Many formulas have been developed to fit tabular values of air mass:
+ The first one by Young and Irvine (1967) included a simple corrective term:
    
    X = sec(z)*(1.-0.0012*(sec(z)**2. - 1.))
  
  where zt is the true zenith angle. This gives usable results up to about
  80 degrees, but the accuracy degrades rapidly at greater zenith angles. The
  calculated air mass reaches a maximum of 11.13 at 86.6 degrees, becomes zero
  at 88 degrees, and approaches negative infinity at the horizon. The plot of this
  formula on the accompanying graph includes a correction for atmospheric
  refraction so that the calculated air mass is for apparent rather than true
  zenith angle.
  
+ Hardie (1962) introduced a polynomial in:
  
    X = sec(z) - 0.0018167*(sec(z) - 1.) - 0.002875*(sec(z) - 1.)**2. - 0.0008083*(sec(z)-1.)**3.
  
  which gives usable results for zenith angles of up to perhaps 85 degrees.
  As with the previous formula, the calculated air mass reaches a maximum,
  and then approaches negative infinity at the horizon.
  
+ Rozenberg (1966) suggested:
  
    X = 1./(cos(z) + 0.025*exp(-11.*cos(z)))
  
  which gives reasonable results for high zenith angles, with a horizon
  airmass of 40.
  
+ Kasten and Young (1989) developed:
  
    X = 1./(cos(z) + 0.50572*(96.07995 - zd)**(-1.6364))
  
  which gives reasonable results for zenith angles of up to 90 degrees, with
  an airmass of approximately 38 at the horizon. Here the zd term is z in
  degrees.
  
+ Young (1994) developed:
  
    X = (1.002432*cos(z)**2. + 0.148386*cos(z) + 0.0096467)/(cos(z)**3. + 0.149864*cos(z)**2. + 0.0102963*cos(z) + 0.000303978)
    
  in terms of the true zenith angle zt, for which he claimed a maximum error
  (at the horizon) of 0.0037 air mass.
  
+ Finally, Pickering (2002) developed
  
    X = 1./sin(h+244/(165+47*h**1.1))

where h is apparent altitude (90.-z) in degrees. Pickering claimed his
equation to have a tenth the error of Schaefer (1998) near the horizon.

Respectively, the keyword should be:
'YoungAndIrvine1967', 'Hardie1962', 'Rozenberg1966', 'KastenAndYoung1989',
'Young1994', 'Pickering2002'

Example usage:
  get the different airmasses for all models between 70 and 90 degrees
  >>> zz     = np.arange(70.000, 89.999, .001)
  >>> models = get_modelnames()
  >>> airmasses = np.zeros((len(zz), len(models)))
  >>> for i, model in enumerate(models): airmasses[:,i] = airmass(zz, model)
  >>> print(airmasses[-10,:])
  [ -1.69573409e+08  -1.14232330e+08   3.97784409e+01   3.77562570e+01
     3.16224873e+01   3.85395375e+01]