pro day_to_year_doy,day,y,d
;+
;NAME:
;   day_to_year_doy
;PURPOSE:
;   determines year and day of year given day since 0000 AD
;USAGE:
;   day_to_year_doy,daynum,year,doy
;INPUT:
;   daynum:   (long int)  day since 0 AD
;OUTPUT:
;   year:     year         (0 <= year <= 14699 AD)
;   doy:      day of year  (1 <= doy  <=  366) 
;NOTES:
;  This procedure is reasonably fast, it works on arrays and works from
;  0 AD to 14699 AD
;
;CREATED BY:	Davin Larson  Oct 1996
;FILE:  day_to_year_doy.pro
;VERSION:  1.2
;LAST MODIFICATION:  97/01/27
;-
day = floor(day)

;get year correctly to within one year  
y = (day*400)/(365l*400 +100 -4 + 1)
;get doy based on the year
d = day - (y*365 + y/4 - y/100 + y/400 - y/4000)

w = where(d ge 365,c)                    ;make corrections
if(c ne 0) then begin 
   y(w) = y(w) +1
   d(w) = day(w) - (y(w)*365 + y(w)/4 - y(w)/100 + y(w)/400 - y(w)/4000)
endif

w = where(d lt 0,c)                     ;more corrections
if(c ne 0) then begin 
   y(w) = y(w) -1 
   d(w) = day(w) - (y(w)*365 + y(w)/4 - y(w)/100 + y(w)/400 - y(w)/4000)
endif

y = y+1
d = d+1

return
end