Return to Ferret FAQ


Regridding a Time Series with @AVE


Question:

How can I tell what weights Ferret uses in regridding with @AVE ?

Example:

We compute annual averages of the monthly_navy_winds data set.

[Output Graphic]
yes? SET DATA monthly_navy_winds
yes? DEFINE AXIS/EDGES/T0=1-jan-1900/UNITS=days tann82_92 = 
      DAYS1900(X[i=1982:1993:1],1,1)
yes? PLOT/X=180/Y=0 uwnd
yes? PLOT/X=180/Y=0/OVER uwnd[GT=tann82_92@AVE]

Discussion: Details of weighting and of customizing time axes

Weighting of the input points into the output averages is based on the length of each input interval that lies within each output interval. An input interval that spans two output intervals will contribute partial weight to each. If the input monthly data boundaries are at 00:00 on the first of each month then the example above would weight each month by the number of days in that month.

As always with Ferret, the best way to be really sure how it performs a calculation is to "ask it". For any given output point the result is computed by SUM(weight_i * value_i)/SUM(weight_i). Thus, setting the value at i=k to 1.0 and all others to 0.0 will give us weight_k/SUM(weight_i) for that output interval. To see the weighting used on the 2nd month of monthly_navy_winds above use

   yes? LET just_one = IF L[g=uwnd] EQ 2 THEN 1 ELSE 0
   yes? LIST/X=180/Y=0 just_one[GT=tann82_92@ave]
             IF L[G=UWND] EQ 2 THEN 1 ELSE 0
             regrid: on T@AVE
             DATA SET: /home/ja9/tmap/fer_dsets/descr/monthly_navy_winds.des
     JUL-1982 /  1:  0.08353
     JUL-1983 /  2:  0.00000
     JUL-1984 /  3:  0.00000
     JUL-1985 /  4:  0.00000
     JUL-1986 /  5:  0.00000
     JUL-1987 /  6:  0.00000
     JUL-1988 /  7:  0.00000
     JUL-1989 /  8:  0.00000
     JUL-1990 /  9:  0.00000
     JUL-1991 / 10:  0.00000
     JUL-1992 / 11:  0.00000
and you'll see that the L=2 point was given a weight of 0.08353, as it contributed to the yearly average for 1982.

To refer to months by standard calendar notation

   yes? LET just_one = IF L[g=uwnd] EQ L[G=uwnd,t=15-feb-1982]  THEN 1 ELSE 0
   yes? LIST/X=180/Y=0 just_one[GT=tann82_92@ave]    ! (gives the same result as above)

To see the weigts used on the 2nd month (Feb) of every year

   yes? LET just_one = IF MOD(L[g=uwnd],12) EQ 2 THEN 1 ELSE 0
   yes? LIST/X=180/Y=0 just_one[GT=tann82_92@ave]
             IF MOD(L[G=UWND],12) EQ 2 THEN 1 ELSE 0
             regrid: on T@AVE
             DATA SET: /home/ja9/tmap/fer_dsets/descr/monthly_navy_winds.des
     JUL-1982 /  1:  0.08353
     JUL-1983 /  2:  0.08339
     JUL-1984 /  3:  0.08316
     JUL-1985 /  4:  0.08339
     JUL-1986 /  5:  0.08339
     JUL-1987 /  6:  0.08339
     JUL-1988 /  7:  0.08316
     JUL-1989 /  8:  0.08339
     JUL-1990 /  9:  0.08339
     JUL-1991 / 10:  0.08339
     JUL-1992 / 11:  0.08316
You may notice that the weightings in this example look a bit unusual. To understand why look at the encoding of the time axis in monthly_navy_winds
   yes? SH GRID/L=1:5 uwnd
        GRID FNOC25
     name       axis              # pts   start                end
     FNOCX     LONGITUDE          144mr   20E                  17.5E(377.5)
     FNOCY     LATITUDE            73 r   90S                  90N
     normal    Z
     TIME      TIME               132 r   16-JAN-1982 20:00    17-DEC-1992 03:30
 
               L     T                 BOX_SIZE       TIME_STEP (hour)
               1>  16-JAN-1982 20:00:00  730.5          17598
               2>  16-FEB-1982 06:30:00  730.5          18328.5
               3>  18-MAR-1982 17:00:00  730.5          19059
               4>  18-APR-1982 03:30:00  730.5          19789.5
               5>  18-MAY-1982 14:00:00  730.5          20520
Each month is an identical 730.5 hours long! Of course, this means that the months do not exactly align with Jan. 1 of each year. We will look at a fix for this later, but first let's look at its effect on the average we have computed.

To see all of the weights for a period of time (example - months 1 through 12)

   yes? LET just_one = IF L[G=uwnd] EQ k THEN 1 ELSE 0
   yes? LIST/X=180/Y=0/L=1:2/K=1:12 just_one[GT=tann82_92@AVE]
Here k is a dummy variable referring to times (months) in the input data set, and /L=1:2 in the LIST command asks Ferret to list output for the first two years of the target yearly time series.

   yes? LIST/X=180/Y=0/L=1:2/K=1:12 just_one[GT=tann82_92@AVE]
             IF L[G=UWND] EQ K THEN 1 ELSE 0
             regrid: on T@AVE
             DATA SET: /home/ja9/tmap/fer_dsets/descr/monthly_navy_winds.des
                   1        2        3        4        5        6        7        8        9       10       11       12     
                   1        2        3        4        5        6        7        8        9       10       11       12
JUL-1982 / 1:  0.08353  0.08353  0.08353  0.08353  0.08353  0.08353  0.08353  0.08353  0.08353  0.08353  0.08353  0.08116
JUL-1983 / 2:  0.00000  0.00000  0.00000  0.00000  0.00000  0.00000  0.00000  0.00000  0.00000  0.00000  0.00000  0.00237
 
Note the weights show how far the 12th month overlaps the spilt between 1982 and 1983. Month 12 of uwnd extends beyond Jan.1, 1982 and so it contributes to 1983 as well as 1982.

To correct this problem with the alignment of January 1 of each year, we can assert that variable uwnd should be on a true monthly axis as follows:

   yes? LET mnth133 = I[i=1:133]-1   ! consecutive month counter, 
                                     ! i=1:133 because we use /EDGES for the axis 
   yes? LET year = 1982 + INT(mnth133/12)
   yes? LET month = MOD(mnth133,12)+1
   yes? DEFINE AXIS/EDGES/T0=1-jan-1900/UNITS=days tmon82_92 = DAYS1900(year,month,1)
   yes? LET uwnd_true = uwnd[GT=tmon82_92@asn]   ! regrid by association
Now the weights for the first 12 months are used only in computing the first year's average.

   yes? LET just_one = IF L[GT=tmon82_92] EQ k THEN 1 ELSE 0
        LIST/X=180/Y=0/L=1:2/K=1:12 just_one[GT=tann82_92@ave]
             IF L[GT=TMON82_92] EQ K THEN 1 ELSE 0
             regrid: on T@AVE
                   1        2        3        4        5        6        7        8        9       10       11       12     
                   1        2        3        4        5        6        7        8        9       10       11       12
 JUL-1982 / 1:  0.08493  0.07671  0.08493  0.08219  0.08493  0.08219  0.08493  0.08493  0.08219  0.08493  0.08219  0.08493
 JUL-1983 / 2:  0.00000  0.00000  0.00000  0.00000  0.00000  0.00000  0.00000  0.00000  0.00000  0.00000  0.00000  0.00000


Last Modified: January 08, 2001