params = %w(variable omega random)
npara = params.length

variable = %w(u-xm_time-lat ucos-xm_time-lat xm vor_lon-lat potvor_lon-lat strfunc_lon-lat)
names = ["Zonal-mean U (time-latitude)","Zonal-mean Ucosφ (time-latitude)","Zonal-mean variables (latitude)","Vorticity (longitude-latitude)","Potential vorticity (longitude-latitude)","Stream function (longitude-latitude)"]
omega = %w(0 50 100 200 400 1000 4000 10000)
random = (101..125).collect{|i| i.to_s}+["ensemble"]
map = %w(cylindrical orthographic orthographic-polar)

javascript =<<"EOF"
function getId(id){
  return document.all&&document.all(id)
         || document.getElementById && document.getElementById(id);
}
var cookie_name = "baro_freedcay";
function clearCookie(){
  var expire = new Date();
  expire.setFullYear(expire.getYear()-1);
  expire = expire.toGMTString();
  document.cookie=cookie_name+"=;expires="+expire;
}
function getCookie(){
  var cookie = document.cookie;
  if(cookie && cookie.length>0){
    ind = cookie.indexOf(cookie_name+"=");
    if (ind != -1){
      ind += cookie_name.length+1;
      end = cookie.indexOf(';',ind);
      if(end==-1) end = cookie.length;
      var str = unescape(cookie.substring(ind,end));
      var ary = str.split("&");
      if(ary.length==npara+3){
        var obj;
        column = parseInt(ary[0]);
        obj = getId("param_form").Column;
        obj[column].checked = true;
        row = parseInt(ary[1]);
        obj = getId("param_form").Row;
        obj[row].checked = true;
        changeParameter();
        for(i=0;i<npara;i++){
          var multi = param_select_multi[i];
          for(j=0;j<multi.length;j++)
            multi.options[j].selected = false;
          var a = ary[i+2].split(",");
          for(j=0;j<a.length;j++){
            m = parseInt(a[j]);
            multi.options[m].selected = true;
          }
          if(a.length==1){
            m = parseInt(a[0]);
            param_select[i].options[m].selected = true;
          }
        }
        m = parseInt(ary[npara+2]);
        getId("select_map").options[m].selected = true;
        draw();
      } else {
        clearCookie();
      }
    }
  }
}
function setCookie(){
  var str = "";
  str += column;
  str += "&";
  str += row;
  str += "&";
  for(i=0;i<npara;i++){
    if((i==column)||(i==row)){
      var a = param_select_multi[i];
      for(j=0;j<a.length;j++){
        if(a.options[j].selected) str += j+",";
      }
      str = str.substring(0,str.length-1);
    } else {
      m = param_select[i].selectedIndex;
      str += m;
    }
    str += "&";
  }
  str += getId("select_map").selectedIndex;
  var expire = new Date();
  expire.setTime(expire.getTime()+5*60*1000);
  document.cookie = cookie_name+"="+escape(str)+";expires="+expire;
}
EOF

javascript +=<<"EOF"
var names = new Array;
var params = new Array;
EOF
variable.length.times do |n|
  javascript += "names[\"#{variable[n]}\"] = \"#{names[n]}\";\n"
end
params.each do |p|
  javascript += "params.push(\"#{p}\");\n"
end
  

javascript +=<<"EOF"
var npara = #{npara};
var param_select = new Array(npara);
var param_select_multi = new Array(npara);
var first = true;
function clearAll(flag){
  var table = getId("table_fig");
  var tbody = table.getElementsByTagName("tbody").item(0);
  if(tbody) table.removeChild(tbody);
  table.appendChild(document.createElement("tobdy"));
  column = column_init;
  row = row_init;
  getId("param_form").Column[column].checked = true;
  getId("param_form").Row[row].checked = true;
  if (first) {
    for(i=0;i<npara;i++){
      param_select[i] = getId("select_"+i);
      param_select_multi[i] = getId("select_multi_"+i);
    }
    first = false;
  }
  for(i=0;i<npara;i++){
    param_select[i].options[0].selected = true;
    for(j=0;j<param_select_multi[i].length;j++)
      param_select_multi[i].options[j].selected = true;
    if((i==column)||(i==row)){
      param_select[i].style.display = "none";
      param_select_multi[i].style.display = "";
    } else {
      param_select_multi[i].style.display = "none";
      param_select[i].style.display = "";
    }
  }
  getId("select_map").options[0].selected = true;
  if(flag) clearCookie();
}
function init(){
  clearAll(false);
  getCookie();
}

