[Paraview] Writing binary files: C/Fortran interface to VTK
XMLfiles.
Thierry Dubuis
tdubuis at scconsultants.com
Tue Jan 31 09:13:46 EST 2006
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
>
>
More information about the ParaView
mailing list