はじめに
本記事では、筆者が開発しているGrasshopper用構造解析プラグイン「FEMur」の基本的な使い方について解説します。
使用するGrasshopperファイルは、以下のリポジトリにて公開しています。あらかじめダウンロードのうえ、ご利用ください。
https://github.com/hrdsh-std/QiitaRepo/tree/main/FEMur/Grasshopper%E3%81%A7%E5%A7%8B%E3%82%81%E3%82%8B%E3%83%91%E3%83%A9%E3%83%A1%E3%83%88%E3%83%AA%E3%83%83%E3%82%AF%E6%A7%8B%E9%80%A0%E8%A7%A3%E6%9E%90%20%EF%BD%9C%20FEMur%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9
FEMurについて
FEMurは、Grasshopper上でパラメトリックな構造解析を行うために開発した解析コンポーネントです。
先日、β版をリリースしました。
Grasshopper上で構造解析を行うことで、「形状」と「構造」を同時に検討できるようになります。形状を変更すれば、解析結果もリアルタイムに更新される一般的な商用ソルバーでは得られない体験ができます。
UIはできるだけシンプルに設計し、構造設計者にとって馴染みのある操作感を意識しました。Grasshopperに不慣れな方でも、直感的に扱える構成を目指しています。
現在のバージョンでは、梁要素による3次元弾性解析に対応しています。
今後は、板要素(シェル要素)や、断面算定など解析機能の拡張も進めていく予定です。
なお、本バージョンはβ版のため、今後仕様変更や機能追加が行われる可能性があります。
■インストール方法
1. Food4RhinoページからZIPファイルをダウンロード
Food4Rhino | FEMur
2. ZIPを解凍し、フォルダごと以下のフォルダにコピー
C:\Users[ユーザー名]\AppData\Roaming\Grasshopper\Libraries
3.Rhinoceros・Grasshopperを起動し、FEMurタブが追加されていることを確認
※β版のため、不具合がありましたら XのDM までご連絡ください。
FEMurによる構造解析の手順
早速、FEMurを使って構造解析をしてみましょう。
例としてR7年の一級建築士の問題を解いてみたいと思います。

出典:令和7年 一級建築士学科試験 No.4(建築技術教育普及センター)
0.単位について
FEMurでは、データ入力時の単位系を mm・N で統一しています。
そのため、寸法はmm、荷重や力はNで入力してください。
後述しますが、ポスト処理では指定した単位系で結果を出力することが可能です。用途に応じて、適切な単位へ変換して表示できます。
1. Geometryの作成
まずは、梁要素へ変換する前のLineを作成します。
後の工程で処理しやすくするために、柱・梁・ブレースなどの部材ごとに分けてモデリングしておくことをおすすめします。

2. Lineを構造解析用の梁用素に変換[3. Element]タブ →[BeamElement]コンポーネント
先ほど作成したLineをPolyLineに接続します。これにより、RhinoのGeometryが構造解析用の梁要素へ変換されます。
入力できるジオメトリは、Line または Polyline です。

通常の構造解析では、まず節点を定義し、その節点番号を用いて要素を定義する、という手順を取るのが一般的です。
一方、FEMurではGrasshopper上でパラメトリックに構造解析を行うことを前提としているため、要素の定義時には「節点番号」ではなく「構成節点の座標」で管理する実装としています。
その後、AssembleModelコンポーネントの段階で、各節点および要素に対してID(NodeID・ElementID)が自動的に割り当てられます。
AssembleModelコンポーネントへ渡す前の状態では、まだ正式なIDは付与されていません。そのため、ElementIDやNodeIDには -1 というダミーIDが設定されています。
AssembleModelコンポーネントに入力されたタイミングで、内部的にIDが再割り当てされ、解析用モデルとして確定します。
[Assemble前]

[Assemble後]

3. 断面の入力 | [1. CrossSection]タブ →[CrossSection_H]コンポーネント

作成した BeamElement コンポーネントの入力端子に、断面情報を接続します。
今回の例題では、すべての部材を同一断面としています。
そのため、柱・梁ともに H-300×150×6.5×9 を使用します。
4. 材料特性の入力 | [2. Material]タブ →[Material]コンポーネント
Materialコンポーネントを右クリックすると、Preset(既定値)から材料を選択できます。
今回の例題では、Steel を選択します。
5. 境界条件の入力 | 6.Supportタブ>Supportコンポーネント
入力には Point または NodeID を指定できます。
-
Pointを入力した場合
AssembleModel実行時に、対応する節点IDが自動的に割り当てられます。 -
NodeIDを入力した場合
すでにAssemble済みで節点IDが確定しているモデルに対して、指定したIDの節点へ直接境界条件を割り当てることができます。
今回の例では、柱脚部分の Point を入力します。
また、コンポーネント下部のラジオボタンにチェックを入れることで、指定の自由度を固定することができます。
今回の例では柱脚ピンなので、UX,UY,UZを拘束します。
さらに、X軸回りの回転を止めて剛体変形を拘束しないと、連立方程式が解けなくなってしまうので、Rxにもチェックをいれます。
(現段階では、支点にバネ剛性は考慮できません。今後のアップデートをお待ちください。)
6. 荷重の入力 | [7. Load]タブ →[PointLoad]コンポーネント
FEMurでは、以下の荷重タイプに対応しています。
- 節点荷重(Point Load)
- 等分布荷重
- 台形分布荷重
今回の例では節点荷重を与えるため、PointLoadコンポーネントを使用します。
入力方法はSupportコンポーネントと同様に、Point または NodeID を指定します。
荷重は、Force(力),Moment(モーメント)をそれぞれ Vector で入力します。

