#!/usr/bin/env ruby

=begin

É½Âê: AGCM5 NetCDF ºîÀ®¥Ä¡¼¥ë

ÍúÎò: 2004/04/18 yukiko@ep.sci.hokudai.ac.jp

=end

# ÀßÄê =========================================================
# local load path
$local_path = '/work11/ape/yukiko/lib'
$: << $local_path


# É¬Í×¤Ê¥é¥¤¥Ö¥é¥ê, ¥â¥¸¥å¡¼¥ë¤ÎÆÉ¤ß¹þ¤ß
require "lib-ape-base.rb"


# main() =======================================================

END{

  set_opt

  print "$expid = #{$expid}, $cum = #{$cum}\n"

  ncfile_gt_make
  print "GT NetCDF make end\n"
  ncfile_sh_make
  print "SH NetCDF make end\n"
  ncfile_ml_make
  print "ML NetCDF make end\n"
  ncfile_tr_make
  print "TR NetCDF make end\n"

}

# ÀßÄê ========================================================

def set_opt

  $cum = "adj"
  $expid = 1

  # ¼Â¹Ô¥ª¥×¥·¥ç¥ó²òÀÏ 
  $cum = "kuo"                             if ARGV.index("-kuo") 
  $cum = "kuo-nosc"                        if ARGV.index("-kuo-nosc") 
  $expid = ARGV[ARGV.index("-exp")+1]      if ARGV.index("-exp") 

  if $expid == "flat3keq" ||$expid == "Qobs3keq" || $expid =~ /H1998/ || $expid =~ /HS1986/
    expID = $expid
    $sst  = $expid
  else 
    expID = "expID0#{$expid}"
    id = ["control","peaked","flat","Qobs","control-5N","1keq","3keq","3kw1"]
    $sst = id[$expid.to_i - 1]

  end

  $ncdir = "/work11/ape/NetCDF/AGCM5_#{$cum}/"
  $ncfile_head = "AGCM5-#{$cum}"
  $gt3dir = "/work11/ape/GTOOL3/#{$cum}_#{expID}"
#  $gt3dir = "/work11/ape/GTOOL3/AGCM5-#{$cum}_#{expID}"
#  $gt3dir = "/work11/ape/GTOOL3/AGCM5-#{$cum}_add_#{expID}"
  puts $gt3dir

end


# sub() ========================================================
def ncfile_gt_make

# grid =========================================================

  grid = VArray.new( NArray.sfloat(1080).indgen!(1) ).rename("time")
  grid = grid.set_att("standard_name","time")
  grid = grid.set_att("units","days since 0000-01-01")
  grid = grid.set_att("bounds","time_bnds")
  grid = Axis.new().set_pos(grid)
  grid = Grid.new(grid)

