[Paraview] Writing Binary files

Stéphane Montésino Stephane.Montesino at hmg.inpg.fr
Tue Feb 21 03:49:56 EST 2006


To write my Data in Binary,  I use Ensight format because:
- I only found Documentation to write the Ensight format in Binary.
-The Ensight format is smaller: 80Mb for VTR & 65 Mb for Ensight Gold 
for scalar data on a Grid 512x128x256

With Fortran, you must write your data in the UNFORMATTED form with 
Direct access and write all your data with only one "WRITE".
You can use the binary form and use several  "WRITE" but this doesn't 
wort with xlf (IBM) compiler. It 's a windows format.
!    
****************************************************************************** 

!                      subrout  WriteRectEnsightGeo
!    
****************************************************************************** 

!
!    writes mesh data in Ensight's ascii or Binary format for 
rectilinear geometry
!
!    n1,n2,n3....: number of nodes in the x1,x2,x3 direction
!    x1,x2,x3....: coordinates
!
     subroutine WriteRectEnsightGeo(imin,imax,jmin,jmax,kmin,kmax,
    &                               x1,x2,x3,FileName,WriteBinary)

     implicit none

     INTEGER,INTENT(IN)::imin,imax,jmin,jmax,kmin,kmax
     REAL*8,DIMENSION(imax),INTENT(IN)::x1
     REAL*8,DIMENSION(jmax),INTENT(IN)::x2
     REAL*8,DIMENSION(kmax),INTENT(IN)::x3
     LOGICAL               ,INTENT(IN)::WriteBinary
     CHARACTER(LEN=80)     ,INTENT(IN)::FileName

