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" <[email protected]> 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: [email protected]
**  ***  **  phone: (505) 844-8919
    ***      web:   http://www.cs.unm.edu/~kmorel

_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the ParaView Wiki at: 
http://paraview.org/Wiki/ParaView

Follow this link to subscribe/unsubscribe:
http://www.paraview.org/mailman/listinfo/paraview

Reply via email to