#!/usr/bin/env ruby
#
# 表題: 長波放射フラックスのお勉強
#
# 履歴: 2003/09/23 やまだ由
#       2003/10/01 やまだ由
#
# < 変数メモ(って途中までしかかいてないけど) >
#
# pres : 気圧 [半]
# tauq : 光学的厚さ, 水   [半] 
# taua : 光学的厚さ, 大気 [半]
# q    : 比湿 [整]
# pib  : \pi B [整]
# pib_g: \pi B (地面)
# rflux: 長波フラックス [半]
# trans: 透過係数
#
#

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

require "numru/ggraph"
include NumRu
include NMath


def mradl_dcl
  
  if $graph == 1 then 
    # 放射フラックスの図
    mradl_dclheat
  else
    # 放射加熱の図
    mradl_dclradl 
  end
  # gif, eps 変換
  mradl_dclps if $dcl_num == 1

end  

# ----------------------------------------------------------
# 放射フラックスの図

def mradl_dclradl 
  if $dcl_num == 1 then  
    DCL::gropn(2)
  else 
    DCL::gropn(1)
  end

  DCL::sgpset('lcorner',false)    # コーナーマークはつけない
  DCL::slmgn(0.0, 0.0, 0.0, 0.15)  # 描画マージン指定
  DCL::sgpset('lfprop',true)      # プロポーショナルフォントを使う
  DCL::sgpset('lfull',true)       # 全画面表示
  
  # タイトル
  DCL::slsttl('#date #time YAMADA.YU', 'T', 1.0, 1.0, 0.01, 1)
  DCL::slsttl('long radiation flux !? ', 'T', -0.65, 0.0, 0.02, 2)
  #DCL::slsttl('(dry adiabat lapse rate = 10 K/km )', 'T', 0.75, -1.0, 0.015, 3)
  DCL::slsttl('(line red: adj1000con700 x=0 y=32, green: estimated using red line (temp, q))', 'T', 0.75, -1.0, 0.013, 3)
  
  # ページを 3 分割
  DCL::sldiv('y',3,1)


  # 一枚目: 温度
  DCL::grfrm 
  DCL.grsvpt(0.13, 0.48, 0.15, 0.9)
  DCL::grswnd(50.0 ,300.0 ,1.0,0.0) 
  DCL::ussttl('Temp', 'K', 'sigma', ' ')
  DCL::usdaxs
  DCL::uuslnt(3)
  DCL::uulin($temp,$sigma[1..-1])
  DCL::uuslni(22)
  DCL::uuslnt(1)
  DCL::uulin($tnc,$sigma[1..-1])

  # 2 枚目: 比湿
  DCL::grfrm 
  DCL.grsvpt(0.12, 0.47, 0.15, 0.9)
  DCL::grswnd(0.0 ,0.02 ,1.0,0.0)
  DCL::ussttl('q', 'g/g', 'sigma', ' ')
  DCL::usgrph($qnc,$sigma[1..-1]) 

  # 3 枚目: フラックス
  DCL::grfrm 
  DCL::grsvpt(0.1, 0.45, 0.15, 0.9)
  DCL::grswnd($rflux.min-10 ,$rflux.max+10 ,1.0,0.0) 
  DCL::ussttl('RFLUX', 'W/(m**2)', 'sigma', ' ')
  DCL::usdaxs
  DCL::uuslni(21)
  DCL::uuslnt(3)
  DCL::uulin($lradnc,$sigma_m)
  DCL::uuslni(32)
  DCL::uuslnt(1)
  DCL::uulin($rflux,$sigma_m)

  mradl_dcldump if $dcl_num == 2

  # おしまい
  DCL::grcls 

end

# ----------------------------------------------------------
# 放射加熱の図

