・最強のスクリプト言語UWSC


 最近,Web上でUWSCなるスクリプト言語を発見した.これは,「うみうみ」さんという方が作成,無償公開されているWindowsの自動コントロールソフトである.

うみうみ屋さん

 とぼけたハンドルネームだが,公開されているソフトはいずれも非常にハイレベル.なかでも,UWSCは愛好者の多い定番ソフトらしい.
 ちょっと使ってみて,その卓越した設計思想に感動した.いままで,Windowsの操作を自動化するソフトは幾つか使ってきたが,これほど,目的とするスクリプトを作る手間が短いものははじめて.また,Windowsをコントロールするのに不可欠な変数を取得,制御するための関数が豊富である.しかも,スクリプトが「ミスる」確率が少ない.惜しむらくは,その言語仕様がBasicに酷似していること.せめて,Perlライクなら,もう少しプログラミングも楽なのだが・・・

 このスクリプト言語を使えば,非常に複雑なWindowsアプリケーション操作が完全自動化できる.しかも,目的とするスクリプトを作るのに要する時間は,単純な操作なら非常に短い.

・ダウンロード,インストール
 まずは,素晴らしいソフトを無償公開してくれた作者に敬意を表しつつ,ダウンロードしよう.

Vectorのダウンロードサイト

 インストールは,アーカイブを解凍して適当なフォルダに置くだけ.実は,この類のソフトが無償であることの意義は大きい.Phoenics3.4の時代には,WinbatchEHなるスクリプト言語を使いVR Viewerの操作を自動化していたが,せっかく作ったスクリプトも,WinbatchEHそのものを有償で購入しないと使えないので,なかなか公開する気にならなかった.UWSCなら,ライセンス条項を守る限りにおいては無償で使い放題である.早速行ってみよう.

・計算結果を自動撮影するスクリプト
 さて,私がUWSCでどのようなスクリプトを作ったかというと,それは「VR Viewerで,指定した条件で計算結果を自動撮影,ファイルにセーブするスクリプト」である.まずは,下のリンクから,二つのスクリプトをダウンロードしてもらいたい.

!AutoPilot.UWS  !Make_Autopilot.UWS

・ワーキングディレクトリの作成
 このスクリプトは,VR Editor,q1ファイル,phyファイルなどが揃っているディレクトリで動くように作られている.ワーキングディレクトリを作成して,そこで正常にVR Viewerから計算結果が見えることを確認.そして,上のスクリプトを同じフォルダにコピーしてから実行する.

・撮影条件の決定
 まず,撮影を行いたい計算結果をVR Viewerで表示する.ここでは,有名な「V101 T-Junction」を例に取り上げよう.見る角度,パース,プローブの位置,撮影したい断面(x,y,またはz),ウィンドウの大きさを決定したら,!Make_Autopilot.UWSを起動する.ここで,ウィンドウの大きさを変える意味は,後で作られるイメージのサイズをここで制御するという意味である.

こんな感じでいこう.

 !Make_Autopilot.UWSは自動でVR Viewerを操作し,自動的に終了する.すると,!autoplot.txtなるテキストファイルが作られる.これが,いま記録された撮影条件である.

・!autopilot.txtの編集
 続いて,出来た!autopilot.txtをお好みで編集する.前半の部分は,今のところはいじらないでおこう.後半の部分,「なにを撮影するか」を以下の方針で編集.

dz        = 0.3           # (x-y)面スライスを作る間隔

!変数名-------!Print-!最小-------!最大-------!
Pressure       1 Y Y         0             1  
X-Velocity     2 N           0             1  
Y-Velocity     3 N           0             1  
Z-Velocity     4 N           0             1  
DEN1           0 N           0             1  
VFOL           0 N           0             1  
PRPS           5 N           0             1  
SURN           0 N           0             1  
Velocity       6 YYY         0             1  
MACH           0 N           0             1  
               | |||
               | ||+ z方向スライスを表示するかどうかのスイッチ
               | |+- ベクトルを表示するかどうかのスイッチ
               | |+- ベクトルを表示するかどうかのスイッチ
               | +-- 印刷するかどうかのスイッチ
               +---- 変数の出てくる場所を示す(自動的に取得される)

               変数レンジの最小と最大を同じにすると自動設定となる

 まず,どの変数を撮影するかを!Print-!下の"Y"で指定する.数字1,2,・・・はスクリプトが自動で探してつけたもので,どの変数がどの位置で使われているかを示している.ここを変更してはならない.密度DEN1,マッハ数MACHなどは,V101のケースでは定義されていないので数字が"0"となる.上の例では,圧力,速度のコンターを撮影する設定となる.
 撮影条件は,三つのYマークと,最小値,最大値で設定する.Yマークは左から「単一スライスを撮影」,「スライス撮影にベクトル矢印を付加」,「連続スライスを撮影」を意味する.右の最小,最大の欄は,コンターの最小,最大値を設定する.ここを両方0とすると,VR Viewerによるお任せ設定となる.

・!AutoPilot.UWSの実行
 続いて,!AutoPilot.UWSを実行する.このとき,VR Viewerは開いていても良いし,VR Editorの状態でも良いし,何も開いていなくとも良い.状態は自動的に判断される.しばらくは,スクリプトが一生懸命働くのを見てもらいたい.

 撮影で指定されたウィンドウの大きさが現在のウィンドウの大きさと違うときは,ウィンドウの大きさを変更するかどうか聞いてくるので,そこはお好みで指定.

・!AutoPilot.UWSの実行結果
 実行結果はごらんの通り.圧力と流速に対して,各2枚のgif画像が撮影される.




・このスクリプトの意味
 さて,勘の良い方はもう気がつかれただろうか.このスクリプトが有用である真の意味を.このスクリプトは,!autopilot.txtがいちど作られてしまえば,あらゆる条件の計算結果において「ある決まったアングルに計算領域を回転し,同じ角度から同じ変数を見て,同じ範囲を最大,最小とした等高線」のgifファイルを自動で生成する.しかも,「制御された等間隔の複数断面」まで自動作成だ.実は,これが,VR Viewer単独ではほとんど不可能なくらい面倒な作業なのだ.Ver. 3.5からVR Viewerにもマクロ言語が装備されたが,残念ながら使い勝手は余り良くない.この方法なら,幾つか条件を変えた計算において,流速分布がどう変わるかなどの比較が非常に楽にできる.
 しかも,撮影条件を決める設定ファイル!autopilot.txtを作成するのがVR Viewerでアングルを決めてからワンプッシュで可能で,細かい修正は直接!autopilot.txtを編集することでも可能である.

03/09/16追記 Phoenics3.5には3.5.0と3.5.1の二つのマイナーバージョンが存在し,それらはVR Editorのユーザーインターフェースが違うということが判明.parallel版としてデリバーされているものはは3.5.0,single版は3.5.1だそうだ.Parallel版の方が時期が半年も遅いのになぜ?というのはおいといて,勝手にUIを変えるな!!と言いたい.従って上で紹介したマクロは,Single node版ユーザーには使えないことがわかった.やれやれ.

03/09/17追記 UWSCの能力を持ってすれば,画面デザインの違いからバージョンを判断することもたやすい.ということで,3.5.0でも3.5.1でも動くようにスクリプトを改良した.実は,3.5.0のVR Viewerには問題があって,"Reset View Parameters"ウィンドウから"Current plotting variable"を設定するとプログラムがストールすることがある.文句を言っても,もうobsoleteなバージョンなので,直してくれないだろう.というわけで,我が研究室もVR Viewerは3.5.1に移行することにした.