Closed y-yosuke closed 8 years ago
著者:野良エンジニアーず
必要なCADデータ(or メッシュデータ)
面白そう。どこかのエンジニア系ウェブマガジンへの投稿記事にはならないのかな?
2016-09-20 16:31 GMT+09:00 Yosuke Yamamoto notifications@github.com:
必要ななCADデータ(orメッシュデータ)
- 車体
- 車体とは独立した各ホイール
それぞれのデータは閉形状(ソリッド)となっていなければならない.
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/y-yosuke/ppoino-cars/issues/12#issuecomment-248225534, or mute the thread https://github.com/notifications/unsubscribe-auth/AAXmlXpJnWS1qK0XUwLmPYv_K-EAtP5Qks5qr4u-gaJpZM4J_H_W .
CFD解析で必要な数値をCADで拾う.
本まとめで使用している座標系
(各コメントを再編集しながら書くのでコメント時系列が謎になるかもしれませんがご容赦を)
あった方が良いフリーソフトウェア
SimScale にアップロードするSTLデータの作成・アップロード方法
以下 https://github.com/y-yosuke/formula-ppoino/issues/11#issuecomment-233222586 からコピー&編集.
Rhinoceros で STL 出力してから SimScale にアップロードするまでの手順 ASCIII の STL ファイルが出力できるのであれば Rhinoceros 以外でもほぼ同じ手順
Rhinoceros で分割して利用したいソリッド部分をそれぞれ ASCII で STL 出力 する. 例えば,body, fl-wheel, fr-wheel, rl-wheel, rr-wheel などで分ける. (精度は 0.1mm ぐらいで出力している)
STLファイル内の solid の名称が全て OBJECT になっており,そのままだと SimScale で利用する際に区別がつかなく face の選択ができない. そこで,各 STLファイル をテキストエディタなどで編集してファイルの冒頭と末尾にある次の行を編集して,各 solid が固有の名称を持つようにする.
<変更前>
solid OBJECT
...
endsolid OBJECT
<変更後(例)>
solid OBJECT2
...
endsolid OBJECT2
コマンドラインで次のように Mac/Linux では cat を Windows では type を実行して複数のSTLファイルを1つのSTLファイルに結合する.
cat 1.stl 2.stl 3.stl 4.stl 5.stl > fp-023b_cfd_combiled_rename-OBJECT.stl
結合したSTLファイルが 300MB を超えるような場合はZIP圧縮をして 300MB 以下にする.
Rhinoceros for Mac を用いた手順なので Linux や Windows 他のCADを用いた手順も併記もしくは追記したいところ.
solid STL generated by MeshLab
facet normal -1.000000e+00 -0.000000e+00 -0.000000e+00
outer loop
vertex 0.000000e+00 1.000000e+01 1.000000e+01
vertex 0.000000e+00 1.000000e+01 0.000000e+00
vertex 0.000000e+00 0.000000e+00 1.000000e+01
endloop
endfacet
...(中略)...
facet normal 0.000000e+00 0.000000e+00 1.000000e+00
outer loop
vertex 1.000000e+01 1.000000e+01 1.000000e+01
vertex 0.000000e+00 0.000000e+00 1.000000e+01
vertex 1.000000e+01 0.000000e+00 1.000000e+01
endloop
endfacet
endsolid vcg
前後したが SimScale のアカウント取得手順
以下 https://github.com/y-yosuke/ppoino-cars/issues/8#issuecomment-231632285 からコピー&編集
SimScale : https://www.simscale.com/
アカウントを作る際の Tips
その他
メッシュの作成・シミュレーションの実行
A. とりあえずはじめる - 既存プロジェクトをコピーして利用 B. 新規プロジェクトを作成してシミュレーションを行う
他の計算できている既存プロジェクトをコピーして利用することで,細かい設定の理解は後回しで手っ取り早くシミュレーションを行う.
Public Projects https://www.simscale.com/projects/ からコピーしたいプロジェクトを開く.
例) https://www.simscale.com/projects/yosukegb4/fp-023d_-_control/
右上の [ Actions ▼ ] をクリックして中の [ Make a copy ] をクリックする.
プロジェクト名を記入して [ Copy Project ] をクリックする.→ コピー開始
プロジェクトをワークベンチで開く.右上の [ Open → ] をクリックする.
ワークベンチを開いたときは Mesh Creator タブになっている. 以後メッシュ作成作業をこのタブ内で行う.
左上 [ ▼ Upload CAD/mesh ] → [ Upload geometry ] をクリック
Format に STL を指定して予めアップロード用に準備しておいたSTLファイル(ZIPファイル)をアップロードする.
アップロードしたデータの様子
元のSTLデータの単位がミリなら,メートルにスケール変換する.
Geometries → (アップロードしたデータ) → Geometry Operations → [ +New ] → General CAD → Scaling → Scaling factor [ 0.001 ] → [ ▶︎Start ]
メッシュ作成の設定を行うときに使用するサーフェスには全て face set としての名前を付けておく. 流体領域判定に成功しやすいようなのでホイールなど独立したものは各々の fece set とした方が良い.
名前を付ける手順
Geometries → (アップロードしたデータ) → Topological Entity Sets (画面右側に表示されているモデルのサーフェスをクリックして選択 → 赤色に) → [ Create set ] → Name of new set [ body ](例)→ [ Create ]
新しく利用するために既存のメッシュを複製する.
Meshes → Available Meshes → (既存のメッシュ) → Actions → Duplicate
必要なら複製したメッシュの名称変更を行う.
Meshes → (複製したメッシュ) → Mesh → Mesh Information → Name [ 新しいメッシュ名称 ] → [ Save ] ボタンをクリック
複製したメッシュにあるSTLデータの指定先をアップロードした車両STLデータに変更する.
複製したメッシュには元の車両に合わせたメッシュ作成の設定が残っている. 新しく解析する車両データに合わせてこれらの設定を調整したり追加で設定する.
流体領域の大きさと位置を調整する.大きさは下記 <流体領域 _BaseMeshBox の大きさの目安> を参考に調整し,位置については主に路面高さを計算したい車高に合わせて調整する.
路面高さの調整を例にとると
Meshes → (複製したメッシュ) → Mesh Operations → Operation 1 (数字は場合による) → Geometry Primitives → _BaseMeshBox → Min. Point (z) [ -0.11 ] & Max. Point (z) [ 5.89 ]
_BaseMeshBox
どの領域が流体に相当するのかを指定するのが MaterialPoint で,流路かつ車体の外側のどこかの1点を指定する.元のメッシュの設定のままで大丈夫なら変更は不要.
Meshes → (複製したメッシュ) → Mesh Operations → Operation 1 (数字は場合による) → Geometry Primitives → MaterialPoint
メッシュを車体に近い部分は細かく,遠い部分は荒く切る,局所的に細かい領域を設定するなどを行うことで全体のメッシュ規模を大きくせずに計算量の増大を避けながら精度を良くしたい. メッシュの規模は計算する車両形状や要求される精度にもよるが,ノード数(Nodes)で凡そ 10M nodes 前後(9〜11M)を目安とする.メッシュ作成ができるか?やシミュレーション計算ができるか?のみをまず見るのであれば 6M nodes ぐらいから始めても良いかもしれない.
メッシュを細かさを指定する領域形状は下記項目で設定する.
Meshes → (複製したメッシュ) → Mesh Operations → Operation 1 (数字は場合による) → Geometry Primitives
全体図
車体各部の Geometry Primitives
(簡潔な文章作成能力が低下しているのかもしれないけど,改めて手順を書いていると長く感じるなぁ...)
領域 Gemetry Primitives に対してメッシュをどのような細かさにするかは下記項目で設定する.
Meshes → (複製したメッシュ) → Mesh Operations → Operation 1 (数字は場合による) → Mesh Refinements
下図では Geometry Primitives にある領域 Regeon-Car に対して Mesh Refinements 内の Region - Car Box という項目でメッシュの Level が 3 になるよう指定している.
メッシュの Level などの変更を行ったら [ Save ] ボタンをクリックして保存する.
メッシュのレベルは最も荒いメッシュを Level 0 としてその辺の大きさが半分になる(=メッシュ数では8倍)のを Level +1 の違いとしている.
最も荒いメッシュの大きさの指定は流体領域 _BaseMeshBox を各軸方向に何等分するかを指定して決めている.
Meshes → (複製したメッシュ) → Mesh Operations → Operation 1 (数字は場合による) → Mesh Refinements → Mesh Operation → ▼Properties → Bounding Box Discretization → ▼Properties → Bounding Box geometry primitive _BaseMeshBox → Number of cells in x direction [ 100 ] Number of cells in y direction [ 10 ] Number of cells in z direction [ 20 ]
例えば _BaseMeshBox の大きさが [ x , y , z ] = [ 30 , 3 , 6 ] の場合に上記の分割数とすると Level 0 のメッシュの大きさは [ x , y , z ] = [ 0.3 , 0.3 , 0.3 ] となる.
車両STLデータを変更すると車両各サーフェス(face sets)に指定したメッシュの細かさの設定は解除される.「2.2 サーフェスに名前を付ける」で設定した face set の名前が以前の車両データと同じでも設定は解除されるので再設定が必要となる.
下図では face set の body に対してメッシュの Level を 5〜6 になるよう指定している.
指定するサーフェスや Level などの変更を行ったら [ Save ] ボタンをクリックして保存する.
下図では face set の fl-wheel, fr-wheel, rl-wheel, rr-wheel に対してメッシュの Level を 5〜6 になるよう指定している.
CFDでは物体表面近くの流れ(境界層)を再現しやすいようにサーフェス近くのメッシュに薄い「レイヤー」を加える手法が採られる.
Layers(メッシュ作成結果)
ここでは次の2項目に対してレイヤーを挿入する設定を行っている.
「2.5.4 メッシュ細かさレベルの設定」の中で行った「車両各サーフェス(face sets)に指定したメッシュの細かさの設定」と同じように face set の名前が以前のものと同じでも車両STLデータを変更するとレイヤーの設定も解除されてしまうので再設定が必須である.
下図では Mesh Refinements の Layer - car という項目で face set の body, fl-wheel, fr-wheel, rl-wheel, rr-wheel に対してレイヤーを3層挿入するよう指定している.
大概は再設定不要(複製した後でも設定は解除されない)
下図では Mesh Refinements の Layer - floor という項目で _BaseMeshBox の Z が最小値になる面 ( ▼ Details → Bounding box face [ ZMin ] にて指定)に対してレイヤーを3層挿入するよう指定している.
(「実際に行うこと」と「その行うことの理由・説明」をレイアウト的に分けたいけど... 後まわし)
各設定が終わったらメッシュの作成を実行する.
Meshes → (複製したメッシュ) → Mesh Operations → Operation 1 (数字は場合による) Mesh Operation → [ ▶︎ Start ] ボタンをクリック
Please confirm(ポップアップ)→ Really start this operation? → [ Yes ] ボタンをクリック
タブを Simulation Designer に移動してシミュレーションの複製を行う.
Simulations → (既存のシミュレーション) → Actions → Duplicate
必要なら複製したシミュレーションの名称変更を行う.
Simulations → (複製したシミュレーション) → Information → Name [ 新しいシミュレーション名称 ] → [ Save ] ボタンをクリック
2. メッシュ作成 で作成した新しいメッシュに変更する.
Simulations → (複製したシミュレーション) → Domain → Available Meshes → [ 新しく作成したメッシュ ] をクリック
境界条件を設定するメッシュサーフェスに名前を付ける.境界条件ごとに face set にする.
名前を付ける手順
Simulations → (複製したシミュレーション) → Domain → Topological Entity Sets (画面右側に表示されているモデルのサーフェスをクリックして選択 → 赤色に) → [ Create set ] → Name of new set [ walls ](例)→ [ Create ]
設定した symmetry 面を選択した様子
メッシュを変更しているので流体部分の Volume がどこになるかを再設定する.
Simulations → (複製したシミュレーション) → Model → Materials → Air → Material → Topological Mapping → Filter for entity types [ volumes ] → [レ] region0 をチェック → [ Save ] ボタンをクリック
複製したシミュレーションには境界条件の設定は残っているがメッシュを変更したので各境界条件で境界サーフェスに face sets を再設定する必要がある.
Simulations → (複製したシミュレーション) → Model → Boundary Conditions → (各項目)
下記の境界条件の例では車速が 30m/s (=108km/h) に相当するように設定しているが,速度を変更したい場合には次の項目を変更する必要がある.
車体やホイールの大きさによって前後輪の回転軸の位置や方向,角速度が変わるので各関連項目を変更する必要がある.
fr-wheel の境界条件の設定の様子
CFD では繰り返し計算を行い解を収束させていくのでその回数を何回まで行うのかを End time value で設定する.
最初のシミュレーション計算では長めに1500〜2000回ぐらいを設定して,解や次項で説明する力・空力係数が収束する回数を見極め,その次のシミュレーション計算で回数を少なくすると限られた core hours を有効に使える.
Simulations → (複製したシミュレーション) → Simulation Control
車両に加わる力の合計および Cd や Cl, Clf, Clr などの空力係数の算出を行うために Result Control の設定を行う.
Simulations → (複製したシミュレーション) → Result Control → Force and moments → (各項目)
body-wheels_force(ボディ・ホイールに加わる力の合計を算出)
body-wheels_coefficient (ボディ・ホイールに加わる力から算出される空力係数)
body_coefficient (ボディに加わる力から算出される空力係数)
各設定値参考図
各設定が終わったらシミュレーション計算を実行する.まずは Simulation Run を作成する.
Simulations → (複製したシミュレーション) → Simulation Runs → [ + New ] ボタンをクリック → Create new run (ポップアップ) → [ Create ] ボタンをクリック
Simulation Run を作成したら,その実行を行う.
Simulations → (複製したシミュレーション) → Simulation Runs → Run 1 → Simulation Run → [ ▶︎ Start ] ボタンをクリック → Please confirm (ポップアップ) Really start this simulation run? → [ Yes ] ボタンをクリック
(ザザッとシミュレーション計算まで書いた.結構長いよ...)
(英語で書いた方が貢献できるような気もするけど... まぁ英語なら SimScale の Help に書いてあるし... でも Forum から拾ってきたネタもあるし... やっぱ英語でも書いた方が... の循環なう)
力や空力係数の計算結果は Solver Log にまとまって記されてる.
Simulations → (計算したシミュレーション) → Simulation Runs → Run 1 → Solver Log
Time = 800
smoothSolver: Solving for Ux, Initial residual = 1.98094240616e-05, Final residual = 9.66601990653e-06, No Iterations 1
smoothSolver: Solving for Uy, Initial residual = 7.31260818588e-05, Final residual = 6.1870830769e-06, No Iterations 4
smoothSolver: Solving for Uz, Initial residual = 6.2604945439e-05, Final residual = 9.19228291559e-06, No Iterations 3
GAMG: Solving for p, Initial residual = 0.000718999071727, Final residual = 9.70743626569e-07, No Iterations 13
GAMG: Solving for p, Initial residual = 5.62974494733e-05, Final residual = 8.96078107978e-07, No Iterations 5
GAMG: Solving for p, Initial residual = 5.12143699452e-06, Final residual = 7.34864647736e-07, No Iterations 2
time step continuity errors : sum local = 1.57985722188e-07, global = 9.94975392262e-12, cumulative = -6.19812465077e-06
smoothSolver: Solving for omega, Initial residual = 8.70734785119e-06, Final residual = 8.70734785119e-06, No Iterations 0
smoothSolver: Solving for k, Initial residual = 7.93543914947e-05, Final residual = 6.03825035892e-06, No Iterations 4
ExecutionTime = 9447.2 s ClockTime = 9489 s
forces forces00 output:
sum of forces:
pressure : (193.594173988 -212.110703092 -75.7760171924)
viscous : (17.3917652795 -1.08442962181 1.11069449078)
porous : (0 0 0)
sum of moments:
pressure : (89.2308128353 39.431771951 87.3466997841)
viscous : (-0.291788799091 9.8484672478 11.4303927196)
porous : (0 0 0)
forceCoeffs forceCoeffs02 output:
Cm = 0.0299764568244
Cd = 0.440050754546
Cl = -0.251531019826
Cl(f) = -0.0957890530888
Cl(r) = -0.155741966738
forceCoeffs forceCoeffs01 output:
Cm = 0.0495514285929
Cd = 0.562189539161
Cl = -0.198951946782
Cl(f) = -0.049924544798
Cl(r) = -0.149027401984
End
Finalising parallel run
(章番号の構成が崩壊ぎみ... まとめる機会があれば整える)
解の収束の様子を示したグラフは2ヶ所で見ることができる.1つは Simulation Designer タブ上で
Simulations → (計算したシミュレーション) → Simulation Runs → Run 1 → Convergence plots
もう1ヶ所は Post-Processor タブ内の
Simulations → (計算したシミュレーション) → Run 1 → Convergence plot
また力や空力係数の計算値の推移もプロットされる.Post-Processor タブ内の
Simulations → (計算したシミュレーション) → Run 1 → Force plot → body-wheels_force → Force coefficients plot → body_coefficietnt → body-wheels_coefficietnt
Post-Processor タブ内でグラフィカルに表示することもできるがBETA版ということで ParaView の使用を勧められる.
Simulations → (計算したシミュレーション) → Run 1 → Solution fields
レンダリングの設定をローカルにすると動作が少し軽くなるかも?ならないかも?重くなるかも?
(右上)Configuration → Rendering Mode → Local にスイッチ
PCにインストールした ParaVIew でシミュレーション結果を見るために計算結果のダウンロードを行う.SImulation Designer タブ内で
Simulations → (計算したシミュレーション) → Simulation Runs → Run 1 → Solution Run → [ Results ▼ ] → Download results
ダウンロードしたデータはZIP形式なので展開する.
ParaView を起動する. ダウンロードしたZIPファイルを展開して出来たフォルダ内にある case.foam というファイルを開く.
ParaView はデータに対して Filter を縦列・並列に加えて結果を見やすくするので Filter をいろいろ適用してみる.
結果プロットページから CSV, XLS がダウンロード出来るようになっていた.
GitHub の Issue のコメントの画像リンクをそのまま SimScale の Forum に貼ると SimScale の System が勝手に SimScale 側に画像をダウンロードしてリンクを差し替えるようだ.
Geometry operation がこけるな.
こけてるのでなく集中的な使用の制限なのかな???
おー? Geometry Operation が転ける?帰ってこない?原因が2つに絞られたような気がする.
本件,別 Issue にすれば良かった.
Geometry Operation 転ける原因の件,確定ではないが安全側なので 2点 Wiki を修正しておいた.
ファイルサイズ 300MB とか [ Save ] ボタンを押すとかしても帰ってこないな.別の何かか...
手元の Mac の MeshLab でスケール変換フィルタ処理を行っても 同じデータで成功するときもあれば失敗して MeshLab が落ちるときもあるので 現状,そういうものなのかもしれない.
ならば,手元でスケール変換が成功したものを Upload して SimScale 側で Geometry Operation をする必要をなくした方が確実かな.それを試す.
MeshLab が落ちるのはバージョンを 2016.12 から 1.3.3 に戻したら落ちなくなった. もしかして SimScale の中身も同じような感じ???
MeshLab の Scale の挙動もいまいち理解してないんだよね. Scale したはずなのにエクスポートしたら元通りだったり. 手順的な理由はあるんだろうけど何かやってちゃんと出来てたらそれでいいやって感じになってしまう.
MeshLab でスケールしてからアップロードしたSTLからメッシュ切れた.これだな.
200 core hours / 6 hours の制限が有料の Professional Plan にはあるとのことで 無料の Community Plan にも何らかの集中的な利用に対する制限があるのかも?
ちなみに,いまのシミュレーションの大体の core hours は
で,STL Upload, Set-up, CFD Result Download の時間がかかるから, まぁ 200 core hours / 6 hours にはかからないかな.変な Job が残っていたらかかるかも?
Wiki 用画像の貼付
SimScale に Rhinoceros のデータ *.3dm を直接 Upload できるようになっている. ちゃんとメッシュを切れるか試してみるか.
ダメだ.サーフェスに欠損がある.
翻訳するのであれば、手伝えるところは手伝いますよ。
ありがとうございます. @emijah
Rhino ファイルのアップロードは新しい機能ですが 複雑なモデルでは STEP と同じように向いていないようです.
結局 STL でモデルのアップロードをするので, 今のところ既に GitHub Wiki に書いた内容のままで問題ないと思います. https://github.com/y-yosuke/ppoino-cars/wiki/Web%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E8%87%AA%E5%8B%95%E8%BB%8A%E7%A9%BA%E5%8A%9B%E9%96%8B%E7%99%BA-%E3%83%BC-SimScale-Aerodynamic-Simulation-%E3%83%BC-Wiki
また何か書く必要があるときに翻訳などお願いするかもしれません.
的なまとめを書いておくかな.
追記)Wiki にまとめた https://github.com/y-yosuke/ppoino-cars/wiki/Web%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E8%87%AA%E5%8B%95%E8%BB%8A%E7%A9%BA%E5%8A%9B%E9%96%8B%E7%99%BA-%E3%83%BC-SimScale-Aerodynamic-Simulation-%E3%83%BC-Wiki