def mradl_dclheat

  if $dcl_num == 1 then  
    DCL::gropn(2)
  else 
    DCL::gropn(1)
  end

  DCL::sgpset('lcorner',false)    # コーナーマークはつけない
  DCL::slmgn(0.0, 0.0, 0.0, 0.15)  # 描画マージン指定
  DCL::sgpset('lfprop',true)      # プロポーショナルフォントを使う
  DCL::sgpset('lfull',true)       # 全画面表示
  DCL::sgpset('lcntl', false)      # アンダーバーは普通に表示

  # タイトル
  DCL::slsttl('#date #time YAMADA.YU', 'T', 1.0, 1.0, 0.01, 1)
  DCL::slsttl('long radiation heating !? ', 'T', -0.65, 0.5, 0.02, 2)
  DCL::slsttl("line red: #{$qradlncname} x=0 y=32" , 'T', -0.2, -0.5, 0.013, 3)
  DCL::slsttl("black: estimated using (#{$tncname}, #{$qncname})", 'T', 0.75, -1.0, 0.013, 4)

  # ページを 2 分割
  DCL::sldiv('y',2,1)

  # 1 枚目: フラックス
  DCL::grfrm 
  DCL.grsvpt(0.2, 0.7, 0.15, 0.9)
  #DCL::grswnd(rflux.min-10 ,rflux.max+10 ,1.0,0.0) 
  #DCL::grswnd(0.0 ,300.0 ,1.0,0.0) 
  DCL::grswnd(0.0 ,$rflux.max+10 ,1.0,0.0) 
  DCL::ussttl('RFLUX', 'W/(m**2)', 'sigma', ' ')
  DCL::usdaxs

  # 吸収バンドごとのフラックス
  DCL::uuslnt(3)
  DCL::uuslni(42) # 青
  DCL::uulin($flic[true,0],$sigma_m)
  DCL::uuslni(772)# オレンジ 
  DCL::uulin($flic[true,1],$sigma_m)
  DCL::uuslni(92) # 水
  DCL::uulin($flic[true,2],$sigma_m)
  DCL::uuslni(112)# 紫
  DCL::uulin($flic[true,3],$sigma_m)
  DCL::uuslni(32) # 緑
  DCL::uulin($flic[true,4],$sigma_m)
  # フラックス合計
  DCL::uuslnt(1) 
  DCL::uuslni(05) # 黒
  DCL::uulin($rflux,$sigma_m)
  # GCM の結果
#  DCL::uuslnt(1)
#  DCL::uuslni(21) # 赤
#  DCL::uulin($lradnc,$sigma_m)

  # 2 枚目: 放射加熱
  DCL::grfrm 
  DCL.grsvpt(0.15, 0.65, 0.15, 0.9)
  DCL::grswnd($qradl.min,$qradl.max ,1.0,0.0)
  DCL::ussttl('qradl', 'K/s', 'sigma', ' ')
  DCL::usdaxs
  # 吸収バンドごとの加熱率
  DCL::uuslnt(3)
  DCL::uuslni(42)
  DCL::uulin($qradlic[true,0],$sigma_m)
  DCL::uuslni(772)
  DCL::uulin($qradlic[true,1],$sigma_m)
  DCL::uuslni(92)
  DCL::uulin($qradlic[true,2],$sigma_m)
  DCL::uuslni(112)
  DCL::uulin($qradlic[true,3],$sigma_m)
  DCL::uuslni(32)
  DCL::uulin($qradlic[true,4],$sigma_m)
  # 加熱率合計
  DCL::uuslni(05)
  DCL::uuslnt(1)
  DCL::uulin($qradl,$sigma_m) 
  # GCM の結果
  DCL::uuslnt(1)
  DCL::uuslni(21)
  DCL::uulin($qradlnc,$sigma_m[1..-1]) 

  mradl_dcldump if $dcl_num == 2

  # おしまい
  DCL::grcls 

end

# ----------------------------------------------------------
# gif, eps 変換

def mradl_dclps

  if $dclpsname == nil then
    fig = "hoge"
  else 
    fig = $dclpsname
  end  

  # gif, ps ファイル生成
  puts `mv dcl.ps #{fig}.ps` 
#  puts `pstopnm dcl.ps`
#  puts `ppmtogif dcl001.ppm >  dcl.gif`
#  puts `gifsicle --rotate-90 dcl.gif > #{fig}.gif`
#  puts `dclpsrmcm dcl.ps | dclpsrot > tmp.ps`
#  puts `eps2eps tmp.ps #{fig}.eps`
#  puts `rm dcl.gif dcl001.ppm tmp.ps dcl.ps` 
end


def mradl_dcldump

  if $dclpsname == nil then
    fig = "hoge"
  else 
    fig = $dclpsname
  end  

  p fig
  # gif,ファイル生成
  puts `xwd -out hoge.xwd` 
  puts `xwdtopnm hoge.xwd > hoge.pnm; ppmtogif hoge.pnm > #{fig}.gif` 
  puts `rm hoge.xwd hoge.pnm`

end







