#!/usr/bin/ruby

PI = 3.141592

imax = 21
jmax = 21
kmax = 21
kmax =  1
tmax = 21

delx = 2.0*PI/imax ; x0 = -delx*imax/2
dely = 2.0*PI/jmax ; y0 = -dely*jmax/2
delz = 2.0*PI/kmax ; z0 = 0.0
delt = 2.0*PI/tmax ; t0 = 0.0

x_X = []
y_Y = []
z_Z = []
t_T = []

for i in 0..(imax-1)
  x_X << x0 + delx * i
end
for j in 0..(jmax-1)
  y_Y << y0 + dely * j
end
for k in 0..(imax-1)
  z_Z << z0 + delz * k
end
for t in 0..(tmax-1)
  t_T << t0 + delt * t
end

for t in 0..(tmax-1)
  print "t=", t, "\n"

  outfilename = "out/test4.vtk"
  outfilename = "out/test4_"+t.to_s.rjust(3,"0")+".vtk"
  file = File.open(outfilename, "w")

  file.write '# vtk DataFile Version 1.0', "\n"
  file.write outfilename, "\n"
  file.write 'ASCII', "\n"

  file.write 'DATASET STRUCTURED_GRID', "\n"
  file.write 'DIMENSIONS', ' ', imax, ' ', jmax, ' ', kmax, "\n"
  file.write 'POINTS ', imax*jmax*kmax, ' float', "\n"
  for k in 0..(kmax-1)
    for j in 0..(jmax-1)
      for i in 0..(imax-1)
        file.write x_X[i], ' ', y_Y[j], ' ', 
                   Math::cos(2*x_X[i]-t_T[t])*Math::cos(y_Y[j]/2.0-t_T[t]) + delz*k, "\n"
      end
    end
  end

  file.write 'POINT_DATA ', imax*jmax*kmax, "\n"

  file.write 'VECTORS velocity float', "\n"

  for k in 0..(kmax-1)
    for j in 0..(jmax-1)
      for i in 0..(imax-1)
        u = - 2.0 * Math::sin(2*x_X[i]-t_T[t])*Math::cos(y_Y[j]/2.0-t_T[t])
        v = - 0.5 * Math::cos(2*x_X[i]-t_T[t])*Math::sin(y_Y[j]/2.0-t_T[t])
        w = Math::sqrt( u**2 + v**2 )
        file.write u, ' ', v, ' ', w, "\n"
      end
    end
  end

  file.close

end
