[Paraview] Writing binary files: C/Fortran interface to VTK XMLfiles.

Berk Geveci berk.geveci at gmail.com
Wed Feb 1 10:48:51 EST 2006


Brad implemented the readers and writers so he would know a lot more
than I do. I am including 3 examples of the same data. One ascii, one
binary and one binary compressed. None of the binaries have base64
encoding. I wrote them out from VTK by changing the settings of the
writer.

On 2/1/06, Dominik Szczerba <domi at vision.ee.ethz.ch> wrote:
> After a few hours I am basically succesful only with ASCII versions,
> tried binary inline/appended with various headers with no luck.
> Does anyone have any clear definitions and/or examples? I found bits and
> pieces on information on the mailinglist, but that was apparently not
> enough.
> thanks and regards,
> DS
>
> Dominik Szczerba wrote:
> > OK, I didnt know it is possible. Will give it a try tomorrow evntl. come
> > back.
> > Thanks a lot,
> > Dominik
> >
> > Berk Geveci wrote:
> >
> >>Why not go zlib compressed without base64 encoding? That's supported you know...
> >>
> >>On 1/31/06, Dominik Szczerba <domi at vision.ee.ethz.ch> wrote:
> >>
> >>
> >>>I see the point. And yes, I want to stay far away from ASCII. So what
> >>>format would you recommend to STORE my results in a COMPRESSED way
> >>>maintaining readability with Paraview? Any binary legacy file I produce
> >>>takes gigabytes - crunched with gzip a fraction of it, but paraview
> >>>won't read it. ASCII is simply prohibitive, base64'ed with
> >>>zlibcompressor not much better. At the moment I store my results in my
> >>>own gzipped format, and convert them to VTK format on demand - but that
> >>>is pretty annoying.
> >>>regards,
> >>>--dsz
> >>>
> >>>Berk Geveci wrote:
> >>>
> >>>
> >>>>Base64 encoding is only necessary if you want your XML file to be
> >>>>ASCII. This is necessary if you want the file to conform to XML so
> >>>>that the file can be opened in XML viewers (like a browser). Also,
> >>>>some people prefer transferring ASCII files instead of binary files.
> >>>>If you are not interested in either of these, there is no need to have
> >>>>base64 encoding. I would recommend not using it in fact. One of these
> >>>>days I will change the default in paraview so that it does not write
> >>>>base64 encoded files.
> >>>>
> >>>>
> >>>>On 1/31/06, Dominik Szczerba <domi at vision.ee.ethz.ch> wrote:
> >>>>
> >>>>Sorry to interupt your discussion but nobody ever explained me this: why
> >>>>use base64 encoding at all? Isint it a step back to huge ASCII files??
> >>>>E.g. I see no significant compression with the VTK's zlib compressor
> >>>>when using XML data files because the compressed stream is converted to
> >>>>ASCII. Will someone kindly explain me this paradox?
> >>>>Thanks
> >>>>Dominik
> >>>>
> >>>>Thierry Dubuis wrote:
> >>>>
> >>>>
> >>>>
> >>>>>There are lot of encoding Base 64 program on the web but only in C, Java
> >>>>>or Visual Basic.
> >>>>
> >>>>>If you can use C/C++ compiler, I thing the best way for you is to use
> >>>>>the Brad King's fortran code example (see my last email).
> >>>>>To convert a data array to a string in C we use the memory copy in
> >>>>>fortran I don't know.
> >>>>>Could you use pointer? 2 pointer on the same memory adress
> >>>>>1. the fist with the real*8 type
> >>>>>2. the second with a character type
> >>>>
> >>>>>Try in this way.
> >>>>
> >>>>>Best regards,
> >>>>>Thierry Dubuis
> >>>>
> >>>>>Stéphane Montésino wrote:
> >>>>
> >>>>
> >>>>>>Thanks for all tese answers, but I 'm still like an an homosexual with
> >>>>>>a wonderfull girl. I don't know how to use it (sorry her).
> >>>>
> >>>>>>In fact, I would like to directly write this type of file that I can
> >>>>>>obtain when I save my data with Paraview:
> >>>>
> >>>>>><?xml version="1.0"?>
> >>>>>><VTKFile type="RectilinearGrid" version="0.1"
> >>>>>>byte_order="LittleEndian" compressor="vtkZLibDataCompressor">
> >>>>>><RectilinearGrid WholeExtent="1 8 1 4 1 16">
> >>>>>> <Piece Extent="1 8 1 4 1 16">
> >>>>>>   <PointData>
> >>>>>>     <DataArray type="Float32" Name="pressure" format="appended"
> >>>>>>offset="0"           />
> >>>>>>   </PointData>
> >>>>>>   <CellData>
> >>>>>>   </CellData>
> >>>>>>   <Coordinates>
> >>>>>>     <DataArray type="Float32" Name="X_COORDINATES"
> >>>>>>format="appended" offset="956"         />
> >>>>>>     <DataArray type="Float32" Name="Y_COORDINATES"
> >>>>>>format="appended" offset="1036"        />
> >>>>>>     <DataArray type="Float32" Name="Z_COORDINATES"
> >>>>>>format="appended" offset="1092"        />
> >>>>>>   </Coordinates>
> >>>>>> </Piece>
> >>>>>></RectilinearGrid>
> >>>>>><AppendedData encoding="base64">
> >>>>>>_AQAAAACAAAAACAAAuQIAAA==eJwVy8fvoFMUx+HDdIkyWOiG/0Bvmzfm   etc.....
> >>>>>></AppendedData>
> >>>>>></VTKFile>
> >>>>
> >>>>>>My knowledge are only reduces to Fluid mechanics.
> >>>>
> >>>>
> >>>>>>>>>>>>>>>>>>>Encode in Base 64 ? More details please...How to ?
> >>>>
> >>>>>><<<<<<<<<<<<<<<<<<<<<<
> >>>>
> >>>>>>Link properly to vtkIO ? More details please.
> >>>>
> >>>>>>>>>>>>>>>>>>>>Does it mean that VTK IO library should be installed on
> >>>>
> >>>>>>the Computer where my CFD code run ?.
> >>>>>>I don't run my code on my own computer. It runs in Computing center
> >>>>>>where I can't install what I want.
> >>>>
> >>>>>>>>>>>>>>So I would like to obtain some fortran routine I could link
> >>>>
> >>>>>>myself  to my  CFD code  <<<<<<<<<<<<<<<<
> >>>>
> >>>>>>When I try  to write binary data in a formatted file:
> >>>>>>run-time error F6204: WRITE(pressure.vtr)
> >>>>>>- unformatted I/O not consistent with OPEN options
> >>>>
> >>>>>>When I try  to write formatted string in an unformatted file:
> >>>>>>run-time error F6200: WRITE(pressure.vtr)
> >>>>>>- formatted I/O not consistent with OPEN options
> >>>>
> >>>>
> >>>>>>>>>>>>>>>>>>>>>>How to convert my data to a string ?
> >>>>
> >>>>>><<<<<<<<<<<<<<<<<<<<<
> >>>>
> >>>>
> >>>>>>The format for raw appended binary data should be
> >>>>
> >>>>>><AppendedData encoding="raw">
> >>>>>>_NNNN...........................
> >>>>>></AppendedData>
> >>>>
> >>>>>>Where the underscore is literal (as you already have) and the NNNN is a
> >>>>>>four-byte block containing an unsigned 32-bit count of the number of
> >>>>>>"words" in the array.  A word is one value of the type of the array, so
> >>>>>>in your case the NNNN would have the number of float values.  Then the
> >>>>>>number of bytes of binary data to follow should be NNNN*sizeof(float).
> >>>>
> >>>>>>If you have another appended data array in the same file then start it
> >>>>>>immediately after the end of the first array (with no newline or any
> >>>>>>other character.  Then specify in the offset="..." attribute for the
> >>>>>>corresponding DataArray the number of bytes beyond the underscore where
> >>>>>>the second array begins.
> >>>>
> >>>>>>-Brad
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>>>Thierry Dubuis wrote:
> >>>>
> >>>>
> >>>>>>>Hello Stéphane,
> >>>>>>>
> >>>>>>>perhaps this email can help you ?
> >>>>>>>
> >>>>>>>Else if you want code directly your program in fortran :
> >>>>>>>1. You must encode all you data in Base64
> >>>>>>>2. And write them like a string.
> >>>>>>>3. don't forget to add the size of your data block (integer*4)
> >>>>>>>encoded in base64 before you block.
> >>>>>>>
> >>>>>>>Best regards,
> >>>>>>>Thierry Dubuis
> >>>>>>>
> >>>>>>>-------- Original Message --------
> >>>>>>>Subject:     Re: [Paraview] Writing binary files: C/Fortran interface
> >>>>>>>to VTK XML files.
> >>>>>>>Date:     Tue, 07 Jun 2005 10:06:51 -0400
> >>>>>>>From:     Brad King <brad.king at kitware.com>
> >>>>>>>To:     SamuelKey <samuelkey at comcast.net>
> >>>>>>>CC:     paraview <paraview at paraview.org>, "Wylie, Brian"
> >>>>>>><bnwylie at sandia.gov>
> >>>>>>>References:
> >>>>>>><200506030152.j531quWp005650 at rrcs-mta-04.hrndva.rr.com>
> >>>>>>><42A05837.3010206 at kitware.com> <000a01c5684c$1d1a6740$6e01a8c0 at last>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>SamuelKey wrote:
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>>Needing to have a C-compiler is not a problem for me; I have one.
> >>>>>>>>
> >>>>>>>>Let me try to work with what you commit next week and see if I have
> >>>>>>>>any ideas. I will be gone all next week, so you won't hear from me
> >>>>>>>>until week after next. With luck you may hear from someone else
> >>>>>>>>that will help keep you busy, though I suspect "busy" is not a
> >>>>>>>>problem for you.
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>Okay, the C/Fortran interface is now available.  A C program can do
> >>>>>>>
> >>>>>>>#include "vtkXMLWriterC.h"
> >>>>>>>
> >>>>>>>and link to vtkIO.  A Fortran program can use the interface (see the
> >>>>>>>example code below) but will need to compile one extra .c file to
> >>>>>>>link properly to vtkIO.  See VTK/IO/vtkXMLWriterF.h for instructions.
> >>>>>>>
> >>>>>>>-Brad
> >>>>>>>
> >>>>>>>   PROGRAM Hello
> >>>>>>>   INTEGER writer
> >>>>>>>   INTEGER success
> >>>>>>>   INTEGER*8 numpoints/8/
> >>>>>>>   INTEGER*8 numcells/1/
> >>>>>>>   INTEGER*8 cellsSize/9/
> >>>>>>>   REAL*4 pdata(8)/0,0,0,0,1,1,1,1/
> >>>>>>>   REAL*4 points(24)/0,0,0, 1,0,0, 1,1,0, 0,1,0,
> >>>>>>>  _                  0,0,1, 1,0,1, 1,1,1, 0,1,1/
> >>>>>>>   INTEGER*8 cells(9)/8,0,1,2,3,4,5,6,7/
> >>>>>>>   call vtkXMLWriterF_New(writer)
> >>>>>>>   call vtkXMLWriterF_SetDataObjectType(writer, 4)
> >>>>>>>   call vtkXMLWriterF_SetFileName(writer, 'test1.vtu')
> >>>>>>>   call vtkXMLWriterF_SetPoints(writer, 10, points, numpoints)
> >>>>>>>   call vtkXMLWriterF_SetCellsWithType(writer, 12, numcells, cells,
> >>>>>>>  _                                    cellsSize)
> >>>>>>>   call vtkXMLWriterF_SetPointData(writer, 'example data', 10, pdata,
> >>>>>>>  _                                numpoints, 1, 'SCALARS')
> >>>>>>>   call vtkXMLWriterF_Write(writer, success)
> >>>>>>>   call vtkXMLWriterF_Delete(writer)
> >>>>>>>   PRINT *, 'success =', success
> >>>>>>>   END PROGRAM Hello
> >>>>>>>_______________________________________________
> >>>>>>>ParaView mailing list
> >>>>>>>ParaView at paraview.org
> >>>>>>>http://www.paraview.org/mailman/listinfo/paraview
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>Stéphane Montésino wrote:
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>>With Asci, all is OK except the size of my file.
> >>>>>>>>So how to write my data array in binary with my fortran code.
> >>>>>>>>Does anyone have some details ?
> >>>>>>>>
> >>>>>>>>!
> >>>>>>>>******************************************************************************
> >>>>>>>>
> >>>>>>>>!    ****                       subrout
> >>>>>>>>paraview_scalar                        ****
> >>>>>>>>!
> >>>>>>>>******************************************************************************
> >>>>>>>>
> >>>>>>>>!    Export 3D scalar data upon a Non uniform rectilinear Grid
> >>>>>>>>!
> >>>>>>>>!    n1m,n2m,n3m: size of the data and the grid
> >>>>>>>>!    y1,y2,y3: coordinates
> >>>>>>>>!    scal_data: data to write
> >>>>>>>>!    name: name of the data
> >>>>>>>>!
> >>>>>>>>   subroutine paraview_3d_scalar(n1m,n2m,n3m,y1,y2,y3,scal_data,name)
> >>>>>>>>!
> >>>>>>>>   implicit none
> >>>>>>>>!
> >>>>>>>>   INTEGER                      ,INTENT(IN)::n1m,n2m,n3m
> >>>>>>>>   REAL*8,DIMENSION(n1m)        ,INTENT(IN)::y1
> >>>>>>>>   REAL*8,DIMENSION(n2m)        ,INTENT(IN)::y2
> >>>>>>>>   REAL*8,DIMENSION(n3m)        ,INTENT(IN)::y3
> >>>>>>>>   REAL*8,DIMENSION(n1m,n2m,n3m),INTENT(IN)::scal_data
> >>>>>>>>   CHARACTER(LEN=10)            ,INTENT(IN)::name
> >>>>>>>>!
> >>>>>>>>   integer::i,j,k,nfil
> >>>>>>>>!
> >>>>>>>>   nfil=41
> >>>>>>>>   open(nfil,file=trim(name)//'.vtr')
> >>>>>>>>   write(nfil,*)'<VTKFile type="RectilinearGrid" version="0.1"',
> >>>>>>>>  &         ' byte_order="LittleEndian">'
> >>>>>>>>   write(nfil,*)'  <RectilinearGrid WholeExtent=',
> >>>>>>>>  &                '"1 ',n1m,' 1 ',n2m,' 1 ',n3m,'">'
> >>>>>>>>   write(nfil,*)'    <Piece Extent=',
> >>>>>>>>  &                  '"1 ',n1m,' 1 ',n2m,' 1 ',n3m,'">'
> >>>>>>>>   write(nfil,*)'      <Coordinates>'
> >>>>>>>>   write(nfil,*)'        <DataArray type="Float32"',
> >>>>>>>>  &                             ' Name="X_COORDINATES"',
> >>>>>>>>  &                             ' NumberOfComponents="1">'
> >>>>>>>>   write(nfil,*) (y1(i),i=1,n1m)
> >>>>>>>>   write(nfil,*)'        </DataArray>'
> >>>>>>>>   write(nfil,*)'        <DataArray type="Float32"',
> >>>>>>>>  &                             ' Name="Y_COORDINATES"',
> >>>>>>>>  &                             ' NumberOfComponents="1">'
> >>>>>>>>   write(nfil,*) (y2(j),j=1,n2m)
> >>>>>>>>   write(nfil,*)'        </DataArray>'
> >>>>>>>>   write(nfil,*)'        <DataArray type="Float32"',
> >>>>>>>>  &                             ' Name="Z_COORDINATES"',
> >>>>>>>>  &                             ' NumberOfComponents="1">'
> >>>>>>>>   write(nfil,*) (y3(k),k=1,n3m)
> >>>>>>>>   write(nfil,*)'        </DataArray>'
> >>>>>>>>   write(nfil,*)'      </Coordinates>'
> >>>>>>>>   write(nfil,*)'      <PointData Scalars="scalar">'
> >>>>>>>>   write(nfil,*)'        <DataArray Name="'//trim(name)//'"',
> >>>>>>>>  &                             ' type="Float32"',
> >>>>>>>>  &                             ' NumberOfComponents="1"',
> >>>>>>>>  &                             ' format="ascii">'
> >>>>>>>>   write(nfil,*) (((scal_data(i,j,k),i=1,n1m),j=1,n2m),k=1,n3m)
> >>>>>>>>   write(nfil,*)'        </DataArray>'
> >>>>>>>>   write(nfil,*)'      </PointData>'
> >>>>>>>>   write(nfil,*)'    </Piece>'
> >>>>>>>>   write(nfil,*)'  </RectilinearGrid>'
> >>>>>>>>   write(nfil,*)'</VTKFile>'
> >>>>>>>>   close(nfil)
> >>>>>>>>!
> >>>>>>>>   return
> >>>>>>>>   end
> >>>>>>>>
> >>>>>>>>_______________________________________________
> >>>>>>>>ParaView mailing list
> >>>>>>>>ParaView at paraview.org
> >>>>>>>>http://www.paraview.org/mailman/listinfo/paraview
> >>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>--
> >>>>Dominik Szczerba, Dr.
> >>>>Computer Vision Lab CH-8092 Zurich
> >>>>http://www.vision.ee.ethz.ch/~domi
> >>>
> >>>_______________________________________________
> >>>ParaView mailing list
> >>>ParaView at paraview.org
> >>>http://www.paraview.org/mailman/listinfo/paraview
> >>>
> >>>--
> >>>Dominik Szczerba, Dr.
> >>>Computer Vision Lab CH-8092 Zurich
> >>>http://www.vision.ee.ethz.ch/~domi
> >>>_______________________________________________
> >>>ParaView mailing list
> >>>ParaView at paraview.org
> >>>http://www.paraview.org/mailman/listinfo/paraview
> >>>
> >
> >
>
> --
> Dominik Szczerba, Dr.
> Computer Vision Lab CH-8092 Zurich
> http://www.vision.ee.ethz.ch/~domi
> _______________________________________________
> ParaView mailing list
> ParaView at paraview.org
> http://www.paraview.org/mailman/listinfo/paraview
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image1.vti
Type: application/octet-stream
Size: 637 bytes
Desc: not available
Url : http://public.kitware.com/pipermail/paraview/attachments/20060201/287b7afd/image1-0001.obj
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image2.vti
Type: application/octet-stream
Size: 579 bytes
Desc: not available
Url : http://public.kitware.com/pipermail/paraview/attachments/20060201/287b7afd/image2-0001.obj
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image3.vti
Type: application/octet-stream
Size: 707 bytes
Desc: not available
Url : http://public.kitware.com/pipermail/paraview/attachments/20060201/287b7afd/image3-0001.obj


More information about the ParaView mailing list