astro-0.4.3.0: src/Data/Astro/Effects.hs
{-|
Module: Data.Astro.Effects
Description: Physical effects
Copyright: Alexander Ignatyev, 2016
Physical effects which influence on accuracy of astronomical calculations.
-}
module Data.Astro.Effects
(
refract
, Precession.AstronomyEpoch(..)
, Precession.precession1
, Precession.precession2
, Nutation.nutationLongitude
, Nutation.nutationObliquity
, Aberration.includeAberration
, Parallax.parallax
)
where
import Data.Astro.Types (DecimalDegrees(..), toRadians)
import qualified Data.Astro.Effects.Precession as Precession
import qualified Data.Astro.Effects.Nutation as Nutation
import qualified Data.Astro.Effects.Aberration as Aberration
import qualified Data.Astro.Effects.Parallax as Parallax
-- | Calculate the atmospheric refraction angle.
-- It takes the observed altitude (of Horizon Coordinates), temperature in degrees centigrade and barometric pressure in millibars.
-- The average sea level atmospheric pressure is 1013 millibars.
refract :: DecimalDegrees -> Double -> Double -> DecimalDegrees
refract altitude temperature pressure =
let f = if altitude > (DD 15) then refractBigAlpha else refractSmallAlpha
in f altitude temperature pressure
-- | Calculate the atmospheric refraction angle for big values of alpha (altitude) (> 15 decimal degrees)
refractBigAlpha :: DecimalDegrees -> Double -> Double -> DecimalDegrees
refractBigAlpha altitude temperature pressure =
let z = toRadians $ 90 - altitude -- zenith angle
in DD $ 0.00452*pressure*(tan z) /(273+temperature)
-- | Calculate the atmospheric refraction angle for small values of alpha (altitude)
refractSmallAlpha :: DecimalDegrees -> Double -> Double -> DecimalDegrees
refractSmallAlpha altitude temperature pressure =
let a = toRadians altitude
in DD $ pressure*(0.1594+0.0196*a+0.00002*a*a)/((273+temperature)*(1+0.505*a+0.0845*a*a))