FACT++  1.0
palGeoc.c
Go to the documentation of this file.
1 /*
2 *+
3 * Name:
4 * palGeoc
5 
6 * Purpose:
7 * Convert geodetic position to geocentric
8 
9 * Language:
10 * Starlink ANSI C
11 
12 * Type of Module:
13 * Library routine
14 
15 * Invocation:
16 * void palGeoc( double p, double h, double * r, double *z );
17 
18 * Arguments:
19 * p = double (Given)
20 * latitude (radians)
21 * h = double (Given)
22 * height above reference spheroid (geodetic, metres)
23 * r = double * (Returned)
24 * distance from Earth axis (AU)
25 * z = double * (Returned)
26 * distance from plane of Earth equator (AU)
27 
28 * Description:
29 * Convert geodetic position to geocentric.
30 
31 * Authors:
32 * PTW: Patrick T. Wallace
33 * TIMJ: Tim Jenness (JAC, Hawaii)
34 * {enter_new_authors_here}
35 
36 * Notes:
37 * - Geocentric latitude can be obtained by evaluating atan2(z,r)
38 * - Uses WGS84 reference ellipsoid and calls eraGd2gc
39 
40 * History:
41 * 2012-03-01 (TIMJ):
42 * Initial version moved from palOne2One
43 * Adapted with permission from the Fortran SLALIB library.
44 * {enter_further_changes_here}
45 
46 * Copyright:
47 * Copyright (C) 2004 Patrick T. Wallace
48 * Copyright (C) 2012 Science and Technology Facilities Council.
49 * All Rights Reserved.
50 
51 * Licence:
52 * This program is free software: you can redistribute it and/or
53 * modify it under the terms of the GNU Lesser General Public
54 * License as published by the Free Software Foundation, either
55 * version 3 of the License, or (at your option) any later
56 * version.
57 *
58 * This program is distributed in the hope that it will be useful,
59 * but WITHOUT ANY WARRANTY; without even the implied warranty of
60 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
61 * GNU Lesser General Public License for more details.
62 *
63 * You should have received a copy of the GNU Lesser General
64 * License along with this program. If not, see
65 * <http://www.gnu.org/licenses/>.
66 
67 * Bugs:
68 * {note_any_bugs_here}
69 *-
70 */
71 
72 #include "pal.h"
73 #include "pal1sofa.h"
74 
75 void palGeoc ( double p, double h, double *r, double *z ) {
76  double xyz[3];
77  const double elong = 0.0; /* Use zero longitude */
78  const double AU = 1.49597870E11;
79  /* WGS84 looks to be the closest match */
80  eraGd2gc( ERFA_WGS84, elong, p, h, xyz );
81  *r = xyz[0] / (AU * cos(elong) );
82  *z = xyz[2] / AU;
83 }
int eraGd2gc(int n, double elong, double phi, double height, double xyz[3])
Definition: gd2gc.c:3
void palGeoc(double p, double h, double *r, double *z)
Definition: palGeoc.c:75
#define ERFA_WGS84
Definition: erfam.h:140