#!/usr/bin/env ruby
# ----------------------------------------------
# local load path

 $local_path = '/home/yukiko/work/ape/yukiko/lib'
$: << $local_path

# ----------------------------------------------
# 必要なライブラリ, モジュールの読み込み

load "#{$local_path}/ape-view.rb"

END{

host = "eva01"
 a = Ape_mkfig.new 3
# a = Ape_mkfig.new 2
# a = Ape_mkfig.new 1

  ["con","a","b","c","d"].each{ |item|
    $expid = item
    $cum = "adj"
    set_path
#    a.nc_ml_agcm5

    $expid = item
    $cum = "kuo"
    set_path
#    a.nc_ml_agcm5

  }

  $cum = "adj"
  set_path
  $file_label = $cum
#  a.nc_sh_agcm5
#  a.nc_ml_lat0_agcm5

  $cum = "kuo"
  set_path
  $file_label = $cum
#  a.nc_sh_agcm5
#  a.nc_ml_lat0_agcm5


}

# ----------------------------------------------


def set_path
#  $fig_path = "/home/yukiko/work/yukiko/eva01-home/work/aqua-mradl-ronbun/figs/tmp/"
  $fig_path = "/home/yukiko/work/aqua3d/yukiko/figs/tmp/"
  $ncfile_path = "/home/yukiko/work/aqua3d/yukiko/mradl/data/tmean/"

#  $file_label = "AGCM5_#{$cum}_#{$expid}"

  if $expid == "con"
    $file_label = "#{$cum}_control"
#    $file_label = "#{$cum}_con"
  else
    $file_label = "#{$cum}_#{$expid}"
    $expid = "mradlA" + $expid
  end

  if $cum == "kuo"
    $var_expid = "kuo_" + $expid
  else
    $var_expid =  $expid
  end

  $groupid = "AGCM5-#{$cum}-#{$expid}"
end

# ----------------------------------------------

