| 1 | #include "slalib.h"
|
|---|
| 2 | #include "slamac.h"
|
|---|
| 3 | void slaAtmdsp ( double tdk, double pmb, double rh, double wl1,
|
|---|
| 4 | double a1, double b1, double wl2, double *a2, double *b2 )
|
|---|
| 5 | /*
|
|---|
| 6 | ** - - - - - - - - - -
|
|---|
| 7 | ** s l a A t m d s p
|
|---|
| 8 | ** - - - - - - - - - -
|
|---|
| 9 | **
|
|---|
| 10 | ** Apply atmospheric-dispersion adjustments to refraction coefficients.
|
|---|
| 11 | **
|
|---|
| 12 | ** Given:
|
|---|
| 13 | ** tdk double ambient temperature, degrees K
|
|---|
| 14 | ** pmb double ambient pressure, millibars
|
|---|
| 15 | ** rh double ambient relative humidity, 0-1
|
|---|
| 16 | ** wl1 double reference wavelength, micrometre (0.4 recommended)
|
|---|
| 17 | ** a1 double refraction coefficient A for wavelength wl1 (radians)
|
|---|
| 18 | ** b1 double refraction coefficient B for wavelength wl1 (radians)
|
|---|
| 19 | ** wl2 double wavelength for which adjusted A,B required
|
|---|
| 20 | **
|
|---|
| 21 | ** Returned:
|
|---|
| 22 | ** *a2 double refraction coefficient A for wavelength wl2 (radians)
|
|---|
| 23 | ** *b2 double refraction coefficient B for wavelength wl2 (radians)
|
|---|
| 24 | **
|
|---|
| 25 | ** Notes:
|
|---|
| 26 | **
|
|---|
| 27 | ** 1 To use this routine, first call slaRefco specifying wl1 as the
|
|---|
| 28 | ** wavelength. This yields refraction coefficients a1,b1, correct
|
|---|
| 29 | ** for that wavelength. Subsequently, calls to slaAtmdsp specifying
|
|---|
| 30 | ** different wavelengths will produce new, slightly adjusted
|
|---|
| 31 | ** refraction coefficients which apply to the specified wavelength.
|
|---|
| 32 | **
|
|---|
| 33 | ** 2 Most of the atmospheric dispersion happens between 0.7 micrometre
|
|---|
| 34 | ** and the UV atmospheric cutoff, and the effect increases strongly
|
|---|
| 35 | ** towards the UV end. For this reason a blue reference wavelength
|
|---|
| 36 | ** is recommended, for example 0.4 micrometres.
|
|---|
| 37 | **
|
|---|
| 38 | ** 3 The accuracy, for this set of conditions:
|
|---|
| 39 | **
|
|---|
| 40 | ** height above sea level 2000 m
|
|---|
| 41 | ** latitude 29 deg
|
|---|
| 42 | ** pressure 793 mB
|
|---|
| 43 | ** temperature 17 degC
|
|---|
| 44 | ** humidity 50%
|
|---|
| 45 | ** lapse rate 0.0065 degC/m
|
|---|
| 46 | ** reference wavelength 0.4 micrometre
|
|---|
| 47 | ** star elevation 15 deg
|
|---|
| 48 | **
|
|---|
| 49 | ** is about 2.5 mas RMS between 0.3 and 1.0 micrometres, and stays
|
|---|
| 50 | ** within 4 mas for the whole range longward of 0.3 micrometres
|
|---|
| 51 | ** (compared with a total dispersion from 0.3 to 20.0 micrometres
|
|---|
| 52 | ** of about 11 arcsec). These errors are typical for ordinary
|
|---|
| 53 | ** conditions and the given elevation; in extreme conditions values
|
|---|
| 54 | ** a few times this size may occur, while at higher elevations the
|
|---|
| 55 | ** errors become much smaller.
|
|---|
| 56 | **
|
|---|
| 57 | ** 4 If either wavelength exceeds 100 micrometres, the radio case
|
|---|
| 58 | ** is assumed and the returned refraction coefficients are the
|
|---|
| 59 | ** same as the given ones.
|
|---|
| 60 | **
|
|---|
| 61 | ** 5 The algorithm consists of calculation of the refractivity of the
|
|---|
| 62 | ** air at the observer for the two wavelengths, using the methods
|
|---|
| 63 | ** of the slaRefro routine, and then scaling of the two refraction
|
|---|
| 64 | ** coefficients according to classical refraction theory. This
|
|---|
| 65 | ** amounts to scaling the A coefficient in proportion to (n-1) and
|
|---|
| 66 | ** the B coefficient almost in the same ratio (see R.M.Green,
|
|---|
| 67 | ** "Spherical Astronomy", Cambridge University Press, 1985).
|
|---|
| 68 | **
|
|---|
| 69 | ** Last revision: 25 June 1996
|
|---|
| 70 | **
|
|---|
| 71 | ** Copyright P.T.Wallace. All rights reserved.
|
|---|
| 72 | */
|
|---|
| 73 | {
|
|---|
| 74 | double tdkok, pmbok, rhok, psat, pwo, w1, wlok, wlsq, w2, dn1, dn2, f;
|
|---|
| 75 |
|
|---|
| 76 |
|
|---|
| 77 | /* Check for radio wavelengths. */
|
|---|
| 78 | if ( wl1 > 100.0 || wl2 > 100.0 ) {
|
|---|
| 79 |
|
|---|
| 80 | /* Radio: no dispersion. */
|
|---|
| 81 | *a2 = a1;
|
|---|
| 82 | *b2 = b1;
|
|---|
| 83 | } else {
|
|---|
| 84 |
|
|---|
| 85 | /* Optical: keep arguments within safe bounds. */
|
|---|
| 86 | tdkok = gmax ( tdk, 100.0 );
|
|---|
| 87 | tdkok = gmin ( tdkok, 500.0 );
|
|---|
| 88 | pmbok = gmax ( pmb, 0.0 );
|
|---|
| 89 | pmbok = gmin ( pmbok, 10000.0 );
|
|---|
| 90 | rhok = gmax ( rh, 0.0 );
|
|---|
| 91 | rhok = gmin ( rhok, 1.0 );
|
|---|
| 92 |
|
|---|
| 93 | /* Atmosphere parameters at the observer. */
|
|---|
| 94 | psat = pow ( 10.0, -8.7115 + 0.03477 * tdkok );
|
|---|
| 95 | pwo = rhok * psat;
|
|---|
| 96 | w1 = 11.2684e-6 * pwo;
|
|---|
| 97 |
|
|---|
| 98 | /* Refractivity at the observer for first wavelength. */
|
|---|
| 99 | wlok = gmax ( wl1, 0.1 );
|
|---|
| 100 | wlsq = wlok * wlok;
|
|---|
| 101 | w2 = 77.5317e-6 + ( 0.43909e-6 + 0.00367e-6 / wlsq ) / wlsq;
|
|---|
| 102 | dn1 = ( w2 * pmbok - w1 ) / tdkok;
|
|---|
| 103 |
|
|---|
| 104 | /* Refractivity at the observer for second wavelength. */
|
|---|
| 105 | wlok = gmax ( wl2, 0.1 );
|
|---|
| 106 | wlsq = wlok * wlok;
|
|---|
| 107 | w2 = 77.5317e-6 + ( 0.43909e-6 + 0.00367e-6 / wlsq ) / wlsq;
|
|---|
| 108 | dn2 = ( w2 * pmbok - w1 ) / tdkok;
|
|---|
| 109 |
|
|---|
| 110 | /* Scale the refraction coefficients (see Green 4.31, p93). */
|
|---|
| 111 | if ( dn1 != 0.0 ) {
|
|---|
| 112 | f = dn2 / dn1;
|
|---|
| 113 | *a2 = a1 * f;
|
|---|
| 114 | *b2 = b1 * f;
|
|---|
| 115 | if ( dn1 != a1 )
|
|---|
| 116 | *b2 = *b2 * ( 1.0 + dn1 * ( dn1 - dn2 ) /
|
|---|
| 117 | ( 2.0 * ( dn1 - a1 ) ) );
|
|---|
| 118 | } else {
|
|---|
| 119 | *a2 = a1;
|
|---|
| 120 | *b2 = b1;
|
|---|
| 121 | }
|
|---|
| 122 | }
|
|---|
| 123 | }
|
|---|