[Paraview] Writing binary files: C/Fortran interface to VTK
XMLfiles.
Dominik Szczerba
domi at vision.ee.ethz.ch
Tue Jan 31 16:16:12 EST 2006
That indeed sounds like learning a lot of new stuff. Thanks for a hint,
though - know of any online intro/tutorial?
Dominik
Randall Hand wrote:
> It's got a bit of a learning curve, but have you thought about trying to
> integrate HDF5 into your code? It supports a whole heck of alot of
> datatypes, and has built-in compression. Couple it with Xdmf from ARL
> (Write an HDF5 file & a simple ascii Metadata file) or Xmdf from ERDC (Just
> write the HDF5 stuff into specially named fields) and it's pretty nice to
> work with.
>
> 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
>>
>
>
>
>
> --
> Randall Hand
> Visualization Scientist,
> ERDC-MSRC Vicksburg, MS
> Homepage: http://www.yeraze.com
>
--
Dominik Szczerba, Dr.
Computer Vision Lab CH-8092 Zurich
http://www.vision.ee.ethz.ch/~domi
More information about the ParaView
mailing list