RES: [Paraview] Writing binary files: C/Fortran interface to VTKXMLfiles.

Renato N. Elias rnelias at nacad.ufrj.br
Tue Jan 31 17:45:48 EST 2006


Hi Stéphane,

When I was starting using Paraview I thought about writing Fortran routines
to write VTK files, but after reading about Base64 compression I gave up. I
think the VTK team has been doing a wonderful work in VTK's file formats and
Base64 really seems incredible to write very small compressed binary files
but, unfortunately, I don't have knowledge enough to implement something
like this in Fortran. Furthermore, I don't know if a pure Fortran code would
be able to produce a Base64 compressed file. Ok, VTK has an interface to
write VTK files from a Fortran code, but it obliges me to install, or pick
and compile the VTK routines needed with my program, in any machine I intend
to run my program. My solution has been working fine for me, and I hope
it'll keep working for a long time... As I work basicaly with CFD, and my
team group has licenses for the Ensight visualizer, I've been writing all my
files in Ensight's format. It's easy to implement in C/C++ or Fortran,
portable (thank God Paraview has support to this format), parallel through
the server-of-server casefile extension and I can keep using Ensight when
I'd like to do something that Paraview can't do yet - almost nothing it
happen ;-)

If you are interested in trying to use Ensight's format, get the following
routines http://www.nacad.ufrj.br/~rnelias/public/EnsightFortranRoutines.zip
I guess, they can be a good starting point...

Cheers

Renato N. Elias
===================================================
PhD student
High Performance Computing Center - NACAD/COPPE
Federal University of Rio de Janeiro, RJ -Brazil
http://www.nacad.ufrj.br/~rnelias
 


-----Mensagem original-----
De: paraview-bounces+rnelias=nacad.ufrj.br at paraview.org
[mailto:paraview-bounces+rnelias=nacad.ufrj.br at paraview.org] Em nome de
Stéphane Montésino
Enviada em: terça-feira, 31 de janeiro de 2006 14:45
Para: Thierry Dubuis; brad.king at kitware.com
Cc: paraview at paraview.org
Assunto: Re: [Paraview] Writing binary files: C/Fortran interface to
VTKXMLfiles.

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
>>  
>>
>


--
Stéphane MONTESINO

Doctorant                       tel:+33 4 76 82 52 91
LEGI                            fax:+33 4 76 82 70 22
BP 53
38041 Grenoble Cedex            email: stephane.montesino at hmg.inpg.fr
France                          http://www.legi.hmg.inpg.fr 




More information about the ParaView mailing list