# variable ===================================================

  # variable common ---------------------------------------------

  $cell_methods = "time: mean (accumulation at every time-step) longitude: latitude: mean (area-weighted)"

  gphys_ary = []

  # osr ----------------------------------------------------
  
  item = "osr_sum_gt.nc"
  
  file = ["#{$gt3dir}/gt/0002/#{item}","#{$gt3dir}/gt/0003/#{item}",
    "#{$gt3dir}/gt/0004/#{item}","#{$gt3dir}/gt/0005/#{item}",
    "#{$gt3dir}/gt/0006/#{item}","#{$gt3dir}/gt/0007/#{item}"]
  gphys = GPhys::NetCDF_IO.open(file, "osr")
  
  data = VArray.new(gphys.data.val).rename("gt_sw_toa")
  data = data.set_att("units","W m-2")
  data = data.set_att("ape_name","toa_shortwave_flux")
  data = data.set_att("cell_methods", $cell_methods)
  
  gphys_ary.push(GPhys.new(grid,data))
  
  
  # olr ----------------------------------------------------
  
  item = "olr_sum_gt.nc"
  
  file = ["#{$gt3dir}/gt/0002/#{item}","#{$gt3dir}/gt/0003/#{item}",
    "#{$gt3dir}/gt/0004/#{item}","#{$gt3dir}/gt/0005/#{item}",
    "#{$gt3dir}/gt/0006/#{item}","#{$gt3dir}/gt/0007/#{item}"]
  gphys = GPhys::NetCDF_IO.open(file, "olr")
  
  data = VArray.new(gphys.data.val).rename("gt_lw_toa")
  data = data.set_att("units","W m-2")
  data = data.set_att("ape_name","toa_outgoing_longwave_flux")
  data = data.set_att("cell_methods", $cell_methods)
  
  gphys_ary.push(GPhys.new(grid,data))
  
  
  # rain ----------------------------------------------------
  
  item = "rain_sum_gt.nc"
  
  file = ["#{$gt3dir}/gt/0002/#{item}","#{$gt3dir}/gt/0003/#{item}",
    "#{$gt3dir}/gt/0004/#{item}","#{$gt3dir}/gt/0005/#{item}",
    "#{$gt3dir}/gt/0006/#{item}","#{$gt3dir}/gt/0007/#{item}"]
  gphys = GPhys::NetCDF_IO.open(file, "rain")

  data = VArray.new(gphys.data.val*0.4*10**(-6)).rename("gt_tppn")
  data = data.set_att("units","kg m-2 s-1")
  data = data.set_att("ape_name","total_precipitation_flux")
  data = data.set_att("cell_methods", $cell_methods)
  
  gphys_ary.push(GPhys.new(grid,data))


  # ssr ----------------------------------------------------
  
  item = "ssr_sum_gt.nc"
    
  file = ["#{$gt3dir}/gt/0002/#{item}","#{$gt3dir}/gt/0003/#{item}",
    "#{$gt3dir}/gt/0004/#{item}","#{$gt3dir}/gt/0005/#{item}",
    "#{$gt3dir}/gt/0006/#{item}","#{$gt3dir}/gt/0007/#{item}"]
  gphys = GPhys::NetCDF_IO.open(file, "ssr")
  
  data = VArray.new(gphys.data.val).rename("gt_ssw")
  data = data.set_att("units","W m-2")
  data = data.set_att("ape_name","surface_shortwave_flux")
  data = data.set_att("cell_methods", $cell_methods)
  
  gphys_ary.push(GPhys.new(grid,data))
  
  
  # slr ----------------------------------------------------
  
  item = "slr_sum_gt.nc"

  file = ["#{$gt3dir}/gt/0002/#{item}","#{$gt3dir}/gt/0003/#{item}",
    "#{$gt3dir}/gt/0004/#{item}","#{$gt3dir}/gt/0005/#{item}",
    "#{$gt3dir}/gt/0006/#{item}","#{$gt3dir}/gt/0007/#{item}"]
  gphys = GPhys::NetCDF_IO.open(file, "slr")
  
  data = VArray.new(gphys.data.val).rename("gt_slw")
  data = data.set_att("units","W m-2")
  data = data.set_att("ape_name","surface_longwave_flux")
  data = data.set_att("cell_methods", $cell_methods)

  gphys_ary.push(GPhys.new(grid,data))


  # evap (latent_heat) -----------------------------------
  
  item = "evap_sum_gt.nc"
  
  file = ["#{$gt3dir}/gt/0002/#{item}","#{$gt3dir}/gt/0003/#{item}",
    "#{$gt3dir}/gt/0004/#{item}","#{$gt3dir}/gt/0005/#{item}",
    "#{$gt3dir}/gt/0006/#{item}","#{$gt3dir}/gt/0007/#{item}"]
  gphys = GPhys::NetCDF_IO.open(file, "evap")
  
  data = VArray.new(gphys.data.val).rename("gt_slh")
  data = data.set_att("units","W m-2")
  data = data.set_att("ape_name","surface_upward_latent_heat_flux")
  data = data.set_att("cell_methods", $cell_methods)
  
  gphys_ary.push(GPhys.new(grid,data))


  # evap (evap) ----------------------------------------
  
  item = "evap_sum_gt.nc"
  
  file = ["#{$gt3dir}/gt/0002/#{item}","#{$gt3dir}/gt/0003/#{item}",
    "#{$gt3dir}/gt/0004/#{item}","#{$gt3dir}/gt/0005/#{item}",
    "#{$gt3dir}/gt/0006/#{item}","#{$gt3dir}/gt/0007/#{item}"]
  gphys = GPhys::NetCDF_IO.open(file, "evap")
  
  data = VArray.new(gphys.data.val*0.4*10**(-6)).rename("gt_evap")
  data = data.set_att("units","kg m-2 s-1")
  data = data.set_att("ape_name","evaporation_flux")
  data = data.set_att("cell_methods", $cell_methods)
  
  gphys_ary.push(GPhys.new(grid,data))
  
  # sens ----------------------------------------------
  
  item = "sens_sum_gt.nc"
  
  file = ["#{$gt3dir}/gt/0002/#{item}","#{$gt3dir}/gt/0003/#{item}",
    "#{$gt3dir}/gt/0004/#{item}","#{$gt3dir}/gt/0005/#{item}",
    "#{$gt3dir}/gt/0006/#{item}","#{$gt3dir}/gt/0007/#{item}"]
  gphys = GPhys::NetCDF_IO.open(file, "sens")

  data = VArray.new(gphys.data.val).rename("gt_ssh")
  data = data.set_att("units","W m-2")
  data = data.set_att("ape_name","surface_upward_sensible_heat_flux")
  data = data.set_att("cell_methods", $cell_methods)
  
  gphys_ary.push(GPhys.new(grid,data))


  # ps ----------------------------------------------
  
  item = "ps_out_gt.nc"
  
  file = ["#{$gt3dir}/gt/0002/#{item}","#{$gt3dir}/gt/0003/#{item}",
    "#{$gt3dir}/gt/0004/#{item}","#{$gt3dir}/gt/0005/#{item}",
    "#{$gt3dir}/gt/0006/#{item}","#{$gt3dir}/gt/0007/#{item}"]
  gphys = GPhys::NetCDF_IO.open(file, "ps")
  
  data = VArray.new(gphys.data.val*100).rename("gt_ps")
  data = data.set_att("units","Pa")
  data = data.set_att("ape_name","surface_air_pressure")
  data = data.set_att("cell_methods", "time: mean (interval: 6 hours) longitude: latitude: mean (area-weighted)")
  
  gphys_ary.push(GPhys.new(grid,data))



