aboutsummaryrefslogtreecommitdiff
path: root/src/slalib/atmdsp.f
blob: 62869aad3c7068a9fc080a79bf2e083e87b8fe0d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
SUBROUTINE sla_ATMDSP (TDK, PMB, RH, WL1, A1, B1, WL2, A2, B2)
*+
*     - - - - - - -
*      A T M D S P
*     - - - - - - -
*
*  Apply atmospheric-dispersion adjustments to refraction coefficients.
*
*  Given:
*     TDK       d       ambient temperature, degrees K
*     PMB       d       ambient pressure, millibars
*     RH        d       ambient relative humidity, 0-1
*     WL1       d       reference wavelength, micrometre (0.4D0 recommended)
*     A1        d       refraction coefficient A for wavelength WL1 (radians)
*     B1        d       refraction coefficient B for wavelength WL1 (radians)
*     WL2       d       wavelength for which adjusted A,B required
*
*  Returned:
*     A2        d       refraction coefficient A for wavelength WL2 (radians)
*     B2        d       refraction coefficient B for wavelength WL2 (radians)
*
*  Notes:
*
*  1  To use this routine, first call sla_REFCO specifying WL1 as the
*     wavelength.  This yields refraction coefficients A1,B1, correct
*     for that wavelength.  Subsequently, calls to sla_ATMDSP specifying
*     different wavelengths will produce new, slightly adjusted
*     refraction coefficients which apply to the specified wavelength.
*
*  2  Most of the atmospheric dispersion happens between 0.7 micrometre
*     and the UV atmospheric cutoff, and the effect increases strongly
*     towards the UV end.  For this reason a blue reference wavelength
*     is recommended, for example 0.4 micrometres.
*
*  3  The accuracy, for this set of conditions:
*
*        height above sea level    2000 m
*                      latitude    29 deg
*                      pressure    793 mB
*                   temperature    17 degC
*                      humidity    50%
*                    lapse rate    0.0065 degC/m
*          reference wavelength    0.4 micrometre
*                star elevation    15 deg
*
*     is about 2.5 mas RMS between 0.3 and 1.0 micrometres, and stays
*     within 4 mas for the whole range longward of 0.3 micrometres
*     (compared with a total dispersion from 0.3 to 20.0 micrometres
*     of about 11 arcsec).  These errors are typical for ordinary
*     conditions and the given elevation;  in extreme conditions values
*     a few times this size may occur, while at higher elevations the
*     errors become much smaller.
*
*  4  If either wavelength exceeds 100 micrometres, the radio case
*     is assumed and the returned refraction coefficients are the
*     same as the given ones.
*
*  5  The algorithm consists of calculation of the refractivity of the
*     air at the observer for the two wavelengths, using the methods
*     of the sla_REFRO routine, and then scaling of the two refraction
*     coefficients according to classical refraction theory.  This
*     amounts to scaling the A coefficient in proportion to (n-1) and
*     the B coefficient almost in the same ratio (see R.M.Green,
*     "Spherical Astronomy", Cambridge University Press, 1985).
*
*  P.T.Wallace   Starlink   6 October 1995
*
*  Copyright (C) 1995 Rutherford Appleton Laboratory
*-

      IMPLICIT NONE

      DOUBLE PRECISION TDK,PMB,RH,WL1,A1,B1,WL2,A2,B2

      DOUBLE PRECISION F,TDKOK,PMBOK,RHOK,
     :                 PSAT,PWO,W1,WLOK,WLSQ,W2,DN1,DN2


*  Check for radio wavelengths
      IF (WL1.GT.100D0.OR.WL2.GT.100D0) THEN

*     Radio: no dispersion
         A2 = A1
         B2 = B1
      ELSE

*     Optical: keep arguments within safe bounds
         TDKOK = MIN(MAX(TDK,100D0),500D0)
         PMBOK = MIN(MAX(PMB,0D0),10000D0)
         RHOK = MIN(MAX(RH,0D0),1D0)

*     Atmosphere parameters at the observer
         PSAT = 10D0**(-8.7115D0+0.03477D0*TDKOK)
         PWO = RHOK*PSAT
         W1 = 11.2684D-6*PWO

*     Refractivity at the observer for first wavelength
         WLOK = MAX(WL1,0.1D0)
         WLSQ = WLOK*WLOK
         W2 = 77.5317D-6+(0.43909D-6+0.00367D-6/WLSQ)/WLSQ
         DN1 = (W2*PMBOK-W1)/TDKOK

*     Refractivity at the observer for second wavelength
         WLOK = MAX(WL2,0.1D0)
         WLSQ = WLOK*WLOK
         W2 = 77.5317D-6+(0.43909D-6+0.00367D-6/WLSQ)/WLSQ
         DN2 = (W2*PMBOK-W1)/TDKOK

*     Scale the refraction coefficients (see Green 4.31, p93)
         IF (DN1.NE.0D0) THEN
            F = DN2/DN1
            A2 = A1*F
            B2 = B1*F
            IF (DN1.NE.A1) B2=B2*(1D0+DN1*(DN1-DN2)/(2D0*(DN1-A1)))
         ELSE
            A2 = A1
            B2 = B1
         END IF
      END IF

      END