mirror of
https://github.com/eddyem/BTA_lib.git
synced 2026-03-21 09:11:08 +03:00
copy
This commit is contained in:
140
slalib/atmdsp.f
Normal file
140
slalib/atmdsp.f
Normal file
@@ -0,0 +1,140 @@
|
||||
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
|
||||
Reference in New Issue
Block a user