(57)【要約】【課題】マルチブロック法を使用して流場計算を行う流場計算プログラムであって、流場計算で取り扱われるデータ群を、直感的に理解しやすい形式で格納することが可能な流場計算プログラムを提供する。【解決手段】本発明による流場計算プログラムは、計算対象空間を複数のブロックに分割するマルチブロック法を用いて流場を計算するための流場計算プログラムである。当該流場計算プログラム（６）は、（ａ）前記計算対象空間に定められる格子点の座標の格納に使用される格子点格納配列（Ｇｒｉｄ）と、前記格子点に対応して定められる状態定義点における流場の状態を示す流れ変数の格納に使用される流れ変数格納配列（Ｆｌｏｗ）とをメンバーとして有する構造体のデータ型を定義するステップ（１１ａ〜１１ｃ）と、（ｂ）前記データ型を有するブロックデータ配列（ＢＬＫ）を定義するステップ（１１ｄ）と、（ｃ）前記ブロックデータ配列を用いて前記流場を計算するステップ（６ｃ）とをコンピュータ（１０）に実行させる。【選択図】　図１
2004005036.tif 000002
【特許請求の範囲】
【請求項１】
計算対象空間を複数のブロックに分割するマルチブロック法を用いて流場を計算するための流場計算プログラムであって、
（ａ）前記計算対象空間に定められる格子点の座標の格納に使用される格子点格納配列と、前記格子点に対応して定められる状態定義点における流場の状態を示す流れ変数の格納に使用される流れ変数格納配列とをメンバーとして有する構造体のデータ型を定義するステップと、
（ｂ）前記データ型を有するブロックデータ配列を定義するステップと、
（ｃ）前記ブロックデータ配列を用いて前記流場を計算するステップ
とをコンピュータに実行させる
流場計算プログラム。
【請求項２】
請求項１に記載の流場計算プログラムにおいて、
前記ブロックデータ配列は、動的割り当て可能なように定義され、
更に、
（ｄ）前記ブロックの数を前記ブロックデータ配列の大きさとして、前記ブロックデータ配列の記憶領域への割り当てを行うステップ
を前記コンピュータに実行させる
流場計算プログラム。
【請求項３】
請求項１に記載の流場計算プログラムにおいて、
前記格子点格納配列と前記流れ変数格納配列とは、動的割り当てが可能であるように定義される
流場計算プログラム。
【請求項４】
請求項１に記載の流場計算プログラムにおいて、
前記格子点格納配列は、一次元配列であり、且つ、前記格子点の座標が格納される格子点データ配列をメンバーとするような構造体のデータ型を有し、
前記格子点格納配列の大きさは、前記ブロックのそれぞれに定められる計算格子の数に一致される
流場計算プログラム。
【請求項５】
請求項４に記載の流場計算プログラムにおいて、
前記格子点格納配列は、動的割り当てが可能であるように定義され
更に、
（ｅ）前記計算格子の数を、前記格子点格納配列の大きさとして、前記格子点格納配列の前記記憶領域への割り当てを行うステップ
を前記コンピュータに実行させる
流場計算プログラム。
【請求項６】
請求項４に記載の流場計算プログラムにおいて、
前記格子点データ配列は、動的割り当てが行われる多次元配列であり、
更に、
（ｆ）前記計算格子に含まれる格子点の配置態様に基づいて、前記格子点データ配列の大きさを決定し、前記決定された大きさを有するように前記格子点データ配列の前記記憶領域への割り当てを行うステップ
を前記コンピュータに実行させる
流場計算プログラム。
【請求項７】
請求項１に記載の流場計算プログラムにおいて、
前記流れ変数格納配列は、一次元配列であり、且つ、前記格子点に対応して定められる状態定義点における流場の状態を示す流れ変数を格納する流れ変数データ配列をメンバーとするような構造体のデータ型を有し、
前記流れ変数格納配列の大きさは、前記ブロックのそれぞれに定められる計算格子の数に一致される
流場計算プログラム。
【請求項８】
請求項７に記載の流場計算プログラムにおいて、
前記流れ変数格納配列は、動的割り当てが可能であるように定義され
更に、
（ｇ）前記計算格子の数を、前記流れ変数格納配列の大きさとして、前記流れ変数格納配列の前記記憶領域への割り当てを行うステップ
を前記コンピュータに実行させる
流場計算プログラム。
【請求項９】
請求項７に記載の流場計算プログラムにおいて、
前記流れ変数データ配列は、動的割り当てが行われる多次元配列であり、
更に、
（ｈ）前記計算格子に含まれる格子点の配置態様に基づいて、前記流れ変数データ配列の大きさを決定し、前記決定された大きさを有するように前記流れ変数データ配列の前記記憶領域への割り当てを行うステップ
を前記コンピュータに実行させる
流場計算プログラム。
【請求項１０】
計算対象空間を複数のブロックに分割するマルチブロック法を用いて流場を計算するための流場計算プログラムであって、
（ｉ）格子点格納ポインター配列と流れ変数格納ポインター配列とを定義するステップと、
（ｊ）前記ブロックの内部にある格子点の座標を格納する格子点データ配列と、前記格子点に対応して定められる状態定義点における流場の状態を示す流れ変数を格納する流れ変数データ配列とを定義するステップと、
（ｋ）前記ブロックのうちの一のブロックを指定するステップと、
（ｌ）前記格子点データ配列のうちの、前記一のブロックの内部にある格子点の座標を格納した格子点データ配列部分に、前記格子点格納ポインター配列を結合させるステップと、
（ｍ）前記流れ変数データ配列のうちの前記一のブロックの内部にある状態定義点における流場の状態を示す流れ変数データを格納した流れ変数データ配列部分に、前記流れ変数格納ポインター配列を結合させるステップと、
（ｎ）前記格子点格納ポインター配列と前記流れ変数格納ポインター配列とを引数とする命令文により、前記一のブロックの内部の流場を計算するステップ
とをコンピュータに実行させる
流場計算プログラム。
【請求項１１】
請求項１０に記載の流場計算プログラムにおいて、
（ｏ）前記（ｎ）ステップの後、前記格子点格納ポインター配列の前記格子点データ配列部分への結合、及び、前記流れ変数格納ポインター配列の前記流れ変数データ配列部分への結合を解除するステップと、
（ｐ）前記ブロックのうちの他のブロックを指定するステップと、
（ｑ）前記格子点データ配列のうちの、前記他のブロックの内部にある格子点の座標を格納した他の格子点データ配列部分に、前記格子点格納ポインター配列を結合させるステップと、
（ｒ）前記流れ変数データ配列のうちの、前記他のブロックの内部にある状態定義点における流場の状態を示す他の流れ変数データを格納する他の流れ変数データ配列部分に、前記流れ変数格納ポインター配列を結合させるステップと、
（ｓ）前記命令文により、前記他のブロックの内部の流場を計算するステップとを前記コンピュータに更に実行させる
流場計算プログラム。
【請求項１２】
計算対象空間を複数のブロックに分割するマルチブロック法を用いて前記計算対象空間の流場を計算するための流場計算プログラムであって、
（ｔ）前記計算対象空間に定められる格子点の座標の格納に使用される格子点格納配列と、前記格子点に対応して定められる状態定義点における流場の状態を示す流れ変数の格納に使用される流れ変数格納配列とをメンバーとして有する構造体のデータ型を定義するステップと、
（ｕ）前記データ型を有し、且つ、動的割り当て可能なブロックデータ配列を定義するステップと、
（ｖ）前記ブロックの数を前記ブロックデータ配列の大きさとして、前記ブロックデータ配列の記憶領域への割り当てを行うステップと、
（ｗ）格子点格納ポインター配列と流れ変数格納ポインター配列とを定義するステップと、
（ｘ）前記ブロックのうちの一のブロックを指定するステップと、
（ｙ）前記ブロックデータ配列のうちの、前記一のブロックの内部にある格子点の座標を格納する格子点データ格納部分に、前記格子点格納ポインター配列を結合させるステップと、
（ｚ）前記ブロックデータ配列のうちの、前記一のブロックの内部にある状態定義点における流場の状態を示す流れ変数データを格納する流れ変数データ格納部分に前記流れ変数格納ポインター配列を結合させるステップと、
（ａａ）前記格子点格納ポインター配列及び前記流れ変数格納ポインター配列を引数とする命令文により、前記流場を計算するステップ
とをコンピュータに実行させる
流場計算プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、流場計算プログラムに関する。本発明は、特に、計算対象空間を複数のブロックに分割するマルチブロック法を用いて、該計算対象空間の流場を計算するための流場計算プログラムに関する。
【０００２】
【従来の技術】
数値流体力学（ＣＦＤ：Ｃｏｍｐｕｔａｔｉｏｎａｌ　Ｆｌｕｉｄ　Ｄｙｎａｍｉｃｓ）を用いた流場計算は、船舶、航空機のように、流体との相互作用が性能を左右する物体の構造を最適化する有力な手段である。ＣＦＤを用いて流場を計算する場合、計算対象である空間に計算格子が生成される。生成された計算格子の格子点のそれぞれに対してＮａｖｉｅｒ−Ｓｔｏｋｅｓ方程式が適用され、流場が計算される。計算された流場は、物体の構造を最適化するために有用なデータである。
【０００３】
ＣＦＤによる流場計算では、滑らかな計算格子を生成することが重要である。滑らかでない計算格子は、計算精度と解の収束性とを大きく劣化させ、流場計算を困難にする。しかし、船や航空機のように複雑な形状を有する物体の周囲に、滑らかな計算格子を生成することは容易でない。
【０００４】
複雑な形状を有する物体の周囲に滑らかな計算格子を生成する方法として、マルチブロック法が知られている。マルチブロック法では、構造体のまわりの空間が複数のブロックに分割される。更に、ブロックのそれぞれについて計算格子（グリッド）が生成され、ブロック毎に流場計算が行われる。このようなマルチブロック法は、ブロックの分割によって、流場計算が行われるブロックの形状が単純化され、滑らかな計算格子の生成が可能である。
【０００５】
マルチブロック法を用いた流場計算では、多種多様なデータ群が取り扱われる。例えば、各ブロック毎に、該ブロックの内部にある格子点の座標と、状態定義点における流体の状態を表す流れ変数とを示すデータが保持される必要がある。状態定義点とは，流体の状態が定義される点であり，その格子点に対応して定められる。状態定義点としては，格子点そのものが使用されることが可能であり，また，隣接する複数の格子点を頂点とする多面体（例えば，４面体，及び６面体）の中心点が使用されることが可能である。
【０００６】
マルチブロック法を用いた流場計算においてマルチグリッド法が採用される場合には、各ブロック毎に格子点の密度が異なる複数の計算格子が定義され、その計算格子のそれぞれについて、格子点の座標と流れ変数とを示すデータが保持される必要がある。マルチグリッド法は、連立方程式の解を高速に得るために有効な手法である。
【０００７】
データ群の多様性は、そのデータ構造を複雑にし、データ構造の把握を困難にする。マルチブロック法を用いた流場計算で取り扱われるデータ群は、効率的に、且つ、直感的に理解しやすい形式で格納されることが望まれる。
【０００８】
更に、定められるべきブロックの数、グリッドの数、及び格子点の数は、計算対象によって異なる。流場計算に使用される流場計算プログラムは、計算対象の多様性に応じて、ブロックの数、グリッドの数、及び格子点の数を容易に調節可能であることが望まれる。
【０００９】
マルチブロック法を用いて流場計算が行われる場合、各ブロックについて行われる流場計算の手順は、ブロックを分割せずに行われる流場計算の手順と概ね同一である。従って、マルチブロック法を用いた流場計算に使用される流場計算プログラムは、単一のブロックを用いて流場計算を行う単一ブロック用プログラムを修正して作成することがより効率的である。
【００１０】
しかし、マルチブロック法を用いて流場計算を行う場合、ブロックの境界における境界条件を満足するために、ブロック間の情報交換を適宜に行う必要がある。例えば、ブロックの境界に存在する格子点の位置は、該境界を共有するブロックで共通であるように定められる必要があり、また、流体の圧力や速度は、該境界において連続でなければならない。ブロック間の情報交換により、ブロックの境界における境界条件が満足される。
【００１１】
流場計算が実行される間のどの時点で情報交換を行うかは計算の安定性と収束性を決定する要因となる。通常、流場計算は、複数のイタレーションループで構成されるが、Ｂｅｄｄｈｕらは、優れた収束性を実現する情報交換の方法として、イタレーションループの最内で情報交換を行うＢＪ−ＳＧＳ（Ｂｌｏｃｋ　Ｊａｃｏｂｉ　Ｓｙｍｍｅｔｒｉｃ　Ｇａｕｓｓ−Ｓｅｉｄｅｌ）法を提案している（Ｂｅｄｄｈｕ　Ｍ．，　Ｐａｎｋａｊａｋｓｈａｎ　Ｒ．，　Ｊｉａｎｇ　Ｍ．　Ｒｅｍｏｔｉｇｕｅ　Ｍ．　Ｓｈｅｎｇ　Ｃ．，　Ｔａｙｌｏｒ　Ｌ．　Ｋ．　Ｂｒｉｌｅｙ　Ｗ．　ａｎｄ　Ｗｈｉｔｆｉｅｌｄ　Ｄ．　Ｌ．，　”Ｃｏｍｐｕｔａｔｉｏｎ　ｏｆ　Ｎｏｎｌｉｎｅａｒ　Ｔｕｒｂｕｌｅｎｔ　Ｆｒｅｅ　Ｓｕｒｆａｃｅ　Ｆｌｏｗｓ　Ｕｓｉｇ　ｔｈｅ　Ｐａｒａｌｌｅｌ　Ｕｎｃｌｅ　Ｃｏｄｅ”，　２３ｒｄ　Ｓｙｍｐｏｓｉｕｍ　ｏｎ　Ｎａｖａｌ　Ｈｙｄｒｏｄｙｎａｍｉｃｓ，　Ｐｒｅｐｒｉｎｔｓ，　２０００．）。
【００１２】
Ｂｅｄｄｈｕらは、ＢＪ−ＳＧＳ法をパラレルコードで実現している。パラレルコードとは、複数のＣＰＵを利用するプログラムである。Ｂｅｄｄｈｕらは、各ブロックのそれぞれに一のＣＰＵを割り当て、ＣＰＵを相互に同期させながら情報交換を行っている。Ｂｅｄｄｈｕらが使用している方法を実行する流場計算プログラムは、単一ブロック用プログラムにＣＰＵ間の通信を行うルーチンを追加することにより実現できる。
【００１３】
一方、単一のＣＰＵでマルチブロック法を実施する場合には、各イタレーションレベルにおいて全ブロックをスイープするループを構成することが必要である。かかるループを含む流場計算プログラムを、単一ブロック用プログラムを流用して最小限の労力で作成することが望まれる。
【００１４】
【発明が解決しようとする課題】
本発明の目的は、マルチブロック法を使用して流場計算を行う流場計算プログラムであって、流場計算で取り扱われるデータ群を、直感的に理解しやすい形式で格納することが可能な流場計算プログラムを提供することにある。
【００１５】
本発明の他の目的は、マルチブロック法を使用して流場計算を行う流場計算プログラムであって、流場計算で取り扱われるデータ群を、効率的に格納することが可能な流場計算プログラムを提供することにある。
【００１６】
本発明の更に他の目的は、マルチブロック法を使用して流場計算を行う流場計算プログラムであって、ブロックの数、グリッドの数、及び格子点の数のうちの少なくとも一つを計算対象に応じて容易に調節することが可能な流場計算プログラムを提供することにある。
【００１７】
本発明の更に他の目的は、単一のブロックを用いて流場計算を行う単一ブロック用プログラムを流用して、各イタレーションレベルにおいて全ブロックをスイープする流場計算プログラムを作成する場合に、該流場計算プログラムを作成するのに必要な労力を、最小化することにある。
【００１８】
【課題を解決するための手段】
以下に、［発明の実施の形態］で使用される番号・符号を用いて、課題を解決するための手段を説明する。これらの番号・符号は、［特許請求の範囲］の記載と［発明の実施の形態］の記載との対応関係を明らかにするために付加されている。但し、付加された番号・符号は、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【００１９】
本発明による流場計算プログラムは、計算対象空間を複数のブロックに分割するマルチブロック法を用いて流場を計算するための流場計算プログラムである。当該流場計算プログラム（６）は、
（ａ）前記計算対象空間に定められる格子点の座標の格納に使用される格子点格納配列（Ｇｒｉｄ）と、前記格子点に対応して定められる状態定義点における流場の状態を示す流れ変数の格納に使用される流れ変数格納配列（Ｆｌｏｗ）とをメンバーとして有する構造体のデータ型を定義するステップ（１１ａ〜１１ｃ）と、
（ｂ）前記データ型を有するブロックデータ配列（ＢＬＫ）を定義するステップ（１１ｄ）と、
（ｃ）前記ブロックデータ配列を用いて前記流場を計算するステップ（６ｃ）とをコンピュータ（１０）に実行させる。当該流場計算プログラムでは、ブロックデータ配列（ＢＬＫ）が構造体を用いて階層化され、流場計算で取り扱われるデータ群を、直感的に理解しやすい形式で格納することが可能である。
【００２０】
状態定義点とは，流体の状態が定義される点であり，その格子点に対応して定められる。状態定義点としては，格子点そのものが使用されることが可能であり，また，隣接する複数の格子点を頂点とする多面体（例えば，４面体，及び６面体）の中心点が使用されることが可能である。
【００２１】
ブロックデータ配列（ＢＬＫ）が動的割り当て可能なように定義され、更に、当該流場計算プログラム（６）が
（ｄ）前記ブロックの数を前記ブロックデータ配列の大きさとして、前記ブロックデータ配列（ＢＬＫ）の記憶領域への割り当てを行うステップ
をコンピュータ（１０）に更に実行させることが好ましい。このようなブロックデータ配列（ＢＬＫ）は、流場計算で取り扱われるデータ群を、効率的に格納することが可能であり、更に、ブロックの数の調節が容易である。
【００２２】
格子点格納配列（Ｇｒｉｄ）と流れ変数格納配列（Ｆｌｏｗ）とは、動的割り当てが可能であるように定義されることが好ましい。
【００２３】
格子点格納配列（Ｇｒｉｄ）が一次元配列であり、且つ、前記格子点の座標が格納される格子点データ配列（ｐ）をメンバーとするような構造体のデータ型を有し、格子点格納配列（Ｇｒｉｄ）の大きさが、前記ブロックのそれぞれに定められる計算格子の数に一致されることが好ましい。格子点格納配列（Ｇｒｉｄ）がこのような構成を有していることは、マルチグリッド法が採用される場合のブロックデータ配列（ＢＬＫ）の更なる階層化を可能にし、マルチグリッド法が採用される場合に流場計算で取り扱われるデータ群を、一層に直感的に理解しやすい形式で格納することを可能にする。
【００２４】
この場合、格子点格納配列（Ｇｒｉｄ）は、動的割り当てが可能であるように定義され、当該流場計算プログラム（６）は、
（ｅ）前記計算格子の数を、前記格子点格納配列（Ｇｒｉｄ）の大きさとして、前記格子点格納配列（Ｇｒｉｄ）の前記記憶領域への割り当てを行うステップをコンピュータ（１０）に更に実行させることが好ましい。このような流場計算プログラム（６）の動作は、計算対象に応じた計算格子の数の調節を容易にする。
【００２５】
更に、格子点データ配列は、動的割り当てが行われる多次元配列であり、当該流場計算プログラム（６）は、更に、
（ｆ）前記計算格子に含まれる格子点の配置態様に基づいて、格子点データ配列（ｐ）の大きさを決定し、前記決定された大きさを有するように前記格子点データ配列（ｐ）の前記記憶領域への割り当てを行うステップ
をコンピュータ（１０）に実行させることが好ましい。
【００２６】
また、流れ変数格納配列（Ｆｌｏｗ）は、一次元配列であり、且つ、前記格子点に対応して定められる状態定義点における流場の状態を示す流れ変数を格納する流れ変数データ配列（ｑ）をメンバーとするような構造体のデータ型を有し、流れ変数格納配列（Ｆｌｏｗ）の大きさは、前記ブロックのそれぞれに定められる計算格子の数に一致されることが好ましい。流れ変数格納配列（Ｆｌｏｗ）がこのような構成を有していることは、マルチグリッド法が採用される場合のブロックデータ配列（ＢＬＫ）の更なる階層化を可能にし、マルチグリッド法が採用される場合に流場計算で取り扱われるデータ群を、一層に直感的に理解しやすい形式で格納することを可能にする。
【００２７】
この場合、流れ変数格納配列（Ｆｌｏｗ）は、動的割り当てが可能であるように定義され、当該流場計算プログラム（６）は、更に、
（ｇ）前記計算格子の数を、流れ変数格納配列（Ｆｌｏｗ）の大きさとして、流れ変数格納配列（Ｆｌｏｗ）の前記記憶領域への割り当てを行うステップ
をコンピュータ（１０）に実行させることが好ましい。
【００２８】
更に、流れ変数データ配列（ｑ）は、動的割り当てが行われる多次元配列であり、当該流場計算プログラム（６）は、更に、
（ｈ）前記計算格子に含まれる格子点の配置態様に基づいて、前記流れ変数データ配列の大きさを決定し、前記決定された大きさを有するように前記流れ変数データ配列（ｑ）の前記記憶領域への割り当てを行うステップ
をコンピュータ（１０）に実行させることが好ましい。
【００２９】
本発明による流場計算プログラム（６）は、計算対象空間を複数のブロックに分割するマルチブロック法を用いて流場を計算するための流場計算プログラムである。当該流場計算プログラム（６）は、
（ｉ）格子点格納ポインター配列（ｐ）と流れ変数格納ポインター配列（ｑ）とを定義するステップ（６ｄ）と、
（ｊ）前記ブロックの内部にある格子点の座標を格納する格子点データ配列（配列ＢＬＫに定義されたｐ）と、前記格子点に対応して定められた状態定義点おける流場の状態を示す流れ変数を格納する流れ変数データ配列（配列ＢＬＫに定義されたｑ）とを定義するステップ（１１ａ〜１１ｄ）と、
（ｋ）前記ブロックのうちの一のブロックを指定するステップ（３１ａ）と、（ｌ）前記格子点データ配列（配列ＢＬＫに定義されたｐ）のうちの、前記一のブロックの内部にある格子点の座標を格納した格子点データ配列部分（ＢＬＫ（ｎ）％ｐ）に、前記格子点格納ポインター配列（ｐ）を結合させるステップ（３１ｃ）と、
（ｍ）前記流れ変数データ配列（配列ＢＬＫに定義されたｑ）のうちの前記一のブロックの内部にある状態定義点における流場の状態を示す流れ変数データを格納した流れ変数データ配列部分（ＢＬＫ（ｎ）％ｑ）に、前記流れ変数格納ポインター配列（ｑ）を結合させるステップ（３１ｃ）と、
（ｎ）前記格子点格納ポインター配列（ｐ）と前記流れ変数格納ポインター配列（ｑ）とを引数とする命令文により、前記一のブロックの内部の流場を計算するステップ（３１ｄ）
とをコンピュータ（１０）に実行させる。
【００３０】
（ｏ）前記（ｎ）ステップの後、前記格子点格納ポインター配列の前記格子点データ配列部分への結合、及び、前記流れ変数格納ポインター配列の前記流れ変数データ配列部分への結合を解除するステップ（３１ｅ）と、
（ｐ）前記ブロックのうちの他のブロックを指定するステップ（３１ａ）と、（ｑ）前記格子点データ配列（配列ＢＬＫに定義されたｐ）のうちの、前記他のブロックの内部にある格子点の座標を格納した他の格子点データ配列部分（ＢＬＫ（ｎ）％ｐ）に、前記格子点格納ポインター配列（ｐ）を結合させるステップ（３１ｃ）と、
（ｒ）前記流れ変数データ配列（配列ＢＬＫに定義されたｑ）のうちの、前記他のブロックの内部にある状態定義点における流場の状態を示す他の流れ変数データを格納する他の流れ変数データ配列部分（ＢＬＫ（ｎ）％ｑ）に、前記流れ変数格納ポインター配列（ｑ）を結合させるステップ（３１ｃ）と、
（ｓ）前記命令文により、前記他のブロックの内部の流場を計算するステップ（３１ｅ）
とを前記コンピュータ（１０）に更に実行させることが好ましい。
【００３１】
本発明による流場計算プログラム（６）は、計算対象空間を複数のブロックに分割するマルチブロック法を用いて前記計算対象空間の流場を計算するための流場計算プログラムである。当該流場計算プログラム（６）は、
（ｔ）前記計算対象空間に定められる格子点の座標の格納に使用される格子点格納配列（Ｇｒｉｄ）と、前記格子点に対応して定められる状態定義点における流場の状態を示す流れ変数の格納に使用される流れ変数格納配列（Ｆｌｏｗ）とをメンバーとして有する構造体のデータ型を定義するステップ（１１ａ〜１１ｃ）と、
（ｕ）前記データ型を有し、且つ、動的割り当て可能なブロックデータ配列（ＢＬＫ）を定義するステップ（１１ｄ）と、
（ｖ）前記ブロックの数を前記ブロックデータ配列の大きさとして、前記ブロックデータ配列の記憶領域への割り当てを行うステップ（６ｂ）と、
（ｗ）格子点格納ポインター配列（ｐ）と流れ変数格納ポインター配列（ｑ）とを定義するステップ（６ｄ）と、
（ｘ）前記ブロックのうちの一のブロックを指定するステップ（３１ａ）と、（ｙ）前記ブロックデータ配列（ＢＬＫ）のうちの、前記一のブロックの内部にある格子点の座標を格納する格子点データ格納部分（ＢＬＫ（ｎ）％ｐ）に、前記格子点格納ポインター配列（ｐ）を結合させるステップ（３１ｃ）と、
（ｚ）前記ブロックデータ配列（ＢＬＫ）のうちの、前記一のブロックの内部にある状態定義点における流場の状態を示す流れ変数データを格納する流れ変数データ格納部分（ＢＬＫ（ｎ）％ｑ）に前記流れ変数格納ポインター配列（ｑ）を結合させるステップ（３１ｃ）と、
（ａａ）前記格子点格納ポインター配列（ｐ）及び前記流れ変数格納ポインター配列（ｑ）を引数とする命令文（３１ｅ）により、前記流場を計算するステップ
とをコンピュータ（１０）に実行させる。
【００３２】
【発明の実施の形態】
以下、添付図面を参照しながら、本発明による流場計算プログラムの実施の一形態を説明する。
【００３３】
本発明による流場計算プログラムの実施の一形態では、図２に示されているコンピュータシステム１０が使用される。コンピュータシステム１０は、入力装置１、記憶装置２、演算装置３、及び出力装置４を含む。
【００３４】
入力装置１は、ユーザからコンピュータシステム１０へのユーザインターフェースである。入力装置１は、ユーザーによって与えられたコンピュータシステム１０への指示や、計算条件を受け取る。入力装置１としては、キーボード、マウス等が使用される。
【００３５】
記憶装置２は、格子生成プログラム５と流場計算プログラム６と流場計算データ７とを記憶する記憶領域を提供する。格子生成プログラム５には、格子を生成する格子生成を行う手順が記述される。この格子生成では、計算対象空間が複数のブロックに分割され、更に、各ブロック毎に計算格子が生成される。本実施の形態では、マルチグリッド法が使用され、一のブロックについて密度が異なる複数の計算格子が生成される。流場計算プログラム６には、マルチブロック法を用いて流場計算を行う手順が記述される。この流場計算の間に行われるブロック間の情報交換には、ＢＪ−ＳＧＳ法が使用される。流場計算データ７は、流場計算に使用されるデータである。流場計算データ７は、構造体を利用した階層構造を有している。
【００３６】
演算装置３は、格子生成プログラム５と流場計算プログラム６とを実行する。演算装置３が格子生成プログラム５を実行することにより、格子生成が行われ、演算装置３が流場計算プログラム６を実行することにより、流場計算が行われる。演算装置３に含まれているＣＰＵは、単一である。
【００３７】
出力装置４は、演算装置３によって算出された流場計算の結果を出力する。出力装置４としては、ＣＲＴ（Ｃａｔｈｏｄｅ　Ｒａｙ　Ｔｕｂｅ）ディスプレイのような表示装置や、プリンタが使用される。
【００３８】
流場計算プログラム６は、図３に示されているように、データ構造宣言部分６ａと、配列割り当て部分６ｂと、実計算部分６ｃとを含む。
【００３９】
データ構造宣言部分６ａは、流場計算データ７のデータ構造を定義し、宣言するプログラム部分である。データ構造宣言部分６ａが演算装置３に実行されることにより、流場計算データ７のデータ構造が定義される。図１は、流場計算データ７のデータ構造を定義するデータ構造宣言部分６ａの内容を示すプログラムリスト１１である。プログラムリスト１１は、ＦＯＲＴＲＡＮ９０を用いて記述されている。
【００４０】
プログラムリスト１１のうち、”ｔｙｐｅ　Ｇｒｉｄ＿ｔｙｐｅ”で開始され、”ｅｎｄ　ｔｙｐｅ　Ｇｒｉｄ＿ｔｙｐｅ”で終了する”Ｇｒｉｄ＿ｔｙｐｅ”定義部分１１ａでは、データ型”Ｇｒｉｄ＿ｔｙｐｅ”を定義する型宣言が行われる。データ型”Ｇｒｉｄ＿ｔｙｐｅ”は、４次元配列であり、且つ、ポインタ属性を有する格子点データ配列ｐをメンバーとする構造体である。格子点データ配列ｐは、格子点の座標を示す格子点データの格納に使用される。格子点データ配列ｐの大きさは定義されておらず、格子点データ配列ｐは、動的割り当てが可能である。
【００４１】
”ｔｙｐｅ　Ｆｌｏｗ＿ｔｙｐｅ”で開始され、”ｅｎｄ　ｔｙｐｅ　Ｆｌｏｗ＿ｔｙｐｅ”で終了する”Ｆｌｏｗ＿ｔｙｐｅ”定義部分１１ｂでは、データ型”Ｆｌｏｗ＿ｔｙｐｅ”を定義する型宣言が行われる。データ型”Ｆｌｏｗ＿ｔｙｐｅ”は、４次元配列であり、且つ、ポインタ属性を有する流れ変数データ配列ｑをメンバーとする構造体である。流れ変数データ配列ｑは、各状態定義点における流れ変数を示す流れ変数データの格納に使用される。状態定義点とは，流体の状態が定義される点であり，その格子点に対応して定められる。状態定義点としては，格子点そのものが使用されることが可能であり，また，隣接する複数の格子点を頂点とする多面体（例えば，４面体，及び６面体）の中心点が使用されることが可能である。流れ変数とは、流場の状態を示す物理量であり、流体の圧力、流体の速度で例示される。流れ変数データ配列ｑの大きさは定義されておらず、流れ変数データ配列ｑは、動的割り当てが可能である。
【００４２】
後述されるように、格子点データ配列ｐと流れ変数データ配列ｑとの大きさは、格子生成プログラム５によって生成された計算格子に含まれる格子点の配置状態に基づいて決定される。格子点データ配列ｐと流れ変数データ配列ｑとの動的割り当てが可能であることは、計算対象に応じて格子点の数を調節することを容易にする。
【００４３】
”ｔｙｐｅ　Ｂｌｏｃｋ＿ｔｙｐｅ”で開始され、”ｅｎｄ　ｔｙｐｅ　Ｂｌｏｃｋ＿ｔｙｐｅ　”で終了する”Ｂｌｏｃｋ＿ｔｙｐｅ”定義部分１１ｃでは、データ型”Ｂｌｏｃｋ＿ｔｙｐｅ”を定義する型宣言が行われる。データ型”Ｂｌｏｃｋ＿ｔｙｐｅ”は、いずれも１次元配列であり、且つ、ポインタ属性を有する配列Ｇｒｉｄと配列Ｆｌｏｗとをメンバーとする構造体である。配列Ｇｒｉｄは、”Ｇｒｉｄ＿ｔｙｐｅ”定義部分１１ａで定義されたデータ型”Ｇｒｉｄ＿ｔｙｐｅ”を有し、配列Ｆｌｏｗは、”Ｆｌｏｗ＿ｔｙｐｅ”定義部分１１ｂで定義されたデータ型”Ｆｌｏｗ＿ｔｙｐｅ”を有している。配列Ｇｒｉｄと配列Ｆｌｏｗとの大きさは定義されておらず、配列Ｇｒｉｄと配列Ｆｌｏｗとは、動的割り当てが可能である。後述されるように、配列Ｇｒｉｄと配列Ｆｌｏｗとの大きさは、各ブロックに定められた計算格子の数に一致される。配列Ｇｒｉｄと配列Ｆｌｏｗとの動的割り当てが可能であることは、計算対象に応じて計算格子の数を調節することを容易にする。
【００４４】
型宣言文１１ｄは、配列ＢＬＫがデータ型”Ｂｌｏｃｋ＿ｔｙｐｅ”を有する１次元配列であることを宣言している。データ型”Ｂｌｏｃｋ＿ｔｙｐｅ”を有する配列ＢＬＫは、ポインタ属性を有することになる。データ型”Ｂｌｏｃｋ＿ｔｙｐｅ”を有する配列ＢＬＫは、そのデータ構造が階層化されており、データ構造の直感的な把握が容易である。配列ＢＬＫは、グローバル変数とされる。
【００４５】
配列ＢＬＫの大きさは定義されておらず、配列ＢＬＫは、動的割り当てが可能である。配列ＢＬＫの大きさは、後述されるように、ブロックの数に応じて決定される。配列ＢＬＫの動的割り当てが可能であることは、計算対象に応じてブロックの数を調節することを容易にする。
【００４６】
データ構造宣言部分６ａによって流場計算データ７のデータ構造が定義された後、配列割り当て部分６ｂによって、記憶装置２が提供する記憶領域に流場計算データ７を構成する各配列が割り当てられる。各配列の記憶領域への割り当ては、”ａｌｌｏｃａｔｅ”文によって行われる。
【００４７】
格子点データ配列ｐと流れ変数データ配列ｑとの大きさは、格子生成プログラム５によって生成された計算格子に含まれる格子点の配置に基づいて決定される。格子点データ配列ｐ及び流れ変数データ配列ｑの大きさが決定されると、記憶装置２が有する記憶領域の一部が、”ａｌｌｏｃａｔｅ”文により、格子点データ配列ｐ及び流れ変数データ配列ｑに割り当てられる。
【００４８】
配列Ｇｒｉｄと配列Ｆｌｏｗとの大きさは、ブロックのそれぞれに定められた計算格子の数に基づいて決定される。計算格子の数がｎｇｒｉｄである場合、配列Ｇｒｉｄと配列Ｆｌｏｗとの大きさは、ｎｇｒｉｄとされる。ｎｇｒｉｄは、ユーザによって与えられる数であり、入力装置１を介してコンピュータシステム１０に入力される。
【００４９】
配列ＢＬＫの大きさは、ブロックの数に基づいて決定される。ブロックの数がｎｂｌｏｃｋである場合、配列ＢＬＫの大きさは、ｎｂｌｏｃｋとされる。ｎｂｌｏｃｋは、計算対象空間の分割方法によって決定される数であり、ユーザによって与えられる。ｎｂｌｏｃｋは、入力装置１を介してコンピュータシステム１０に入力される。
【００５０】
実計算部分６ｃは、流場計算データ７を用いて、実際に流場計算を実施するプログラム部分である。図３に示されているように、実計算部分６ｃは、ポインタ配列宣言部分６ｄとイタレーション実行部分６ｅとを含む。
【００５１】
図４は、ポインタ配列宣言部分６ｄの内容を示すプログラムリスト１２を示している。ポインタ配列宣言部分６ｄでは、ポインタ配列ｐとポインタ配列ｑとの使用が宣言されている。ポインタ配列ｐ、ｑは、実計算部分６ｃのみで使用されるローカル変数である。
【００５２】
ポインタ配列宣言部分６ｄに続いて、イタレーション実行部分６ｅが実行される。図５は、イタレーション実行部分６ｅの構成を示している。イタレーション実行部分６ｅは、時間ステップイタレーション１３を含む。時間ステップイタレーション１３は、時間ステップレベル部分１４、１５、１６、及びマルチグリッドサイクル１７−１、１７−２で構成されている。時間ステップレベル部分１４、１５、１６は、時間ステップイタレーション１３のうちのマルチグリッドサイクル１７−１、１７−２の外部にある部分である。
【００５３】
マルチグリッドサイクル１７−１は、最密である計算格子を最初に使用し、以下、順次に計算格子が疎になるような順序で計算格子を使用して流場計算を行うイタレーションである。マルチグリッドサイクル１７−１は、グリッドレベル部分１８、１９と、ニュートンイタレーション２０とで構成されている。グリッドレベル部分１８、１９は、マルチグリッドサイクル１７−１のうちのニュートンイタレーション２０の外部にある部分である。
【００５４】
ニュートンイタレーション２０は、ニュートンレベル部分２１、２２と、ＳＧＳイタレーション２３とで構成されている。ニュートンレベル部分２１、２２は、ニュートンイタレーション２０のうちのＳＧＳイタレーション２３の外部にある部分である。
【００５５】
ＳＧＳイタレーション２３は、連立方程式の反復計算が行われる最内のループである。ＳＧＳイタレーション１６の実行中に、ブロック間の情報交換が行われる。
【００５６】
マルチグリッドサイクル１７−２は、疎である計算格子のデータから，補間によって，密である計算格子のデータを得るルーチンである。
【００５７】
このように、イタレーション実行部分６ｅは、多重のイタレーションループで構成されている。
【００５８】
イタレーション実行部分６ｅに含まれるイタレーションループの各イタレーションレベルにおいて、各ブロックをスイープするループが構成される。図６は、時間ステップイタレーション１３のイタレーションレベルにある時間ステップレベル部分１４に、各ブロックをスイープするループを構成するために使用されるプログラムリスト３１を示している。
【００５９】
ｄｏ文３１ａ、及びｅｎｄｄｏ文３１ｂは、各ブロックをスイープするためのループの開始位置と終了位置とを示している。ｄｏ文３１ａにより、計算対象となるブロックが指定される。計算対象空間に定められたｎｂｌｏｃｋ個のブロックを、それぞれ、第１〜第ｎｂｌｏｃｋブロックと呼ぶこととすると、ｄｏ文３１ａにより、第ｎブロックが計算対象に指定される。第ｎブロックに関する計算データは、配列ＢＬＫのうち、ＢＬＫ（ｎ）によって指定される部分に記述されている。
【００６０】
各ブロックをスイープするためのループの最初には、ポインタ配列結合文３１ｃが設けられている。ポインタ配列結合文３１ｃにより、ポインタ配列ｐが、ＢＬＫ（ｎ）で指定される部分のうちの第ｎブロックの格子点の座標が格納されている部分であるＢＬＫ（ｎ）％ｐに結合される。更にポインタ配列結合部分３１ｃにより、ポインタ配列ｑが、ＢＬＫ（ｎ）で指定される部分のうちの第ｎブロックの内部にある状態定義点における流場の状態を示す流れ変数が格納されている部分であるＢＬＫ（ｎ）％ｑに結合される。
【００６１】
ポインタ配列結合文３１ｃに続いて、時間ステップイタレーション部分１４で行われる演算が記述された命令文群３１ｄが設けられる。命令文群３１ｄは、ポインタ配列ｐ、ｑを引数としている。命令文群３１ｄには、サブルーチン（群）を呼び出す命令文が含まれることが可能である。この場合、呼び出されるサブルーチンは、ポインタ配列ｐ、ｑを引数とする。命令文群３１ｄが、ポインタ配列結合文３１ｃによってＢＬＫ（ｎ）％ｐ及びＢＬＫ（ｎ）％ｑに結合されるポインタ配列ｐ、ｑを引数とすることにより、命令文群３１ｄとして、単一ブロック用プログラムと同一の命令文群を使用することが可能である。命令文群３１ｄの実行が終了されると、ｎｕｌｌｉｆｙ文３１ｅにより、ＢＬＫ（ｎ）％ｐ及びＢＬＫ（ｎ）％ｑと、ポインタ配列ｐ、ｑとの結合が解除される。
【００６２】
ｎがインクリメントされながら、ｄｏ文３１ａ、及びｅｎｄｄｏ文３１ｂとによって規定されるループが実行される。これにより、第１ブロックについての時間ステップレベル部分１４の実行、第２ブロックについての時間ステップレベル部分１４の実行、…、第ｎｂｌｏｃｋブロックについての時間ステップレベル部分１４の実行が順次に行われる。
【００６３】
時間ステップレベル部分１５、１６、グリッドレベル部分１８、１９、ニュートンレベル部分２１、２２、及びＳＧＳイタレーション２３においても、時間ステップレベル部分１４と同様にして、各ブロックをスイープするためのループが構成される。これにより、各イタレーションレベルにおいて、全ブロックをスイープするループが構成され、演算装置３に含まれる単一のＣＰＵによってマルチブロック法を実行することが可能になる。
【００６４】
本実施の形態の流場計算プログラムでは、流場計算に使用される配列ＢＬＫのデータ構造が構造体を用いて階層化され、配列ＢＬＫのデータ構造を直感的に把握しやすい。更に、本実施の形態の流場計算プログラムでは、配列ＢＬＫを構成する配列Ｇｒｉｄ、配列Ｆｌｏｗ、格子点データ配列ｐ、及び流れ変数データ配列ｑに対して動的割り付けが行われ、ブロックの数、グリッドの数、及び格子点の数を計算対象に応じて容易に調節することが可能である。更に、このような動的割り付けは、使用する記憶領域を節約し、効率的なデータの記憶が可能である。
【００６５】
更に、本実施の形態の流場計算プログラムでは、ポインタ配列ｐ、ｑが、配列ＢＬＫの格子点データ配列ｐ及び流れ変数データ配列ｑに結合され、更に、ポインタ配列ｐ、ｑを引数とする命令文群によって流場計算が行われる。このような流場計算プログラムは、単一ブロック用プログラムを流用して、マルチブロック法を実行する流場計算プログラムを作成するのに必要な労力を有効に削減する。
【００６６】
なお，本実施の形態では、プログラムリストの記述にＦＯＲＴＲＡＮ９０が使用されているが、構造体の使用が可能であり、且つ、配列の動的割り当て機能を有する他のプログラム言語がＦＯＲＴＲＡＮ９０の代わりに使用され得ることは自明的である。他のプログラム言語としては、Ｃ言語が例示される。
【００６７】
【発明の効果】
本発明により、マルチブロック法を使用して流場計算を行う流場計算プログラムであって、流場計算で取り扱われるデータ群を、直感的に理解しやすい形式で格納することが可能な流場計算プログラムが提供される。
【００６８】
また、本発明により、マルチブロック法を使用して流場計算を行う流場計算プログラムであって、流場計算で取り扱われるデータ群を、効率的に格納することが可能な流場計算プログラムが提供される。
【００６９】
また、本発明により、マルチブロック法を使用して流場計算を行う流場計算プログラムであって、ブロックの数、グリッドの数、及び格子点の数のうちの少なくとも一つを計算対象に応じて容易に調節することが可能な流場計算プログラムが提供される。
【００７０】
また、本発明により、単一のブロックを用いて流場計算を行う単一ブロック用プログラムを流用して各イタレーションレベルにおいて全ブロックをスイープする流場計算プログラムを作成する場合に必要な労力が削減される。
【図面の簡単な説明】
【図１】図１は、本発明による流場計算プログラムの実施の一形態において使用される配列ＢＬＫのデータ構造の定義を記述したプログラムリストである。
【図２】図２は、本発明による流場計算プログラムの実施の一形態において使用されるコンピュータシステムを示す。
【図３】図３は、流場計算プログラム６の構成を示す。
【図４】図４は、ポインター配列ｐ、ｑを宣言するポインタ配列宣言部分６ｄのプログラムリストを示す。
【図５】図５は、イタレーション実行部分６ｅの構造を示す。
【図６】図６は、イタレーション実行部分６ｅのうちの、時間ステップレベル部分１４のプログラムリストを示す。
【符号の説明】
１：入力装置
２：記憶装置
３：演算装置
４：出力装置
５：格子生成プログラム
６：流場計算プログラム
６ａ：データ構造宣言部分
６ｂ：配列割り当て部分
６ｃ：実計算部分
６ｄ：ポインタ配列宣言部分
６ｅ：イタレーション実行部分
７：流場計算データ
１１：プログラムリスト
１１ａ：”Ｇｒｉｄ＿ｔｙｐｅ”定義部分
１１ｂ：”Ｆｌｏｗ＿ｔｙｐｅ”定義部分
１１ｃ：”Ｂｌｏｃｋ＿ｔｙｐｅ”定義部分
１１ｄ：型宣言文
１２：プログラムリスト
１３：時間ステップイタレーション
１４、１５、１６：時間ステップレベル部分
１７−１、１７−２：マルチグリッドサイクル
１８、１９：グリッドレベル部分
２０：ニュートンイタレーション
２１、２２：ニュートンレベル部分
２３：ＳＧＳイタレーション
３１：プログラムリスト
３１ａ：ｄｏ文
３１ｂ：ｅｎｄｄｏ文
３１ｃ：ポインタ配列結合文
３１ｄ：命令文群
３１ｅ：ｎｕｌｌｉｆｙ文
【図１】
2004005036.tif 000003
【図２】
2004005036.tif 000004
【図３】
2004005036.tif 000005
【図４】
2004005036.tif 000006
【図５】
2004005036.tif 000007
【図６】
2004005036.tif 000008