失速特性を考慮した翼型設計ocXgag その2 公開と使い方
さっそく、公開および使い方についてみていこう。
公開
PyInstallerを用いて、Windows 64bit版のPCを用いてbuildした。
twitterのフォロワーさんの協力によってWindows 32bit版でも動作することを確認している。
いつも通りDropBoxの公開リンクを用いた公開です。
https://dl.dropboxusercontent.com/u/36164244/ocXgag_win64build.zip
ocXgag_win64buildには、前述のとおりbuildしたocXgag.exeおよび解析を行うxfoil.exe、および翼型のサンプルとソースコードが入っている。
pythonをいじれる人は、ソースコードから起動したほうが早いかもしれない。
今回のbuildはすべてexeにまとめたので、xfoil.exeとocXgag.exeが同じディレクトリにあれば、どの場所にあろうと動作する。
また、consoleは出さないようにしたかったのだけれども、なぜか--noconsoleオプションをつけてbuildするとXFOILが起動しない。
申し訳ないけれどもconsoleがいちいちうるさいと感じる人はウィンドウの最小化をしてほしい。一応出しておけば、ちゃんと動作しているかどうかの確認になる。
mac版,Linux版は作成できる環境にないので、私の手では作れなさそう。どなたか協力してくれる方がいるとありがたい。
XFOILを使っている関係上、このプログラムのライセンスはGPLなのでソースコード公開の義務がある。
今回のbuildのソースコードはzipファイルに同梱した他、githubにてアップデートを行っていく予定なので、そちらで追ってもらえるとよいかと。
(現状githubへのpublishにエラーが出ているので、でき次第この記事を更新します)
使い方
このプログラムは、失速特性を維持しつつ、抗力最小を狙って翼型を「修正」するものだ。
したがって揚力係数や翼厚の大幅な変更は難しいし、そういった翼型の「作成」はXGAGを使ってほしい。
http://d.hatena.ne.jp/yuukivel/20140420/1397998798
exeから起動すると、pythonやら様々なモジュールを解凍する作業が入るため、起動にそこそこ時間がかかる。
起動すると次のような画面が現れる。基本的な手順は図の中に示した通り。
エラーが出る場合は大体(というかほとんど)XFOILがうまく回っていないことに起因する。
XFOIL用の一時翼型ファイルを書き出し⇒XFOILに読ませる⇒そのファイルを削除
といった感じでXFOILを回しているのだけれど、時々Permission deniedによってXFOILがうまく回る解析条件でもエラーが出ることがある。
エラーのダイアログが出たら、とりあえずもう一回翼型のオープンや計算実行をしてもらうか、それでもダメな場合は解析条件を変えてほしい。
もちろん解析する翼型が存在しなかったりしたら、エラーダイアログが出るのは当たり前だが。
続いて、Open Foilをクリックして翼型を開くとXFOILの解析が同時に行われ、各種性能と最適化の設定値のとりあえずの値がセットされる。
また、Setボタンの横にあるNorm and Dero from fileというチェックボックスについて。
ここにチェックがあると、翼型を開く際に、XFOILによる翼型点数の変更(n=200)と、翼型の翼弦長を1とするNormおよび前縁を原点にしつつ翼弦線をx軸と平行にするDeroが行われる。
初めて開く際はやるといいのだけれど、これをやるかやらないかによって微妙にCL等が変わるのでお好みで。
ここで最適化の設定値について説明する。
- CL target:揚力係数CLの目標値。下のtolと合わせて(1-tol)CL target<=CL<=(1+tol)CLという制約条件。
- Thn(%)target:翼厚(%)の目標値。この設定値以上の翼厚という制約条件。
- Thn Calc Point(%):翼厚の計算位置(%)。どこで翼厚の値を計算するかということ
- TEang(deg):後縁開き角(deg)の目標値。この値以上になるようにという制約条件。後縁開き角とは。上面および下面の後縁角の差のこと。
- xt upper(%), xt lower(%):修正PARSECにおける最大翼厚位置。詳しくは後ほど
- dXtr tolerance(%):Hの制約値を作る際に、元となるHの分布をどれだけ左右に動かすかというパラメータ。小さくすればそれだけHの分布は似てくるが、なかなか収束解を見つけるのが難しくなる。
- tol(% to CL tgt):上で説明したとおり。この値はCLの許容誤差がCL targetに対して何%かということを表している。
- max Iter:解修正動作の最大繰り返し数。
xt upper,xt lowerについて
このプログラムは翼型のY座標を以下のようにして表し、繰り返し修正する。
ここでからを決定するために、
に対して以下のような条件を用いる。
1.翼型の前縁を通る条件
2.翼型の後縁を通る条件
3.xtにてあるY座標をとおる条件
4.xtにてY座標の微分がゼロとなる条件
5.xtにてY座標の2階微分値がある値となる条件
6.前縁半径がある値となる条件
7.後縁角がある値となる条件
これらのパラメータを範囲を絞って最適化していくことで、修正の方向を逐次的に得ているのだけれども、xtの値だけはこちらで指定してあげる必要がある。
なぜならxtだけ動かしてほかの値をゼロとして評価関数の勾配を取ろうとしても、修正される翼型に変化はないので、必ず勾配が0になってしまうから。
無理やり勾配を取ろうとしたけれども、結局収束性が悪化したので、固定値とした。
また、Local Aerodynamic Approximationにおける勾配を取る際にXFOILの出力桁数が問題となってしまうため、勾配を取る際のパラメータの幅は今後の課題となっている。
さて、計算を実行すると次のような画面になる。
Res to Orgのボタンで計算結果をOriginalFoilにセットしなおし、計算が続けられるようになっている。
まだ計算のインタラプトは実装していないので、maxIterの値を大きくしすぎると、解が振動したり、XFOILの解析の限界にぶち当たってうまく回らなくなったりすることがあるので注意。
個人的にはmaxIterを10回くらいにして様子を見ながら計算を進めていくのがいいなと思っている。
Local Aerodynamic Approximationは研究段階であり、まだそこまで精度がよいわけではないので、各繰り返しによって制約条件を満たしていたり満たしていなかったりする。
また収束(制約条件を満たしつつ設計変数の修正量ベクトルのノルムが10e-4以下)になることもほとんどない。
Feasibleとは、最適化における専門用語の1つで、制約条件を満たしている状態(実行可能)
Infeasibleとは、制約条件を満たしていない状態(実行不可能)
したがって、実際には収束していなくても結果を見て、Feasibleでかつこれいいなと思ったものをエクスポートして使ってもらう感じになる。
計算実行後は次の図の通り。
Update Hconst at Res to Org というのは、計算結果の翼型のHの分布を使って、Hの制約条件をアップデートしますかということ。
チェックしなければ最初の翼型を基にしたHの制約条件のままとなり、基本的にはmaxIterを増やしただけでそのまま計算を続けることと同義になる。
チェックすればHconstの値がアップデートされるので、収束解を得やすくなる。
特にCLを増やす要求だったり、翼厚を大きくする要求のときはHの値が大きくなりやすいので、多少のHの分布を許容するのであれば、これにチェックをつけるとよい。
また、ResultFoilの横にNorm of Direction = 0と出たときは制約条件を満たす解が存在する見込みがないといわれていてどんづまり状態であるので、これにチェックをつけると計算が続けられる可能性がある。