[Paraview] Importing time-varying data into Paraview

Moreland, Kenneth kmorel at sandia.gov
Tue Nov 9 10:49:49 EST 2010


Daniel,

The (default) ParaView netCDF reader supports the COARDS convention (http://ferret.wrc.noaa.gov/noaa_coop/coop_cdf_profile.html).  ParaView will pick up the time dimension in a 4D array if you follow that convention.

The first thing you have to do is to change the order of the axes.  In the COARDS convention, you list the axes backwards.  NetCDF has Fortran-style indexing, so the rightmost index is the value that changes the most.  The way you have your axes set up (x,y,z,time), which means that for each x,y,z position there is a continuous array of all values over time.  Since you usually read or write a block of values at a single time step, this causes a widely interleaved access and subsequently horrible I/O performance.  Order your axis (time,z,y,x).

The second thing you have to do is declare the time axis as time.  In the COARDS convention time is identified by the units attribute on the time variable.  The ParaView reader looks for a string of the form "<time length> since <date>" or "<time length> until <date>".  (Actually, the reader just looks for the substring "since" or "until".  If you change your units from "seconds" to "seconds since 2010-11-9 00:00:00 +0:00", that would be sufficient.

-Ken

On 11/8/10 8:18 PM, "Daniel Duke" <daniel.duke at monash.edu> wrote:

Hi,

I'm working for a fluid mechanics laboratory, and we have very large amounts of data that we want to interrogate in Paraview.  We're moving away from text and custom binary data formats, to use the more portable VTK and NetCDF data formats.  NetCDF and VTK seem very fast and easy to imolement in our in house code.  Paraview is also a very efficient tool for us to visualise large data sets and create complex, 3D isosurfaces etc.  It's in some respects better than the expensive commercial alternatives.  I'm new to Paraview, NetCDF and VTK, but have been using Linux & Open Source for a long time.

There is one major snag that we have, which is the importing of time-dependent data.   Paraview's feature set and documentation seems to indicate that handling time-dependent data is a large part of what the application should be capable of doing, so I'm not sure why we can't get it to work.

We have very large scalar and vector fields which are typically a function of 3D space and time, for example we might wish to plot a vector field u~(x,y,z,time).  Whilst the importing of a single time instance u~(x,y,z) works perfectly via both NetCDF, we can't seem to import 4D time dependent data and animate it.  Paraview appears to have some very nice animation and time based functions, but we can't use them at all because we can't get any of our data imported as a function of time.

I've tried a number of different ways of doing it, and in every instance Paraview fails to identify the "time" axis as being distinct from x, y & z.   I will list them here, along with the error messages and the incoming data format.  I won't attach our actual .nc data files, as they're gigabytes in size!  But I will provide the ncdump header info at the bottom of the message.  They are very simple; one scalar value over a regular, structured, rectilinear grid with a regular time-step size.  We don't need to compute any time-derivatives, but simply wish to animate iso-surfaces computed at each time step discretely.  We have Paraview v.3.6.1 running on Linux and Mac OS X.

Our failed attempts at loading time varying data are as follows:

1.  Importing a single large NetCDF file which has the data stored as a 4-D array (x,y,z,time).  In this case each dimension is stored as a NetCDF "double" type with the appropriate units.

Opening the .nc file results in the error "more than 3 dims without time not supported".
The "information" tab after clearing away that error shows Extents X = #timesteps in netcdf,  extents Y = #sizeX in netcdf, extents Z = #sizeY in netcdf.  The "Time" list at the bottom of the object inspector is empty.  So it appears that Paraview is treating "time" as a spatial co-ordinate and then failing to be able to have 4 spatial co-ordinates (which makes perfect sense).  I've tried naming the "time" axis several different ways and changing its units, but to no avail.

2.  Importing a sequence of separate NetCDF files which are in 3D (x,y,z) and are numbered according to their position in time.  ie  data-0.00.nc <http://data-0.00.nc> , data-0.01.nc <http://data-0.01.nc>  , data-0.02.nc <http://data-0.02.nc>  etc.   In this case each spatial dimension is stored as a "double" type with the appropriate units , and the time value is only recorded in the filename.

In this case, the Paraview "open" dialog does detect a "set" of files "data-*.nc".  So it recognises that they are a related series.  When I open "data-*.nc", I only see the data for the first time step.  The "Information" tab shows "properties: filename: data-0.00.nc <http://data-0.00.nc> ", and the "Time" list at the bottom of the object inspector is empty.  Apparently only the first file has loaded.  The time animation features don't do anything.  I can't find a way to move forward in the set data-*.nc.

3.  Importing time slices as NetCDF files individually into Paraview and attempting to place each slice at its appropriate position in time (tedious, but it should work, right?)

I can't seem to find any feature which will allow me to assign a data set to a particular place in time.  Creating a time source does not allow me to link a dataset to a point in time;  all visible datasets are overlapping each other at all points in time.

In summary:
Is importing time dependent data via NetCDF currently possible in Paraview ?  Do we need to convert to an alternative file format, or name or mark the time axis in some special way so that Paraview recognises it?  I can't see why the importing process can't allow one to choose any axis they like as the time axis; certainly this feature is built into all commercial data visualisation packages.  Even if a restructuring of the data was required to do this, surely this could be easily implemented.

Kind Regards

Daniel Duke
Laboratory for Turbulence Research in Aerospace & Combustion
Monash University, Australia


------ netcdf headers produced by ncdump below -------

--------4D file---------  this won't load. ----------------
netcdf data-timeseries {
dimensions:
         X = 201 ;
         Y = 201 ;
         Z = 201 ;
         time = 31;
variables:
         double X(X) ;
              X:units = "meters" ;
         double Y(Y) ;
              Y:units = "meters" ;
         double Z(Z) ;
              Z:units = "meters" ;
         double time(time) ;
              time:units = "seconds" ;
         double scalarfield(X,Y,Z,time) ;
}

--------3D file---------  this loads OK, but won't animate over multiple files ----------
netcdf data-slice {
dimensions:
         X = 201 ;
         Y = 201 ;
         Z = 201 ;
variables:
         double X(X) ;
              X:units = "meters" ;
         double Y(Y) ;
              Y:units = "meters" ;
         double Z(Z) ;
              Z:units = "meters" ;
         double scalarfield(X,Y,Z) ;
}



   ****      Kenneth Moreland
    ***      Sandia National Laboratories
***********
*** *** ***  email: kmorel at sandia.gov
**  ***  **  phone: (505) 844-8919
    ***      web:   http://www.cs.unm.edu/~kmorel

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.paraview.org/pipermail/paraview/attachments/20101109/d0c27767/attachment-0001.htm>


More information about the ParaView mailing list