数値シミュレーション技術の発展とスーパーコンピュータ(II)

2018年2月20日

岩宮敏幸

航空機の性能を評価するためには航空機が周りの空気からどのような力を受けているかを知る必要があります。これを物理の方程式と計算機を利用して計算するのが数値シミュレーションです。

では、具体的にはどのような手順で数値シミュレーションが、行われるのでしょうか。空気の密度、圧力、速度、温度などの物理量は時刻と場所によって変化しています。これらの物理量の間に成り立っている関係を式で表現したものが物理モデルです。時間や空間は、連続的な広がりを持っていますから、無限個のデータの間の関係式です。計算機は有限個のデータしか取り扱うことができませんから、無限個のデータを有限個のデータで近似し、それらの間の関係式を導いてやる必要があります。この過程を離散化、導いた関係式を離散モデルと呼びます。
近似の仕方はいろいろありますが、よく行われるのは、空間を細かく分割する方法です。物理量は、空間的、時間的に連続に変化するのが普通ですから、細かくしておけば、それぞれの領域では物理量がほとんど変化しないようにすることができるはずです。逆に言うと、物理量が激しく変化するところは細かく、ゆっくり変化するところは粗く分割すると取り扱うデータの数を少なくすることができますから、効率的ということになります。このように空間を分割することを「格子を切る」とか「格子を生成する」とか言います。

航空機の周りの空気の流れを計算するために格子を切ったとして、全体の格子数はどの程度の規模になるのでしょうか。
我々が海外旅行に使っている旅客機は全長、全幅とも数十メートルの大きさです。その周りの空間を考えるのですから、大雑把に言って、百メートル×百メートル×百メートルの立方体を分割することを考えましょう。縦、横、高さの方向にそれぞれ百分割すると、全体の格子数は百×百×百で百万(106)となります。一つの格子の大きさは1メートル×1メートル×1メートルくらいでしょう。空気の流れが速くなると、流れが複雑になることは容易に想像できますから、航空機のように高速に移動する物体の周りの流れをシミュレーションするためには、これでは、とても足りそうにありません。現在の最先端のスーパーコンピュータでも取り扱える計算規模は109~1010ですから、単純に分割していたのでは、センチメートル程度の解像度しかないことになります。
旅客機の表面近くの空気は旅客機に引きずられて、高速で移動するのに対して、表面から少し離れるとほとんど動きませんから、特に表面から離れる方向(厚さ方向)には細かく分割しなければいけないのですが、それ以外の方向は細かくする必要はないので、表面近くの格子を極端に扁平なものにしなければならなくなります。そうすると、格子がねじれたり、裏返ったりして計算が破綻することになります。
航空機周りの格子生成には、このような課題があり、自動で格子生成することは難しく、細かい不具合を修正して、良質な格子を作るために人手がかかっています。勿論、計算機が取り扱える計算規模が大きくなると、その分、格子生成は楽になる傾向にあります。

次に、作成した格子に対応する物理量の間の関係式である離散モデルを計算することになります。ここで使われる計算はほとんどが小数の四則演算、すなわち足し算、引き算、かけ算、割り算の組み合わせです。
従って、計算機に求められる性能は、いかに小数演算を速くこなすかと言うことです。この性能を表す単位がFLOPSという単位です。計算機の中では小数は決められた桁数の数と小数点の位置を示す数の組み合わせで表現されており、浮動小数点数(Floating point number)と呼ばれています。FLOPSはFloating point number Operations Per Secondの頭文字からとった単位で、1秒間に浮動小数点演算が何回できるかを示しています。スパコンで有名な”京(ケイ)”は兆の1万倍の単位である京からとったもので、1016FLOPSの性能を持つことを示しています。

計算した結果は、数値データの山です。これを、人が理解しやすい形に図示するのが、可視化と呼ばれる過程です。3次元表示などを活用して、どのような場所で何が起こっているから、良い性能が出ているとか、ここの部分は、修正しないといけないとかの分析ができ、問題解決につながっていくのです。