National Oceanic and
Atmospheric Administration
United States Department of Commerce

Creating a time axis from time variables

Creating a time axis from time variables

Question:

How can I create a time axis from data in a file which lists time segments as variables?

Example:

The data set looks like this: All variables are on an abstract I axis.

name title I J K L

YEAR Year 1:4320 ... ... ...
MONTH Month 1:4320 ... ... ...
DAY Day 1:4320 ... ... ...
HOUR Hour 1:4320 ... ... ...
MINUTE Minute 1:4320 ... ... ...
VAL Value 1:4320 ... ... ...

We want to put variable VAL on a time axis described by YEAR, MONTH, DAY, HOUR, and MINUTE.

Solution:

Compute time steps from YEAR, MONTH, DAY, etc. and then use them to define a time axis. The times must be in monotonically increasing order for this to work.

! Compute the time steps in units of days.
! DAYS1900() returns the number of days since 1900-01-01.

LET day_frac = (hour + minute/60 ) / 24
LET tstep = DAYS1900(year,month,day) + day_frac

! Define a time axis, ttaxis, from variable tstep
DEFINE axis/T/T0=1-jan-1900/UNIT=days ttaxis=tstep[L=1:4320]

! Define a dummy variable on the new time taxis
LET dummy=t[GT=ttaxis]

! Reshape the variable val from abstract I axis to the new T axis
LET new_val = RESHAPE(val,dummy)

[Previous to Ferret v6.8 one needs to be aware that Ferret variables are represented as single precision real numbers. (Axes are represented in double precision, but we are using a variable to define the axis and that variable is single precision.) If your timestep is small, such as minutes, and your times are a century or more after 1-jan-1900, you will need to use a time origin later than 1-Jan-1900 so that the number of minutes since the origin does not exceed the precision that can be represented.] With double-precision Ferret, v6.8, you may use any valid time axis definition without having to consider this.

Also note that this creates an axis using the standard Proleptic Gregorian calendar. The DAYS1900 function returns days on that calendar.

! Compute the time steps in units of minutes.
LET days_2001 = DAYS1900(2001,1,1)

LET day_frac = (hour + minute/60 ) / 24
LET tstep = DAYS1900(year,month,day) - days_2001 + day_frac

! Define a time axis, ttaxis, from variable tstep
DEFINE axis/T/T0=1-jan-2001/UNIT=days ttaxis=tstep[L=1:4320]