2次元翼型まわりの流れ解析・翼型最適化 実践編

引き続いて 皆さんこんにちは。yuukivelです。

前回の記事に引き続いて、2次元翼型まわりの流れ解析・翼型最適化 実践編 ということで、早速本題に入っていきましょう。

さて、今回は先にも述べてきたとおり、2次元翼型まわりのポテンシャル流れ(非粘性非圧縮)のCFDプログラムを作成した。
この手のソフトで有名なものとして、このブログで何度も出てきているXFLR5(中身のプログラムはXFOIL)が挙げられる。
XFLR5の有用性は揺るぎないものとなっているが、自分で書いた理由として

  • XFLR5では最適化問題における流れ解析に使いづらい。逆問題も限られた状態でしか解けない。

を挙げておこう。
つまりは

  • 「自分のプログラムに組み込める流れ解析ソフトが欲しかった」

この理由につきる。

では、このプログラムの有用性を見てみよう。以下のグラフはDAE31(迎え角5°)のポテンシャル流れの圧力分布をXFLR5で解析したものと、自作プログラム「NaFoil」で解析した結果の比較だ。
青い菱形が自作ソフト。

非常に良く一致しているのが分かる。理論的には違ったものとなっているが(この記事の付録「理論編」で解説)感動するくらい一致している。
これが出てきたとき嬉しくて飛び上がりそうになった。

ここまでできると、次にやれそうなことが広がってくる。より実用的にするためには粘性の影響を含めなければならない。Navier Stokes方程式は壁が厚いので境界層方程式を解いて粘性の影響を含められないかと考えている。(NS方程式もそのうちやろうと考えている)
さらに、翼型の逆設計もこのプログラムによって可能になる。事実、重見先生の提唱する逆設計法はすぐにでも実装できると思われる。収束も早そうで、圧力分布を自在に操れるようになれば、かなり有用なツールとなろう。

で、このプログラムをポテンシャル流れの解析にしか使わないのはもったいないので、
遺伝的アルゴリズムによる翼型設計」
やってみた。

遺伝的アルゴリズムを用いた空力設計の分野では東北大学の大林茂先生が熱心に取り組まれていて、今回の設計も大林先生のホームページにアップロードされている、
多目的遺伝的アルゴリズムによる空力最適設計
を参考にアルゴリズムを組んでみた。

その結果がこちら。

NaGAf54-512.dat
この翼型は迎え角5°のもと、DAE31,FX76MP120,FX76MP140,eppler66を基として遺伝的アルゴリズムにより翼厚12%縛りで揚力係数を最大化したものである。
XFLR5で解析した結果を示す。参考用にFX76MP120も合わせて解析したものも示す。レイノルズ数はともに50万である。太い緑が作った翼型「NaGAf54-512」

FX76MP120に比べて揚力係数が低く、抵抗が小さい。これのため最大揚抗比ではFX76MP120に匹敵し、さらに迎え角が小さい領域ではFX76MP120を凌駕している。
近年の日本の人力飛行機は使用する揚力係数の範囲が1前後と小さく、NaGAf54-512の方が使いやすいと思われる。さらにモーメント係数がFX76MP120より穏やかなため、正直なはなし、私なら自分の設計する人力飛行機に使う。DAE31に似た性能を持っているが、最大揚抗比ではこちらも凌駕している。

この翼型と似た性能を示し、揚力係数が大きい、NaGAf40-412という翼型も作りましてよ。

実は以上2つの翼型はXFLR5のInverse Design で速度分布を平滑化している。平滑化する前とほとんど性能は変わっていないのでご容赦いただきたい。


さて、遺伝的アルゴリズムをやってみて考えたことなど。。。
遺伝的アルゴリズムはその名前のかっこよさから、大学2年生がやってみたいと思ってしまう大二病の症状の1つと言われている(適当)
しかし、遺伝子の作り方や交配のさせ方によっては効率の悪い最適化になるどころか解にすらたどりつけない事もありうる。
計算回数が多くなりがちで私のVAIOが唸るなか待ち続けなければならない。

とは言っても、プログラムが簡単で、直感的でわかりやすいことを鑑みれば、最適化を本格的にやり始めるきっかけとしてはとてもいいのかもしれない。
交配のさせ方とか、考えるのが楽しい方法だと感じた。

        • -

