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