var column_init = 1;
var row_init = 2;
var column = column_init;
var row = row_init;
function changeColumn(n){
  column = n;
  var obj = getId("param_form").Row;
  if(obj[column].checked){
    row = column==0 ? 1 : 0
    obj[row].checked = true;
  }
  changeParameter();
}
function changeRow(n){
  row = n;
  var obj = getId("param_form").Column;
  if(obj[row].checked){
    column = row==0 ? 1 : 0
    obj[column].checked = true;
  }
  changeParameter();
}
function changeParameter(){
  for(i=0;i<npara;i++)
    if((i==column)||(i==row)){
      param_select[i].style.display = "none";
      param_select_multi[i].style.display = "";
    } else {
      param_select[i].style.display = "";
      param_select_multi[i].style.display = "none";
    }
}  
EOF



vals = [variable, omega, random]
param_select =<<"EOF"
<form method="post" id="param_form" name="param_form">
<table id="select_table" name="select_table" class="param_select">
<thead align="center">
 <tr>
  <td></td>
  <td>variables</td>
  <td>Omega</td>
  <td>Rondom seed</td>
 </tr>
</thead>
<tbody align="center">
EOF
2.times do |i|
 cr = %w(Column Row)[i]
 param_select +=<<"EOF"
  <tr>
   <td>
    #{cr}
   </td>
EOF
 params.length.times do |j|
  param_select +=<<"EOF"
   <td>
    <input type="radio" name="#{cr}" value="#{params[j]}" onclick="change#{cr}(#{j})"#{(i==0&&j==1)||(i==1&&j==2) ? " selected" : ""}>
   </td>
EOF
 end
  param_select +=<<"EOF"
  </tr>
EOF
end
  param_select +=<<"EOF"
  <tr>
   <td></td>
EOF
npara.times do |n|
  val = vals[n]
  name = n==0 ? names : vals[n]
  param_select +=<<"EOF"
  <td>
   <select size="5" multiple id="select_multi_#{n}" name="select_multi_#{n}" class="param_select">
EOF
  val.length.times do |i|
    param_select +=<<"EOF"
    <option value=\"#{val[i]}\" selected>#{name[i]}</option>
EOF
  end
  param_select +=<<"EOF"
   </select>
   <select id="select_#{n}" name="select_#{n}" class="param_select">
EOF
  val.length.times do |i|
    if i==0
      param_select += "    <option value=\"#{val[i]}\" selected>#{name[i]}</option>\n"
    else
      param_select += "    <option value=\"#{val[i]}\">#{name[i]}</option>\n"
    end
  end
  param_select +=<<"EOF"
   </select>
  </td>
EOF
end
param_select +=<<"EOF"
 </tr>
</tbody>
</table>

<table id="map_table" name="map_table">
<thead align="center">
 <tr>
  <td>
   projection
  </td>
 </tr>
</thead>
<tbody>
 <tr>
  <td>
   <select id="select_map" name="select_map" class="map_select">
EOF
map.length.times do |n|
  if n==0
    param_select += "    <option value=\"#{map[n]}\" selected>#{map[n]}</option>\n"
  else
    param_select += "    <option value=\"#{map[n]}\">#{map[n]}</option>\n"
  end
end
param_select +=<<"EOF"
   </select>
  </td>
 </tr>
</tbody>
</table>
<tr>
 <td>
  <input type="button" value="draw" onclick="draw()">
  <input type="button" value="clear" onclick="clearAll(true)">
 </td>
</tr>
</form>
</tbody>
</table>
EOF

