[Thread Prev][Thread Next][Index]

Re: [ferret_users] EOF function



Hi -
The function expects an xyt grid; and if the variable also has a Z coordinate, it computes the EOF at each z level.

You could do the computation in xyz, if you define a grid which is x,y and t, where the time axis is the same length as your z axis, and regrid your data to that new xyz grid with the RESHAPE regridding transformation.

Ansley

Jian Ma wrote:
Hi Ansley and All,

In the EOF Demo, it is said that the input data may be a function of z.
What does it mean? Say if I have my data on x,y,z only, can I do the EOF
mimicking the z coordinate as "time"?

Many thanks,
Tony

On Fri, 2009-07-10 at 09:48 -0700, Ansley Manke wrote:
  
Hi Xia,
The script ef_eof_demo.jnl is contained in the fer_environment.tar
file from the Ferret downloads pages, so if you have installed Ferret
it should be available in your scripts directory.  I will copy it
below for you as well.  We also have an html version of this demo,
which can be found under the "tutorials" link on the Ferret
documentation page.

http://ferret.pmel.noaa.gov/FERRET_17sep07/Demos/ef_eof_demo/ef_eof_demo.html



\SET MODE VERIFY
! ef_eof_demo.jnl ( acm  9/2000)

! Description: Demonstration of computing EOFs using the
! External Functions EOF_SPACE, EOF_TFUNC, EOF_STAT

! The functions implements Chelton's '82 method for finding EOFs of
gappy
! time series. All the functions perform the same computation but
return
! different portions of the results.

!   * EOF_SPACE returns EOF eigenvectors: spatial EOF in x and y with
the
!     same units as the incoming data
!   * EOF_TFUNC returns EOF time amplitude functions; dimensionless
!   * EOF_STAT returns statistics on the EOF computation: number of
EOFs
!     scaled and returned; Percent variance explained by each EOF; and
the
!     eigenvalues.
!
! For all functions the arguments are as follows:
!
!   * 1st argument: Input data field, a function of x, y, and time;
may be a
!     function of z
!   * 2nd argument: The minimum percent variance explained by the
EOF's that
!     are computed and scaled, e.g. to return EOFs that explain at
least 2%
!     variance, use 2.0
!   * 3nd argument: The fraction of each time series that must be
present to
!     include it in the calculations, e.g. to use all time series that
have
!     at least half the data present, use 0.5
!
!
! EOF functions Example 1: define a function of x,y,time using trig
! functions.  Decompose into spatial and time EOF's and display
statistics.
!
PAUSE
LET time = t[t=1-jan-1990:10-jan-1990:24]   ! 24 hour resolution time
axis

DEFINE AXIS/x=0:10:0.5 x10
DEFINE AXIS/y=0:10:0.5 y10
DEFINE GRID/x=x10/y=y10/t=time g10x10
SET GRID g10x10

LET fcn1 = 15.* sin(omega1*t)*cos(r)/(r+1)
LET fcn2 = 20.* sin(omega2*t)*(sin(s)-.2*sin(q))/(s+1)

LET r = ((6.*(xpts-x0)^2 + 7.*(ypts-y0)^2)^0.5)
LET s = (((xpts-x1)^2 + 2*(ypts-y1)^2)^0.5)
LET q = ((3*(xpts-x0)^2 + (ypts-y1)^2)^0.5)

LET x0 = 2
LET y0 = 4
LET x1 = 5
LET y1 = 7

LET omega1 = 1/10*2*3.14159
LET omega2 = 2 * omega1

LET sample_function = fcn1 + fcn2
LET xpts = x
LET ypts = y

!  Compute the statistics on the EOF solution.  EOF_STAT returns:
!  for J=1  the number of EOFs returned
!  for J=2  the percent variance explained by each EOF
!  for J=3  the eigenvalue for each EOF

LET estat = eof_stat(sample_function, 0.1)

LIST/I=1/J=1 estat

LIST/I=1:4/J=2 estat

LIST/I=1:4/J=3 estat


!  Plot the original function (averaged over time) and its spatial
!  decomposition by EOF_SPACE

PAUSE

DEFINE VIEW/xlim=0.,.33/ylim=.6,1./text=0.2 vul
DEFINE VIEW/xlim=.33,.66/ylim=.6,1./text=0.2 vuc
DEFINE VIEW/xlim=.66,1./ylim=.6,1./text=0.2 vur

