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

SamuelKey samuelkey at comcast.net
Wed Feb 1 16:14:13 EST 2006


Dominik,

I have attached a gzip'ed Fortran file that I use to
write C-binary (unblocked byte stream) formatted
files for use with ParaView via PV's EnSight reader.

The OPEN statements are for use with HP/Compaq/Digital
Visual Fortran (some non-standard key-words). I have versions
of this for G95's (http://www.g95.org) and PathScale's Fortran
compilers on Linux x86-32/64.

It is 3,500 lines of Fortran, but then I am trying to put out a time=0
mesh file followed by time sequenced data, blocked for large
data sets, subdivided into parts based on materials, and a
medium number of point & cell items. Not to mention 7 or so
cell geometries along with extraction routines  that move data
from the program's storage into the write statement buffers.

It may be too complex to help you at this stage, but it is all there.

Regards,

Sam Key


----- Original Message ----- 
From: "Dominik Szczerba" <domi at vision.ee.ethz.ch>
Cc: <paraview at paraview.org>
Sent: Wednesday, February 01, 2006 5:19 AM
Subject: Re: [Paraview] Writing binary files: C/Fortran interface toVTK
XMLfiles.


> 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: z_esg-write.f.gz
Type: application/x-gzip
Size: 12496 bytes
Desc: not available
Url : http://public.kitware.com/pipermail/paraview/attachments/20060201/6efe6213/z_esg-write.f-0001.bin


More information about the ParaView mailing list