非構造格子

久しぶりにCFDの話。研究というよりも趣味のような感覚で非構造格子に手を出してみたのだが、構造格子と違って隣接点の情報が簡単に判明するわけではないから、プリプロセスとして隣接点(要素)や共有面(辺)の情報をデータベースに登録する必要が出てくる。これが非常に悩ましい問題で、節点の番号と座標値、要素を構成する節点番号の情報からどのようにして上述のようなデータベースを構築するか、配列としてどのような配列を用意すればよいのかというところで頭を抱えてしまう。
http://www.amazon.com/exec/obidos/tg/detail/-/0471498432/qid=1124941317/sr=8-1/ref=pd_bbs_1/002-4259738-6241646?v=glance&s=books&n=507846
非構造格子のそうしたデータ構造に関する書籍は日本語では見たことがなく、上記の本を参考にして、ほぼ同じデータ構造でプログラムを構築しデータベースを作成してみたはいいのだが、三角形あるいは四面体要素の場合には問題ないのだが、四角形あるいは六面体要素の場合には辺に関するデータベースにおいて、対角線まで登録してしまうという状態。非構造格子って”流体力学”というよりもこんな”アルゴリズム論”のような話がかなり多くなりそうな予感。
ベクトル化とパラレル化を考えると構造体やポインタは使えないし、ソルバから分離してしまった方がいいのだろうか。。。
さらに、1次要素であればまだ話は簡単なのだが、市販格子生成ソフト(Gridgen)等で作成された1次要素から2次要素を構築する際には他の人はどのようにやっているのだろうか。。。特にFEMでは2次のアイソパラメトリック要素を使う人は多いはず。最初から専用の格子生成ソフトで2次要素としてデータを吐き出しているのだろうか。。。
2次要素にする際には”辺数”の情報が必要になり、ループは”辺数”で回す必要がある。さらにその分、座標値の配列要素が増加し、要素を構築する節点のデータベースを更新する必要もある。こういうのを効率よくやるためにはどうやっていくのがよいのだろうか。。。