RES: RES: [Paraview] VTK formats and Fortran (again...)

Renato N. Elias rnelias at nacad.ufrj.br
Fri Apr 27 15:37:34 EDT 2007


Hi Benjamin,

I'm now trying to fix my Fortran routine to write a simple triangle as
unstructured data following your suggestions, but I still have some doubts:

- Silly question number 1: What is such offset in VTK/XML files?

In VTK books is written: "Offset - If the format attribute is "appended",
this specifies the offset (***which kind of offset?! Number of bytes, length
of the array***)  from the beginning of the appended data section to the
beginning of this array's data."

There's another "offset" related to connectivity array (this one I guess is
related to the number of nodes which defines an element, 3 for a linear
triangle, 4 for a linear tetrahedral and so on)


2). In the AppendedData section must I put all arrays (raw binary)
contiguously or can I call Fortran "write" statements more than once?

     write(???) array1, array2
             or
     write(???) array1
     write(???) array2


3). I guess the layout of the AppendedData section for writing an innocent
triangle should be something like:

  Bytes |           coordinates            | bytes | connectivity | bytes |
offset | bytes | etype
_+------+----------------------------------+-------+--------------+-------+-
-------+-------+-------
_   36    0. 0. 0.    1. 0. 0.    1. 1. 0.     12       0  1  2        4
3       4       5


Thanks for any help


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


-----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
Benjamin Ahrenholz
Enviada em: Friday, April 27, 2007 05:12
Para: ParaView at paraview.org
Assunto: AW: RES: [Paraview] VTK formats and Fortran (again...)

Hello,

just some short correction. I made a little mistake about the length oft he
array. Instead of
     laenge = 27000 (were laenge is my variable for length [extends are
30³=27000] ) it should be:
     laenge = 27000*4 and the the offset for the first data array has to be
set to 0 instead of 4!

Sorry for that wrong information in the first post.

Regards,

Ben