余談ではあるのですが、やってみて感じた事として、遺伝的アルゴリズムに関わるプログラミングは、「私情」が入ります(笑)
具体的に言えば、交配のさせ方は、収束のためと言い聞かせながらも、この交配のさせ方はなんかなーと思ったりします。同一世代で成績優秀個体がたくさん遺伝子を残せるとかね(笑)
他にも似たものどうし掛け合わせていくと全体として成績が下がっていったり、どっかの動物の事を連想してしまってなかなか楽しい()プログラミングでした。

        • -

ということで、実践編では作ったプログラムから作ったものを紹介してみた。機会があれば今回作ったプログラムは公開してみようかと思っている。特に日本の人力飛行機界隈では3次元翼の最適化は熱心に行われていても、2次元翼に関してはその取っつきにくさも相まってかほとんど手が付けられていないように思われる。今回の記事を通して、特にこれから人力飛行機に関わっていく人たちが、翼型設計とかに興味を持ってもらえれば嬉しい。

                                                    • -

付録 2次元翼型まわりの流れ解析・翼型最適化 ざっと理論編

はてなダイアリーでは数式が書きづらいので、あんまり式を使わない感じで今回作成したソフト「NaFoil」「GA_Foil」について解説していきます。

  • NaFoil

ほとんど「流れの数値解析入門」内のアルゴリズムに従っています。
流れは非粘性非圧縮を仮定したポテンシャル流れですので、支配方程式は最も簡単な「ラプラス方程式」です。
これを数値的に解くため、翼型を多角形で近似し、各辺に分布渦を配置していきます。そして一様流と分布渦によって誘導される流れ(原理的にはビオ・サバールの積分です)を足し合わせて翼型線素に対する法線方向の速度がゼロとなる条件と翼型後縁から流れがなめらかに流れ去るクッタの条件を連立して分布渦強度に関する連立方程式を作り、逆行列問題を解いて分布渦強度を決定します。分布渦強度が決定されれば線素接線方向の速度はすぐに分かります。(この方法では分布渦強度にマイナス付けたものが接線方法速度になります)たったこれだけです。プログラムの行数は60行弱ととっても簡単です。

XFOILは翼線素に渦と湧き出しを分布させて法線方向速度がゼロになる流れを実現しています。これに比べて今回の方法は少し簡単です。しかし、粘性の影響を考慮する上ではXFOILの取る方法の方が有利らしいです。

このプログラムでは、XFLR5のCl計算値に比べて、揚力係数が高く出ます。どちらが正しいのか正直分かりませんが、もしかしたらXFLR5の揚力係数の値が実際より小さくなっている可能性も否定できないように感じます。検証してみる価値があるのかもしれません。この結果は大阪府立大学の方が言っていた、wortmann系列は設計速度より低速で飛びにくくて、DAEの方が低速で飛びやすいという経験に合致します。DAEの方がNaFoilとXFLR5の揚力係数計算値の差が小さいのです。

話を戻して遺伝的アルゴリズムによる翼型設計プログラム「GA_Foil」に行きましょう。名前適当です(笑)

まず翼型を4つ準備します。探索する翼型のY座標Y_{con}を、準備した翼型のY座標Y_iを用いて

Y_{con}=a_1Y_1+a_2Y_2+a_3Y_3+a_4Y_4 -0.6<=a_i<=0.6

とします。そして交配させる個体の遺伝子をa_iの65%と35%に分割したものとし、計8個の遺伝子とします。

評価関数は

F_{con}=C_L*exp(-100*|(thickness)-(wanted.thickness)|)

です。expの部分は翼厚と目標翼厚の差が大きければ大きいほど小さくなり、罰則となります。この評価関数を最大化するように解を探索します。

交配方法に移ります。最も良い値をたたき出した個体を保存し、これを越える個体が生じるまで保存します。さらにこの個体のクローンを毎世代投入しています。

そして上位より2個体ずつ一定の確率で遺伝子を交差させます。また、上位2個体は下位個体に対して一定確率で遺伝子を残します。
0.5%の確率で各個体に突然変異が起こります。

以上繰り返して最適解を探索していきます。

試行回数が一定世代となったところ(私が待ちきれなくなったところ)でプログラムを終了させ、最も評価関数の高かった個体を解として出力します。

ざっと説明するとこんなところです。長くなってきてしまったのでそろそろこの記事を締めくくりたいと思います。

最後に決めぜりふをば。

なぜ最適化をするのか。そこに最適解という頂があるからだ

(ドヤ