require "numru/gphys"
require "numru/dcl"
include NumRu

ARGV.length<2 && raise("Usage: ruby #$0 Omega Random")

omega = ARGV.shift
random = ARGV.shift

path = "../data/"
fname = "#{path}Omega#{omega}/baro_rn4expcs_freedecay_cpg100_Omega#{omega}-#{random}.nc"
file = NetCDF.open(fname)


gu = GPhys::IO.open(file,"vellon")
gv = GPhys::IO.open(file,"vellat")
gvor = GPhys::IO.open(file,"vor")
nlon,nlat,ntim = gu.shape
lat = gu.coord("lat").val
tim = gu.coord("t").val
nm = file.dim("n").length
lonw = file.var("lon_weight").get
latw = file.var("coslat_lat_weight").get
omega = file.att("Omega").get[0]
g = file.att("Grav").get[0]
a = file.att("Radius").get[0]


lonw /= lonw.sum
latw /= latw.sum
kenergy = NArray.sfloat(ntim)
enstrophy = NArray.sfloat(ntim)
for n in 0...ntim
  u = gu[true,true,n].val
  v = gv[true,true,n].val
  vor = gvor[true,true,n].val
  kenergy[n] = 0.5*(u**2+v**2).mul_add(lonw,0).mul_add(latw,0)
  enstrophy[n] = (vor**2).mul_add(lonw,0).mul_add(latw,0)
end
kenergy -= 1

iws = ARGV.delete("-ps") ? 2 : 4
if ARGV.delete("-png")
  DCL::swlset("lwnd",false)
  DCL::swlset("ldump",true)
end
DCL::sglset("lfull",true)
DCL::gropn(iws)


2.times do |i|
  DCL::grfrm
  DCL::grsvpt(0.09,0.98,0.08,0.67)
  DCL::grswnd(0,tim[-1],-0.2,0.2)
  DCL::grstrn(1)
  DCL::grstrf
  DCL::uzfact(0.7)

  DCL::uxaxdv("b",0.2,1)
  DCL::uxaxdv("t",0.2,1)
  DCL::uyaxdv("l",0.1,0.2)
  DCL::uyaxdv("r",0.1,0.2)
  DCL::uxsttl("b","time [s]",0)

  case i
  when 0
    DCL::sgplzu(tim,kenergy,1,2)
    title = "energy"
  when 1
    DCL::sgplzu(tim,enstrophy,1,2)
    title = "enstrophy"
  end
  DCL::sgtxzr(0.02,0.70,"Total #{title} change",0.02,0,-1,2)
  DCL::sgtxzr(0.98,0.035,"Omega=#{omega.to_i}, g=#{g.to_i}, U=sqrt2, a=#{a.to_i}",0.012,0,1,1)
end

DCL::grcls
