aboutsummaryrefslogtreecommitdiff
path: root/src/libcf/helio_vel.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcf/helio_vel.c')
-rw-r--r--src/libcf/helio_vel.c82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/libcf/helio_vel.c b/src/libcf/helio_vel.c
new file mode 100644
index 0000000..bc069b6
--- /dev/null
+++ b/src/libcf/helio_vel.c
@@ -0,0 +1,82 @@
+/*****************************************************************************
+ * Johns Hopkins University
+ * Center For Astrophysical Sciences
+ * FUSE
+ *****************************************************************************
+ *
+ * Synopsis: double helio_vel(double mjdate, double ra, double dec)
+ *
+ * Description: Computes the Earth's orbital velocity in the direction
+ * of ra,dec to convert to heliocentric velocity.
+ *
+ * Arguments: double mjdate Mod. Julian date of observation
+ * double ra (deg) J2000.0 right ascension
+ * double dec (deg) J2000.0 declination
+ *
+ * Returns: double (km/s) velocity in direction of source
+ *
+ * Calls: slaEvp evp.f
+ * slaDcs2c dcs2c.f
+ * slaDvdv dvdv.f
+ *
+ * History: 03/05/98 E. Murphy Begin work.
+ * 03/05/98 E. Murphy Initial version working
+ * 05/31/00 peb Implemented cfortran.h calls for slalib
+ * functions.
+ * 06/15/01 V. Dixon Correct sign of return value to agree
+ * with astronomical convention.
+ * 12/18/03 bjg Change calfusettag.h to calfuse.h
+ *
+ * References: This routine makes use of the Starlink set of astronomical
+ * subroutines (SLALIB). More information can be found at
+ * http://star-www.rl.ac.uk.
+ ****************************************************************************/
+
+#include <stdio.h>
+
+#ifdef CFORTRAN
+#include "cfortran.h"
+
+PROTOCCALLSFSUB3(SLA_DCS2C, sla_dcs2c, DOUBLE, DOUBLE, DOUBLEV)
+#define slaDcs2c(A, B, V) \
+ CCALLSFSUB3(SLA_DCS2C, sla_dcs2c, DOUBLE, DOUBLE, DOUBLEV, A, B, V)
+
+PROTOCCALLSFFUN2(DOUBLE, SLA_DVDV, sla_dvdv, DOUBLEV, DOUBLEV)
+#define slaDvdv(VA, VB) \
+ CCALLSFFUN2(SLA_DVDV, sla_dvdv, DOUBLEV, DOUBLEV, VA, VB)
+
+PROTOCCALLSFSUB6(SLA_EVP, sla_evp, DOUBLE, DOUBLE, DOUBLEV, DOUBLEV, \
+ DOUBLEV, DOUBLEV)
+#define slaEvp(DATE, DEQX, DVB, DPB, DVH, DPH) \
+ CCALLSFSUB6(SLA_EVP, sla_evp, DOUBLE, DOUBLE, DOUBLEV, DOUBLEV, \
+ DOUBLEV, DOUBLEV, DATE, DEQX, DVB, DPB, DVH, DPH)
+#else
+#include "slalib.h"
+#include "slamac.h"
+#endif
+
+#include "calfuse.h"
+
+double helio_vel(double mjdate, double ra, double dec)
+{
+ /* Define variables. */
+ double dvb[3], dpb[3], dvh[3], dph[3], vect[3];
+ /*
+ * Evp returns four 3-vectors containing the barycentric velocity and
+ * position (dvb,dpb) and the heliocentric velocity and position
+ * (dvh,dph) of the Earth on the date mjdate. It requires a modified
+ * Julian date as input. Output has units of AU for positions and
+ * AU/s for velocities.
+ */
+ slaEvp(mjdate, 2000.0, dvb, dpb, dvh, dph);
+
+ /* Convert the J2000.0 RA and DEC into a 3-vector position */
+
+ slaDcs2c(RADIAN*ra, RADIAN*dec, vect);
+ /*
+ * Compute the dot product of the RA DEC position vector and the
+ * heliocentric velocity vector. Mutliply by km/AU to get velocity
+ * in km/s.
+ */
+ return slaDvdv(vect, dvh)*149.5978707E6;
+}