Ubuntuで構造解析をやってみた
ふと、部品の構造解析をしたくなったので、Ubuntu PCで環境構築と手持ちの3Dモデルで簡単な構造解析を試してみました。
今回はこちらで(100円で)販売している3Dモデルを使用してみました。
構造解析の環境設定
FreeCAD
解析用の3Dモデルを作成するのに、(操作性に癖は有りますが、)オープンソースのFreeCADを使用すると便利です。
アプリセンターからインストールするのが簡単です。
CalculiX
構造解析のソルバーにはCalculiXを使用します。
選定基準として以下のことを考慮しました。
無料で商用利用可能なOSS(オープンソースソフトウェア)であること
サポートコミュニティが比較的大きいこと
構造解析以外にも複数の物理現象を組み合わせる、連成解析がしやすいように、preCICEの公式アダプタが用意されていること
インストールにはaptを使用します。
sudo apt install calculix-cgx calculix-ccx
sudo apt install libarpack2-dev libspooles-dev libyaml-cpp-dev
Wine
CalculiXのプリ・ポストプロセッサーにはGUIが直感的で使いやすいと評判のPrePoMaxを使用することにしました。
ただし、PrePoMaxはWindows用に作成されているので、Ubuntu上でWindowsアプリを動かすことのできる、Wineをインストールしておく必要があります。
以下、インストール方法です。
32bitアーキテクチャの有効化とWineリポジトリのGPGキー追加します。
sudo dpkg --add-architecture i386
sudo mkdir -pm755 /etc/apt/keyrings
sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key
Wineリポジトリの追加します(Ubuntu 24.04 - Noble Numbatの場合)。
sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/noble/winehq-noble.sources
Wineをインストールします。
sudo apt update
sudo apt install --install-recommends winehq-stable
Wineの設定画面で表示を確認します。
winecfg
日本語フォントが正しく表示されない場合、Winetricksをインストールしておきます。
sudo pacman -S winetricks
CJK(中国語、日本語、韓国語)フォントのインストールします。
winetricks cjkfonts
PrePoMax
※2024/10/25(金)から、サーバーがセキュリティ攻撃を受けているため、公式ページを開くことができなくなっているようですが、一時的にこちらで最新バージョンのPrePoMaxがダウンロードできるようにしてくれています。
ZIPファイルをダウンロードして解凍したものを、任意のディレクトリに保存してください。
解析条件を設定する
「PrePoMax.exe」が含まれるディレクトリに移動して、以下を実行してWineからPrePoMaxを起動します。
wine PrePoMax.exe
左側のメニューで「Geometry」が選択されていることを確認します。
新規解析用ファイルを立ち上げる
メニューバーの「File」→「New」を選択して、開いたウィンドウで以下の操作を行います。
Model Spaceで「3D」を選択
Unit System Typeで「mm, ton, s, ℃」を選択
「OK」ボタンを押す
3Dモデルをインポートする
FreeCADで作成した3DモデルをSTL形式で保存したものを、「File」→「Import」から開きます。
メッシュを生成する
左側メニューバーのから「Mesh Setup」を右クリック→「Create」を選択して、開いたウィンドウで以下の設定を行います。
Typeで「Meshing Parameters」を選択
3Dモデルを選択
PropertiesでMax element sizeで、メッシュの最大寸法を適切な値に変更(部品の最長辺の長さの1/20〜1/50程度が目安。今回は2mmとした)
「OK」ボタンを押す
メニューバーから「Mesh」→「Create Mesh」を選択してメッシュを生成します。
成功すると左側メニューが「FE Model」タブに切り替わります。
拘束する箇所と荷重をかける箇所を設定する
左側メニューから「Node Sets」→「Create」を選択して、開いたウィンドウで以下の設定を行います。
Propertiesの「Name」に「Node_Support」と入力する
Set Selectionウィンドウ下部の「More」ボタンを押す
FE mesh based selectionの「Face angle」を「5°」に設定する
3Dモデルの固定したい面を選択する
「OK」ボタンを押す
再度、左側メニューから「Node Sets」→「Create」を選択して、開いたウィンドウで以下の設定を行います。
Propertiesの「Name」に「Node_Load」と入力する
Set Selectionウィンドウ下部の「More」ボタンを押す
FE mesh based selectionの「Face angle」を「5°」に設定する
3Dモデルの荷重をかけたい面を選択する
「OK」ボタンを押す
左側メニューから「Surfaces」→「Create」を選択して、開いたウィンドウで以下の設定を行います。
Propertiesの「Name」に「Surface_Load」と入力する
「Region type」で「NodeSet」を選択する
「Node set」で「Node_Load」を選択する
「OK」ボタンを押す
物性値を設定する
左側メニューから「Materials」→「Create」を選択して、開いたウィンドウで以下の設定を行います。
Material Modelsから「Elastic」をダブルクリックする
「Young's modulus」で「2000 MPa」、「Poisson's ratio」で「0.35」を入力する(解析を行う部品の材質はPLAを想定)
「OK」ボタンを押す
左側メニューから「Sections」→「Create」を選択して、開いたウィンドウで以下の設定を行います。
Typeから「Solid Section」を選択する
「Region type」で「Part name」を選択する
「Part name」で解析を行う部品を選択する(デフォルトは「Solid_part-1」)
「OK」ボタンを押す
解析の種類を設定する
左側メニューから「Steps」→「Create」を選択して、開いたウィンドウで以下の設定を行います。
Typeから「Static Step」を選択する(今回は「静的解析」を行う)
「Region type」で「Part name」を選択する
「Part name」で解析を行う部品を選択する(デフォルトは「Solid_part-1」)
「OK」ボタンを押す
拘束条件と荷重の条件を設定する
左側メニューから「BCs」→「Create」を選択して、開いたウィンドウで以下の設定を行います。
Typeから「Displacement/Rotation」を選択する
「Name」を「Displacement_Rotation_Support」に変更する
「Region type」で「Node set name」を選択する
「Node set」で「Node_Support」を選択する
「U1」、「U2」、「U3」で「Fixed」を選択する(「UR1」、「UR2」、「UR3」はそのまま)
「OK」ボタンを押す
※拘束箇所について、X、Y、Z方向それぞれ、「変位なし&回転の制約なし」に設定しています。
左側メニューから「Loads」→「Create」を選択して、開いたウィンドウで以下の設定を行います。
Typeから「Surface Traction」を選択する
「Name」を「Surface Traction_Load」に変更する
「Region type」で「Surface name」を選択する
「Surface」で「Surface_Load」を選択する
「F1」を「0 N」、「F2」を「0 N」、「F3」を「-10 N」に設定する
「OK」ボタンを押す
※荷重をかける箇所の表面力について、Z軸のマイナス方向に10N(約1kgf)に設定しています。
解析条件を確認する
ここまでで、解析条件の設定が完了しました。
解析実行前に解析条件に間違いがないか確認しておきます。
解析を実行する
左側メニューから「Analysis」→「Run」を実行します。
解析が成功すると以下のようなウィンドウが表示されるので、「Results」を押して解析結果を表示します。
解析結果を確認する
左側メニューが「Results」タブに切り替わります。
このとき、デフォルトでは左側メニューの「DISP」→「ALL」(全方向の変位)が表示されます。
フックの先端におよそ0.6mmの変位が発生するようです。
左側メニューから他のパラメータについても解析結果を確認できます。
例えば「STRESS」→「MISES」を選択して、ミーゼス応力を表示してみます。
フックの根本におよそ13MPaのミーゼス応力が発生します。
PLAの引張強さが60MPaなので、10Nの等分布荷重であればフックは降伏しないようです。
あとがき
無料のGUIでストレスなく構造解析ができてしまうのはありがたいですね。
とはいえ、Wineのインストールが不完全で、一部文字化けが残ったり、ツールバーにカーソルを合わせるとPrePoMaxが落ちてしまったりする不具合が残ってしまったので、この辺についてはぼちぼち修正していきたいと思います。