> Hello,
> 
> I ran into similar problems as Renato and had a look into the Fortran
> source
> code he provided in an earlier post. After reading through the
> documentation
> and lots of posts on the mailing list I came up with the following
> solution
> (actually because of that post:
> http://public.kitware.com/pipermail/paraview/2006-October/004031.html)
> 
> subroutine writeXMLScalars(P, FileName, pfeld)
>     use types
> 
>     implicit none
> 
>     type(parameter_store), intent(in)  :: P
>     character(len=charlen), intent(in) :: FileName
>     real(sp), intent(in) :: pfeld(P%x_anf_loc-P%gn:P%x_end_loc+P%gn,
> P%y_anf_loc-P%gn:P%y_end_loc+P%gn, P%z_anf_loc-P%gn:P%z_end_loc+P%gn)
> 
>     character(len=80) :: cbuffer
>     character         :: lf
>     integer           :: FileUnit, i, j, k, laenge
> 
>     FileUnit = 40
>     lf = char(10) ! line feed character
>     laenge = 27000
> 
>     open (unit=FileUnit, file=trim(FileName), err=99, form='binary')
>       cbuffer = '<?xml version="1.0"?>'//lf
>       write(FileUnit) trim(cbuffer)
>       cbuffer = '<VTKFile type="ImageData" version="0.1"
> byte_order="LittleEndian">'//lf
>       write(FileUnit) trim(cbuffer)
>       cbuffer = '  <ImageData WholeExtent="0 29 0 29 0 29" Origin="1 1
> 1"
> Spacing="1 1 1">'//lf
>       write(FileUnit) trim(cbuffer)
>       cbuffer = '    <Piece Extent="0 29 0 29 0 29">'//lf
>       write(FileUnit) trim(cbuffer)
>       cbuffer = '      <PointData Scalars="Scalars">'//lf
>       write(FileUnit) trim(cbuffer)
>       cbuffer = '        <DataArray type="Float32" Name="values"
> format="appended" offset="4"/>'//lf
>       write(FileUnit) trim(cbuffer)
>       cbuffer = '      </PointData>'//lf
>       write(FileUnit) trim(cbuffer)
>       cbuffer = '      <CellData>'//lf
>       write(FileUnit) trim(cbuffer)
>       cbuffer = '      </CellData>'//lf
>       write(FileUnit) trim(cbuffer)
>       cbuffer = '    </Piece>'//lf
>       write(FileUnit) trim(cbuffer)
>       cbuffer = '  </ImageData>'//lf
>       write(FileUnit) trim(cbuffer)
>       cbuffer = '  <AppendedData encoding="raw">'//lf
>       write(FileUnit) trim(cbuffer)
>       cbuffer = '_' ! leading char
>       write(FileUnit) trim(cbuffer)
>       write(FileUnit) laenge ! length of the array
>       write(FileUnit) ((( pfeld(i,j,k), i=P%x_anf_loc,P%x_end_loc), &
>                                       & j=P%y_anf_loc,P%y_end_loc), &
>                                       & k=P%z_anf_loc,P%z_end_loc)
>       cbuffer = '  </AppendedData>'//lf
>       write(FileUnit) trim(cbuffer)
>       cbuffer = '</VTKFile>'//lf
>       write(FileUnit) trim(cbuffer)
>     close(FileUnit)
> 
>     return
> 
>     99  write(messg,'(a,a)') 'Oeffnen oder Schreiben der Scalar-Dump-
> Datei
> misslungen! '
>     call aerror(messg)
> 
> end subroutine writeXMLScalars
> 
> In that version above most values are hardcoded, however there are
> three
> things you have to take care of:
> - use the AppendedData option, because only there you have the option
> of raw
> encoding (a.f.a.i.k.)
> - you have to use _ (underscore) as leading character fort he binary
> data
> - and, as Kent stated, you have to put the length of the array in front
> of
> it. However, than you have to put the offset attribute to 4 (in my
> case)
> Now it should work (tested with ParaView 2.6.0). I hope that helps, if
> you
> still had that problem.
> 
> Cheers,
> 
> Ben
> __________________________________
> 
> Institute for Computerapplications
> in Civil Engineering (CAB)
> Technical University of
> Braunschweig
> 
> Pockelsstr. 3 (9th Floor)
> Braunschweig
> D-38106, Germany
> 
> phone +49 531/391-7584
> fax   +49 531/391-7599
> web   www.cab.bau.tu-bs.de
> __________________________________
> 
> 
> First of all I'd like to thank Fred, Kent and Bruno for the help...
> 
> I've finally got something working here... Fortran, Binary and VTK
> (unfortunately only the Legacy format...)
> 
> I left a very simple Fortran90 program available in
> http://www.nacad.ufrj.br/~rnelias/paraview/VTKFormat.f90 . Please, if
> you
> find what's wrong with the XML version contact me.
> 
> Now, I have another very silly doubt regarding the Legacy format:
> 
> -- What is a "partitioned VTK Legacy" file? Would it be a simple VTK
> Legacy
> file with *.pvtk extension?!
> 
> BTW, I can't understand why there is a bunch of different file
> extensions
> for those XML/VTK based files... if they are all XML files why they
> should
> be distinguished by their extension and not by a simple XML tag?!
> 
> Regards
> 
> Renato N. Elias
> ===============================================
> PhD student - http://www.nacad.ufrj.br/~rnelias
> High Performance Computing Center (NACAD)
> Federal University of Rio de Janeiro (UFRJ)
> Rio de Janeiro, Brazil
> 
> 
> 
> -----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
> fred
> Enviada em: Friday, April 13, 2007 07:55
> Para: vtkusers at vtk.org
> Cc: paraview at paraview.org
> Assunto: Re: RES: [Paraview] VTK formats and Fortran (again...)
> 
> Renato N. Elias a écrit :
> > Fred wrote: You also have ASCII and binary (not base64) formats.
> >
> > I've reread and found this information hidden in the VTK file
> format's
> > guide. A footnote in page 12 which says:
> >
> > "* There is one case in which the file is not a valid XML document.
> ***
> When
> > the AppendedData section is not encoded as base64,
> > raw binary data *** is present that may violate the XML
> specification.
> This
> > is not default behavior, and must be explicitly enabled
> > by the user."
> >
> >
> Yes, I know this, but not a problem for me.
> By the way, XML base64 files size are little bigger than binary.
> > However, there is no further information regarding such form of
> writing
> raw
> > binary data in "XML files" for VTK and PV. I'll try to write a file
> with
> raw
> > binary data in the AppendedData section to see what happen.
> >
> I began to write my C code to write legacy VTK files, which does not
> require any VTK libs.
> Then, I added a few routines, which do use VTK libs, to write my files
> in XML.
> But once again, only in C.
> But if it can help...
> 
> --
> /F
> 
> _______________________________________________
> ParaView mailing list
> ParaView at paraview.org
> http://www.paraview.org/mailman/listinfo/paraview
> 
> _______________________________________________
> ParaView mailing list
> ParaView at paraview.org
> http://www.paraview.org/mailman/listinfo/paraview
> 
> _______________________________________________
> ParaView mailing list
> ParaView at paraview.org
> http://www.paraview.org/mailman/listinfo/paraview

_______________________________________________
ParaView mailing list
ParaView at paraview.org
http://www.paraview.org/mailman/listinfo/paraview



More information about the ParaView mailing list