# 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

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.