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

Stéphane Montésino Stephane.Montesino at hmg.inpg.fr
Tue Jan 31 11:45:19 EST 2006


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 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: Stephane.Montesino.vcf
Type: text/x-vcard
Size: 308 bytes
Desc: not available
Url : http://public.kitware.com/pipermail/paraview/attachments/20060131/52237ad9/Stephane.Montesino.vcf


More information about the ParaView mailing list