NavList:
A Community Devoted to the Preservation and Practice of Celestial Navigation and Other Methods of Traditional Wayfinding
Refraction, Cassini model
From: Paul Hirose
Date: 2018 Nov 17, 19:39 -0800
From: Paul Hirose
Date: 2018 Nov 17, 19:39 -0800
Giovanni Domenico Cassini (b. 1625), one of the top astronomers of his
era, developed an astronomical refraction model based on the theory that
the atmosphere, like the water in a pond, was homogeneous from sea level
up to an altitude where it abruptly terminated. Though his model doesn't
match reality, the result is surprisingly accurate.
Astronomer Andrew Young says, "It is worth emphasizing that Cassini's
simple model is more accurate than is needed for all astronomical
purposes to at least 74° Z.D. [zenith distance], and remains good to
better than a second of arc to 81° — provided that the refractivity of
air and the height of the homogeneous atmosphere are accurately
evaluated for actual conditions."
https://aty.sdsu.edu/explain/atmos_refr/understanding.html
To compute refraction at sea level standard conditions with the Cassini
model, given refracted zenith distance Z, first compute a value I call
"sinZ1":
sinZ1 = .9987 * sin Z
Then refraction = arcsin (1.0002816 * sinZ1) - arc sin (sinZ1)
For example, Z = 70°, sinZ1 = .9385, and refraction = 69.8399° -
69.7960° = .0439° = 2.63′. The table in the Nautical Almanac agrees.
In formal terms, at 1010 millibars, 10 C, 50% humidity,
R = Earth radius = 6,371,000 meters
h = height of homogeneous atmosphere = 8307 m
n = air index of refraction = 1.0002816
sinZ1 = R / (R + h) * sin Z
refraction = arcsin (n * sinZ1) - arcsin (sinZ1)
To be strictly correct, R is the distance from the observer to Earth
center and therefore should include height above sea level. However, at
.01′ accuracy and 2000 meters (6600 feet) above sea level the small
adjustment has no noticeable effect.
Corrections should be applied for the atmosphere conditions at the
observer. First, compute air density correction factor f from P and T:
the pressure (millibars) and temperature (Celsius) at the observer. (An
identical formula is in the Nautical Almanac.)
f = P * .28 / (T + 273)
Calculate the height of a homogeneous atmosphere (also called "scale
height" of the atmosphere) and the refractive index. To sufficient accuracy:
h = 8.22 * P / f
n = 1.0 + f * .0002816
For example, P = 790 mb (equivalent to 2000 meters above sea level), T =
35 C (95 F), Z = 80°. Then f = .718, h = 9042 m, n = 1.0002022, sinZ1 =
.9834, refraction = .0630° = 3.78′.
What is the "correct" refraction? According to the "Refco" routine in
the IAU SOFA library, assuming a wavelength of .55 microns
(approximately the center of the visual spectrum), for the above
conditions it's 3.77′, only .01′ less.
http://www.iausofa.org/2018_0130_C/sofa/refco.html
Unfortunately, as Andrew Young explains on his web page, the Cassini
model breaks down at low altitude. And since the SOFA Refco routine
calculates the A and B coefficients in the formula A tan Z + B tan^3 Z,
it too generates unreasonable values near the horizon as tan Z increases
without bound.
For altitude less than 15° the Astronomical Almanac offers a formula
which I have factored into a format convenient for a computer:
refraction = P * (.1594 + (.0196 + 2e-5 * a) * a) / (273 + T) / (1.0 +
(.505 + .0845 * a) * a))
where "a" is altitude (degrees) and the result is degrees. At the
horizon it gives a reasonable 34.1′.
I will now compare some refraction models.
"Refco" is the model mentioned above, from the International
Astronomical Union SOFA (Standards of Fundamental Astronomy) project. At
10° altitude its accuracy is better than 1″ compared to a ray trace
through a model atmosphere. Performance below 10° is not stated.
"low alt" is the Astronomical Almanac low altitude formula.
"Cassini" was described above, where refractivity of the air is assumed
proportional to density. (This is not exactly true.)
"Cassini+" computes refractivity with the precise Ciddor formulas. Also,
the adjustment to R for height of observer is applied.
"Bennett" is the formula found in the back section of the Nautical Almanac.
"Bennett+" includes the small correction factor described by Meeus in
"Astronomical Algorithms".
"SofaJpl" is the composite model from my SofaJpl astronomy DLL for
Windows, and is also the model in my Lunar program. It's Cassini+ down
to 15° refracted altitude. At 10° and less it's the Astronomical Almanac
low altitude formula. Between 10° and 15° it's a weighted average of
both, thereby avoiding a discontinuity where the models change. (The
SOFA Refco model is available in SofaJpl and may be called by a
programmer, but I don't use it.)
The first test is at 1010 millibars (29.83 inches Hg), 10° C (50 F), 50%
relative humidity. The Refco value is the refraction (minutes) from that
routine. All other values are the difference from Refco.
At very low altitude Refco is not reliable, so the bottom part of the
table shows the actual refraction from each model. At 0° Refco returns
an extreme negative number.
Refco low alt Cassini Cassini+ Bennett Bennett+ SofaJpl
30° 1.67 0.11 0.00 0.00 0.05 0.01 0.00
25 2.06 0.07 0.00 0.00 0.06 0.01 0.00
20 2.63 0.03 0.00 0.00 0.07 0.02 0.00
15 3.55 0.00 0.00 0.00 0.08 0.03 0.00
10 5.29 -0.01 0.00 0.00 0.10 0.04 -0.01
5° 9.44 9.80 9.67 9.68 9.87 9.85 9.79
4 10.66 11.66 11.38 11.39 11.71 11.73 11.66
3 10.93 14.28 13.57 13.59 14.30 14.38 14.27
2 2.26 18.12 16.25 16.26 18.12 18.26 18.11
1 -148.22 24.12 18.88 18.89 24.10 24.30 24.10
0 --- 34.13 20.08 20.10 33.80 34.43 34.11
The second test is at high air density. Pressure is 1060 millibars
(31.30 inches), temperature -15 C (5 F), humidity 50%.
Refco low alt Cassini Cassini+ Bennett Bennett+ SofaJpl
30° 1.92 0.12 0.00 0.00 0.05 0.01 0.00
25 2.38 0.08 0.00 0.00 0.06 0.02 0.00
20 3.04 0.03 -0.01 0.00 0.07 0.02 0.00
15 4.10 -0.01 -0.01 0.00 0.08 0.02 0.00
10 6.12 -0.04 -0.01 0.00 0.09 0.03 -0.05
5 11.09 11.28 11.29 11.32 11.36 11.37 11.27
4 12.72 13.43 13.36 13.39 13.48 13.53 13.42
3 13.62 16.44 16.07 16.11 16.46 16.56 16.43
2 6.08 20.86 19.48 19.53 20.86 20.99 20.85
1 -142.94 27.76 22.97 23.04 27.75 27.93 27.75
0 --- 39.29 24.64 24.72 38.92 39.71 39.27
The final test is at low air density. Pressure is 792 mb (23.40 inches),
equivalent to a height of 2000 m (6600 feet). Temperature 35 C (95 F),
humidity 50%.
Refco low alt Cassini Cassini+ Bennett Bennett+ SofaJpl
30° 1.20 0.08 0.00 0.00 0.04 0.01 0.00
25 1.48 0.06 0.00 0.00 0.05 0.01 0.00
20 1.89 0.03 0.01 0.00 0.06 0.02 0.00
15 2.54 0.02 0.01 0.00 0.08 0.03 0.00
10 3.78 0.03 0.02 0.00 0.11 0.05 0.03
5 6.62 7.06 6.87 6.83 7.12 7.07 7.06
4 7.34 8.41 8.03 7.99 8.44 8.41 8.40
3 7.11 10.29 9.50 9.44 10.31 10.32 10.29
2 -0.84 13.06 11.23 11.14 13.07 13.15 13.06
1 -126.12 17.39 12.86 12.75 17.38 17.59 17.38
0 --- 24.61 13.59 13.46 24.37 24.82 24.60
The simple Cassini model is remarkably good except below 5°, and even
there it's not too bad. No model is accurate that low, notwithstanding
my .01′ tabulation. At 2° I suspect we'd do well to get within a whole
minute of the truth.
There seems to be little significant difference between Cassini and
Cassini+ at very low altitude. The latter is a tiny bit superior above
10°, but that comes at a high price. You must abandon the approximation
that refractivity is directly proportional to air density.
In my view the Cassini model with simple corrections for air density is
superior to either Bennett model except at altitudes where refraction is
highly uncertain anyway. If that bothers you, a blended transition can
be made to a different model, as I do in SofaJpl.
Speaking of SofaJpl, the "low alt" column in the tables was computed
with the formula exactly as written in the Astronomical Almanac. But in
SofaJpl the implementation of that formula uses 273.15 (not 273) to
convert Celsius to absolute temperature. That's why the two columns
don't exactly agree at low altitude.






