Return to Ferret FAQ


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 generate 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) 

Note 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.

      ! 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]


Last modified: Dec 16, 2003