class Ape_mkfig
  # #{$groupid}_TR_control.nc
  def nc_ml_agcm5

    netcdf_var = 
      { "brunt"   => "n_2",
      "evap" => "#{$var_expid.downcase}_evap",  
      "gph" => "z",
      "lrad" => "lrad", 
      "olr" => "#{$var_expid.downcase}_olr",  
      "ps" => "ps",
      "q" => "#{$var_expid.downcase}_q", 
     "qcnd" => "#{$var_expid.downcase}_qcnd", 
     "qradl" => "#{$var_expid.downcase}_qradl", 
     "qrads" => "#{$var_expid.downcase}_qrads",
     "qsat" => "qsat", 
     "qvdf" => "qvdf", 
     "rain" => "#{$var_expid.downcase}_rain", 
     "relh" => "rh", 
     "scnd" => "scnd", 
     "sens" => "#{$var_expid.downcase}_sens", 
     "sigdot" => "sigdot", 
     "slr" => "#{$var_expid.downcase}_slr", 
     "strm" => "mstrm", 
     "t" => "#{$var_expid.downcase}_t", 
     "theta" => "theta", 
     "thetae" => "thetae", 
     "thetaesat" => "thetae", 
     "u" => "u", 
      "v"    => "v"  }
    
    if $cum == "kuo" && $expid =~ /mradlA/
      netcdf_var["qradl"] = "#{$var_expid.downcase}_qrad"
      netcdf_var["qrads"] = "#{$var_expid.downcase}_qrad"
    end

    netcdf_var_rename = 
      { "brunt"   => "ml_brunt",
      "evap" => "sh_evap",  
      "gph" => "ml_phi",
      "lrad" => "ml_lrad", 
      "olr" => "sh_olr",  
      "ps" => "sh_ps",
      "q" => "ml_q",
     "qcnd" => "ml_qcnd", 
     "qradl" => "ml_qradl",
     "qrads" => "ml_qrads",
     "qrad" => "ml_qrad",
     "qsat" => "ml_qsat", 
     "qvdf" => "ml_qvdf", 
     "rain" => "sh_tppn", 
     "relh" => "ml_rh", 
     "scnd" => "ml_scnd", 
     "sens" => "sh_ssh", 
     "sigdot" => "ml_sigdot", 
     "slr" => "sh_slr", 
     "strm" => "ml_psi", 
     "t" => "ml_t", 
     "theta" => "ml_theta", 
     "thetae" => "ml_thetae", 
     "thetaesat" => "ml_thetaesat", 
     "u" => "ml_u", 
      "v"    => "ml_v"  }

    netcdf_apename = 
      { "brunt"   => "stability",
      "evap" => "evaporation_flux",  
      "gph" => "geopotential_height",
      "lrad" => "longwave_radiation_flux", 
      "olr" => "outgoing_longwave_flux",  
      "ps" => "air_pressure_at_sea_level",
      "q" => "specific_humidity", 
     "qcnd" => "condensation_heating", 
     "qradl" => "longwave_heating",
     "qrads" => "shortwave_heating",
     "qrad" => "radiative_heating",
     "qsat" => "saturation_humidity", 
     "qvdf" => "diffusive_heating", 
     "rain" => "precipitation_flux", 
     "relh" => "relative_humidity", 
     "scnd" => "condensation_moistning", 
     "sens" => "surface_upward_sensible_heat_flux", 
     "sigdot" => "sigma-vertical_velocity", 
     "slr" => "surface_longwave_flux", 
     "strm" => "mass_stream_function", 
     "t" => "temperature",
     "theta" => "potential_temperature", 
     "thetae" => "equivalent_potential_temperature", 
     "thetaesat" => "sat._equiv._pot._temperature", 
     "u" => "eastward_wind",
      "v"    => "northward_wind"  }

    netcdf_units = 
      { "brunt"   => "s-1",
      "evap" => "W m-2",  
      "gph" => "m",
      "lrad" => "W m-2", 
      "olr" => "W m-2", 
      "ps" => "Pa",  #hPa
      "q" => "1", 
     "qcnd" => "K s-1", 
     "qradl" => "K s-1", 
     "qrads" => "K s-1", 
     "qrad" => "K s-1", 
     "qsat" => "1", 
     "qvdf" => "K s-1", 
     "rain" => "kg m-2 s-1",
     "relh" => "1", 
     "scnd" => "s-1", 
     "sens" => "W m-2", 
     "sigdot" => "s-1", 
     "slr" => "W m-2", 
     "strm" => "Kg s-1", 
     "t" => "K",
     "theta" => "K", 
     "thetae" => "K", 
     "thetaesat" => "K", 
     "u" => "m s-1",
      "v"    => "m s-1"  }

    [ "brunt", "gph", "q", "qcnd", "qradl", 
      "qrads", "qsat", "qvdf", "relh", "scnd", "sigdot",
      "t", "theta", "thetae", "thetaesat", "u", "v" , "strm" ].each { |varname|
      
      @data = Ape.new("#{$ncfile_path}/#{$cum}700#{$expid}1000/#{varname}.nc")
      
      name = netcdf_var_rename[varname]      
      gphys = @data.gphys_open(netcdf_var[varname]).rename(name)
      gphys = gphys.
        set_att("ape_name",netcdf_apename[varname]).
        set_att("units",netcdf_units[varname])

      gphys = gphys*9.8 if name == "ml_phi"
      if varname == "strm"
        mkfig_plot(gphys[true,true,0].set_lost_axes("(mean) time, zonal") )
      else
        mkfig_plot(gphys[true,true,true,0].mean(0).set_lost_axes("(mean) time, zonal") )
      end
      
    }

  end

  def nc_sh_agcm5
    
    netcdf_var_rename = 
      { "brunt"   => "ml_brunt",
      "evap" => "sh_evap",  
      "gph" => "ml_phi",
      "lrad" => "ml_lrad", 
      "olr" => "sh_olr",  
      "ps" => "sh_ps",
      "q" => "ml_q",
     "qcnd" => "ml_qcnd", 
     "qradl" => "ml_qradl",
     "qrads" => "ml_qrads",
     "qsat" => "ml_qsat", 
     "qvdf" => "ml_qvdf", 
     "rain" => "sh_tppn", 
     "relh" => "ml_rh", 
     "scnd" => "ml_scnd", 
     "sens" => "sh_ssh", 
     "sigdot" => "ml_sigdot", 
     "slr" => "sh_slr", 
     "strm" => "ml_psi", 
     "t" => "ml_t", 
     "theta" => "ml_theta", 
     "thetae" => "ml_thetae", 
     "thetaesat" => "ml_thetaesat", 
     "u" => "ml_u", 
      "v"    => "ml_v"  }

    netcdf_apename = 
      { "brunt"   => "stability",
      "evap" => "evaporation_flux",  
      "gph" => "geopotential_height",
      "lrad" => "longwave_radiation_flux", 
      "olr" => "outgoing_longwave_flux",  
      "ps" => "air_pressure_at_sea_level",
      "q" => "specific_humidity", 
     "qcnd" => "condensation_heating", 
     "qradl" => "longwave_heating",
     "qrads" => "shortwave_heating",
     "qsat" => "saturation_humidity", 
     "qvdf" => "diffusive_heating", 
     "rain" => "precipitation_flux", 
     "relh" => "relative_humidity", 
     "scnd" => "condensation_moistning", 
     "sens" => "surface_upward_sensible_heat_flux", 
     "sigdot" => "sigma-vertical_velocity", 
     "slr" => "surface_longwave_flux", 
     "strm" => "mass_stream_function", 
     "t" => "temperature",
     "theta" => "potential_temperature", 
     "thetae" => "equivalent_potential_temperature", 
     "thetaesat" => "sat._equiv._pot._temperature", 
     "u" => "eastward_wind",
      "v"    => "northward_wind"  }

    netcdf_units = 
      { "brunt"   => "s-1",
      "evap" => "W m-2",  
      "gph" => "m",
      "lrad" => "W m-2", 
      "olr" => "W m-2", 
      "ps" => "Pa",  #hPa
      "q" => "1", 
     "qcnd" => "K s-1", 
     "qradl" => "K s-1", 
     "qrads" => "K s-1", 
     "qsat" => "1", 
     "qvdf" => "K s-1", 
     "rain" => "kg m-2 s-1",
     "relh" => "1", 
     "scnd" => "s-1", 
     "sens" => "W m-2", 
     "sigdot" => "s-1", 
     "slr" => "W m-2", 
     "strm" => "Kg s-1", 
     "t" => "K",
     "theta" => "K", 
     "thetae" => "K", 
     "thetaesat" => "K", 
     "u" => "m s-1",
      "v"    => "m s-1"  }

    exp_ary = ["con", "a", "b", "c", "d"]
    
    [ "evap", "olr", "ps", "rain", "sens", "slr"].each { |varname|
      
      gphys_ary = []

      exp_ary.each{ |item|

        $expid = ""
        if item == "con"
          $expid = item
        else
          $expid = "mradlA#{item}" 
        end
        if $cum == "kuo"
          $var_expid = "kuo_" + $expid
        else
          $var_expid =  $expid
        end
        
        netcdf_var =  { 
          "evap" => "#{$var_expid.downcase}_evap",  
          "olr" => "#{$var_expid.downcase}_olr",  
          "ps" => "ps",
          "rain" => "#{$var_expid.downcase}_rain", 
          "sens" => "#{$var_expid.downcase}_sens", 
          "slr" => "#{$var_expid.downcase}_slr" }

        @data = Ape.new("#{$ncfile_path}/#{$cum}700#{$expid}1000/#{varname}.nc")
      
        name = netcdf_var_rename[varname]
        gphys = @data.gphys_open(netcdf_var[varname]).rename(name)
        gphys = gphys.
          set_att("ape_name",netcdf_apename[varname]).
          set_att("units",netcdf_units[varname])

        gphys = gphys * 100.0	if name == "sh_ps"
        gphys = gphys *0.4*10**(-6)	if name == "sh_tppn"
        gphys = gphys.rename("#{gphys.name}_zonal")

        item = "control" if item == "con" 
        gphys_ary.push(gphys[true,true,0].mean(0).
                         set_att("line_name","#{$cum}_#{item}").
                         set_lost_axes("(mean) time, zonal")
                       )
      }
      mkfig_plot(gphys_ary)
    }

  end

  def nc_ml_lat0_agcm5
    
    netcdf_var_rename = 
      { "qcnd" => "ml_qcnd", 
      "qradl" => "ml_qradl",
      "qrads" => "ml_qrads",
      "qrad" => "ml_qrad",
      "u" => "ml_u" }

    netcdf_apename = 
      { "qcnd" => "condensation_heating", 
     "qradl" => "longwave_heating",
     "qrads" => "shortwave_heating",
     "qrad" => "radiative_heating",
     "u" => "eastward_wind"  }

    netcdf_units = 
      { "qcnd" => "K s-1", 
     "qradl" => "K s-1", 
     "qrads" => "K s-1", 
     "qrad" => "K s-1", 
     "u" => "m s-1" }

    exp_ary = ["con", "a", "b", "c", "d"]
    
    [ "qcnd", "qradl","qrads","qrad", "u"].each { |varname|
      
      gphys_ary = []

      exp_ary.each{ |item|

        $expid = ""
        if item == "con"
          $expid = item
        else
          $expid = "mradlA#{item}" 
        end
        if $cum == "kuo"
          $var_expid = "kuo_" + $expid
        else
          $var_expid =  $expid
        end
        
        netcdf_var = { 
          "qcnd" => "#{$var_expid.downcase}_qcnd", 
          "qradl" => "#{$var_expid.downcase}_qradl", 
          "qrads" => "#{$var_expid.downcase}_qrads", 
          "u" => "u" 
        }

        if $cum == "kuo" && $expid =~ /mradlA/
          netcdf_var["qradl"] = "#{$var_expid.downcase}_qrad"
          netcdf_var["qrads"] = "#{$var_expid.downcase}_qrad"
        end

        if varname == "qrad"

          name = netcdf_var_rename["qrad"]
          @data = Ape.new("#{$ncfile_path}/#{$cum}700#{$expid}1000/qradl.nc")
          gphys = @data.gphys_open(netcdf_var["qradl"])
          @data = Ape.new("#{$ncfile_path}/#{$cum}700#{$expid}1000/qrads.nc")
          gphys = (gphys +  @data.gphys_open(netcdf_var["qrads"]) ).
            rename(name)
        else
          @data = Ape.new("#{$ncfile_path}/#{$cum}700#{$expid}1000/#{varname}.nc")
          name = netcdf_var_rename[varname]
          gphys = @data.gphys_open(netcdf_var[varname]).rename(name)
         end

        gphys = gphys.
          set_att("ape_name",netcdf_apename[varname]).
          set_att("units",netcdf_units[varname])

        gphys = gphys.rename("#{gphys.name}_lat0")

        item = "control" if item == "con" 
        gphys_ary.push(gphys.cut(true,0,true,true)[true,true,0].mean(0).
                         set_att("line_name","#{$cum}_#{item}").
                         set_lost_axes("(mean) time, zonal").
                         add_lost_axes("latitude=1.395307")
                       )
      }
      mkfig_plot(gphys_ary)
    }

  end