DEFINE VIEW/xlim=0.,.33/ylim=.1,.5/text=0.2 vll
DEFINE VIEW/xlim=.33,.66/ylim=.1,.5/text=0.2 vlc
DEFINE VIEW/xlim=.66,1./ylim=.1,.5/text=0.2 vlr

SET VIEW vul; CONTOUR/TITLE="FCN1" fcn1[l=1:10@ave]
SET VIEW vuc; CONTOUR/TITLE="FCN2" fcn2[l=1:10@ave]
SET VIEW vur; CONTOUR/TITLE="FCN1 + FCN2" sample_function[l=1:10@ave]


LET exy = eof_space(sample_function, 0.1)

SET VIEW vll; CONTOUR/L=1/TITLE="EOF 1" exy
SET VIEW vlc; CONTOUR/L=2/TITLE="EOF 2" exy

PAUSE
CANCEL VIEW

! Now plot the time amplitude functions.

LET etim = eof_tfunc(sample_function, 0.1)

SET VIEW ul
PLOT/I=1/TITLE=taf1 etim

SET VIEW ur
PLOT/I=2/TITLE=taf2 etim

! should be all bad flags...
SET VIEW ll
PLOT/I=3/TITLE=taf3 etim

PAUSE
CANCEL DATA/ALL
CANCEL VARIABLE/ALL
CANCEL REGION
CANCEL VIEW

!  A second example, using the COADS climatology data.
!

USE coads_climatology
SET REGION/X=67w:1w/Y=11S:11N

!  Compute and save the spatial EOF functions.  These have the same
units
!  as the data.

LET eof_xyfcn = eof_space(sst, 0.5)
SAVE/CLOBBER/FILE=sst_clim_eof_space.cdf eof_xyfcn


CANCEL DATA/ALL
CANCEL VARIABLE/ALL
CANCEL REGION

USE sst_clim_eof_space.cdf
SET VIEW ul; fill/l=1/TITLE="eof 1" eof_xyfcn; go land
SET VIEW ur; fill/l=2/TITLE="eof 2" eof_xyfcn; go land
SET VIEW ll; fill/l=3/TITLE="eof 3" eof_xyfcn; go land

PAUSE
CANCEL DATA/ALL
CANCEL VARIABLE/ALL
CANCEL REGION

!  Compute the statistics on the EOFs: number of EOFs scaled
!  and returned; Percent variance explained by each EOF; and the
!  eigenvalues.


USE coads_climatology
SET REGION/X=67w:1w/Y=11S:11N
LET eofstat = eof_stat(sst[X=67w:1w,Y=11S:11N], 0.5)

LET nout = eofstat[i=1,j=1]
LET pcts = eofstat[i=1:`nout`,j=2]

LET eigenv = eofstat[i=1:`nout`,j=3]

LIST nout
LIST/I=1:6 pcts
LIST/I=1:6 eigenv

PAUSE

!  Compute and save time amplitude functions: Note they are
dimensionless.

USE coads_climatology
LET eoftime = eof_tfunc(sst[X=67w:1w,Y=11S:11N], 0.5)

SAVE/CLOBBER/FILE=sst_clim_eof_tfunc.cdf eoftime[i=1:`nout`]

CANCEL VIEW
CANCEL VARIABLE/ALL
USE sst_clim_eof_tfunc.cdf

SET VIEW ul
PLOT/I=1/TITLE="time function 1"/VLIMITS=-2:2:0.5 eoftime
SET VIEW ur
PLOT/I=2/TITLE="time function 2"/VLIMITS=-2:2:0.5 eoftime
SET VIEW ll
PLOT/I=3/TITLE="time function 3"/VLIMITS=-2:2:0.5 eoftime

\SET MODE/LAST VERIFY


Changshui Xia wrote: 
    
Dear all,
 I have a model monthly mean SSHA from 1980-2007,How to use the
Ferret EOF function to find the first 3 mode? The file
ef_eof_demo.jnl can not be obtained.
 
Thank you.
 
Xia
 
      

  

[Thread Prev][Thread Next][Index]

Contact Us
Dept of Commerce / NOAA / OAR / PMEL / TMAP

Privacy Policy | Disclaimer | Accessibility Statement