# Usage
#
#   $ ruby merge.rb IN.nc (OUT.nc)
#
#   Note that the name of NetCDF files to be merged is IN_rank??????.nc.
#   But, file name given as arguments should not include _rank??????.
#   It is assumed that a variable named "IN" is included in the input file.
#   If OUT.nc is not given, a output file name is IN.nc.

require "numru/ggraph"
include NumRu

if ARGV.size < 1 then
  print "Usage : ruby merge.rb IN.nc (OUT.nc)\n" 
  print "        Note that the name of NetCDF files to be merged is IN_rank??????.nc.\n"
  print "        But, file name given as arguments should not include _rank??????.\n"
  print "        It is assumed that a variable named 'IN' is included in the input file.\n"
  print "        If OUT.nc is not given, a output file name is IN.nc.\n"
  exit
end

ncfn_in  = ARGV[0]
if ARGV.size >= 2 then
  ncfn_out = ARGV[1]
else
  ncfn_out = nil
end

unless ncfn_in[-3..-1] == '.nc' then
  print "ERROR : Unexpected extention of file name: ", ncfn_in, "\n"
  exit
end
is = ncfn_in.rindex("/") != nil ? ncfn_in.rindex("/") : -1
is += 1
ie = -4
vname = ncfn_in[is..ie]

if ncfn_out == nil then
  ncfn_out = vname + ".nc"
end

print "   Input  : ", ncfn_in, "\n"
print "   Output : ", ncfn_out, "\n"

if File.exist?(ncfn_out) then
  print "File, ", ncfn_out, " exists.\n"
  print "Overwrite the file? (yes/no)\n"
  input = $stdin.gets
  if input.chomp != 'yes' then
    print "STOP\n"
    exit
  end
end


url = ncfn_in[0..-4] + "_rank??????.nc@" + vname
gp = GPhys::IO.open_gturl( url )
outfile = NetCDF.create(ncfn_out)
GPhys::NetCDF_IO.each_along_dims_write(gp, outfile, -1) do |sub|
  [sub]
end
outfile.close
