diff options
Diffstat (limited to 'math/slalib/refv.f')
-rw-r--r-- | math/slalib/refv.f | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/math/slalib/refv.f b/math/slalib/refv.f new file mode 100644 index 00000000..42a5f1f6 --- /dev/null +++ b/math/slalib/refv.f @@ -0,0 +1,129 @@ + SUBROUTINE slREFV (VU, REFA, REFB, VR) +*+ +* - - - - - +* R E F V +* - - - - - +* +* Adjust an unrefracted Cartesian vector to include the effect of +* atmospheric refraction, using the simple A tan Z + B tan**3 Z +* model. +* +* Given: +* VU dp unrefracted position of the source (Az/El 3-vector) +* REFA dp tan Z coefficient (radian) +* REFB dp tan**3 Z coefficient (radian) +* +* Returned: +* VR dp refracted position of the source (Az/El 3-vector) +* +* Notes: +* +* 1 This routine applies the adjustment for refraction in the +* opposite sense to the usual one - it takes an unrefracted +* (in vacuo) position and produces an observed (refracted) +* position, whereas the A tan Z + B tan**3 Z model strictly +* applies to the case where an observed position is to have the +* refraction removed. The unrefracted to refracted case is +* harder, and requires an inverted form of the text-book +* refraction models; the algorithm used here is equivalent to +* one iteration of the Newton-Raphson method applied to the above +* formula. +* +* 2 Though optimized for speed rather than precision, the present +* routine achieves consistency with the refracted-to-unrefracted +* A tan Z + B tan**3 Z model at better than 1 microarcsecond within +* 30 degrees of the zenith and remains within 1 milliarcsecond to +* beyond ZD 70 degrees. The inherent accuracy of the model is, of +* course, far worse than this - see the documentation for slRFCO +* for more information. +* +* 3 At low elevations (below about 3 degrees) the refraction +* correction is held back to prevent arithmetic problems and +* wildly wrong results. For optical/IR wavelengths, over a wide +* range of observer heights and corresponding temperatures and +* pressures, the following levels of accuracy (arcsec, worst case) +* are achieved, relative to numerical integration through a model +* atmosphere: +* +* ZD error +* +* 80 0.7 +* 81 1.3 +* 82 2.5 +* 83 5 +* 84 10 +* 85 20 +* 86 55 +* 87 160 +* 88 360 +* 89 640 +* 90 1100 +* 91 1700 } relevant only to +* 92 2600 } high-elevation sites +* +* The results for radio are slightly worse over most of the range, +* becoming significantly worse below ZD=88 and unusable beyond +* ZD=90. +* +* 4 See also the routine slREFZ, which performs the adjustment to +* the zenith distance rather than in Cartesian Az/El coordinates. +* The present routine is faster than slREFZ and, except very low down, +* is equally accurate for all practical purposes. However, beyond +* about ZD 84 degrees slREFZ should be used, and for the utmost +* accuracy iterative use of slRFRO should be considered. +* +* P.T.Wallace Starlink 10 April 2004 +* +* Copyright (C) 2004 Rutherford Appleton Laboratory +* +* License: +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program (see SLA_CONDITIONS); if not, write to the +* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +* Boston, MA 02110-1301 USA +* +* Copyright (C) 1995 Association of Universities for Research in Astronomy Inc. +*- + + IMPLICIT NONE + + DOUBLE PRECISION VU(3),REFA,REFB,VR(3) + + DOUBLE PRECISION X,Y,Z1,Z,ZSQ,RSQ,R,WB,WT,D,CD,F + + + +* Initial estimate = unrefracted vector + X = VU(1) + Y = VU(2) + Z1 = VU(3) + +* Keep correction approximately constant below about 3 deg elevation + Z = MAX(Z1,0.05D0) + +* One Newton-Raphson iteration + ZSQ = Z*Z + RSQ = X*X+Y*Y + R = SQRT(RSQ) + WB = REFB*RSQ/ZSQ + WT = (REFA+WB)/(1D0+(REFA+3D0*WB)*(ZSQ+RSQ)/ZSQ) + D = WT*R/Z + CD = 1D0-D*D/2D0 + F = CD*(1D0-WT) + +* Post-refraction x,y,z + VR(1) = X*F + VR(2) = Y*F + VR(3) = CD*(Z+D*R)+(Z1-Z) + + END |