!    character(LEN=80)::buffer
   character(LEN=80)::binary_form
   character(LEN=80)::file_description1,file_description2
   character(LEN=80)::node_id,element_id
   character(LEN=80)::part,description_part,block

     integer::FileUnit,i,j,k,npart,isize,jsize,ksize
     integer::reclength

     FileUnit = 40

   binary_form      ='C Binary'
     file_description1='Ensight Model Geometry File Created by '
     file_description2='WriteRectEnsightGeo Routine'
     node_id          ='node id off'
     element_id       ='element id off'
     part             ='part'
     npart            =1
     description_part ='3D periodic channel'
     block            ='block rectilinear'
     isize=imax-imin+1
     jsize=jmax-jmin+1
     ksize=kmax-kmin+1

     reclength=80*8+4*(4+isize+jsize+ksize)

     if (WriteBinary) then
       open (unit=FileUnit,file=trim(FileName)//'.geo',
    &        form='UNFORMATTED',access="direct",recl=reclength)
       write(unit=FileUnit,rec=1) binary_form
    &                            ,file_description1
    &                            ,file_description2
    &                            ,node_id
    &                            ,element_id
    &                            ,part,npart
    &                            ,description_part
    &                            ,block
    &                            ,isize,jsize,ksize
    &                            ,(sngl(x1(i)),i=imin,imax)
    &                            ,(sngl(x2(j)),j=jmin,jmax)
    &                            ,(sngl(x3(k)),k=kmin,kmax)
     else
       open (unit=FileUnit,file=trim(FileName)//'.geo')
       write(FileUnit,'(A)') 'Ensight Model Geometry File Created by '
       write(FileUnit,'(A)') 'WriteRectEnsightGeo Routine'
       write(FileUnit,'(A)') 'node id off'
       write(FileUnit,'(A)') 'element id off'
       write(FileUnit,'(A)') 'part'
       write(FileUnit,'(i10)')npart
       write(FileUnit,'(A)') '3D periodic channel'
       write(FileUnit,'(A)') 'block rectilinear'
       write(FileUnit,'(3i10)') isize,jsize,ksize
       write(FileUnit,'(E12.5)') (x1(i),i=imin,imax)
       write(FileUnit,'(E12.5)') (x2(j),j=jmin,jmax)
       write(FileUnit,'(E12.5)') (x3(k),k=kmin,kmax)
     endif

     end subroutine
!
!    
****************************************************************************** 

!
!    WriteEnsightSca writes result data in Ensight's format
!
!    m1,m2,m3....: size of the variable in the x1,x2,x3 direction
!    ndv.........: number of dimension of the variable (1=>scalar   
3=>vector)
!    var.........: data to be written
!    Varname.....: word used to build filenames
!    imin,imax...: range of writting data in the x1 direction
!    jmin,jmax...: range of writting data in the x2 direction
!    kmin,kmax...: range of writting data in the x3 direction
!
!    
****************************************************************************** 

     subroutine WriteEnsightVar(ndv,m1,m2,m3,var,VarName,WriteBinary,
    &                           imin,imax,jmin,jmax,kmin,kmax)

     implicit none

     INTEGER     ,INTENT(IN)::m1,m2,m3,ndv
     INTEGER     ,INTENT(IN)::imin,imax,jmin,jmax,kmin,kmax
     REAL*8,DIMENSION(ndv,m1,m2,m3),INTENT(IN)::var
     CHARACTER*80,INTENT(IN)::Varname
     LOGICAL     ,INTENT(IN)::WriteBinary


     character(len=80):: VarFileName,buffer
     character(len=80):: part,block
     integer::FileUnit,i,j,k,npart,m,reclength

     FileUnit = 40
     part ='part'
     npart=1
     block='block rectilinear'
     reclength=80*3+4*(1+(imax-imin+1)*(jmax-jmin+1)*(kmax-kmin+1)*ndv)

     if (ndv.eq.1)VarFileName = trim(Varname)//'.scl'
     if (ndv.eq.3)VarFileName = trim(Varname)//'.vec'
    !      write(*,'(5x,A)') VarFileName

   if(WriteBinary) then
       open (unit=FileUnit,file=VarFileName,
    &        form='UNFORMATTED',access="direct",recl=reclength)
       write(unit=FileUnit,rec=1) VarFileName
    &                            ,part,npart,block
    &                            ,((((SNGl(var(m,i,j,k))
    &                            ,i=imin,imax)
    &                            ,j=jmin,jmax)
    &                            ,k=kmin,kmax)
    &                            ,m=1,ndv)
     else
       open (unit=FileUnit,file=VarFileName)
       write(buffer,'(a,a)') Varname        write(FileUnit,'(A)')  
buffer         write(FileUnit,'(A)') 'part'
       write(FileUnit,'(I10)')npart
       write(FileUnit,'(A)') 'block rectilinear'
       do m=1,ndv
       write(FileUnit,'(e12.5)')
    &    (((SNGl(var(m,i,j,k)),i=imin,imax),j=jmin,jmax),k=kmin,kmax)
       enddo
     endif
     close(FileUnit)

     end  subroutine
!
!    
****************************************************************************** 

!   EnsightCase helps to write a Ensight's case file
!
!    VarName.....: Name of the variable
!    GeoName.....: Name of the geometrie
!    VarType.....: 1 => Scalar       3 => Vector
!    ntini.......: filename start number
!    nstop.......: filename end number
!    nprint......: filename increment
!
!    nfile.......: number of result files (time steps)
!
     subroutine EnsightCase(VarName,GeoName,VarType,ntini,nstop,nprint)

     implicit none

     INTEGER,INTENT(IN)::VarType,nstop,ntini,nprint
     CHARACTER(LEN=80),INTENT(IN)::Varname
     CHARACTER(LEN=80),INTENT(IN)::GeoName
     integer::FileUnit,i,nfile
     character(len=10)::ipfi

     write(*,'(/2A)') ' Creating case file for Ensight and Paraview: '
    &                  ,Varname

     nfile=(nstop-ntini+1)/nprint
     write(ipfi,'(i10.10)')nstop

     FileUnit = 40
     open(FileUnit,file=trim(Varname)//ipfi//'.case')

     write(FileUnit,10) trim(GeoName)//'.geo'
  10 format(
    &'FORMAT'            ,/ ,
    &'type: ensight gold',//,
    &'GEOMETRY'          ,/ ,
    &'model:    ',A         ,//,
    &'VARIABLE')

     if (nfile.eq.1) then
       if(VarType.eq.1)
    &    write(FileUnit,15)trim(Varname),trim(Varname)//'.scl'
       if(VarType.eq.3)
    &    write(FileUnit,25)trim(Varname),trim(Varname)//'.vec'
     else
       if(VarType.eq.1)
    &   write(FileUnit,15)trim(Varname),trim(Varname)//'**********.scl'
       if(VarType.eq.3)
    &   write(FileUnit,25)trim(Varname),trim(Varname)//'**********.vec'
       write(FileUnit,45) nfile,ntini+nprint,nprint
       write(FileUnit,'(f15.3)') (ntini+float(i)*nprint,i=1,nfile)
     endif

     close(FileUnit)

  15 format('scalar per node: ',A,'   ', A)
  25 format('vector per node: ',A,'   ', A)

  45 format(
    &/,'TIME            '      ,
    &/,'time set: 1     '      ,
    &/,'number of steps:'      ,i4 ,
    &/,'filename start number:',i10
    &/,'filename increment:'   ,i4
    &/,'time values: '
    &)

     end subroutine


paraview-request at paraview.org wrote:

Send ParaView mailing list submissions to
    paraview at paraview.org

To subscribe or unsubscribe via the World Wide Web, visit
    http://www.paraview.org/mailman/listinfo/paraview
or, via email, send a message with subject or body 'help' to
    paraview-request at paraview.org

You can reach the person managing the list at
    paraview-owner at paraview.org

When replying, please edit your Subject line so it is more specific
than "Re: Contents of ParaView digest..."


Today's Topics:

  1. Writing Binary files (N Harrison)


----------------------------------------------------------------------

Message: 1
Date: Mon, 20 Feb 2006 11:44:33 +0000
From: N Harrison <noel.harrison at nuigalway.ie>
Subject: [Paraview] Writing Binary files
To: paraview at paraview.org
Message-ID: <000901c63613$04520340$5851cb8c at nuigalway.ie>
Content-Type: text/plain; charset=us-ascii

Sam,Stephane,Renato
Thanks very much for your information to date. Seeing as you have tried
using VTK-XML and Ensight file format, which type would you recommend using
for large models? I am generating large models at the moment using FORTRAN
90 to create legacy ASCII VTK files and they are getting quite large. I 
have
started to write them in a binary format  because of their small file size.
I don't have any experience yet of XML or Ensight, what are their main
advantages/disadvantages in your opinion for displaying large models? Quite
a lot of information has been posted lately on this mailing service about
creating Ensight files, including your own responses (very helpful), so I
just wanted to see if this format was recommended over binary XML files.

Kind regards,
Noel

-- 
Stephane MONTESINO

PhD Student                     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/20060221/5ddd0359/Stephane.Montesino.vcf


More information about the ParaView mailing list