javascript +=<<"EOF"
function draw(){
  var ary = new Array;
  var ary_column = new Array;
  var ary_row = new Array;
  var sel;
  for(i=0;i<npara;i++){
    if(i==column){
      sel = getId("select_multi_"+i);
      for(j=0;j<sel.length;j++)
        if (sel.options[j].selected) ary_column.push(sel.options[j].value);
    } else if(i==row){
      sel = getId("select_multi_"+i);
      for(j=0;j<sel.length;j++)
        if (sel.options[j].selected) ary_row.push(sel.options[j].value);
    } else {
      sel = getId("select_"+i);
      ary[params[i]] = sel.options[sel.selectedIndex].value;
    }
  }
  var table = getId("table_fig");
  var fname;
  var vname;
  var map;
  var tbody = table.getElementsByTagName("tbody").item(0);
  var tr;
  var td;
  var table2;
  var tbody2;
  var tr2;
  var td2;
  var a;
  var img;
  var text;
  if (tbody) table.removeChild(tbody);
  tbody = document.createElement("tbody");
  for(i=0;i<ary_row.length;i++){
    tr = document.createElement("tr");
    ary[params[row]] = ary_row[i];
    for(j=0;j<ary_column.length;j++){
      ary[params[column]] = ary_column[j];
      td = document.createElement("td");
      table2 = document.createElement("table");
      tbody2 = document.createElement("tbody");
      tr2 = document.createElement("tr");
      td2 = document.createElement("td");
      img = document.createElement("img");
      if (ary["variable"].match(/lon-lat/)){
       map = getId("select_map");
       map = "_"+map.options[map.selectedIndex].value;
      } else {
       map = "";
      }
      fname = "thumbdir/"+ary["variable"]+map+"_Omega"+ary["omega"]+"_Case"+ary["random"]+"_thumb.png";
      img.setAttribute("src",fname);
      img.setAttribute("alt",fname);
      a = document.createElement("a")
      fname = "gallery/"+ary["variable"]+map+"_Omega"+ary["omega"]+"_Case"+ary["random"]+".png";
      a.href=fname;
      a.appendChild(img);
      td2.appendChild(a);
      td2.appendChild(document.createElement("br"));
      text = document.createTextNode(ary["variable"])
      td2.appendChild(text);
      td2.appendChild(document.createElement("br"));
      text = document.createTextNode("Omega="+ary["omega"]+",random_seed="+ary["random"]);
      td2.appendChild(text);
      if(ary["variable"][0]=="u") {
        fname = "gallery/xm_Omega"+ary["omega"]+"_Case"+ary["random"]+".gif";
      } else {
        fname = "gallery/"+ary["variable"]+map+"_Omega"+ary["omega"]+"_Case"+ary["random"]+".gif";
      }
      td2.appendChild(document.createElement("br"));
      a = document.createElement("a");
      a.href = fname;
      a.appendChild(document.createTextNode("animation"));
      td2.appendChild(a);
      tr2.appendChild(td2);
      tbody2.appendChild(tr2);
      table2.appendChild(tbody2);
      td.appendChild(table2);
      tr.appendChild(td);
    }
    tbody.appendChild(tr);
  }
  table.appendChild(tbody);
  setCookie();
}
EOF




fname = "index.htm"
file = File.open(fname,"w")
begin
  file.print <<"EOF"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja">
<head>
<title>球面順圧減衰乱流</title>
  
<meta http-equiv="Content-Type" content="text/html; charset=x-euc-jp">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta name="Author" content="seiya">
<meta name="generator" content="index.rb">

<link href="http://www.gfd-dennou.org/arch/dcmodel/htmltools/dcmodel.css" type="text/css" rel="stylesheet">

<style>
<!--
.param_select {display:;}
//-->
</style>

<script>
<!--
#{javascript}
//-->
</script>

</head>

<body>

