DINEOF

From GHER

Revision as of 13:10, 8 March 2012 by Alex (Talk | contribs)
Jump to: navigation, search
DINEOF is an EOF-based method to fill in missing data from geophysical fields, such as clouds in sea surface temperature. This page contains basic instructions to download and compile DINEOF. The source code and binaries are freely available for download right here!:


Download DINEOF now!

For more information on how DINEOF works, please refer to Alvera-Azcarate et al (2005) and Beckers and Rixen (2003) The multivariate application of DINEOF is explained in Alvera-Azcarate et al (2007), and in Beckers et al (2006) the error calculation using an optimal interpolation approach is explained. If you need a copy of any of these papers, don't hesitate to contact us! For more information about the Lanczos solver, see Toumazou and Cretaux (2001).

Contents

An example

Daily Mediterranean Sea SST reconstruction using DINEOF at http://gher-diva.phys.ulg.ac.be/DINEOF/dineof.html

You can see here a daily reconstruction of the Sea Surface Temperature of the Western Mediterranean Sea, and here for the Canary-Madeira region.


Daily filled fields, error maps and outliers for the past ten days are shown in the mentioned web page. The reconstruction is done on 6 months of data, and the whole procedure takes about two hours. The steps taken are the following:

  • Download cloudy data
  • Run DINEOF for outlier detection
  • Remove outliers from initial data set
  • Re-run DINEOF on the cleaned data set
  • Calculate outliers
  • Make plots, and display on web page


This product is updated daily with the latest SST data from the Mediterranean Sea.

Getting started

List of DINEOF References

A list of publications made by our group about DINEOF and papers related to its development. There is also a list of papers by other people is using DINEOF for their research

Troubleshooting

There are some recurrent errors that people encounter when compiling/working with DINEOF. Here is a little list (with solutions):

"Segmentation fault"

When compiling with ifort, you may encounter a "segmentation fault" error when running DINEOF. Something like this:

 ****************************************************
  Numerical data read
  You entered the values:
  number of EOF modes you want to compute           2
  maximal size for the Krylov subspace           8
  
  You asked not to  normalise of the input matrices
  
  The right and left EOFs will be written in directory Output/
  
 ****************************************************
 You entered filenames seacoos2005.avhrr
                      seacoos2005.avhrr.mask
 Data error in UINQUIRE, not a conform file: "seacoos2005.avhrr".
 Segmentation fault

The problem appears to be that ifort allocates too few stack memory by default. If you type the following command in a terminal:

ulimit -s 1000000

That may solve the problem (the number needs to be a very high number, whatever you choose)

"Error = -3"

Another common problem is when you start to see this message appear in the screen when you run DINEOF:

 Error with _saupd, info =           -3
 Check documentation in _saupd 

This one is also simple to solve: you need to specify in dineof.init the number of modes to be calculated (nev), and the Kryvlov space (ncv), which need to be smaller than the temporal size of your data, AND, ncv > nev+5. If one or both of these conditions is not met, the above message will appear.


"Error = -8"

A less common problem:

Error with _saupd, info =           -8                                       
Check documentation in _saupd           

This problem is related to the filtering of the time covariance matrix: if the time vector is not well written (i.e., the values are not all distinct), the filtering cannot be made properly. As the time is in simple precision, even if the values are distinct, they can be read as identical values.

Here is an example of a time vector which lead to the problem:

ncdump -v time bstot_mumm.nc
data:                                                               
time = 731582, 731582.020833333, 731582.041666667, 731582.0625,

Solutions:

  • Deactivate the filtering (B_DIFF option in file ppdef.h)
  • Write the time in double precision

netCDF compilation error

In some systems, the fortran part of netCDF is in a separate netcdf library, called "netcdff". In those, it is needed to add -lnetcdff (two f's) before the -lnetcdf option, in the compilation command:

-lnetcdff -lnetcdf

If you use the DINEOF Makefile, this means to add this option to the "DINEOF_LIBRARIES" variable:

DINEOF_LIBRARIES =  -L/usr/lib -larpack  -llapack  -lblas  -lnetcdff -lnetcdf

of the compilation file (Linux-gfortran.mk, etc)

DINEOF compilation error due to ARPACK

If, when compiling DINEOF, you find the following error:

/home/user/ARPACK/libarpack.a(second.o): In function `second_':
second.f:(.text+0x16): undefined reference to `etime_'
collect2: ld returned 1 exit status
make: *** [dineof] Error 1

you will need to edit file 'second.f' located in your $HOME/ARPACK folder. There, you should comment the following line by adding an asterisk at the beginning:

EXTERNAL           ETIME

becomes:

* EXTERNAL           ETIME

Problems/Feedback

If you have problems to install or use DINEOF, we would be glad to help you. We have created a mailing list where you can ask your questions, and check the questions already posted by others. You can join as a member by going to: http://groups.google.com/group/dineof. Once you are a member, you can ask your question by sending an email to: dineof at googlegroups dot com (with obvious substitutions). Please join our discussion group!


In order for us to help you, please provide the following information when reporting your problem through the mailing list:

  1. Which version of DINEOF is used. Did you compile it yourself or did you use the binaries we provide?
  2. Which operating system and which version are you working on? (for example: Windows 7, Ubuntu 10.04 ...)
  3. Are you working on a 32-bit or 64 bit CPU?
  4. Error message (exact screen output)


If you are compiling DINEOF from source, please make sure to give us also the following information:

  1. Which Fortran compiler (and which version) are you using (for example, gfortran 4.3.0)
  2. Compiler flags used to compile ARPACK
  3. Your Makefile and the corresponding file in Compilers/ (e.g. Linux-gfortran.mk if you use gfortran on Linux).
  4. Compile log (make.log) generated by compiling DINEOF:
make clean all > make.log


Please do not omit any of those points.

Personal tools