aboutsummaryrefslogtreecommitdiff
path: root/math/slalib/refv.f
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
commitfa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch)
treebdda434976bc09c864f2e4fa6f16ba1952b1e555 /math/slalib/refv.f
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'math/slalib/refv.f')
-rw-r--r--math/slalib/refv.f129
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