# -*- coding: utf-8 -*-
require "numru/ggraph"
include NumRu

# ----- コマンドラインオプション -----
iws = ( ARGV[0] || 1 ).to_i     # 装置番号 (1,2,or 4)
tsleep = [ ( ARGV[1] || 0.0 ).to_f, 0.0 ].max  # 描画間隔(秒)
wait = ( tsleep <= 0.0 )       #->true/false; 0以下(true)ならマウスクリックを待つ

# ----- DCL設定 -----
def prep_dcl(iws=1,wait=false) # iws : DCL出力デバイス．1,4:画面, 2:PS
  DCL.sgscmn(04)                # カラーマップ番号
  DCL.swpset("iwidth",1000)     # 画面の幅
  DCL.swpset("iheight",1000)    # 画面の高さ
  DCL.swpset("lwait",wait)     # 次の描画の前にマウスクリックを待つ
  DCL.swpset("lalt",true)      # 裏で描画（パラパラアニメ用）   
  DCL.swpset("ifl",1)          # png で出力
  DCL.swpset("lsysfnt",true)   # システムフォントを使用
  DCL.swcset("fontname","Hiragino Kaku Gothic")  
  DCL.gropn(iws)
  #  DCL.sldiv("y",2,2)           # 画面分割 (描画順("y"oko/"t"ate),数:横,数:縦)
  DCL.sgpset('lfull',true)     # 全画面表示
  DCL.sgpset('isub', 96)       # 下付き添字を表す制御文字を '_' から '`' に
  DCL.uzfact(0.7)             # 座標軸の文字列サイズを定数倍
  DCL.sgpset('lcorner',false)  # コーナーマークを書かない
  DCL.glpset('lmiss',true)     # DCLの欠損値処理を on に
end

rmiss = DCL.glpget('rmiss')

vpt = NArray[0.1, 0.45, 0.1, 0.45]             # ビューポートサイズ (1:1)
vpt00 = ( vpt + ([0.02]*2 + [0.35]*2) ).to_a    # x,y方向にずらしてArray化
vpt01 = ( vpt + ([0.394]*2 + [0.35]*2) ).to_a    # x,y方向にずらしてArray化
vpt10 = ( vpt + ([0.02]*2 + [-0.04]*2) ).to_a    # x,y方向にずらしてArray化
vpt11 = ( vpt + ([0.394]*2 + [-0.04]*2) ).to_a    # x,y方向にずらしてArray化

lev = [rmiss,-100,-50,-30,-20,-15,-10,-7,-5,-3,-1,0,1,3,5,7,10,15,20,30,50,100,rmiss]

t0=1800.0
t1=2000.0

prep_dcl(iws,wait)
time = t0
while time <= t1
  # ----- 使用データ -----
  if time < 1900 then
    tro_file = 'tro_vor_1.nc'
    cli_file = 'cli_vor_1.nc'
    tro_vor = (GPhys::IO.open tro_file, 'tro_vor').cut("t"=>time)
    cli_vor = (GPhys::IO.open cli_file, 'cli_vor').cut("t"=>time)
  else
    tro_file = 'tro_vor_2.nc'
    cli_file = 'cli_vor_2.nc'
    tro_vor = (GPhys::IO.open tro_file, 'tro_vor').cut("t"=>time)
    cli_vor = (GPhys::IO.open cli_file, 'cli_vor').cut("t"=>time)
  end
  
  vor_up = (tro_vor + cli_vor) / 2.0 
  vor_lw = (tro_vor - cli_vor) / 2.0
  
  GGraph.set_fig('viewport'=>vpt00,'new_frame'=>true)
  GGraph.set_axes('xunits'=>'','yunits'=>'','ytitle'=>"Y",'xtitle'=>"X") 
  DCL.uzpset('labelyl',true);DCL.uzpset('labelxb',false)
  GGraph.tone(tro_vor,true,'annot'=>false, 'titl'=>' ', "levels"=>lev)
  DCL.uzpset('pad1',-2.0) ; DCL.uxsttl('t','barotropic',-1) ; DCL.uzpset('pad1',0.7)
  
  GGraph.color_bar('vlength'=>0.4,"vwidth"=>0.015,'tickintv'=>0,"landscape"=>true,"voff"=>-0.42,"vcent"=>0.48,"constwidth"=>false,"labelintv"=>3,"log"=>true)
  
  GGraph.set_fig('viewport'=>vpt01,'new_frame'=>false)
  GGraph.set_axes('xtitle'=>'','ytitle'=>"") 
  DCL.uzpset('labelyl',false);DCL.uzpset('labelxb',false)
  GGraph.tone(cli_vor,true,'annot'=>false, 'titl'=>' ', "levels"=>lev)
  DCL.uzpset('pad1',-2.0) ; DCL.uxsttl('t','baroclinic',-1) ; DCL.uzpset('pad1',0.7)
  
  GGraph.set_fig('viewport'=>vpt10,'new_frame'=>false)
  GGraph.set_axes('xtitle'=>'X','ytitle'=>"Y") 
  DCL.uzpset('labelyl',true); DCL.uzpset('labelxb',true)
  GGraph.tone(vor_up,true,'annot'=>false, 'titl'=>' ', "levels"=>lev)
  DCL.uzpset('pad1',-2.0) ; DCL.uxsttl('t','upper',-1) ; DCL.uzpset('pad1',0.7)
  
  GGraph.set_fig('viewport'=>vpt11,'new_frame'=>false)
  GGraph.set_axes('xtitle'=>'X','ytitle'=>"") 
  DCL.uzpset('labelyl',false);DCL.uzpset('labelxb',true)
  GGraph.tone(vor_lw,true,'annot'=>false, 'titl'=>' ', "levels"=>lev)
  DCL.uzpset('pad1',-2.0) ; DCL.uxsttl('t','lower',-1) ; DCL.uzpset('pad1',0.7)
  
  time_str = time.to_s
  jikan = 'potential vorticity (t=' + time_str + ')'
  DCL::sgtxzv(0.5,vpt00[3]+0.12,jikan , 1.15*DCL.uzpget('rsizec2'),0,0,3)
  time += 0.5
end

DCL.grcls      # 描画終了処理