#        float time_bnds(time, bnd) ;
#                time_bnds:long_name = "time interval endpoints" ;


  # NetCDF ½ñ¤­¹þ¤ß ================================================

  f=NetCDF.create("#{$ncdir}/#{$ncfile_head}_GT_#{$sst}.nc")

  gphys_ary.each{ |gphys|

    GPhys::NetCDF_IO.write( f, gphys )
    
  }

  f.put_att("Conventions", "CF-1.0")
  f.put_att("title","Aqua Planet: Global Time-Series from \'#{$sst}\' Experiment")
  f.put_att("history", "Original data produced: #{Time.now} on NIES SX6; area-weighted global means calculated for APE GT standard output")
  f.put_att("institution", "GFD Dennou Club")
  f.put_att("source","agcm5.3")
  f.close

end


# sub() ========================================================
def ncfile_sh_make

# grid =========================================================

  item = "osr_sum_avg.nc"
  gphys = GPhys::NetCDF_IO.open("#{$gt3dir}/mlsh/#{item}", "osr")

  g0 = VArray.new(gphys.grid_copy.axis(0).pos.val ).rename("lon")
  g0 = g0.set_att("standard_name","longitude")
  g0 = g0.set_att("units","degrees_east")
  g0 = Axis.new().set_pos(g0)


  g1 = VArray.new(gphys.grid_copy.axis(1).pos.val ).rename("lat")
  g1 = g1.set_att("standard_name","latitude")
  g1 = g1.set_att("units","degrees_north")
  g1[-1..0] = g1[0..-1] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  g1 = Axis.new().set_pos(g1)

  grid = Grid.new(g0,g1)

