mirror of
https://github.com/eddyem/apogee_control.git
synced 2025-12-06 10:45:20 +03:00
141 lines
5.2 KiB
Fortran
141 lines
5.2 KiB
Fortran
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, 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. Note that radio refraction coefficients
|
|
* cannot be turned into optical values using this routine, nor
|
|
* vice versa.
|
|
*
|
|
* 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).
|
|
*
|
|
* Last revision 2 December 2005
|
|
*
|
|
* Copyright P.T.Wallace. All rights reserved.
|
|
*
|
|
* 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., 59 Temple Place, Suite 330,
|
|
* Boston, MA 02111-1307 USA
|
|
*
|
|
*-
|
|
|
|
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
|