end

## ----------------------------------------------------------------------
class Ape
  
  def mkdump(gphys, gphys_u=nil, gphys_v=nil)
    gropn(3) if $gropn == nil

    if gphys_u == nil || gphys_v == nil then
      plot(gphys)
    else
      plot(gphys, gphys_u, gphys_v)
    end
    
    gphys_ary = gphys
    gphys = gphys[0]     if gphys.class == Array
    
    file_name = "#{$file_label.gsub("control","con")}_#{gphys.name}.gif"
    `rm dcl_* tmp.pnm`  
    plot(gphys_ary)
    puts "#{$fig_path}#{file_name}"
    `for file in *.xwd;do xwdtopnm ${file} | pnmcut 2 2 904 654 > tmp.pnm;done`
#    `for file in *.xwd;do xwdtopnm ${file} | pnmcut 10 2 840 630 > tmp.pnm;done`
    `ppmtogif tmp.pnm > #{$fig_path}#{file_name}`
    `rm dcl_* tmp.pnm`  

    $file_name = $pre_file

  end

  def __show_line_index(str_ary,line_index_ary, line_type_ary, x=0.15, y=0.1)
    charsize = 0.8 * DCL.uzpget('rsizec1')
    len = 0.04     # 線の長さ
    dvx = 0.03
    dvy = charsize*1.6
    
    raise TypeError,"Array expected" if ! str_ary.is_a?(Array)
    vxmin,vxmax,vymin,vymax = DCL.sgqvpt
    vx = 0.10
    vy = 0.18 - charsize/2
    str_ary.size.times{|num|
      DCL::sgplzv([vx, vx + len],[vy, vy], line_type_ary[num],
		  line_index_ary[num])
      DCL::sgtxzv(vx + len + 0.01 ,vy,str_ary[num],
                  charsize, 0, -1, 13 )
      vy -= dvy
      if num == 1
        vx = 0.29
        vy = 0.18 - charsize/2
      elsif num == 3
        vx = 0.48
        vy = 0.18 - charsize/2
      elsif num == 5
        vx = 0.67
        vy = 0.18 - charsize/2
      end
    }
    nil
  end


  # トーン, コンターパターンの設定 (変数固有)
  def plot_set(gphys)

    # コンターを描かない条件
    if gphys.name =~ /tr_/ || gphys.name =~ /horinout/  
      $cont_flag = false 
    else
      $cont_flag = true
    end

    # トーンを描かない条件
    if gphys.name == "comp_point"
      $tone_flag = false 
    else
      $tone_flag = true
    end

    # 初期化
    $fig_set_hash = {"window" => nil}
    $line_hash = { 'exchange'=>false, 'index'=>3 }


    if gphys.name == "ml_brunt"
      levels = NArray[DCL.glpget('rmiss'), 0.001, 0.002, 0.003, 0.004, 0.005, 0.006, DCL.glpget('rmiss')]
      patterns = NArray[30999, 35999, 40999, 55999, 70999, 75999, 85999]
      cont_lev, line_type, label  = cont_lev_set(levels)
      $tone_hash = { 'patterns'=> patterns, 'levels'=>levels }
      $cont_hash = {'levels' => cont_lev, 'index'=> [2,1], 'label'=> label, 
	'line_type'=> line_type }

    elsif gphys.name == "ml_phi"
      levels = NArray[0, 5e+4, 10e+4, 15e+4, 20e+4, 25e+4, 30e+4, DCL.glpget('rmiss')]
      patterns = NArray[30999, 35999, 40999, 55999, 70999, 75999, 85999]
      cont_lev, line_type, label  = cont_lev_set(levels)
      $tone_hash = { 'patterns'=> patterns, 'levels'=>levels }
      $cont_hash = {'levels' => cont_lev, 'index'=> [2,1], 'label'=> label, 
	'line_type'=> line_type }

    elsif gphys.name == "ml_psi"
      levels = NArray[DCL.glpget('rmiss'), -15e10 ,-10e10, -5e10, 0, 5e10, 10e10, DCL.glpget('rmiss')]
      patterns = NArray[30999, 35999, 40999, 55999, 70999, 75999, 85999]
      cont_lev, line_type, label  = cont_lev_set(levels)
      $tone_hash = { 'patterns'=> patterns, 'levels'=>levels }
      $cont_hash = {'levels' => cont_lev, 'index'=> [2,1], 'label'=> label, 
#	'line_type'=> line_type, 'tonf'=>true }
	'line_type'=> line_type }

    elsif gphys.name == "ml_q"
      levels = NArray[0, 0.002, 0.004, 0.006, 0.008, 0.01, 0.012, DCL.glpget('rmiss')]
      patterns = NArray[30999, 35999, 40999, 55999, 70999, 75999, 85999]
      cont_lev, line_type, label  = cont_lev_set(levels)
      $tone_hash = { 'patterns'=> patterns, 'levels'=>levels }
      $cont_hash = {'levels' => cont_lev, 'index'=> [2,1], 'label'=> label, 
	'line_type'=> line_type }


    elsif gphys.name == "ml_qcnd"
      levels = NArray[DCL.glpget('rmiss'), 0, 4e-6, 8e-6, 12e-6, 16e-6, 20e-6, DCL.glpget('rmiss') ]
      patterns = NArray[30999, 35999, 40999, 55999, 70999, 75999, 85999]
      cont_lev, line_type, label  = cont_lev_set(levels)
      $tone_hash = { 'patterns'=> patterns, 'levels'=>levels }
      $cont_hash = {'levels' => cont_lev, 'index'=> [2,1], 'label'=> label, 
	'line_type'=> line_type }


    elsif gphys.name == "ml_qradl"
      levels = NArray[DCL.glpget('rmiss'), -20e-6, -16e-6, -12e-6, -8e-6, -4e-6, 0, DCL.glpget('rmiss') ]
      patterns = NArray[30999, 35999, 40999, 55999, 70999, 75999, 85999]
      cont_lev, line_type, label  = cont_lev_set(levels)
      $tone_hash = { 'patterns'=> patterns, 'levels'=>levels }
      $cont_hash = {'levels' => cont_lev, 'index'=> [2,1], 'label'=> label, 
	'line_type'=> line_type }


    elsif gphys.name == "ml_qrads"
      levels = NArray[0.0, 2e-6, 4e-6, 6e-6, 8e-6, 10e-6, 12e-6, DCL.glpget('rmiss') ]
      patterns = NArray[30999, 35999, 40999, 55999, 70999, 75999, 85999]
      cont_lev, line_type, label  = cont_lev_set(levels)
      $tone_hash = { 'patterns'=> patterns, 'levels'=>levels }
      $cont_hash = {'levels' => cont_lev, 'index'=> [2,1], 'label'=> label, 
	'line_type'=> line_type }

    elsif gphys.name == "ml_qvdf"
      levels = NArray[DCL.glpget('rmiss'), -5e-6, 0, 5e-6, 10e-6, 15e-6, 20e-6, DCL.glpget('rmiss') ]
      patterns = NArray[30999, 35999, 40999, 55999, 70999, 75999, 85999]
      cont_lev, line_type, label  = cont_lev_set(levels)
      $tone_hash = { 'patterns'=> patterns, 'levels'=>levels }
      $cont_hash = {'levels' => cont_lev, 'index'=> [2,1], 'label'=> label, 
	'line_type'=> line_type }

    elsif gphys.name == "ml_qsat"
      levels = NArray[0, 0.003, 0.006, 0.009, 0.012, 0.015, 0.018, DCL.glpget('rmiss') ]
      patterns = NArray[30999, 35999, 40999, 55999, 70999, 75999, 85999]
      cont_lev, line_type, label  = cont_lev_set(levels)
      $tone_hash = { 'patterns'=> patterns, 'levels'=>levels }
      $cont_hash = {'levels' => cont_lev, 'index'=> [2,1], 'label'=> label, 
	'line_type'=> line_type }

    elsif gphys.name == "ml_rh"
      levels = NArray[0, 0.15, 0.30, 0.45, 0.60, 0.75, 0.90, 1]
      patterns = NArray[30999, 35999, 40999, 55999, 70999, 75999, 85999]
      cont_lev, line_type, label  = cont_lev_set(levels)
      $tone_hash = { 'patterns'=> patterns, 'levels'=>levels }
      $cont_hash = {'levels' => cont_lev, 'index'=> [2,1], 'label'=> label, 
	'line_type'=> line_type }

    elsif gphys.name == "ml_scnd"
      levels = NArray[DCL.glpget('rmiss'), -10e-9, -8e-9, -6e-9, -4e-9, -2e-9, 0, DCL.glpget('rmiss')]
      patterns = NArray[30999, 35999, 40999, 55999, 70999, 75999, 85999]
      cont_lev, line_type, label  = cont_lev_set(levels)
      $tone_hash = { 'patterns'=> patterns, 'levels'=>levels }
      $cont_hash = {'levels' => cont_lev, 'index'=> [2,1], 'label'=> label, 
	'line_type'=> line_type }

    elsif gphys.name == "ml_sigdot"
      levels = NArray[DCL.glpget('rmiss'), -4e-7, -3e-7, -2e-7, -1e-7, 0, 1e-7, DCL.glpget('rmiss')]
      patterns = NArray[30999, 35999, 40999, 55999, 70999, 75999, 85999]
      cont_lev, line_type, label  = cont_lev_set(levels)
      $tone_hash = { 'patterns'=> patterns, 'levels'=>levels }
      $cont_hash = {'levels' => cont_lev, 'index'=> [2,1], 'label'=> label, 
	'line_type'=> line_type }

    elsif gphys.name == "ml_t"
      levels = NArray.int(8).indgen!(0, 20)+180
      levels[0] = DCL.glpget('rmiss')
      patterns = NArray[25999, 30999, 40999, 55999, 70999, 75999, 85999]
      $tone_hash = { 'patterns'=> patterns, 'levels'=>levels }
      $cont_hash = { 'min'=>180, 'max'=>330, 'int'=>10 }

    elsif gphys.name == "ml_theta"
      levels = NArray[DCL.glpget('rmiss'), 280, 300, 320, 340, 360, 380, DCL.glpget('rmiss')]
      patterns = NArray[30999, 35999, 40999, 55999, 70999, 75999, 85999]
      cont_lev, line_type, label  = cont_lev_set(levels)
      $tone_hash = { 'patterns'=> patterns, 'levels'=>levels }
      $cont_hash = {'levels' => cont_lev, 'index'=> [2,1], 'label'=> label, 
	'line_type'=> line_type }

    elsif gphys.name == "ml_thetae"
      levels = NArray[DCL.glpget('rmiss'), 280, 300, 320, 340, 360, 380, DCL.glpget('rmiss')]
      patterns = NArray[30999, 35999, 40999, 55999, 70999, 75999, 85999]
      cont_lev, line_type, label  = cont_lev_set(levels)
      $tone_hash = { 'patterns'=> patterns, 'levels'=>levels }
      $cont_hash = {'levels' => cont_lev, 'index'=> [2,1], 'label'=> label, 
	'line_type'=> line_type }

    elsif gphys.name == "ml_thetaesat"
      levels = NArray[DCL.glpget('rmiss'), 280, 300, 320, 340, 360, 380, DCL.glpget('rmiss')]
      patterns = NArray[30999, 35999, 40999, 55999, 70999, 75999, 85999]
      cont_lev, line_type, label  = cont_lev_set(levels)
      $tone_hash = { 'patterns'=> patterns, 'levels'=>levels }
      $cont_hash = {'levels' => cont_lev, 'index'=> [2,1], 'label'=> label, 
	'line_type'=> line_type }

    elsif gphys.name == "ml_u"
      levels = NArray[DCL.glpget('rmiss'), -15, -5, 0, 5, 15, 25, DCL.glpget('rmiss')]
      patterns = NArray[30999, 35999, 40999, 55999, 70999, 75999, 85999]
      $tone_hash = { 'patterns'=> patterns, 'levels'=>levels }
      $cont_hash = {'min'=>-50,'int'=>2.5, 'max'=>70 }

    elsif gphys.name == "ml_v"
      levels = NArray[DCL.glpget('rmiss'), -1.5, -0.5, 0, 0.5, 1.5, DCL.glpget('rmiss')]
      patterns = NArray[30999,40999,55999,70999,75999,85999]
      $tone_hash = { 'patterns'=> patterns, 'levels'=>levels }
      $cont_hash = {'int'=>0.5, 'max'=> 5.0, 'min'=> -5.0}

    elsif gphys.name == "sh_evap_zonal"
      $fig_set_hash = { "window" => 
#	[gphys.axis(0).pos.val.min, gphys.axis(0).pos.val.max, 0, 10e-5] }
	[gphys.axis(0).pos.val.min, gphys.axis(0).pos.val.max, 0, 200] }

    elsif gphys.name == "sh_olr_zonal"
      $fig_set_hash = { "window" => 
	[gphys.axis(0).pos.val.min, gphys.axis(0).pos.val.max, 0, 500] }

    elsif gphys.name == "sh_ps_zonal"
      $fig_set_hash = { "window" => 
	[gphys.axis(0).pos.val.min, gphys.axis(0).pos.val.max, 90000, 105000]}
      $line_hash = { 'exchange'=>false, "index"=> 2 }

    elsif gphys.name == "sh_ssh_zonal"
      $fig_set_hash = { "window" => 
	[gphys.axis(0).pos.val.min, gphys.axis(0).pos.val.max, -10, 30] }

    elsif gphys.name == "sh_slr_zonal"
      $fig_set_hash = { "window" => 
	[gphys.axis(0).pos.val.min, gphys.axis(0).pos.val.max, 0, 500] }

    elsif gphys.name == "sh_tppn_zonal"
      $fig_set_hash = { "window" => 
	[gphys.axis(0).pos.val.min, gphys.axis(0).pos.val.max, 0, 10e-5] }

    # AGCM5 condensation heating
    elsif gphys.name == "ml_qcnd_lat0"
      $line_hash = { 'exchange'=>true,"index"=> 3, "type" => 1  }
      $fig_set_hash = { "window" => 
	[-1e-5, 5e-5, gphys.axis(0).pos.val.max, gphys.axis(0).pos.val.min]}

    # AGCM5 longwave heating
    elsif gphys.name == "ml_qrad_lat0" || gphys.name == "ml_qradl_lat0"  
      $line_hash = { 'exchange'=>true,"index"=> 3, "type" => 1  }
      $fig_set_hash = { "window" => 
	[-30e-6, 10e-6, gphys.axis(0).pos.val.max, gphys.axis(0).pos.val.min]}
    # AGCM5 shortwave heating
    elsif gphys.name == "ml_qrads_lat0" 
      $line_hash = { 'exchange'=>true,"index"=> 3, "type" => 1  }
      $fig_set_hash = { "window" => 
	[-5e-6, 20e-6, gphys.axis(0).pos.val.max, gphys.axis(0).pos.val.min]}

    # AGCM5 eastward wind
    elsif gphys.name == "ml_u_lat0" 
      $line_hash = { 'exchange'=>true,"index"=> 3, "type" => 1  }
      $fig_set_hash = { "window" => 
	[-30, 5, gphys.axis(0).pos.val.max, gphys.axis(0).pos.val.min]}

    elsif gphys.name =~ /pf_t_zonal/
      $line_hash = { 'exchange'=>true, "index"=> 3, "type" => 1  }
      $fig_set_hash = { "window" => 
          [-30e-6, 30e-6, gphys.axis(0).pos.val.max, gphys.axis(0).pos.val.min]}
    else
      plot_def(gphys)
    end

  end

end