# variable ===================================================

  # variable common ---------------------------------------------

  $cell_methods = "time: mean (accumulation at every time-step comment: averaged over 3-year period following 6-month spin-up)"

  gphys_ary = []

  # osr ----------------------------------------------------
  
  item = "osr_sum_avg.nc"
  gphys = 
    GPhys::NetCDF_IO.open("#{$gt3dir}/mlsh/#{item}", "osr").cut(true,true,0)
  
  data = VArray.new(gphys.data.val).rename("sh_sw_toa")
  data[true,-1..0] = data[true,0..-1] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","W m-2")
  data = data.set_att("ape_name","toa_shortwave_flux")
  data = data.set_att("cell_methods", $cell_methods)
  
  gphys_ary.push(GPhys.new(grid,data))
  
  
  # olr ----------------------------------------------------
    
  item = "olr_sum_avg.nc"
  gphys = 
    GPhys::NetCDF_IO.open("#{$gt3dir}/mlsh/#{item}", "olr").cut(true,true,0)
    
  data = VArray.new(gphys.data.val).rename("sh_lw_toa")
  data[true,-1..0] = data[true,0..-1] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","W m-2")
  data = data.set_att("ape_name","toa_outgoing_longwave_flux")
  data = data.set_att("cell_methods", $cell_methods)
  
  gphys_ary.push(GPhys.new(grid,data))
  
  
  # rain ----------------------------------------------------

  item = "rain_sum_avg.nc"
  gphys = 
    GPhys::NetCDF_IO.open("#{$gt3dir}/mlsh/#{item}", "rain").cut(true,true,0)

  data = VArray.new(gphys.data.val*0.4*10**(-6)).rename("sh_tppn")
  data[true,-1..0] = data[true,0..-1] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","kg m-2 s-1")
  data = data.set_att("ape_name","total_precipitation_flux")
  data = data.set_att("cell_methods", $cell_methods)
  
  gphys_ary.push(GPhys.new(grid,data))

  # ssr ----------------------------------------------------
  
  item = "ssr_sum_avg.nc"
  gphys = 
    GPhys::NetCDF_IO.open("#{$gt3dir}/mlsh/#{item}", "ssr").cut(true,true,0)
  
  data = VArray.new(gphys.data.val).rename("sh_ssw")
  data[true,-1..0] = data[true,0..-1] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","W m-2")
  data = data.set_att("ape_name","surface_shortwave_flux")
  data = data.set_att("cell_methods", $cell_methods)
  
  gphys_ary.push(GPhys.new(grid,data))
  
  # slr ----------------------------------------------------
  
  item = "slr_sum_avg.nc"
  gphys = 
    GPhys::NetCDF_IO.open("#{$gt3dir}/mlsh/#{item}", "slr").cut(true,true,0)

  data = VArray.new(gphys.data.val).rename("sh_slw")
  data[true,-1..0] = data[true,0..-1] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","W m-2")
  data = data.set_att("ape_name","surface_longwave_flux")
  data = data.set_att("cell_methods", $cell_methods)

  gphys_ary.push(GPhys.new(grid,data))

  # evap (latent_heat) -----------------------------------
  
  item = "evap_sum_avg.nc"
  gphys = 
    GPhys::NetCDF_IO.open("#{$gt3dir}/mlsh/#{item}", "evap").cut(true,true,0)  
  
  data = VArray.new(gphys.data.val).rename("sh_slh")
  data[true,-1..0] = data[true,0..-1] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","W m-2")
  data = data.set_att("ape_name","surface_upward_latent_heat_flux")
  data = data.set_att("cell_methods", $cell_methods)
  
  gphys_ary.push(GPhys.new(grid,data))

  # evap (evap) ----------------------------------------
  
  item = "evap_sum_avg.nc"
  gphys = 
    GPhys::NetCDF_IO.open("#{$gt3dir}/mlsh/#{item}", "evap").cut(true,true,0)
  
  data = VArray.new(gphys.data.val*0.4*10**(-6)).rename("sh_evap")
  data[true,-1..0] = data[true,0..-1] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","kg m-2 s-1")
  data = data.set_att("ape_name","evaporation_flux")
  data = data.set_att("cell_methods", $cell_methods)
  
  gphys_ary.push(GPhys.new(grid,data))

  # sens ----------------------------------------------
  
  item = "sens_sum_avg.nc"
  gphys = 
    GPhys::NetCDF_IO.open("#{$gt3dir}/mlsh/#{item}", "sens").cut(true,true,0) 

  data = VArray.new(gphys.data.val).rename("sh_ssh")
  data[true,-1..0] = data[true,0..-1] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","W m-2")
  data = data.set_att("ape_name","surface_upward_sensible_heat_flux")
  data = data.set_att("cell_methods", $cell_methods)
  
  gphys_ary.push(GPhys.new(grid,data))

  # tauu ----------------------------------------------
  
  item = "taux_sum_avg.nc"
  gphys = 
    GPhys::NetCDF_IO.open("#{$gt3dir}/mlsh/#{item}", "taux").cut(true,true,0) 

  data = VArray.new(gphys.data.val).rename("sh_tauu")
  data[true,-1..0] = data[true,0..-1] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","Pa")
  data = data.set_att("ape_name","surface_downward_eastward_stress")
  data = data.set_att("cell_methods", $cell_methods)
  
  gphys_ary.push(GPhys.new(grid,data))

  # tauv ----------------------------------------------
  
  item = "tauy_sum_avg.nc"
  gphys = 
    GPhys::NetCDF_IO.open("#{$gt3dir}/mlsh/#{item}", "tauy").cut(true,true,0)  

  data = VArray.new(gphys.data.val).rename("sh_tauv")
  data[true,-1..0] = data[true,0..-1] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","Pa")
  data = data.set_att("ape_name","surface_downward_northward_stress")
  data = data.set_att("cell_methods", $cell_methods)
  
  gphys_ary.push(GPhys.new(grid,data))

  # ps ----------------------------------------------
  
  item = "ps_out_avg.nc"
  gphys = 
    GPhys::NetCDF_IO.open("#{$gt3dir}/mlsh/#{item}", "ps").cut(true,true,0)  
  
  data = VArray.new(gphys.data.val*100).rename("sh_ps")
  data[true,-1..0] = data[true,0..-1] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","Pa")
  data = data.set_att("ape_name","surface_air_pressure")
  data = data.set_att("cell_methods", "time: mean (interval: 6 hours comment: averaged over 3-year period following 6-month spin-up)")
  
  gphys_ary.push(GPhys.new(grid,data))


  # NetCDF ½ñ¤­¹þ¤ß ================================================

  f=NetCDF.create("#{$ncdir}/#{$ncfile_head}_SH_#{$sst}.nc")

  gphys_ary.each{ |gphys|

    GPhys::NetCDF_IO.write( f, gphys )
    
  }

  f.put_att("Conventions", "CF-1.0")
  f.put_att("title","Aqua Planet: Single-Level 2-D Means from \'#{$sst}\' Experiment")
  f.put_att("history", "Original data produced: #{Time.now} on NIES SX6; time-mean calculated for APE SH standard output")
  f.put_att("institution", "GFD Dennou Club")
  f.put_att("source","agcm5.3")
  f.close