<p>[<a href="http://www.gfd-dennou.org/">地球流体電脳倶楽部</a>]
[<a href="http://www.gfd-dennou.org/arch/dcmodel">dcmodel</a> |
<a href="http://www.gfd-dennou.org/arch/dcmodel/doc/dcmodel-tools/SIGEN.htm">dcmodel-tools</a>]
[<a href="http://www.gfd-dennou.org/arch/numexp/">numexp</a>]
[<a href="http://www.gfd-dennou.org/arch/spmodel/">spmodel</a>]</p>


<noscript>
This page uses JavaScript.
If JavaScript is disable,
please move to <a href="index-nojavascript.htm">here</a>.
</noscript>

<h1><a name="label-0" id="label-0">球面順圧減衰性乱流実験</a></h1><!-- RDLabel: "球面順圧減衰性乱流実験" -->

<p>球面浅水系減衰乱流実験の結果は<a href="../../spshallow-zd_freedecay/exp/index.htm">こちら</a></p>

<h2><a name="label-1" id="label-1">実験設定</a></h2><!-- RDLabel: "実験設定" -->
<ul>
<li>水平分解能: T170</li>
<li>時間積分: 4次ルンゲクッタ+解析解(線形項)</li>
<li>積分時間: 1.0e-3(sec) × 5.0e4ステップ</li>
<li>固定パラメター: a=1</li>
<li>スイープパラメター: Ω(=#{omega.join(",")}), Random seed(=#{random.join(",")})</li>
</ul>

<h2><a name="label-2" id="label-2">初期値</a></h2><!-- RDLabel: "初期値" -->
 <table><tbody>
  <tr>
   <td>
    <a href="gallery/init_vor_lon-lat.png">
     <img src="thumbdir/init_vor_lon-lat_thumb.png"/>
    </a>
    <br>渦度
   </td>
   <td>
    <a href="gallery/init_energy-spectrum.png">
     <img src="thumbdir/init_energy-spectrum_thumb.png"/>
    </a>
    <br>エネルギースペクトル
   </td>
   <td>
    <a href="gallery/init_enstrophy-spectrum.png">
     <img src="thumbdir/init_enstrophy-spectrum_thumb.png"/>
    </a>
    <br>エンストロフィースペクトル
   </td>
  </tr>
 </tbody></table>


<h2><a name="label-3" id="label-3">結果</a></h2><!-- RDLabel: "結果" -->

<table>
<tbody>
<tr>
 <td>
  #{param_select}
 </td>
</tr>
<tr>
 <td>
  <table id="table_fig" name="table_fig">
  <tbody>
  </tbody>
  </table>
 </td>
</tr>
</tbody>
</table>

<h2><a name="label-4" id="label-4">参考文献</a></h2><!-- RDLabel: "参考文献" -->

<dl>
<dd>Takehiro, S., Yamada, M., Hayashi, Y.-Y., 2007 : 
      Energy accumulation in easterly circumpolar jets 
      generated by two-dimensional barotropic decaying turbulence 
      on a rapidly rotating sphere, 
      <a href="/GFD_Dennou_Club/dc-arch/prepri/2007/jas/spbaro_jas/SIGEN.htm">
      J. Atmos. Sci., 64, 4088-4101</a>
</dd>
<p>
<dd>
      Takehiro, S., Yamada, M., Hayashi, Y.-Y., 2007 : 
      Circumpolar jets emerging in two-dimensional non-divergent 
      decaying turbulence on a rapidly rotating sphere, 
      <a href="/GFD_Dennou_Club/dc-arch/prepri/2007/fdr/spbaro/SIGEN.htm">
      Fluid Dyn. Res., 39, 209-220</a>
</dd>
</dl>

<script>
<!--
init();
//-->
</script>
</body>
</html>
EOF

ensure
  file.close
end

require "date"
today = Date.today
file = File.open("index.htm.SIGEN","w")
begin
  file.print <<"EOF"
Subject:	球面順圧減衰性乱流 結果ホームページ
Maintainer:	西澤誠也
Description:	relative:index.rb
		により自動生成
Note:		[この SIGEN ファイル自体も
		relative:index.rb
		からの自動生成である]
Update:		#{today.year}/#{"%02d"%today.month}/#{"%02d"%today.day}  自動生成
EOF
ensure
  file.close
end
