Fdataextents.f
From VisItusers.org
This page contains example code from the Getting Data Into VisIt manual.
c c fdataextents.f c program main implicit none double precision extents(2,4) call write_domains(extents) call write_master(extents) stop end subroutine write_domains(extents) implicit none include "silo.inc" double precision extents(2,4) integer dbfile, err, ierr, i,j, dom, dims(2), ndims, nmesh real x(4), y(5), var(4,5), dx, dy real xc(4), yc(5), tx(4), ty(4) character*14 filename /'fdataextents.X'/ data x/0., 1., 2.5, 5./ data y/0., 2., 2.25, 2.55, 5./ data tx /0., -5., -5., 0./ data ty /0., 0., -5., -5./ data dims/4, 5/ ndims = 2 nmesh = 4 do 10030 dom=1,nmesh c Poke a number into the filename. filename(14:) = char(48 + dom) c Create a new silo file. ierr = dbcreate(filename, 14, DB_CLOBBER, DB_LOCAL, . "dataextents data", 16, DB_HDF5, dbfile) if(dbfile.eq.-1) then write (6,*) 'Could not create Silo file!\n' return endif c Displace the coordinates do 10000 i=1,4 xc(i) = x(i) + tx(dom) 10000 continue do 10010 i=1,5 yc(i) = y(i) + ty(dom) 10010 continue do 10020 j=1,5 do 10021 i=1,4 dx = xc(i) - 5. dy = yc(j) - 5. var(i, j) = sqrt(dx*dx + dy*dy) c Determine the extents for this domain. if(i==1 .and. j==1) then extents(1, dom) = var(i,j) else if(var(i,j) < extents(1,dom)) then extents(1, dom) = var(i,j) endif if(i==1 .and. j==1) then extents(2, dom) = var(i,j) else if(var(i,j) > extents(2,dom)) then extents(2, dom) = var(i,j) endif 10021 continue 10020 continue c Write the quadmesh err = dbputqm (dbfile, "quadmesh", 8, "xc", 2, . "yc", 2, "zc", 2, xc, yc, DB_F77NULL, dims, ndims, . DB_FLOAT, DB_COLLINEAR, DB_F77NULL, ierr) c Write the quadvar err = dbputqv1(dbfile, "var", 3, "quadmesh", 8, var, dims, . ndims, DB_F77NULL, 0, DB_FLOAT, DB_NODECENT, DB_F77NULL, . ierr) c Close the Silo file ierr = dbclose(dbfile) 10030 continue end subroutine write_multimesh(dbfile) implicit none include "silo.inc" integer err, ierr, dbfile, nmesh character*25 meshnames(4) /'fdataextents.1:quadmesh ', . 'fdataextents.2:quadmesh ', . 'fdataextents.3:quadmesh ', . 'fdataextents.4:quadmesh '/ integer lmeshnames(4) /23,23,23,23/ integer meshtypes(4) /DB_QUAD_RECT, DB_QUAD_RECT, . DB_QUAD_RECT, DB_QUAD_RECT/ nmesh = 4 err = dbputmmesh(dbfile, "quadmesh", 8, nmesh, meshnames, . lmeshnames, meshtypes, DB_F77NULL, ierr) end subroutine write_multivar(dbfile, extents) implicit none include "silo.inc" double precision extents(2,4) integer err, ierr, dbfile, nvar, optlist character*25 varnames(4) /'fdataextents.1:var ', . 'fdataextents.2:var ', . 'fdataextents.3:var ', . 'fdataextents.4:var '/ integer lvarnames(4) /18,18,18,18/ integer vartypes(4) /DB_QUADVAR,DB_QUADVAR, . DB_QUADVAR,DB_QUADVAR/ nvar = 4 c Add the data extents to the optlist that we use to write the multivar err = dbmkoptlist(2, optlist) err = dbaddiopt(optlist, DBOPT_EXTENTS_SIZE, 2) err = dbadddopt(optlist, DBOPT_EXTENTS, extents) err = dbputmvar(dbfile, "var", 3, nvar, varnames, lvarnames, . vartypes, optlist, ierr) err = dbfreeoptlist(optlist) end subroutine write_master(extents) implicit none include "silo.inc" double precision extents(2,4) integer err, ierr, dbfile, oldlen c Create a new silo file ierr = dbcreate("fdataextents.root", 17, DB_CLOBBER, DB_LOCAL, . "dataextents root", 17, DB_HDF5, dbfile) if(dbfile.eq.-1) then write (6,*) 'Could not create Silo file!\n' return endif c Set the maximum string length to 25 oldlen = dbget2dstrlen() err = dbset2dstrlen(25) c Write the multimesh and multivar objects call write_multimesh(dbfile) call write_multivar(dbfile, extents) c Restore the previous value for maximum string length err = dbset2dstrlen(oldlen) c Close the Silo file ierr = dbclose(dbfile) end
