Contents of file named plot3d.f


      program plot3D
C     Grid extends symmetrically from zero
C        for nxgr cells in X and nygr in Y
      parameter (nxgr=50,nygr=50)
      parameter (nx=1+2*nxgr, ny=1+2*nygr)
C     Parameters: depth of valley (fscl), X and Y ranges (4x2)
      parameter (fscl=1, xscl=4, yscl=2)
C     Data for grid.  Grid layout is
C        (*, 1) - lowest streak of y values
C        (*,ny) - highest streak of y values
C        (1, *) - lowest x value at any y position
C        (nx,*) - highest x value at any y position
      real data(nx,ny)

C     Create data:  Curved valley defined by a Rosenbrock fcn
      f(x,y) = (1-x)**2 + fscl*(y-x**2)**2

C     Run over grid and insert elevation information into it.

      do j=1,ny
         y = yscl*float(j-1-nygr)/nygr
         do i=1,nx
            x = xscl*float(i-1-nxgr)/nxgr
            data(i,j) = f(x,y)
         enddo
      enddo

C     Create default SAC file header; modify to make it 3-D data
      call newhdr

C     File type to XYZ for 3D data
      call setihv('IFTYPE', 'IXYZ', nerr)

C     Grid dimensions: NXSIZE, NYSIZE 
      call setnhv('NXSIZE', nx, nerr)
      call setnhv('NYSIZE', ny, nerr)

C     Grid scale:  XMINIMUM, XMAXIMUM, YMINIMUM, YMAXIMUM
      call setfhv('XMINIMUM', -xscl, nerr)
      call setfhv('XMAXIMUM',  xscl, nerr)
      call setfhv('YMINIMUM', -yscl, nerr)
      call setfhv('YMAXIMUM',  yscl, nerr)

C     Number of data points, begin, delta (required but irrelevant)
      call setfhv('B', 0.0, nerr)
      call setfhv('DELTA', 1.0, nerr)
      call setnhv('NPTS', nx*ny, nerr)

C     Write data to file using present header values
      call wsac0('/tmp/data3D.xyz',data,data,nerr)
      end