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