;+ ; NAME: ; fp_doy2jd ; ; ; PURPOSE: ; convert a floating point day of year into a Julian Day ; ; ; CATEGORY: ; time conversion ; ; ; INPUTS: ; fp_doy: the floating point doy, can be an array ; year: the year of the fp_doy, can be a scalar for all or an array ; of the same dimension of fp_doy ; ; OUTPUTS: ; the julian day of the fp_doy, year date ; ; ; ; EXAMPLE: ; IDL> print, fp_doy2jd(12.345, 2001), format='(d20.10)' ; 2451921.8450000007 ; ; ; ; MODIFICATION HISTORY: ; ; Mon Feb 12 18:22:13 2007, Brian Larsen ; rewrite for speed ; ; Thu Feb 8 13:47:23 2007, Brian Larsen ; written and tested ; ;- FUNCTION fp_doy2jd, fp_doy, year compile_opt strictarr IF N_ELEMENTS(year) EQ 0 THEN $ message, /ioerror, 'Must specify the year' IF N_ELEMENTS(fp_doy) EQ 1 THEN BEGIN one = 1 fp_doy = replicate(fp_doy, 2) ENDIF IF N_ELEMENTS(year) NE N_ELEMENTS(fp_doy) THEN year2 = replicate(year, N_ELEMENTS(fp_doy)) $ ELSE year2=year md = doy2md(fp_doy, year) month = md[*,0] day = md[*,1] doy = float(floor(fp_doy)) fp_doy -= doy hr = float(floor(fp_doy * 24.)) fp_doy *= 24. fp_doy -= hr min = float(floor(fp_doy * 60.)) fp_doy *= 60. fp_doy -= min sec = float(floor(fp_doy * 60.)) fp_doy *= 60. fp_doy -= sec jd = julday(month, day, year, hr, min, sec) IF KEYWORD_SET(one) THEN return, jd[0] ELSE return, jd END
Disclaimer