7. Jointの入力 | [8.Joint]タブ>[Joint]コンポーネント
Jointコンポーネントには、BeamElement または ElementID を入力します。
-
BeamElementを入力する場合
AssembleModel前の段階で、要素オブジェクトを直接指定します。 -
ElementIDを入力する場合
すでにAssemble済みでElementIDが割り当てられているモデルに対して、指定したIDの要素へJoint条件を設定できます。
(下記の例では、上段にElement、下段にIDを入力しています。)

8. 解析データの統合 | [7.Model]タブ>[AssembleModel]コンポーネント

これまで作成してきた、解析に必要な各種データを AssembleModelコンポーネント に接続します。
この段階で、節点IDや要素IDの自動採番などの処理が実行され、構造解析に必要なモデルデータが構築されます。
Displayタブを展開し、各項目にチェックを入れると、下図のようにRhino上に解析モデルが可視化されます。
また、コンポーネント最下部の単位をドロップダウンから選択することで、表示される数値の単位を変更できます。
これで解析に必要なデータの準備は完了です!
9. 解析の実行 | [8. Solver]タブ →[Run Solver]コンポーネント
いよいよ解析を実行します。
Run Solverコンポーネントの Model 入力に、先ほどAssembleしたModelを接続します。
RUN 入力にはBoolean値を指定しますが、デフォルトで True が設定されているため、Modelを接続すると自動的に解析が実行されます。
大規模モデルなど計算負荷が高い解析を扱う場合は、RUNを False に設定しておくことで、意図しないタイミングで解析が実行されるのを防ぐことができます。
また、Warning 出力にはエラーや警告の内容が表示されます。解析が正常に実行されない場合は、ここを確認してください。
10. 解析結果の可視化 | [9. Result]タブ →[BeamForceView]コンポーネント

BeamForceViewコンポーネントでは、梁要素の応力図をRhinoのViewport上に描画できます。
Run Solverコンポーネントの出力である AnalyzedModel を入力してください。
Displayタブを展開します。
上部の入力エリアは下記の機能をオンオフできます。
- Filled:応力図を塗りつぶし表示
- Number:応力値を数値で表示
- Legend:凡例を表示
中断の入力エリアは表示したい応力成分(軸力・せん断力・曲げモーメントなど)を選択します。
最下部は表示する単位を選択できます。
その他のResultコンポーネント
今回は使用しませんが、[9. Result]タブには以下のViewer系コンポーネントも用意しています。
- ReactionForceView:反力を描画
- DeformationView:変形を描画
基本的な使い方はBeamForceViewとほぼ同様のため、詳細な説明は省略します。
11. 解析結果を数値で取得する | [9. Result]タブ →[BeamForces]コンポーネント
解析結果を数値として取得するために、以下の4つのコンポーネントを用意しています。
- BeamForces:全要素、または指定した要素の応力を取得
- NodalDisplacements:全節点、または指定した節点の変位を取得
- ReactionForces:全拘束節点、または指定した節点の反力を取得
- DeformationEnergy:モデル全体、または指定した要素の弾性ひずみエネルギーを取得
今回の例では、選択肢が応力に関する内容のため、BeamForcesコンポーネントを使用します。
以下の選択肢について処理を解説します。
「1.部材のせん断力の大きさの比は、柱A:梁B = 4 : 3 である。」
BeamForcesには、Element または ElementID を入力します。
入力がない場合は、全要素の結果が出力されます。
AssembleModelで確認すると、柱Aおよび梁Bに対応するElementIDは 1 と 5 であるため、Panelに「1, 5」と入力して指定します。
BeamForcesでは、各要素の
- 両端点
- 中点
における応力値が出力されます。
今回はせん断力を取得したいため、Fz成分を使用します。
また、本モデルではせん断力は要素内で一定のため、中点の値を用いて評価します。
これらを割り算して、4/3と比較します。数値解析には計算誤差が含まれるため、許容差を 1%以下 とし、その範囲内であればTrueを返すように設定しました。

同様に、ほかの問いについても判定を行うと、3の選択肢が間違いのようでした!

これで大まかな使い方は以上になります。
おわりに
ここまでお読みいただき、ありがとうございました。
使い方について、イメージはつかめましたでしょうか。
FEMurは無料で公開しています。
実際に使っていただき、フィードバックをいただけることが開発のモチベーションになります。
ぜひ日々の構造検討や学習に活用していただけると嬉しいです!
今後は、板用素や断面算定の機能も拡充していこうと思っておりますので、気長にお待ちいただければと思います!








