CAE

FreeCADで面を分割してstlファイル出力のマクロ(Netgenを使う)

こんにちは(@t_kun_kamakiri

本記事は前回の記事の続編になります。

前回の記事と今回の記事を書いた経緯としてはOpenFOAMのメッシュ作成の際にsnappyHexMeshやcfmeshを使う場合があり、その際にstlの品質が悪い場合にうまくメッシュ生成ができない場合がありました。
特に、cfmeshではstlの品質が問題となりメッシュ生成でエラーが出てしまいます。

そこで、メッシュ品質を直接良くなるかは確認できていませんが、FreeCADでのメッシュ生成方法を検討したので記事としてまとめました。

今回はFreeCADで以下のモデルを作成した状態からはじめます。

前回の記事で書いたFreeCADを使ったstlファイルの自動生成のマクロを使うと下記の一番左のようになります。

FreeCADには「Standard」、「Mefisto」、「Netgen」」、「gmsh」のメッシャーが備わっており四面体であればNetgenを使うことでメッシュ生成が簡単に行えます。
ただし、表面しかメッシュ生成していないのでstlにした際には、今回作成したstlを使ってsnappyHexMeshやcfMeshでメッシュ生成することになります。

では、本記事の内容です。

本記事の内容
  • FreeCADのNetgenを使ってメッシュ生成
  • FreeCADのNetgenの自動化(マクロの使い方)

FreeCADのドキュメント

より詳細のFreeCADの使い方に関しては以下のドキュメントを参考にしてください。

Netgenについて

Netgen

パラメーター意味
Finenessメッシュの粗密。

  • 非常に粗い
  • 粗い
  • 中程度
  • 細かい
  • 非常に細かい
  • ユーザー定義

から選択できる。

Mesh size gradingメッシュサイズの等級。小さいほどメッシュが細かくなります。0.1-1の値。
Element per edgeエッジあたりの要素数。大きいほどメッシュが細かくなります。0.1-10の値。
Element per curvature radius曲率半径あたりの要素数。大きいほどメッシュが細かくなります。0.2-10の値。
Optimize surface表面形状の最適化を行うかどうか。
Second order elements2次要素の生成を行うかどうか。
Quad dominant六面体的なメッシュ配置を行うかどうか。

FreeCADでマクロ作成方法

FreeCADにはPythonスクリプトが備わっており、スクリプトを書くことで名前を付けて面分割した状態でメッシュ生成からひとつのファイルにまとめてstlファイルとして出力することができます。

Pythonスクリプトのテンプレートして前回の記事のコードを持ってきます。

前回のコードがこちら。

export_stlAll.py

こちらを修正していきます。

FreeCADでメッシュ生成のマクロ記録

FreeCAD操作用のライブラリのPythonコードをいきなり書くのはきついので、マクロ記録の起動を使って動作を確認して、コードに埋め込んでいきます。

メッシュデザインワークベンチ「Mesh Design」に移動して以下のようになっている状態とします。

ひとつ面を選択した状態で「メッシュ(M)」>「シェイプからメッシュを生成」をクリックします。

そうすると以下のようにメッシュの生成の設定出てくるので、適当にメッシュを生成します。まずは、デフォルトのまま「OK」をクリックするとPythonコンソールにPythonのコードが記述されます。

これを確認することでメッシュ生成までに必要なコードであることがわかります。
ひとまずこちらはメインのコードにコピペしておきます。(後で編集します)

こちらを使って編集していきます。

Pythonコードの編集

必要なライブラリを先頭に書きます。

現在のディレクトリを以下のように絶対パスで書きます(確認)。

今回出力したいstlの保存先を指定するところですね。

に関しては、上の

に相当するので削除します。

は以下のようにします。

こちらもPythonコンソールで動作を確認すると何が起こっているか確認できます。
面に名前を付けているのですが、デフォルトで以下のように「Face*」となっているのですね。
ですので、Name属性を使って「obj.Name)」としておくと確実です。

は下の

に相当するので削除します。

は、

のように書き換えます。

の中の__doc__はdocに相当して、__mesh__はmeshに相当します。
delをした後も使っているためここでは削除しないようにします。
以下のように変更します。

これで完成です。

全体のコード

全体のコードを少しまとめると以下のようになります。

メッシュの粗さに応じて、以下の部分を変更してください。

結果の例を以下に載せておきます。

Netgen(中程度)

Netgen(非常に細かい)

Netgen(ユーザ定義)

今回作成したPythonスクリプトは「ユーザマクロの場所」に保存するとFreeCADから呼び出す子ができます。

参考書

本件の内容はFreeCADですが、FreeCADでモデル作成した先にはOpenFOAMで流体解析を行うのでOpenFOAMの参考書を紹介しておきます。

OpenFOAMによる熱移動と流れの数値解析(第2版)

OpenFOAMによる熱移動と流れの数値解析(第2版)

3,520円(12/08 23:45時点)
Amazonの情報を掲載しています
改訂新版 OpenFOAMの歩き方 (技術の泉シリーズ(NextPublishing))

改訂新版 OpenFOAMの歩き方 (技術の泉シリーズ(NextPublishing))

川畑 真一
2,640円(12/08 23:47時点)
発売日: 2022/04/15
Amazonの情報を掲載しています
OpenFOAMライブラリリファレンス

OpenFOAMライブラリリファレンス

株式会社テラバイト, 人見 大輔
16,500円(12/08 23:47時点)
Amazonの情報を掲載しています

【プロフィール】

カマキリ
(^^)

大学の専攻は物性理論で、Fortranを使って数値計算をしていました。
CAEを用いた流体解析は興味がありOpenFOAMを使って勉強しています。

プロフィール記事はこちら

 

大学学部レベルの物理の解説をします 大学初学者で物理にお困りの方にわかりやすく解説します。

このブログでは主に大学以上の物理を勉強して記事にわかりやすくまとめていきます。

  • ・解析力学
  • ・流体力学
  • ・熱力学
  • ・量子統計
  • ・CAE解析(流体解析)
  • note
    noteで内容は主に「プログラミング言語」の勉強の進捗を日々書いています。また、「現在勉強中の内容」「日々思ったこと」も日記代わりに書き記しています。
  • youtube
    youtubeではオープンソースの流体解析、構造解析、1DCAEの操作方法などを動画にしています。
    (音声はありません_(._.)_)
  • Qiita
    Qiitaではプログラミング言語の基本的な内容をまとめています。
関連記事もどうぞ

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です