end

# sub() ========================================================
def ncfile_ml_make

# grid =========================================================

  item = "u_out_avg.nc"
  gphys = GPhys::NetCDF_IO.open("#{$gt3dir}/mlsh/#{item}", "u")

  g0 = VArray.new(gphys.grid_copy.axis(0).pos.val ).rename("lon")
  g0 = g0.set_att("standard_name","longitude")
  g0 = g0.set_att("units","degrees_east")
  g0 = Axis.new().set_pos(g0)

  g1 = VArray.new(gphys.grid_copy.axis(1).pos.val ).rename("lat")
  g1[-1..0] = g1[0..-1] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  g1 = g1.set_att("standard_name","latitude")
  g1 = g1.set_att("units","degrees_north")
  g1 = Axis.new().set_pos(g1)

  g2 = [ 1000.0, 925.0, 850.0, 700.0, 600.0, 500.0, 400.0, 300.0, 
    250.0, 200.0, 150.0, 100.0, 70.0, 50.0, 30.0, 20.0, 10.0 ]
  g2 = NArray.to_na(g2)
  g2 = VArray.new( g2 * 100 ).rename("plev")
  g2 = g2.set_att("standard_name","air_pressure")
  g2 = g2.set_att("units","Pa")
  g2 = Axis.new().set_pos(g2)

  grid = Grid.new(g0,g1,g2)

