[Paraview] Writing binary files: C/Fortran interface to VTK
XMLfiles.
Dominik Szczerba
domi at vision.ee.ethz.ch
Tue Jan 31 14:39:08 EST 2006
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
More information about the ParaView
mailing list