FACT++  1.0
palRefco.c
Go to the documentation of this file.
1 /*
2 *+
3 * Name:
4 * palRefco
5 
6 * Purpose:
7 * Determine constants in atmospheric refraction model
8 
9 * Language:
10 * Starlink ANSI C
11 
12 * Type of Module:
13 * Library routine
14 
15 * Invocation:
16 * void palRefco ( double hm, double tdk, double pmb, double rh,
17 * double wl, double phi, double tlr, double eps,
18 * double *refa, double *refb );
19 
20 * Arguments:
21 * hm = double (Given)
22 * Height of the observer above sea level (metre)
23 * tdk = double (Given)
24 * Ambient temperature at the observer (K)
25 * pmb = double (Given)
26 * Pressure at the observer (millibar)
27 * rh = double (Given)
28 * Relative humidity at the observer (range 0-1)
29 * wl = double (Given)
30 * Effective wavelength of the source (micrometre)
31 * phi = double (Given)
32 * Latitude of the observer (radian, astronomical)
33 * tlr = double (Given)
34 * Temperature lapse rate in the troposphere (K/metre)
35 * eps = double (Given)
36 * Precision required to terminate iteration (radian)
37 * refa = double * (Returned)
38 * tan Z coefficient (radian)
39 * refb = double * (Returned)
40 * tan**3 Z coefficient (radian)
41 
42 * Description:
43 * Determine the constants A and B in the atmospheric refraction
44 * model dZ = A tan Z + B tan**3 Z.
45 *
46 * Z is the "observed" zenith distance (i.e. affected by refraction)
47 * and dZ is what to add to Z to give the "topocentric" (i.e. in vacuo)
48 * zenith distance.
49 
50 * Authors:
51 * PTW: Patrick T. Wallace
52 * TIMJ: Tim Jenness (JAC, Hawaii)
53 * {enter_new_authors_here}
54 
55 * Notes:
56 * - Typical values for the TLR and EPS arguments might be 0.0065 and
57 * 1E-10 respectively.
58 *
59 * - The radio refraction is chosen by specifying WL > 100 micrometres.
60 *
61 * - The routine is a slower but more accurate alternative to the
62 * palRefcoq routine. The constants it produces give perfect
63 * agreement with palRefro at zenith distances arctan(1) (45 deg)
64 * and arctan(4) (about 76 deg). It achieves 0.5 arcsec accuracy
65 * for ZD < 80 deg, 0.01 arcsec accuracy for ZD < 60 deg, and
66 * 0.001 arcsec accuracy for ZD < 45 deg.
67 
68 * History:
69 * 2012-08-24 (TIMJ):
70 * Initial version. A direct copy of the Fortran SLA implementation.
71 * Adapted with permission from the Fortran SLALIB library.
72 * {enter_further_changes_here}
73 
74 * Copyright:
75 * Copyright (C) 2004 Rutherford Appleton Laboratory
76 * Copyright (C) 2012 Science and Technology Facilities Council.
77 * All Rights Reserved.
78 
79 * Licence:
80 * This program is free software; you can redistribute it and/or
81 * modify it under the terms of the GNU General Public License as
82 * published by the Free Software Foundation; either version 3 of
83 * the License, or (at your option) any later version.
84 *
85 * This program is distributed in the hope that it will be
86 * useful, but WITHOUT ANY WARRANTY; without even the implied
87 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
88 * PURPOSE. See the GNU General Public License for more details.
89 *
90 * You should have received a copy of the GNU General Public License
91 * along with this program; if not, write to the Free Software
92 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
93 * MA 02110-1301, USA.
94 
95 * Bugs:
96 * {note_any_bugs_here}
97 *-
98 */
99 
100 #include "pal.h"
101 
102 void palRefco ( double hm, double tdk, double pmb, double rh,
103  double wl, double phi, double tlr, double eps,
104  double *refa, double *refb ) {
105 
106  double r1, r2;
107 
108  /* Sample zenith distances: arctan(1) and arctan(4) */
109  const double ATN1 = 0.7853981633974483;
110  const double ATN4 = 1.325817663668033;
111 
112  /* Determine refraction for the two sample zenith distances */
113  palRefro(ATN1,hm,tdk,pmb,rh,wl,phi,tlr,eps,&r1);
114  palRefro(ATN4,hm,tdk,pmb,rh,wl,phi,tlr,eps,&r2);
115 
116  /* Solve for refraction constants */
117  *refa = (64.0*r1-r2)/60.0;
118  *refb = (r2-4.0*r1)/60.0;
119 
120 }
void palRefro(double zobs, double hm, double tdk, double pmb, double rh, double wl, double phi, double tlr, double eps, double *ref)
Definition: palRefro.c:185
void palRefco(double hm, double tdk, double pmb, double rh, double wl, double phi, double tlr, double eps, double *refa, double *refb)
Definition: palRefco.c:102