# variable ===================================================

  # variable common ---------------------------------------------

  $cell_methods = "time: mean (interval: 6 hours comment: averaged over 3-year period following 6-month spin-up) longitude: mean"

  gphys_ary = []

  item = "ps_out_avg.nc"
  ps = 
    GPhys::NetCDF_IO.open("#{$gt3dir}/mlsh/#{item}", "ps").cut(true,true,0)
  
  # u ----------------------------------------------------
  
  print "  ml_u start\n"
  item = "u_out_avg.nc"
  gphys = 
    GPhys::NetCDF_IO.open("#{$gt3dir}/mlsh/#{item}", "u").cut(true,true,true,0)
  gphys = gphys.gts2p(ps)
  data = VArray.new(gphys.data.val).rename("ml_u")
  data[true,-1..0,true] = data[true,0..-1,true] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","m s-1")
  data = data.set_att("ape_name","eastward_wind")
  data = data.set_att("cell_methods", $cell_methods)

  gphys_ary.push(GPhys.new(grid,data))

  # v ----------------------------------------------------
  
  print "  ml_v start\n"
  item = "v_out_avg.nc"
  gphys = 
    GPhys::NetCDF_IO.open("#{$gt3dir}/mlsh/#{item}", "v").cut(true,true,true,0)
  gphys = gphys.gts2p(ps)
  data = VArray.new(gphys.data.val).rename("ml_v")
  data[true,-1..0,true] = data[true,0..-1,true] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","m s-1")
  data = data.set_att("ape_name","northward_wind")
  data = data.set_att("cell_methods", $cell_methods)

  gphys_ary.push(GPhys.new(grid,data))

  # t ----------------------------------------------------
  
  print "  ml_t start\n"
  item = "t_out_avg.nc"
  gphys = 
    GPhys::NetCDF_IO.open("#{$gt3dir}/mlsh/#{item}", "t").cut(true,true,true,0)
  gphys = gphys.gts2p(ps)  
  data = VArray.new(gphys.data.val).rename("ml_t")
  data[true,-1..0,true] = data[true,0..-1,true] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","K")
  data = data.set_att("ape_name","air_temperature")
  data = data.set_att("cell_methods", $cell_methods)

  gphys_ary.push(GPhys.new(grid,data))

  # om ----------------------------------------------------

  print "  ml_om start\n"
  item = "sigdot_out_avg.nc"
  gphys = 
    GPhys::NetCDF_IO.open("#{$gt3dir}/mlsh/#{item}", "sigdot").
    cut(true,true,true,0)
  gphys = gphys.gts2p(ps)
  data = VArray.new(gphys.data.val*ps.data.val*100).rename("ml_om")
  data[true,-1..0,true] = data[true,0..-1,true] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","Pa s-1")
  data = data.set_att("ape_name","omega")
  data = data.set_att("cell_methods", $cell_methods)

  gphys_ary.push(GPhys.new(grid,data))

  # phi ----------------------------------------------------
  
  print "  ml_phi start\n"
  item = "gph_out_avg.nc"
  gphys = 
    GPhys::NetCDF_IO.open("#{$gt3dir}/mlsh/#{item}", "z").
    cut(true,true,true,0)
  gphys = gphys.gts2p(ps)
  data = VArray.new(gphys.data.val).rename("ml_phi")
  data[true,-1..0,true] = data[true,0..-1,true] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","m")
  data = data.set_att("ape_name","geopotential_height")
  data = data.set_att("cell_methods", $cell_methods)

  gphys_ary.push(GPhys.new(grid,data))

  # q ----------------------------------------------------
  
  print "  ml_q start\n"
  item = "q_out_avg.nc"
  gphys = 
    GPhys::NetCDF_IO.open("#{$gt3dir}/mlsh/#{item}", "q").
    cut(true,true,true,0)
  gphys = gphys.gts2p(ps)  
  data = VArray.new(gphys.data.val).rename("ml_q")
  data[true,-1..0,true] = data[true,0..-1,true] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","1")
  data = data.set_att("ape_name","specific_humidity")
  data = data.set_att("cell_methods", $cell_methods)

  gphys_ary.push(GPhys.new(grid,data))

  # rh ----------------------------------------------------
  
  print "  ml_rh start\n"
  item = "relh_out_avg.nc"
  gphys = 
    GPhys::NetCDF_IO.open("#{$gt3dir}/mlsh/#{item}", "rh").
    cut(true,true,true,0)
  gphys = gphys.gts2p(ps)  
  data = VArray.new(gphys.data.val * 100 ).rename("ml_rh")
  data[true,-1..0,true] = data[true,0..-1,true] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","1")
  data = data.set_att("ape_name","relative_humidity")
  data = data.set_att("cell_methods", $cell_methods)

  gphys_ary.push(GPhys.new(grid,data))


  # NetCDF ½ñ¤­¹þ¤ß ================================================

  print "  nc create start\n"
  f=NetCDF.create("#{$ncdir}/#{$ncfile_head}_ML_#{$sst}.nc")

  gphys_ary.each{ |gphys|

    GPhys::NetCDF_IO.write( f, gphys )
    
  }

  f.put_att("Conventions", "CF-1.0")
  f.put_att("title","Aqua Planet: Multiple-Level 3-D Means from \'#{$sst}\' Experiment")
  f.put_att("history", "Original data produced: #{Time.now} on NIES SX6; time-mean calculated for APE SH standard output")
  f.put_att("institution", "GFD Dennou Club")
  f.put_att("source","agcm5.3")
  f.close

