<div dir="ltr">HI <span style="font-size:12.8px">Gael,</span><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">Saving each time step to a VTI file is very reasonable in the way that you are doing it. I would recommend doing that.</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">To assign times to each VTI file, I recommend also writing a .pvd file, which is an XML file that describes a list of files that can be loaded by ParaView. You can describe your VTI files in the .pvd file and assign a time to each VTI file. Please see </span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px"><a href="http://www.paraview.org/Wiki/ParaView/Data_formats#PVD_File_Format">http://www.paraview.org/Wiki/ParaView/Data_formats#PVD_File_Format</a></span><br></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">for more details on the PVD file.</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">Hope that helps,</span></div><div><span style="font-size:12.8px">Cory</span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 12, 2015 at 1:24 PM, lorieul <span dir="ltr"><<a href="mailto:gael.lorieul@uclouvain.be" target="_blank">gael.lorieul@uclouvain.be</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
I wanted to know the cleanest way to save a custom array class instance<br>
to a *.vti file with time information. I searched through the<br>
documentation and found some threads in the mailing list archives but<br>
could not find compelling answers (quite to my surprise… I'm sure the<br>
information must be there somewhere…).<br>
<br>
I am designing a C++ software that performs CFD (Computational Fluid<br>
Dynamics) simulations. I start from known initial conditions and iterate<br>
in time. After each iteration, I know the definition of each of the flow<br>
variables (e.g. I know the velocity field at each time step). I want to<br>
save this information into a *.vti file so that I can visualise it with<br>
paraview and (for instance) animate it.<br>
<br>
My code uses its own array class which I'll call DblArr. Hence when I<br>
want to save a field to a file, I need to use a vtkImageData object and<br>
copy all the data from the DblArr object into it. This means that for<br>
each DblArr array I want to save, I need a corresponding vtkImageData<br>
object (hence additional memory and computation costs). Is that the best<br>
way to do so ?<br>
<br>
Besides, how do I store the time information ? Should I call :<br>
<br>
myImgData->GetInformation()->Set(<br>
    vtkDataObject::DATA_TIME_STEPS(), & currentTime, 1);<br>
<br>
Or is there a better way to do so ? (I found very little reference to<br>
DATA_TIME_STEPS() in the documentation)<br>
<br>
Gael Lorieul<br>
PhD student at Université catholique de Louvain<br>
<br>
<br>
<br>
<br>
<br>
Getting more into details :<br>
<br>
for each DblArr that I might want to save, I instanciate a Svr_vti<br>
object (which is another custom class). The purpose of this class is to<br>
perform the save operation to a *.vti file. It does three things :<br>
 1. allocating memory i.e. instanciation of vtkImageData object at the<br>
beginning of the simulation<br>
 2. handling the copying of data from the DblArr object to the<br>
vtkImageData<br>
object<br>
 3. writing the *.vti file.<br>
<br>
Once again, I have strong doubts that this is the best solution to my<br>
problem…<br>
<br>
Currently I have a class called Svr_vti which holds : (amongst other<br>
things)<br>
  @ a constructor<br>
  @ a save() member function<br>
  @ a vtkImageData member object called _ImgData<br>
  @ a vtkXMLImageDataWriter object called _Wrtr<br>
  @ a reference to a DblArr called _Arr<br>
<br>
Constructor(DblArr & MyArr) performs :<br>
<br>
    _ImgData = vtkSmartPointer<vtkImageData>::New()<br>
    _Wrtr    = vtkSmartPointer<vtkXMLImageDataWriter>::New()<br>
    _Arr     = MyArr<br>
    //<br>
    _ImgData->SetDimensions(***,***,***);<br>
    _ImgData->AllocateScalars( VTK_DOUBLE, * );<br>
    _ImgData->SetOrigin(***, ***, ***);<br>
    _ImgData->SetSpacing(***, ***, ***)<br>
    //<br>
    _Wrtr->SetInputData( _ImgData );<br>
<br>
<br>
save(DblArr &) member function performs :<br>
<br>
    for each node (i,j,k) in domain :<br>
        double * pxl = _ImgData->GetScalarPointer(i,j,k)<br>
        for each component in vector<DblArr *> :<br>
            pxl[ind] = Arr(i,j,k, ind)<br>
        }<br>
    }<br>
    //<br>
    //The file name embeds the number of current time step<br>
    //Hence the file name is different each time save() is called<br>
    _Wrtr->SetFileName( *** );<br>
    _Wrtr->Write();<br>
<br>
Note : this is pseudo-code, it might contain syntax errors and/or<br>
abreviations<br>
<br>
<br>
<br>_______________________________________________<br>
Powered by <a href="http://www.kitware.com" rel="noreferrer" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" rel="noreferrer" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
<br>
Search the list archives at: <a href="http://markmail.org/search/?q=vtkusers" rel="noreferrer" target="_blank">http://markmail.org/search/?q=vtkusers</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://public.kitware.com/mailman/listinfo/vtkusers" rel="noreferrer" target="_blank">http://public.kitware.com/mailman/listinfo/vtkusers</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">Cory Quammen<br>R&D Engineer<br>Kitware, Inc.</div>
</div>