----------------------------
個人的な趣味でアレコレ,アミアミ模様をつくる作業を.
以下,自分向けメモ.
1・enGrid .... ×(インストールうまくいかず)
2・netgen .... x (インストールうまくいかず..そもそも linux 版あるのか?)
3・gmsh .... インストールできたけど,GUI の数値入力がうまくいかないときがある
インターフェース,思想が,ややこしい.
4・自作のアレコレプログラム .... 時間がかかる,でも,勉強になる.
5・自作+既存のライブラリとかをミックス.
----------------------------
で,いろいろ考えた末に 5 の パータンを考える.
そんなときに,triangle コマンドに出会う.
知ってる人は知ってるとおもうけど,GMT にも,使われてたりする.
この人のページをみて,少し勉強してみた.
なるへそ.ちゃんと動いた動いた.
でも, showme というコマンドでエラーがでる.
せっかく点列が出てるのに,確認表示できないなぁ.
ということで,出力された点列,三角形リストから
STL ファイルを作るプログラムを Fortran で取り急ぎ作成.
(所要時間 40 分くらいか?)
ちゃんと パラビューで読めた.
----------------------------
いつもお世話になってる,この人のプログラムと,admesh をインスコしておく.
適当なディレクトリにおいて,パスとおして,どこからでもコマンドライン利用できるようにしておく.
なぜ,このへんのプログラムを入れるか?
上記の triangle ツールが 2 次元にしか対応してないため.
----------------------------
作業時に,バイナリデータとかも,見なアカンから
yum -y install bvi
としておく.
----------------------------
admesh のコマンド指定の仕方を忘れてしまったが,
むかしのこのブログページを便りに,作業ノートに付記している時期を特定して
なんとか,昔のメモを見つける.
結論からいうと,
admesh --y-rotate=45 ./input.stl -a ./output.stl
と言う具合にやる.
入力ファイルと出力ファイルの間の "-a" は"アスキー やでぇ" の意味.
* ご想像どおり, -b で "バイナリやでぇ" の指定.
ちなみに,solid 名は書き換わってしまう.
回転したものの,おかしな線が入る.
回転軸を形状のエッジにずらせば,治るか?
もともとのLの字形状(X-Y 平面)を,
Y=+1 として,さっきの 90 度回転をやってみようかなぁ...
《平行移動》
admesh --translate=0,1,0 ./data/output.stl -a ./data/01.stl
平行移動だけでも,変な線を勝手に入れてる....!
しかたないから,昔作った座標変換 Fortran プログラムを使うか...
まともに動いてる.
さらに赤い領域を X 軸まわりで,90度回転すると,
(もちろん,多くは優秀なプログラム),自分で作ると安心感が.
----------------------------
以下のような,矩形の領域指定パラメータと三角形の微小要素辺長 (dL) を指定して,
矩形 STL ファイルを作成するシェルスクリプトをつくる.
x0=0.0
y0=0.0
z0=0.0
Lx=100.0
Ly=120.0
Lz=140.0
dL=5.0
結果的には,
こんな感じ.
----------------------------
上記ができれば,なかの領域に四面体セルを敷き詰めたくなるもの.
残念ながら, パラビュウでその処理を行うには STL 側が1ファイル?である必要が...
ということで,上記の 6 面 STL をマージしてみる.
みると,全然ダメ.
メニュー上,3D Delauney というのがあるが,所詮 Post ツールであって, Pre じゃないので.
----------------------------3D Delauney の対処は後回しにして,
孔つきの,二次元 Delauney を triangle コマンドで考える.
見様見真似で,以下のようなデータファイルを用意 (withHole.poly と命名).
# withHole.poly
# triangle -pqa6.5 ./withHole.poly
8 2 0 0
# outer
1 0.0 0.0
2 100.0 0.0
3 100.0 70.0
4 0.0 70.0
# inner
5 40.0 20.0
6 60.0 20.0
7 60.0 40.0
8 40.0 40.0
#
8 0
1 1 2
2 2 3
3 3 4
4 4 1
#
5 5 6
6 6 7
7 7 8
8 8 5
#
1
1 45.0 25.0
で,コマンドラインで,
triangle -pqa6.5 ./data/withHole.poly
と打ち込む.6.5 は三角形の最小面積,最後のカラムは入力ファイル.入力ファイルの最終行で,どの閉領域が孔かを判別させるための座標値入力かと思われる.
なかなか,やりおるなぁ.. triangle .
----------------------------
いろいろ頑張ったけど,
こーいう手もあるようだ.
----------------------------
ある程度,2次元については,疑問が片付いたから,
3 次元の閉領域にセルを敷き詰める方法を考えたい.
----------------------------
上の,直方体 STL を gmsh で読ませると,こんな感じ.
操作,表示法を理解してないからわからないが,
素の状態の STL のアミアミとは違う.
敵か味方かわからない gmsh .....
----------------------------
引き続いて,アレコレ調べてると,
こーいうツールに行き当たった.
入出力のファイルフォーマットからみて,上記の triangle を意識してるのか?
インストールも triangle のようにサックリ.
ちゃんと変換できてるかどうか,パラビュウでみるためにも,
VTK に変換することを考える.
とは言っても,VTK フォーマットは詳しくないので,
いつもお世話になってる,このページを見る.
四面体について参考にしておく.ただ,1セル分のサンプルしか載ってないので,
複数セルをどうやって書くか調べておく.
以下のようなファイルを用意
# vtk DataFile Version 2.0
sample data de arinsu .... 何書いてもいい
ASCII .... アスキー
DATASET UNSTRUCTURED_GRID
POINTS 5 float .... 以降に節点が5行記述される(浮動小数点表記)
0.0 0.0 0.0
1.0 0.0 0.0
0.0 1.0 0.0
0.0 0.0 1.0
0.0 0.0 -1.0
CELLS 2 10 .... 2セル分,データの個数は合計 10 個(10カラム)
4 0 1 2 3 .... 4 点で, 四面体記述(0 1 2 3)
4 0 1 2 4
CELL_TYPES 2 .... セルの個数 2 個
10 .... 四面体用の予約番号
10
多分,OK牧場.
----------------------------
tetgen が吐き出す出力ファイルをみて vtk ファイルへの変換プログラムを考える.
ゴリゴリ,コーディング....
四面体のフェイス番号リストを,四面体の節点番号リストに変換するアルゴリズム,どうしようか...
あたまが こんがらがり そうだったので,ちゃんと初心にもどって
フローチャートを描く.
プログラム作り終わったあとに,
データが読み込みエラー(エラーはでないけど,表示がおかしい).
よくよく,フォーマット説明を読んだら,
上記のような,ことをせずとも,テトラ要素の節点リストだったことが判明.
できあがってプログラムつかって,,サンプルデータで,vtk を出力処理すると
合っているのか,間違っているのか...
----------------------------
こんなサンプル載っけてくれるんだったら,サンプルデータも置いてほしいなぁ.
----------------------------
明日,もっとプログラム,チェック&改良しよっと.
----------------------------
0 件のコメント:
コメントを投稿