[Thread Prev][Thread Next][Index]

Re: [ferret_users] first couple of eofs only using eof_space, eof_tfunc



Hi, Fabian:
I did a test before, and found that using 2.5x2.5 degree horizontal resolution basically give you the same answer as 5x5 degree resolution. So for your case, I suggest that reducing the grid points before calculating your EOFs. This will solve the memory problem, and you can use your monthly data, too!
Good luck!
Muyin


Fabian Lienert wrote:
Hi Billy,

Thanks for answering so quickly. You are right that according to theory
one needs to calculate all EOFs. But isn't the maximum memory usage the
spatial covariance matrix with in my case 134 by 89 points of data?
134*89*(32 bit), 48MB, right?

I am talking about model data and the point of interest is muti-decadal
variations. Taking the annual mean data would be interesting as well.

I would like to use your fortran code to optimize the calculations.

Thanks a lot for your help,
Fabian

Hi Fabian -

There is no way to find only some of the eigenvalues. I think that is true in theory (please correct me if I am wrong), but it is certainly true of these routines. One way to see this is that inverting the covariance matrix employs a series of operations on the whole matrix (turning it into tridiagonal form), that inherently find all the eigenvalues (or at least do all the work up to a final few trivial steps). Another (equivalent) point of view is that when the singular value decomposition is written out, it is seen to involve matrix multiplications that inherently use all rows and all columns.

Somehow I doubt if there are really 3960 significant months worth of SST information in the North Pacific (is this a model or observations?). It seems likely that interannual or decadal variations are of interest in such a case, so the problem could be greatly reduced by taking annual averages before doing the EOFs.

The other thing to note is that the number of non-zero eigenvalues is the MINIMUM of (number of timesteps, number of spatial locations). If you have more timesteps than locations, the calculation is wasting CPU and memory and disk space with lots of identically-zero eigenvalues and EOFs. I have routines to reverse the array, find the eigenvalues/EOFs, and then reinterpret as the original, but these are fortran, not Ferret. Let me know if you'd like to use this code (unsupported/no guarantee!).

Billy K

On 17Aug 2007, at 9:38 AM, Fabian Lienert wrote:

Hi Ferreters,

Is it possible to calculate only the first couple of EOFs using
the functions eof_space and eof_tfunc?

Or is it necessary to know all EOFs in order to judge which one is of first importance?

I get an error in efcn_compute() while allocating 570MB of memory while
analyzing 3960 months of SSTs in the northern Pacific.

Any help appreciated. Thank you.
Fabian




[Thread Prev][Thread Next][Index]

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

Privacy Policy | Disclaimer | Accessibility Statement