FACT++  1.0
palEvp.c
Go to the documentation of this file.
1 /*
2 *+
3 * Name:
4 * palEvp
5 
6 * Purpose:
7 * Returns the barycentric and heliocentric velocity and position of the
8 * Earth.
9 
10 * Language:
11 * Starlink ANSI C
12 
13 * Type of Module:
14 * Library routine
15 
16 * Invocation:
17 * void palEvp( double date, double deqx, double dvb[3], double dpb[3],
18 * double dvh[3], double dph[3] )
19 
20 * Arguments:
21 * date = double (Given)
22 * TDB (loosely ET) as a Modified Julian Date (JD-2400000.5)
23 * deqx = double (Given)
24 * Julian epoch (e.g. 2000.0) of mean equator and equinox of the
25 * vectors returned. If deqx <= 0.0, all vectors are referred to the
26 * mean equator and equinox (FK5) of epoch date.
27 * dvb = double[3] (Returned)
28 * Barycentric velocity (AU/s, AU)
29 * dpb = double[3] (Returned)
30 * Barycentric position (AU/s, AU)
31 * dvh = double[3] (Returned)
32 * heliocentric velocity (AU/s, AU)
33 * dph = double[3] (Returned)
34 * Heliocentric position (AU/s, AU)
35 
36 * Description:
37 * Returns the barycentric and heliocentric velocity and position of the
38 * Earth at a given epoch, given with respect to a specified equinox.
39 * For information about accuracy, see the function eraEpv00.
40 
41 * Authors:
42 * PTW: Pat Wallace (STFC)
43 * {enter_new_authors_here}
44 
45 * History:
46 * 2012-02-13 (PTW):
47 * Initial version.
48 * Adapted with permission from the Fortran SLALIB library.
49 * {enter_further_changes_here}
50 
51 * Copyright:
52 * Copyright (C) 2005 Patrick T. Wallace
53 * Copyright (C) 2012 Science and Technology Facilities Council.
54 * All Rights Reserved.
55 
56 * Licence:
57 * This program is free software: you can redistribute it and/or
58 * modify it under the terms of the GNU Lesser General Public
59 * License as published by the Free Software Foundation, either
60 * version 3 of the License, or (at your option) any later
61 * version.
62 *
63 * This program is distributed in the hope that it will be useful,
64 * but WITHOUT ANY WARRANTY; without even the implied warranty of
65 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
66 * GNU Lesser General Public License for more details.
67 *
68 * You should have received a copy of the GNU Lesser General
69 * License along with this program. If not, see
70 * <http://www.gnu.org/licenses/>.
71 
72 * Bugs:
73 * {note_any_bugs_here}
74 *-
75 */
76 
77 #include "pal.h"
78 #include "palmac.h"
79 #include "pal1sofa.h"
80 
81 void palEvp( double date, double deqx, double dvb[3], double dpb[3],
82  double dvh[3], double dph[3] ){
83 
84 /* Local Variables; */
85  int i;
86  double pvh[2][3], pvb[2][3], d1, d2, r[3][3];
87 
88 /* BCRS PV-vectors. */
89  eraEpv00 ( 2400000.5, date, pvh, pvb );
90 
91 /* Was precession to another equinox requested? */
92  if ( deqx > 0.0 ) {
93 
94 /* Yes: compute precession matrix from J2000.0 to deqx. */
95  eraEpj2jd ( deqx, &d1, &d2 );
96  eraPmat06 ( d1, d2, r );
97 
98 /* Rotate the PV-vectors. */
99  eraRxpv ( r, pvh, pvh );
100  eraRxpv ( r, pvb, pvb );
101  }
102 
103 /* Return the required vectors. */
104  for ( i = 0; i < 3; i++ ) {
105  dvh[i] = pvh[1][i] / PAL__SPD;
106  dvb[i] = pvb[1][i] / PAL__SPD;
107  dph[i] = pvh[0][i];
108  dpb[i] = pvb[0][i];
109  }
110 }
void palEvp(double date, double deqx, double dvb[3], double dpb[3], double dvh[3], double dph[3])
Definition: palEvp.c:81
void eraPmat06(double date1, double date2, double rbp[3][3])
Definition: pmat06.c:3
int i
Definition: db_dim_client.c:21
void eraEpj2jd(double epj, double *djm0, double *djm)
Definition: epj2jd.c:3
int eraEpv00(double date1, double date2, double pvh[2][3], double pvb[2][3])
Definition: epv00.c:3
static const double PAL__SPD
Definition: palmac.h:102
void eraRxpv(double r[3][3], double pv[2][3], double rpv[2][3])
Definition: rxpv.c:3