[Bug] yyyymmddhh2yyyyFrac contributed.ncl

From: Alan Brammer <abrammer_at_nyahnyahspammersnyahnyah>
Date: Thu Apr 24 2014 - 09:52:58 MDT

Found a couple of typos in the 6.2.0 version of yyyymmddhh2yyyyFrac (aka yyyymmddhh_to_yyyyfrac ) in contributed.ncl

edits in the 6.2.0 contributed.ncl are;
lines 7876 & 7879 have nDay instead of nTim
lines 7883- 7899 reference yyyymmdd instead of yyyymmddhh

Having checked the 6.1.2 version these are new errors to do with, what looks like added calendar functionality.

Pasted below is the whole function with corrections.

Alan.

##############################
Alan Brammer,
PhD Student,

Department of Atmospheric and Environmental Sciences,
University at Albany, State University of New York, Albany, NY, 12222
abrammer@albany.edu
##############################

undef ("yyyymmddhh2yyyyFrac")
function yyyymmddhh2yyyyFrac (yyyymmddhh[*]:numeric)
local year, mmddhh, mon, ddhh, day, hour, dayYear, nTim, yrFrac \
    , n, ysec, dsec, varType, YEAR
begin
     varType = typeof(yyyymmddhh)

     if (varType.eq."integer") then
         YYYYMMDDHH = yyyymmddhh
     else
         YYYYMMDDHH = toint(yyyymmddhh)
     end if

     year = YYYYMMDDHH/1000000
     mmddhh = YYYYMMDDHH-year*1000000
     delete(YYYYMMDDHH)

     mon = mmddhh/10000
     ddhh = mmddhh-mon*10000
     delete (mmddhh)

     day = ddhh/100
     hour = ddhh-day*100
     delete (ddhh)

     if (isatt(yyyymmddhh,"calendar")) then
         year@calendar = yyyymmddhh@calendar ; check for calendar
     end if

     dayYear = day_of_year(year, mon, day) ; Gregorian calendar
     delete ([/mon, day/])

     nTim = dimsizes(yyyymmddhh)

     if (varType.eq."double") then
         yrFrac = new( nTim, "double", "No_FillValue")
         one = 1d0
     else
         yrFrac = new( nTim, "float", "No_FillValue")
         one = 1.0
     end if

     if (isatt(yyyymmddhh,"calendar")) then ; retrofit to existing code
         yrFrac@calendar = yyyymmddhh@calendar

         if (yyyymmddhh@calendar.eq."360_day" .or. yyyymmddhh@calendar.eq."360") then
             con = (/ 360, 360, 86400, 3600 /)*one
         end if
         if (yyyymmddhh@calendar.eq."365_day" .or. yyyymmddhh@calendar.eq."365" .or. \
             yyyymmddhh@calendar.eq."noleap" .or. yyyymmddhh@calendar.eq."no_leap") then
             con = (/ 365, 365, 86400, 3600 /)*one
         end if
         if (yyyymmddhh@calendar.eq."366_day" .or. yyyymmddhh@calendar.eq."366" .or. \
             yyyymmddhh@calendar.eq."allleap" .or. yyyymmddhh@calendar.eq."all_leap") then
             con = (/ 366, 366, 86400, 3600 /)*one
         end if
         if (yyyymmddhh@calendar.eq."gregorian" .or. yyyymmddhh@calendar.eq."standard") then
             con = (/ 365, 366, 86400, 3600 /)*one
         end if
     else
         con = (/ 365, 366, 86400, 3600 /)*one ; default is gregorian/standard
     end if

     do n=0,nTim-1
        if (isleapyear(year(n))) then
            ysec = con(2)*con(1)
        else
            ysec = con(2)*con(0)
         end if
         dsec = (dayYear(n)-1)*con(2) + hour(n)*con(3)
         yrFrac(n) = year(n) + dsec/ysec
     end do

     yrFrac@long_name = "Time"
     yrFrac@units = "YYYY + fractional portion of year"
     yrFrac@NCL = "contributed.ncl: function yyyymmddhh_to_yyyyFrac"

     return(yrFrac)
end

_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
Received on Thu Apr 24 09:53:12 2014

This archive was generated by hypermail 2.1.8 : Tue Apr 29 2014 - 09:04:20 MDT