簡単なモデルを試す
自分の目的は、「基礎の基礎」の学習。
なので、問題の無いモデルを作って、お勉強する。
たとえば、紙っぽいモデルに、「丸穴を開けて、応力集中を見る」とかやりたい。(今回はやらなかったが。)
最終目標は、Youtubeに、
- 使用された式に変数を代入→計算している計算課程をアニメし、
- その計算課程をモデルに重ねて目まぐるしく動かしつつ、別の角度からプロットしてみたりして、
- アルゴリズムを直感的に理解できる(かもしれない)
動画をアップしたい。
最近、DFTの動画をアップしたので、どうぞよろしくお願いいたします。
まずは、やり方とかすっ飛ばして、FEM解析のサンプルを見てみる。
FreeCADに付属している、サンプルを見てみる。
スタート画面の一番下に、「FEMの解析例を読み込み」とあったので、クリックした。
ちょっと待つと、サンプルが表示されたが、見方が分からない。
いわゆる、片持ち梁だ、っていうのは、分かる。
これのどこが、解析結果なのか。というか、どうすれば、ここから、応力計算結果が表示できるのか。
- 「MechanicalAnalysis」を右クリックして、「解析結果をアクティブ」にする。
- 「FEM」ワークベンチの中で、アクティブになった「解析の結果情報を表示(S, R)」をクリック
- タスク内にて、「フォンミーゼス応力」を選択→等高線のカラーマップ(いわゆるコンター)が表示される。
タスク内にて、変異の「表示」をチェック。スライドバーを右に移動する(か、もしくは「係数」を上げる)
→大袈裟に表示した変位が表示される。
完成品から、逆算的に、操作方法を探る。
なぜか、普通の手順とは、逆の手順で、進めることがよくある。
いつの間にか、雑誌とかも、後ろの方から、めくっている事がある。
(さすがに、マンガ雑誌ではやらないが。)
FreeCADを使ったFEMの勉強も、逆から攻める。
何故かは分かりません。
- 計算の実行ってどうやるの?
FEM Solver 「CalculiX」を表示している時のみ、アクティブになる、下の絵の黄色いボタンが、計算開始のボタンらしい。
黄色いボタンが二つあるが、どちらでも、結局動いた。
自分は、主に、右で試した。
本当に動いているっぽかった。
もちろん、ソルバー、モデル、境界条件、材質情報設定が揃っている事が前提だろうとは思う。
「無かったら、どうなるのか?」みたいな事は、まだやらない。
「新しい力学解析」で、解析セットを作る。
「新しい力学解析」を押すと、選択しているソリッド(パーツ)のメッシュを切るためのダイアログが開く。
ソリッドを複数選んだ状態で「新しい力学解析」をしても、何もしてくれない。(メッシュを作らない。)拘束は、ノードに対してではなく、フェイスに張る。
変位・回転の拘束も、荷重、圧力の拘束も、フェイスに対して張る。どうやら、熱流体や、振動は無い模様。
あぁー!はいはい。もう分かった。分かりましたよ。大丈夫。できそう。
最初からやってみた
球ではできない。
頑張って、こんな画像まで用意したにもかかわらず、球ではできない。
球では拘束の設定ができないため
なぜ拘束の設定ができないのかというと、球が、一面しかないから。
拘束は、メッシュのノードではなく、フェイスにかける。もしかしたら、球面のメッシュを、フェイスにする方法があるのかもしれないけど、面倒なので、円錐で試すか…
いや、円錐の頂点に荷重をかけると、頂点は面じゃないので、やっぱりできない。
おとなしく、円柱のソリッドを使うか…
仕切り直して、モデルー各種設定ー計算―図示
- ソフト立上げ
- 新規作成
適当な形状を作る。
- ワークベンチを「FEM」に変更。
- Aマーク(「新しい力学解析を作成」)を押す。( この際、4で作った形状を選択しながら、押す。 )
材質設定には、素材に「CalculiX-Steel」を使ってみた
- 固定拘束が無いと、エラーが返ってくるので作った。(変位の拘束(FemConstraintDisplacement)でも、同じなのではないか?と思ったが、駄目だった。)
スライダー最大値を10000
スライダーを最大値にスライド。
これは、さっきやったので、画像はあえて載せない。条件を少しずつ変え、画像を排出。
- gifアニメにしたのがこちら。
やっとの思いで見つけた、結果を表示するスクリプト
FemTools関連のコマンドは、なぜかpythonコンソールに表示されない。だから、どうやって結果の表示をpythonで操作するのかを、探すのに、苦労した。
「FreeCAD 変位アニメ」とかで検索したけど、なかなか見つからなかった。
だから、探し当てた経緯も書いておく。
「FreeCAD mises」とかで検索して、FreeCADのフォーラムが先頭に出てきた。
しかし、それの中に、ドンピシャなタイトルは無かったが、一つ一つ見ることにした。
あまり関係なさそうな、しかし若干かすっているタイトルの、FreeCADのフォーラム FEM Reportingとか、Stress Questionを見て、ミーゼス応力の書き方は分かった。
なんで、これが、pythonコンソールに表示されないのかは謎。
両方とも、PrzemoFさんのやった内容が参考になる。
import FemGui
import FemTools
FemGui.setActiveAnalysis(App.activeDocument().MechanicalAnalysis)
a= FemTools.FemTools()
a.run()a.load_results()
a.show_result(result_type = "U1", limit = 10)
"""
result_type = "U1"#x
result_type = "U2"#y
result_type = "U3"#z
result_type = "Sabs"#mises
result_type = "Uabs"#absolute value of stress
"""
関数 FemTools.FemTools().show_result(result_type = “U1”, limit = 10)
の引数は、
引数 | 説明 |
---|---|
“U1” | x方向の応力 |
“U2” | y方向の応力 |
“U3” | z方向の応力 |
“Uabs” | 応力の絶対値 |
“Sabs” | ミーゼス応力 |
この時、「FreeCAD FemTools」で検索したらリファレンスが出てきて、FemTools周りの情報が出てきた。
この検索機能がローカルに欲しいんだけど…。
FemTools.FemTools()には、
関数 FemTools.FemTools().show_displacement
もあって、
a.show_displacement(displacement_factor=1000)
とかすることで、変位の大げさ具合の係数が変更できる。
googleで検索しても、日本語サイト出てこなかった。(検索全部で20個位)で一番乗りだと思うけど、ここを参考にして、作った。
なんで、一番乗りだったかの原因は、普通は、この機能はアニメして使わないし、GUIで十分だから。
絵があれば十分。動画はいらない。
「大げさ具合」を変化させて描画しているだけなので、「力を加えるとこういう風に動く」というわけではないと思う。
「この動画の様に動く」というわけではないから、動画で表現するのは、間違っているかも。
つまり、誤解を与えるような動画になるのかもしれない。
もし、荷重を徐々に変化させた時の、形状の変化(変位)や、応力の変化を動画で図示したいのであれば、
parametric sweepっていうのを、やるべきだと思う。(そういうコマンドがあるわけではない。)
しかも、描画時には、変位の係数を0にして。
例えば…
- ちょっと計算しては、画像を保存して
- 荷重の条件を変えて
- また、ちょっと計算しては、画像を保存して…
の繰り返し。
これをやるときに、画像の作成条件を、一定にしておけば、荷重を変化させたときの、変形が見れると思う。
やらないが。
多分、その内、やりたいとは思っているが。
アニメ用 連番画像の取得
やろうと思えば、こんな感じでmatplotlibで、gifアニメとかできたけど、
わざわざ画像化したものを、matplotlibにロードするスクリプトを書くのもどうかなぁと思った。
かといって、opencvを使って、AVI作るのもなんか違うし。
まだこれは、そんなレベルの活動ではないので。
gifアニメは、Giamというのを拾ったので、それで作ることにした。
for factor in range(4000)[::100]:
a.show_displacement(displacement_factor=factor)
Gui.activeDocument().activeView().saveImage('C:/Users/Ojisan/Desktop/current-%05.f.png'%(factor),300,300,'Current')
#Gui.activeDocument().activeView().saveImage('C:/Users/Ojisan/Desktop/trans-%05.f.png'%(factor),700,700,'Transparent')
できた連番画像を、Giamでgifアニメにした。
pythonコンソールのオートコンプリート機能が涙が出るほど便利だった。
a= FemTools.FemTools()
とした後で、手動で下のピリオドまで入力すると、オートコンプリートしてくれる。
a.
超便利。
a.
に続いて、書く可能性のある関数等を列挙してくれるので、
- 使い方を知らない時、
- もっと色々な機能が知りたかったりする時、
- ド忘れした時、
に便利。
目標は達成
タイトルの通り、目標は、FreeCADで応力計算。
とりあえず、
- モデリング〜計算結果の図示まではできた。
- gifアニメもできた。
- 「FreeCADのダメなところ」みたいなものも、うっすら見え始めてきた。
となったので、目標達成と言えるんではないでしょうか。
拘束の設定がちょっと変な気がするが、その内、勉強して改善したい。
後は、Shade3D16Professionalだ。これをもう少しいじり倒したいが、今のところ、使う用事は皆無。
フーリエ変換のアニメも、逆フーリエとか二次元フーリエとかその逆フーリエとか残っているので、まだまだ山積している。
他にもやらなければならない事が山積している。
なんだかんだで楽しいので良い。