program plot3d_2_avs ! !******************************************************************************* ! !! PLOT3D_2_AVS converts 3D binary multiple grid XYZB and Q format to another format. ! ! ! Discussion: ! ! The program reads in the XYZB data first, since the "B" field contains ! the blanking information. ! ! Then it writes the XYZ data to a file, but only that data corresponding ! to unblanked points. All the X's are written first, then Y, then Z. ! ! Then it reads in the Q data, and writes the unblanked U, V, and W ! fields ( 2, 3 and 4 ) to a file, and the unblanked RHO fields to ! another file. ! implicit none ! integer, parameter :: maxi = 121 integer, parameter :: maxj = 41 integer, parameter :: maxk = 21 integer, parameter :: maxgrid = 7 ! real alpha(maxgrid) integer b(maxi,maxj,maxk,maxgrid) real fsmach(maxgrid) integer i integer idim(maxgrid) integer ierror integer igrid integer ios integer iunit integer j integer jdim(maxgrid) integer k integer kdim(maxgrid) integer l integer ngrid integer numpts real q(maxi,maxj,maxk,5,maxgrid) real qmax(5) real qmin(5) real re(maxgrid) real time(maxgrid) real x(maxi,maxj,maxk,maxgrid) real xmax real xmin real y(maxi,maxj,maxk,maxgrid) real ymax real ymin real z(maxi,maxj,maxk,maxgrid) real zmax real zmin ! write ( *, * ) ' ' write ( *, * ) 'PLOT3D_2_AVS' write ( *, * ) ' Read a (big) (nasty) PLOT3D file,' write ( *, * ) ' a 3D XYZB file with multiple grids,' write ( *, * ) ' and a 3D Q file.' write ( *, * ) ' ' write ( *, * ) ' Write the unblanked XYZ data to a file.' write ( *, * ) ' Write the unblanked RHO (=Q(1)) data to a file.' write ( *, * ) ' Write the unblanked U,V,W (=Q(2),Q(3),Q(4))' write ( *, * ) ' data to a file.' ierror = 0 iunit = 1 open ( unit = iunit, file = '3dm_xyzb.dat', form = 'unformatted', & status = 'old', iostat = ios ) if ( ios /= 0 ) then ierror = ios write ( *, * ) ' ' write ( *, * ) 'PLOT3D_2_AVS - Fatal error!' write ( *, * ) ' Could not open the input file.' stop end if call rb_3dm_xyzbfile ( iunit, idim, jdim, kdim, maxi, maxj, & maxk, maxgrid, ngrid, x, y, z, b, ierror ) close ( unit = iunit ) if ( ierror /= 0 ) then write ( *, * ) 'IERROR = ', ierror stop end if write ( *, * ) ' ' write ( *, * ) 'NGRID = ', ngrid write ( *, * ) ' ' write ( *, * ) ' I, IDIM(I), JDIM(I), KDIM(I)' write ( *, * ) ' ' do i = 1, ngrid write ( *, * ) i, idim(i), jdim(i), kdim(i) end do xmin = x(1,1,1,1) xmax = x(1,1,1,1) ymin = y(1,1,1,1) ymax = y(1,1,1,1) zmin = z(1,1,1,1) zmax = z(1,1,1,1) do igrid = 1, ngrid do i = 1, idim(igrid) do j = 1, jdim(igrid) do k = 1, kdim(igrid) xmin = min ( xmin, x(i,j,k,igrid) ) xmax = max ( xmax, x(i,j,k,igrid) ) ymin = min ( ymin, y(i,j,k,igrid) ) ymax = max ( ymax, y(i,j,k,igrid) ) zmin = min ( zmin, z(i,j,k,igrid) ) zmax = max ( zmax, z(i,j,k,igrid) ) end do end do end do end do write ( *, * ) ' ' write ( *, * ) 'XYZ ranges:' write ( *, * ) ' ' write ( *, * ) 'XMIN = ', xmin, ' XMAX = ', xmax write ( *, * ) 'YMIN = ', ymin, ' YMAX = ', ymax write ( *, * ) 'ZMIN = ', zmin, ' ZMAX = ', zmax ! ! Now read the Q data. ! ierror = 0 iunit = 1 open ( unit = iunit, file = '3dm_qb.dat', form = 'unformatted', & status = 'old', iostat = ios ) if ( ios /= 0 ) then ierror = ios write ( *, * ) ' ' write ( *, * ) 'PLOT3D_2_AVS - Fatal error!' write ( *, * ) ' Could not open the output file.' stop end if call rb_3dm_qfile ( iunit, idim, jdim, kdim, maxi, maxj, maxk, & maxgrid, ngrid, fsmach, alpha, re, time, q, ierror ) close ( unit = iunit ) if ( ierror /= 0 ) then write ( *, * ) 'IERROR = ', ierror stop end if write ( *, * ) ' ' write ( *, * ) 'NGRID = ', ngrid write ( *, * ) ' ' write ( *, * ) ' I, IDIM(I), JDIM(I), KDIM(I)' write ( *, * ) ' ' do i = 1, ngrid write ( *, * ) i, idim(i), jdim(i), kdim(i) end do write ( *, * ) ' ' write ( *, * ) ' I, FSMACH(I), ALPHA(I), RE(I), TIME(I)' write ( *, * ) ' ' do i = 1, ngrid write ( *, * ) i, fsmach(i), alpha(i), re(i), time(i) end do do l = 1, 5 qmin(l) = q(1,1,1,1,1) qmax(l) = q(1,1,1,1,1) do igrid = 1, ngrid do i = 1, idim(igrid) do j = 1, jdim(igrid) do k = 1, kdim(igrid) qmin(l) = min ( qmin(l), q(i,j,k,l,igrid) ) qmax(l) = max ( qmax(l), q(i,j,k,l,igrid) ) end do end do end do end do end do write ( *, * ) ' ' write ( *, * ) 'Q ranges:' write ( *, * ) ' ' do l = 1, 5 write ( *, * ) l, qmin(l), qmax(l) end do ! ! Now write out to a file just those X, Y, and Z values which ! are not blanked. ! open ( unit = iunit, file = 'avs_xyz.dat', form = 'unformatted', & status = 'replace', access = 'direct', recl = 1, iostat = ios ) if ( ios /= 0 ) then ierror = ios write ( *, * ) ' ' write ( *, * ) 'PLOT3D_2_AVS - Fatal error!' write ( *, * ) ' Could not open the XYZ direct access file.' stop end if numpts = 0 do igrid = 1, ngrid do i = 1, idim(igrid) do j = 1, jdim(igrid) do k = 1, kdim(igrid) if ( b(i,j,k,igrid) /= 0 ) then write ( iunit ) x(i,j,k,igrid) numpts = numpts + 1 end if end do end do end do end do write ( *, * ) 'Number of unblanked points is ', numpts do igrid = 1, ngrid do i = 1, idim(igrid) do j = 1, jdim(igrid) do k = 1, kdim(igrid) if ( b(i,j,k,igrid) /= 0 ) then write ( iunit ) y(i,j,k,igrid) end if end do end do end do end do do igrid = 1, ngrid do i = 1, idim(igrid) do j = 1, jdim(igrid) do k = 1, kdim(igrid) if ( b(i,j,k,igrid) /= 0 ) then write ( iunit ) z(i,j,k,igrid) end if end do end do end do end do close ( unit = iunit ) ! ! Now write out to a file just those U, V, and W values which ! are not blanked. ! open ( unit = iunit, file = 'avs_uvw.dat', form = 'unformatted', & status = 'replace', access = 'direct', recl = 1, iostat = ios ) if ( ios /= 0 ) then ierror = ios write ( *, * ) ' ' write ( *, * ) 'PLOT3D_2_AVS - Fatal error!' write ( *, * ) ' Could not open the UVW direct access file.' stop end if do igrid = 1, ngrid do i = 1, idim(igrid) do j = 1, jdim(igrid) do k = 1, kdim(igrid) if ( b(i,j,k,igrid) /= 0 ) then write ( iunit ) q(i,j,k,2,igrid) end if end do end do end do end do do igrid = 1, ngrid do i = 1, idim(igrid) do j = 1, jdim(igrid) do k = 1, kdim(igrid) if ( b(i,j,k,igrid) /= 0 ) then write ( iunit ) q(i,j,k,3,igrid) end if end do end do end do end do do igrid = 1, ngrid do i = 1, idim(igrid) do j = 1, jdim(igrid) do k = 1, kdim(igrid) if ( b(i,j,k,igrid) /= 0 ) then write ( iunit ) q(i,j,k,4,igrid) end if end do end do end do end do close ( unit = iunit ) ! ! Now write out to a file just those RHO values which ! are not blanked. ! open ( unit = iunit, file = 'avs_rho.dat', form = 'unformatted', & status = 'replace', access = 'direct', recl = 1, iostat = ios ) if ( ios /= 0 ) then ierror = ios write ( *, * ) ' ' write ( *, * ) 'PLOT3D_2_AVS - Fatal error!' write ( *, * ) ' Could not open the RHO direct access file.' stop end if do igrid = 1, ngrid do i = 1, idim(igrid) do j = 1, jdim(igrid) do k = 1, kdim(igrid) if ( b(i,j,k,igrid) /= 0 ) then write ( iunit ) q(i,j,k,1,igrid) end if end do end do end do end do close ( unit = iunit ) write ( *, * ) ' ' write ( *, * ) 'PLOT3D_2_AVS' write ( *, * ) ' Normal end of execution.' stop end