NavList:
A Community Devoted to the Preservation and Practice of Celestial Navigation and Other Methods of Traditional Wayfinding
Re: Astronomical Refraction: Computational Method for All Zenith Angles
From: Frank Reed CT
Date: 2005 Aug 18, 06:06 EDT
From: Frank Reed CT
Date: 2005 Aug 18, 06:06 EDT
Marcel you wrote: "Looking at table 2 with the results showing the two parameters hw and ho. According to the text they both indicate the height of the observer. But what does then mean e.g. the column with hw=0m and ho=2000m? " As stated in the article, that "hw" is the height at which the temperature and pressure were "measured" (it's a calibration altitude for the model atmosphere) while h0 is the observer's altitude. I can't think of any reason in your application to choose anything but zero for hw. And you wrote: " I assume that a zero got lost somewhere and it was meant n=1.0002941." Yes, that's clearly a typo. And you wrote: "Unfortunately the paper does not mention why this value was chosen or to what it corresponds to. " Ah, but that's the great thing. It's up to you. YOU may choose any value you want for the index of refraction corresponding to whatever frequency of (visible) light you need for your model. If you intend to use the standard "zero" points for temperature and pressure that are used in this article, then, naturally, you should choose a refraction index for zero degrees Celsius and 760 mm (Hg) pressure but the variation with frequency is an input to the problem. The specific value of the refraction index chosen for the sample runs in the article is just an example. Notice also that this calculational approach can be extended easily to atmospheres with completely different structure and composition which might have radically different refraction indices (realistic calculations for Mars perhaps?? the night sky as seen from the cloudtops of Jupiter??). I coded this up to satisfy myself that it works. It does... Here's some very "basic" code using a simple exponential model atmosphere. It reproduces the standard zero altitude refraction table rather nicely. You can extend it by using the atmosphere model described in the article. Or you could experiment with any sort of temperature/pressure model that suits your interests (consistent with the ideal gas law and hydrostatic equilibrium --unless you want to get into really exotic conditions). >>>>> DECLARE FUNCTION getmu# (r#) DEFDBL A-Z CONST REarth = 6378000# 'follows Auer-Standish: Astronomical Journal, May 2000. pi = 4 * ATN(1) kk = 180 / pi INPUT "psi0:", psi0 psi0 = psi0 / kk INPUT "ht (m):", ht r0 = REarth + ht mu0 = getmu(r0) mrsp0 = mu0 * r0 * SIN(psi0) sum = 0 'the integration interval (in radians). Has to be fairly small for convergence: dpsi = .00001 'dr for derivatives: dr = 1 'drtest for Newton-Raphson loop: drtest = .01 * dr 'Start value for angular integration. 'Could start nearer to zero but this works fine: psi = .1 * psi0 r = REarth + 20000 'a fairly arbitrary seed value... DO 'getr loop follows: DO 'calculate index of refraction at distance r (see function getmu below): mu = getmu(r) 'and calculate again a little bit higher: mu1 = getmu(r + dr) 'and thus get the derivative d(mu)/dr: dmudr = (mu1 - mu) / dr 'use Newton-Raphson to get r as outlined in article: F = mu * r - mrsp0 / SIN(psi) dFdr = dmudr * r + mu rnew = r - F / dFdr 'after two or three passes, this test should bail out of the loop: IF ABS(rnew - r) < drtest THEN EXIT DO r = rnew LOOP 'now calculate d(ln(mu))/d(ln(r)): dlmdlr = (r / mu) * dmudr 'add the contribution for this zenith distance to the integral: sum = sum + dpsi * dlmdlr / (1 + dlmdlr) 'note: partsum --next line-- is for testing purposes only: IF psi < .9 * psi0 THEN partsum = sum 'increment the zenith distance: psi = psi + dpsi LOOP UNTIL psi >= psi0 'That's it. The sum is the total refraction. Convert to minutes of arc: ref = -sum * kk * 60 PRINT ref 'The following lines are for testing purposes only. 'For zenith distances below 75 degrees, the refraction s/b proportional to tan(psi): PRINT ref / TAN(psi0) PRINT partsum / sum END FUNCTION getmu (r) 'Calculates the index of refraction (mu) of the atmosphere as a function of altitude r. 'BIG NOTE: this is a simple TEST model with exponential density. Works nicely, 'but should be replaced with something more sophisticated like the model in the 'original article. And this model can be extended with any sort of arbitrary 'conditions as required. 'Simple exponential decay of atmospheric density with a scale height of 10 km: getmu = 1 + .00029241# * EXP(-(r - REarth) / 10000) END FUNCTION <<<<< -FER 42.0N 87.7W, or 41.4N 72.1W. www.HistoricalAtlas.com/lunars