Project

General

Profile

computing EOFs - eigenvectors are equal

Added by Elina Plesca over 8 years ago

Hello,

I need to perform EOF analysis of an SST field (monthly means, 150 years). For this, I am using CDO v. 1.7.0. I have encountered 2 problems: first the computation did not converge, then the eigen-vectors ended up to be equal. Below I am describing what I used.

The time mean was subtracted to get the anomaly field (cdo sub ifile -timmean ifile anomSST.nc). See attached the data for the first 50 years (anomSST000000.nc). All missing values (on land) were set to 0.

Further, I use the eof operator to get the eigen-values and eigen-vectors for the time series, but it does not converge properly:

cdo -v eof,10 anomSST000000.nc egnvalue.nc egnvector.nc
OpenMP:  num_procs = 32  max_threads = 1
cdo eof: Using CDO_SVD_MODE 'jacobi' from default
cdo eof: Using CDO_WEIGHT_MODE 'on' from default
cdo eof: Total area = 12.5664 steradians
cdo eof: Total area = 12.5664 steradians
cdo eof: Counting timesteps in ifile
cdo eof: Calculating 10 eigenvectors and 600 eigenvalues in time_space
cdo eof: Allocated eigenvalue/eigenvector structures with nts=600 gridsize=12960
cdo eof: Calculating covar matrices for 1 levels of var0 (tos)
cdo eof: processing level 0
cdo eof: allocating covar with 600 x 600 elements | npack=12960
cdo eof: finished calculation of covar-matrix for var tos
cdo eof: Using MAX_JACOBI_ITER 12 from Environment
cdo eof: Using FNORM_PRECISION 1e-12 from Environment
cdo eof: Finished one-sided jacobi scheme for eigenvalue computation after 12 iterations
statistics-module (Warning): Eigenvalue computation with one-sided jacobi scheme
did not converge properly. 130907 of 179700 pairs of columns did
not achieve requested orthogonality of 1e-12
cdo eof: Processed 7776000 values from 2 variables over 600 timesteps ( 10.92s )

I have found a way around this, though. Following previous posts (https://code.zmaw.de/issues/1382) I have changed the environment variable MAX_JACOBI_ITER from the default 12 to 100 and the computation converged properly. Result:

OpenMP:  num_procs = 32  max_threads = 1
cdo eof: Using CDO_SVD_MODE 'jacobi' from default
cdo eof: Using CDO_WEIGHT_MODE 'on' from default
cdo eof: Total area = 12.5664 steradians
cdo eof: Total area = 12.5664 steradians
cdo eof: Counting timesteps in ifile
cdo eof: Calculating 10 eigenvectors and 600 eigenvalues in time_space
cdo eof: Allocated eigenvalue/eigenvector structures with nts=600 gridsize=12960
cdo eof: Calculating covar matrices for 1 levels of var0 (tos)
cdo eof: processing level 0
cdo eof: allocating covar with 600 x 600 elements | npack=12960
cdo eof: finished calculation of covar-matrix for var tos
cdo eof: Using MAX_JACOBI_ITER 100 from Environment
cdo eof: Using FNORM_PRECISION 1e-12 from Environment
cdo eof: Finished one-sided jacobi scheme for eigenvalue computation after 18 iterations
cdo eof: Processed 7776000 values from 2 variables over 600 timesteps ( 12.88s )

The problem now is that the first 10 computed eigen-vectors (egnvector.nc) are the same, while they must be orthogonal. The eigen-values differ.

Has anyone else encountered the same problem? I have tried this with different datasets and I get the same every time. Changing from weighted to non-weighted version did not affect the result.

Thank you in advance for any comment or suggestion.

Elina


Replies (1)

RE: computing EOFs - eigenvectors are equal - Added by Elina Plesca over 8 years ago

Just in case someone encountered similar difficulties - the problem was not in CDO, but in the viewer I used. Silly mistake, but teaches you to double-check.

Elina

    (1-1/1)