end

# sub() ========================================================
def ncfile_tr_make

# grid =========================================================

  item = "ps_out.nc"
  gphys = GPhys::NetCDF_IO.open("#{$gt3dir}/tr/0002/#{item}", "ps")

  g0 = VArray.new(gphys.grid_copy.axis(0).pos.val ).rename("lon")
  g0 = g0.set_att("standard_name","longitude")
  g0 = g0.set_att("units","degrees_east")
  g0 = Axis.new().set_pos(g0)


  g1 = VArray.new(gphys.grid_copy.axis(1).pos.val ).rename("lat")
  g1[-1..0] = g1[0..-1] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  g1 = g1.set_att("standard_name","latitude")
  g1 = g1.set_att("units","degrees_north")
  g1 = Axis.new().set_pos(g1)

  g2 = VArray.new( NArray.sfloat(1440).indgen!(1)*0.25 ).rename("time")
  g2 = g2.set_att("standard_name","time")
  g2 = g2.set_att("units","days since 0000-01-01")
  g2 = g2.set_att("bounds","time_bnds")
  g2 = Axis.new().set_pos(g2)

  grid = Grid.new(g0,g1,g2)

# variable ===================================================

  # variable common ---------------------------------------------

  $cell_methods = "time: mean (interval: accumulation at every time-step)"

  gphys_ary = []

  # rain ----------------------------------------------------
  
  print "  tr_tppn start\n"
  item = "rain_sum.nc"
  
  file = ["#{$gt3dir}/tr/0002/#{item}","#{$gt3dir}/tr/0003/#{item}",
    "#{$gt3dir}/tr/0004/#{item}","#{$gt3dir}/tr/0005/#{item}",
    "#{$gt3dir}/tr/0006/#{item}","#{$gt3dir}/tr/0007/#{item}"]
  gphys = GPhys::NetCDF_IO.open(file, "rain")[true,true,-1440..-1]
  
  data = VArray.new(gphys.data.val*0.4*10**(-6)).rename("tr_tppn")
  data[true,-1..0,true] = data[true,0..-1,true] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","kg m-2 s-1")
  data = data.set_att("ape_name","precipitation_flux")
  data = data.set_att("cell_methods", "time: mean (interval: accumulation at every time-step)")
  
  gphys_ary.push(GPhys.new(grid,data))
  
  # olr ----------------------------------------------------
  
  print "  tr_lw_toa start\n"
  item = "olr_sum.nc"
  
  file = ["#{$gt3dir}/tr/0002/#{item}","#{$gt3dir}/tr/0003/#{item}",
    "#{$gt3dir}/tr/0004/#{item}","#{$gt3dir}/tr/0005/#{item}",
    "#{$gt3dir}/tr/0006/#{item}","#{$gt3dir}/tr/0007/#{item}"]
  gphys = GPhys::NetCDF_IO.open(file, "olr")[true,true,-1440..-1]
  
  data = VArray.new(gphys.data.val).rename("tr_lw_toa")
  data[true,-1..0,true] = data[true,0..-1,true] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","W m-2")
  data = data.set_att("ape_name","toa_outgoing_longwave_flux")
  data = data.set_att("cell_methods", "time: mean (interval: accumulation at every time-step)")
  
  gphys_ary.push(GPhys.new(grid,data))
    
  # om500 ----------------------------------------------------
  
  print "  tr_om500 start\n"
  item = "om500_out.nc"
  
  file = ["#{$gt3dir}/tr/0002/#{item}","#{$gt3dir}/tr/0003/#{item}",
    "#{$gt3dir}/tr/0004/#{item}","#{$gt3dir}/tr/0005/#{item}",
    "#{$gt3dir}/tr/0006/#{item}","#{$gt3dir}/tr/0007/#{item}"]
  gphys = GPhys::NetCDF_IO.open(file, "omg")[true,true,-1440..-1]
  
  data = VArray.new(gphys.data.val).rename("tr_om500")
  data[true,-1..0,true] = data[true,0..-1,true] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","Pa s-1")
  data = data.set_att("ape_name","omega")
  data = data.set_att("cell_methods", "time: point")
  
  gphys_ary.push(GPhys.new(grid,data))
  
  # u250 ----------------------------------------------------
  
  print "  tr_u250 start\n"
  item = "u250_out.nc"
  
  file = ["#{$gt3dir}/tr/0002/#{item}","#{$gt3dir}/tr/0003/#{item}",
    "#{$gt3dir}/tr/0004/#{item}","#{$gt3dir}/tr/0005/#{item}",
    "#{$gt3dir}/tr/0006/#{item}","#{$gt3dir}/tr/0007/#{item}"]
  gphys = GPhys::NetCDF_IO.open(file, "u")[true,true,-1440..-1]
  
  data = VArray.new(gphys.data.val).rename("tr_u250")
  data[true,-1..0,true] = data[true,0..-1,true] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","m s-1")
  data = data.set_att("ape_name","eastward_wind")
  data = data.set_att("cell_methods", "time: point")
  
  gphys_ary.push(GPhys.new(grid,data))
  
  # v250 ----------------------------------------------------
  
  print "  tr_v250 start\n"
  item = "v250_out.nc"
  
  file = ["#{$gt3dir}/tr/0002/#{item}","#{$gt3dir}/tr/0003/#{item}",
    "#{$gt3dir}/tr/0004/#{item}","#{$gt3dir}/tr/0005/#{item}",
    "#{$gt3dir}/tr/0006/#{item}","#{$gt3dir}/tr/0007/#{item}"]
  gphys = GPhys::NetCDF_IO.open(file, "v")[true,true,-1440..-1]
  
  data = VArray.new(gphys.data.val).rename("tr_v250")
  data[true,-1..0,true] = data[true,0..-1,true] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","m s-1")
  data = data.set_att("ape_name","northward_wind")
  data = data.set_att("cell_methods", "time: point")
  
  gphys_ary.push(GPhys.new(grid,data))
  
  # mslp ----------------------------------------------------
  
  print "  tr_mslp start\n"
  item = "ps_out.nc"
  
  file = ["#{$gt3dir}/tr/0002/#{item}","#{$gt3dir}/tr/0003/#{item}",
    "#{$gt3dir}/tr/0004/#{item}","#{$gt3dir}/tr/0005/#{item}",
    "#{$gt3dir}/tr/0006/#{item}","#{$gt3dir}/tr/0007/#{item}"]
  gphys = GPhys::NetCDF_IO.open(file, "ps")[true,true,-1440..-1]
  
  data = VArray.new(gphys.data.val*100).rename("tr_mslp")
  data[true,-1..0,true] = data[true,0..-1,true] # °ÞÅÙ¼´¤ÎÈ¿Å¾
  data = data.set_att("units","Pa")
  data = data.set_att("ape_name","air_pressure_at_sea_level")
  data = data.set_att("cell_methods", "time: point")
  
  gphys_ary.push(GPhys.new(grid,data))
  

#        float time_bnds(time, bnd) ;
#                time_bnds:long_name = "time interval endpoints" ;


  # NetCDF ½ñ¤­¹þ¤ß ================================================

  print "  nc create start\n"
  f=NetCDF.create("#{$ncdir}/#{$ncfile_head}_TR_#{$sst}.nc")

  gphys_ary.each{ |gphys|

    GPhys::NetCDF_IO.write( f, gphys )
    
  }

  f.put_att("Conventions", "CF-1.0")
  f.put_att("title","Aqua Planet: Transients from \'#{$sst}\' Experiment")
  f.put_att("history", "Original data produced: #{Time.now} on NIES SX6; translated format to conform with APE TR standard output")
  f.put_att("institution", "GFD Dennou Club")
  f.put_att("source","agcm5.3")
  f.close

end





