20170327

FreeCADで応力計算

簡単なモデルを試す

自分の目的は、「基礎の基礎」の学習。
なので、問題の無いモデルを作って、お勉強する。

たとえば、紙っぽいモデルに、「丸穴を開けて、応力集中を見る」とかやりたい。(今回はやらなかったが。)

最終目標は、Youtubeに、

  • 使用された式に変数を代入→計算している計算課程をアニメし、
  • その計算課程をモデルに重ねて目まぐるしく動かしつつ、別の角度からプロットしてみたりして、
  • アルゴリズムを直感的に理解できる(かもしれない)
    動画をアップしたい。

最近、DFTの動画をアップしたので、どうぞよろしくお願いいたします。

まずは、やり方とかすっ飛ばして、FEM解析のサンプルを見てみる。

FreeCADに付属している、サンプルを見てみる。
スタート画面の一番下に、「FEMの解析例を読み込み」とあったので、クリックした。
20170326-01.png
ちょっと待つと、サンプルが表示されたが、見方が分からない。
いわゆる、片持ち梁だ、っていうのは、分かる。
20170326-02.png
これのどこが、解析結果なのか。というか、どうすれば、ここから、応力計算結果が表示できるのか。

  1. 「MechanicalAnalysis」を右クリックして、「解析結果をアクティブ」にする。
  2. 「FEM」ワークベンチの中で、アクティブになった「解析の結果情報を表示(S, R)」をクリック
  3. タスク内にて、「フォンミーゼス応力」を選択→等高線のカラーマップ(いわゆるコンター)が表示される。
  4. タスク内にて、変異の「表示」をチェック。スライドバーを右に移動する(か、もしくは「係数」を上げる)
    →大袈裟に表示した変位が表示される。
    20170326-03.png

    20170326-04.png

    20170326-05.png

    20170326-06.png

    20170326-07.png

完成品から、逆算的に、操作方法を探る。

なぜか、普通の手順とは、逆の手順で、進めることがよくある。
いつの間にか、雑誌とかも、後ろの方から、めくっている事がある。
(さすがに、マンガ雑誌ではやらないが。)

FreeCADを使ったFEMの勉強も、逆から攻める。
何故かは分かりません。

  1. 計算の実行ってどうやるの?
    FEM Solver 「CalculiX」を表示している時のみ、アクティブになる、下の絵の黄色いボタンが、計算開始のボタンらしい。
    20170326-08.png
    黄色いボタンが二つあるが、どちらでも、結局動いた。

自分は、主に、右で試した。
本当に動いているっぽかった。

もちろん、ソルバー、モデル、境界条件、材質情報設定が揃っている事が前提だろうとは思う。
「無かったら、どうなるのか?」みたいな事は、まだやらない。

  1. 材質の設定
    プリセットのサンプルが用意されている。ほとんど鉄だった。パラメータが同じなものもあり、違いが分からなかった。
    20170326-09.png

  2. 「新しい力学解析」で、解析セットを作る。
    「新しい力学解析」を押すと、選択しているソリッド(パーツ)のメッシュを切るためのダイアログが開く。
    ソリッドを複数選んだ状態で「新しい力学解析」をしても、何もしてくれない。(メッシュを作らない。)

  3. 拘束は、ノードに対してではなく、フェイスに張る。
    変位・回転の拘束も、荷重、圧力の拘束も、フェイスに対して張る。どうやら、熱流体や、振動は無い模様。

あぁー!はいはい。もう分かった。分かりましたよ。大丈夫。できそう。

最初からやってみた

球ではできない。

頑張って、こんな画像まで用意したにもかかわらず、球ではできない。
20170327-09-1.png
球では拘束の設定ができないため
なぜ拘束の設定ができないのかというと、球が、一面しかないから。

拘束は、メッシュのノードではなく、フェイスにかける。もしかしたら、球面のメッシュを、フェイスにする方法があるのかもしれないけど、面倒なので、円錐で試すか…

いや、円錐の頂点に荷重をかけると、頂点は面じゃないので、やっぱりできない。
おとなしく、円柱のソリッドを使うか…

仕切り直して、モデルー各種設定ー計算―図示

  1. ソフト立上げ
  2. 新規作成
  3. 「part」のワークベンチを選択
    20170327-01.png

    20170327-02.png

    20170327-03.png

  4. 適当な形状を作る。

  5. ワークベンチを「FEM」に変更。
  6. Aマーク(「新しい力学解析を作成」)を押す。( この際、4で作った形状を選択しながら、押す。
  7. メッシュの設定は「非常に細かい」を選んだ
    20170327-04.png

    20170327-06.png

    20170327-07.png20170327-08.png

  8. 材質設定には、素材に「CalculiX-Steel」を使ってみた

  9. 固定拘束が無いと、エラーが返ってくるので作った。(変位の拘束(FemConstraintDisplacement)でも、同じなのではないか?と思ったが、駄目だった。)
  10. 荷重拘束は、1000(単位は知らない。)
    20170327-10-0.png20170327-10-1.png

    20170327-11.png
    20170327-12.png20170327-13.png

  11. CalculiXする。
    20170327-14.png

  12. 解析を表示
    20170327-15.png

  13. スライダー最大値を10000

  14. スライダーを最大値にスライド。
    これは、さっきやったので、画像はあえて載せない。

  15. 条件を少しずつ変え、画像を排出。

  16. gifアニメにしたのがこちら。
    20170327-4.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にして。

例えば…

  1. ちょっと計算しては、画像を保存して
  2. 荷重の条件を変えて
  3. また、ちょっと計算しては、画像を保存して…

の繰り返し。
これをやるときに、画像の作成条件を、一定にしておけば、荷重を変化させたときの、変形が見れると思う。
やらないが。
多分、その内、やりたいとは思っているが。

アニメ用 連番画像の取得

やろうと思えば、こんな感じで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.

20170327-17.png
超便利。
a.
に続いて、書く可能性のある関数等を列挙してくれるので、

  • 使い方を知らない時、
  • もっと色々な機能が知りたかったりする時、
  • ド忘れした時、
    に便利。

目標は達成

タイトルの通り、目標は、FreeCADで応力計算。
とりあえず、

  • モデリング〜計算結果の図示まではできた。
  • gifアニメもできた。
  • 「FreeCADのダメなところ」みたいなものも、うっすら見え始めてきた。

となったので、目標達成と言えるんではないでしょうか。
拘束の設定がちょっと変な気がするが、その内、勉強して改善したい。

後は、Shade3D16Professionalだ。これをもう少しいじり倒したいが、今のところ、使う用事は皆無。
フーリエ変換のアニメも、逆フーリエとか二次元フーリエとかその逆フーリエとか残っているので、まだまだ山積している。

他にもやらなければならない事が山積している。
なんだかんだで楽しいので良い。

posted by yuchan at 07:00 | Comment(0) | FreeCAD
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: