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

Renato N. Elias rnelias at nacad.ufrj.br
Wed Feb 1 12:48:02 EST 2006


Yes, Ensight's format is byte order dependent, but I'm not bothered about it
(in fact, I don't know what is byte order ;-) 

Fortunately, Paraview can handle big/little endian Ensight's files, you only
have to change the "byte order" in the proper field of the PV Ensight's
reader before clicking in the accept button (PV can't select it
automatically yet). In my case, I always have to change it to little endian
and, I guess, it is the default option of the Fortran compilers I've been
using (Compaq, Intel and PGF90).

IMPORTANT NOTE: When writing Ensight binary files from Fortran programs you
have open your unit as "binary" and not as "unformatted", otherwise your
files will not be read by PV (it's another Fortran's mystery). 

Cheers

Renato N. Elias
===============================================
PhD student - http://www.nacad.ufrj.br/~rnelias
High Performance Computing Center
Federal University of Rio de Janeiro
Rio de Janeiro, Brazil
+55(21) 2562-8080 


-----Mensagem original-----
De: Stéphane Montésino [mailto:Stephane.Montesino at hmg.inpg.fr] 
Enviada em: quarta-feira, 1 de fevereiro de 2006 13:14
Para: Renato N. Elias
Cc: paraview at paraview.org; brad.king at kitware.com
Assunto: Re: RES: [Paraview] Writing binary files: C/Fortran interface to
VTKXMLfiles.

Thanks Renato,
Ensight Format seems to be faster to implement than linking C & Fortran
routines....
But is "Ensight Format" bytes-order dependant (little Endian/ Big
endian) ? I haven't  read anything about it in the fortran routines.
Maybe paraview can manage it ?????

Renato N. Elias wrote:

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


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