#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

require "numru/netcdf"
require "numru/dcl"
require "numru/ggraph"
require "getoptlong"
include NumRu


DCL::swpset('IWIDTH',  800)
DCL::swpset('IHEIGHT', 800)
DCL.sgscmn(4)
#DCL.sgscmn(10)

# 表示
unless ( ARGV[1] )
  DCL::swlset("lwnd",false)
end

DCL.gropn(4)
DCL.sgpset('lcntl', false)   # 制御文字を解釈しない
DCL.sgpset('lfull',true)     # 全画面表示
DCL.sgpset('lcorner',false)  # コーナーマークを書かない
DCL.uzfact(0.6)              # 座標軸の文字列サイズを定数倍
DCL.sgpset('lfprop',true)    # プロポーショナルフォントを使う
DCL.udpset('lmsg',false)     # コンター間隔非表示
DCL.sgpset('lclip',true)     # 枠からはみ出した分を描画しない.


vars = ["Exner", "VelZ"]
files = ["arare-Control-27b-AllNodes", "arare-Control-27c-AllNodes"]

files.each{|prefix|
  vars.each{|var|
    url0 = "./#{prefix}_#{var}.nc@#{var},z="
    gp0  = GPhys::IO.open_gturl(url0) 
    gp2  = gp0 * 1.0
  }
}
num = 0
fname = Array.new

vars.each{ |var|
  p var
  url1 = "./#{prefix}_#{var}.nc@#{var}"
  p url1
  gp1  = GPhys::IO.open_gturl(url1) 

  x = gp1.coord(0).val 
  y = gp1.coord(1).val 
  z = gp1.coord(2).val 
  t = gp1.coord(3).val 

  tmax = 40
  tnum1 = t.size / tmax + 1
  tnum2 = -1

  zmax  = 10
  znum1 = z.size / zmax + 1

  t.each{ |n|
#    n = n * 100
    n1 = n * 100
    tnum2 = tnum2 + 1
    
    p "#{tnum2}, #{tnum1}, #{tnum2%tnum1}"

    next if tnum2%tnum1 > 0
    p "#{tnum2}, #{n}"
    
    znum2 = -1
    z.each{ |k|
      znum2 = znum2 + 1
      p "#{znum2}, #{znum1}, #{znum2%znum1}"
      next if znum2%znum1 > 0

      p "z=>#{k}"
      p "t=>#{n}" 
      p gp0.cut('z'=>k).cut('t'=>n)

      next if gp0.cut('z'=>k).cut('t'=>n).max < gp0.cut('z'=>k).cut('t'=>n).min * 1.01

      title = gp1.long_name
      GGraph.tone( gp0.cut('z'=>k).cut('t'=>n), 
                 true, 
                 'annot'=>true,
                 'titl'=>title
                 )    
      GGraph.color_bar
      GGraph.contour( gp1.cut('z'=>k).cut('t'=>n), 
                      false, 
                      'annot'=>true
                      )    

      num = num + 1
      fname.push( "mv dcl_#{sprintf('%03d',num)}.png #{gp1.name}_t#{sprintf('%08d',n1)}sec_z#{sprintf('%03d',k)}.png" )

      p  "mv dcl_#{sprintf('%03d',num)}.png #{gp1.name}_t#{sprintf('%08d',n1)}sec_z#{sprintf('%03d',k)}.png" 
      
      if ( gp1.name == "v" )
        title = "wind vector"
        title2 = "wind"
        flag = true
      elsif ( gp1.name == "vs" )
        title = "wind vector at an altitude of 10m [m/s]"
        title2 = "wind_sfc"
        flag = true
      end

      if (flag)
        GGraph.tone( gp0.cut('z'=>k).cut('t'=>n), 
                     true, 
                     'annot'=>true,
                     'titl'=> title
                     )
        GGraph.color_bar
        GGraph.vector( gp2.cut('z'=>k).cut('t'=>n), 
                       gp1.cut('z'=>k).cut('t'=>n), 
                       false, 
                       'annot'=>true, 
                       'titl'=>'',
                       'xintv'=>10,
                       'yintv'=>10,
                       'flow_vect'=> false,
                       'keep'=>true,
                       'unit_vect'=> false
                       )
        num = num + 1
        fname.push( "mv dcl_#{sprintf('%03d',num)}.png #{title2}_t#{sprintf('%08d',n1)}sec_z#{sprintf('%03d',k)}.png" )
      end
    }
  }
  gp2  = gp1
  flag = false
}
DCL.grcls

fname.each{|comm|
  p comm
  system( comm )
}
