Pythonによる有限要素法プログラム(改訂版)

  Last update: 20 October 2018 at 10:45 (since 15 September 2018)



ソースコード

以下に紹介するプログラムでは,平面骨組解析プログラムを覗いて,CSR圧縮フォーマットを用いて, 'scipy.sparse.linalg.spsolve' により連立方程式を解いています.

平面骨組解析プログラムでは,他のプログラムと比べ大きな自由度のモデルを解く可能性は小さいと考え, 'numpy.linalg.solve' により連立方程式を解いています.

Program nameDescription
py_fem_pl3x.py2次元応力解析プログラム(三角形一次要素)
py_fem_pl4x.py2次元応力解析プログラム(四角形アイソパラメトリック要素:4ガウス積分点)
py_fem_frame.py平面骨組構造解析プログラム(1要素2節点6自由度棒要素)
py_fem_3dfrmx.py立体骨組構造解析プログラム(1要素2節点12自由度棒要素)
py_fem_seep3x.py2次元浸透流解析プログラム(三角形一次要素)
py_fem_seep4x.py2次元浸透流解析プログラム(四角形アイソパラメトリック要素:4ガウス積分点)

プログラム解説

Page nameDescription
Pythonによる有限要素法プログラム解説(1)一般理論と2次元応力解析プログラム(三角形要素)
Pythonによる有限要素法プログラム解説(2)2次元応力解析プログラム(四角形要素)
Pythonによる有限要素法プログラム解説(3)平面骨組構造解析プログラム
Pythonによる有限要素法プログラム解説(4)立体骨組構造解析プログラム
Pythonによる有限要素法プログラム解説(5)2次元浸透流解析プログラム(三角形要素)
Pythonによる有限要素法プログラム解説(6)2次元浸透流解析プログラム(四角形要素)

参考文献

プログラミングの参考にした図書を以下に示します. 30年程度以上前の文献ですが,これらをベースに作ったプログラムを書き換えながら使ってきました. プログラムの全体構成は,FORTRAN プログラムが掲載されている文献 (2) をベースにしています. また Python プログラム作成にあたっては,変数名,全体剛性方程式の組立方法など,N88-Basic プログラムが掲載されている文献 (1) を参考に設定しています.

  1. 宮沢健二:パソコン構造力学--力学挙動の可視化--,啓学出版株式会社,1984年6月
  2. 三本木茂夫・吉村信敏:コンピュータによる構造工学講座I-1-B 日本鋼構造協会編 有限要素法による構造解析プログラム 考え方と解説,培風館,昭和54年5月
  3. H.C. Martin / G.F. Carey共著,鷲津久一郎/山本善之共訳:有限要素法の基礎と応用,培風館,昭和56年10月
  4. 山田嘉昭:有限要素法の基礎と応用シリーズ2 マトリックス法材料力学,培風館,昭和55年5月
  5. S.P. Timoshenko, J.N. Goodier : Theory of Elasticity Third edition, McGRAW-HILL BOOK CAMPANY, 21st printing 1985

Qiita記事へのリンク

有限要素法関係(主要なもの)

有限要素法とPythonプログラム(三角形一次要素を用いた2次元応力解析プログラム)

Pythonによる2次元応力解析プログラム(四角形要素)の理論を少し詳しく解説する(改訂版)

Pythonによる平面骨組構造解析プログラムの理論を少し詳しく解説する(改訂版)

Python:FEMでの疎行列計算利用による高速化(3次元骨組構造解析での事例)

Pythonで立体骨組構造解析

Pythonによる2次元飽和ー不飽和定常浸透流解析プログラム(三角形要素)の理論を少し詳しく解説する(改訂版)

Pythonによる2次元飽和ー不飽和定常浸透流解析プログラム(四角形要素)の理論を少し詳しく解説する(改訂版)

Python3実行環境他

MacでJupyter Notebookを使ってみる

Jupyter Notebookで黒画面(テーマの変更)

Mac における Jupyter notebook の設定

Python エクセルデータを読み込みテキストとして保存(pandasの利用)

WindowsでPythonプログラミング環境整備(Jupyter notebookの利用)

BoostnoteをMacでいじってみた

Python :自作関数のインポート(Brent法利用を含む)

matplotlib関係

Python matplotlibで棒グラフ(ハッチングと2軸グラフの凡例)

Python matplotlib 説明図を書いてみる(改訂版)

Python matplotlib 矢印をannotateで描く

Python matplotlib 使えるフォント一覧の作成

Python matplotlib 凡例の位置とアルファ値の変更

Python matplotlib 図と凡例のタイトルのフォントサイズを変える

Python matplotlibでフローチャートのようなものを強引に描く(2)

Python matplotlibとPILで画像処理(vs ImageMagick)

Python matplotlibで棒グラフ(2軸グラフと積み上げグラフ)

iPad Pythonista3でmatplotlibを使う

matplotlib グラフ作成Tips (3) 白抜き記号と矢印

matplotlib グラフ作成Tips (2) 上と右の軸を描画しない

matplotlib グラフ作成Tips (1) グリッド&グラフの横に表

Python, matplotlibでLaTeX表記数式を表示

Python, matplotlibでフローチャートのようなものを強引に描く

Python, matplotlibにより対数正規確率プロットを行う

Python, matplotlibでリアプノフ・フラクタルを描く

GMT5関係

GMT (Generic Mapping Tools) における3次元座標でのテキスト表示

GMT (Generic Mapping Tools) で eps から画像形式変換

GMTとETOPO1で地形図作成

Windows用のGMT5のためのテストファイル

GMTで説明図を描く

GMTでグラフを描く

雑感

有限要素法について

現在,有限要素法は,微分方程式の数値解法の一つとして,構造解析分野はもとより, 浸透流(地下水流動)解析,熱伝導解析,流体解析など様々な分野で用いられています. この記事では,特に筆者が土木分野での設計用ツールとして慣れ親しんできた, 静力学分野での有限要素法の理論とPythonによる有限要素法プログラムについて, 筆者なりの解説を試みたいと思います.

なお筆者は,土木構造物の設計技術者であり,教育機関の人間でもなければプログラミングの専門家でもありません. この記事に記載されている事項はあくまでも筆者の経験に基づく個人的な見解です.

Pythonを使うメリット

まずは,Pythonでプログラムを作って運用することのメリットについて,筆者なりの意見を述べてみたいと思います.

以上,Pythonおよびその関連ツールの利用により,多くのことを自由にストレスなく行えることから,Pythonを使うメリットはあると思います.また有限要素法プログラムを考えた場合,基本的に行列とベクトル演算のプログラムとなるので,Pythonによる記述には向いていると考えています.実用上も,Pythonはインタープリタであることから,他のコンパイラ系言語に比べ速度的に不利な面もありますが,ライブラリの実行速度は十分に早く,小規模な設計計算であれば,データの準備から後処理まで考えれば総合的には所要時間的にもそれほど不利ではないように感じています.

自分のプログラムを持つメリット

筆者はこれまで現場の設計技術者という立場で設計を行ってきました. 基本的に大規模構造物の数値解析は,解析専門業者に外部委託するか,社内の専門家にお願いするのですが, 現場で設計をやっていると,「あそこの設計を確認したいのだけど,手計算ではラフすぎるし, もう少し精度を上げたい」というようなことがよくあります. そんなとき,平面骨組や2次元応力解析のプログラムを持っていると,すぐに自前で計算できるし, 思う存分モデルや条件を変えることができます.またクレーンなどの移動荷重に対する設計など, やることは単純なのだけど多くのケースをこなさなければならない場合など,shell script でケースを回し, 出力をPythonで重ね合わせるなどの加工も自由自在です.一言で言うと, 「複雑なことはできないが,単純作業の重ね合わせなども含め,即応性・多様性・出力加工の自由度がある」というのが自前プログラムを持つメリットでしょうか.

なお,ついて回る問題としては,「その結果正しいの?」ということです. そこは色々なケースで使い込んで必要あれば直していくという対応しかないと思っています. まあ,そもそも自分が与えた荷重に対し,断面力図や主応力コンターが(定性的に,数値のオーダー的に) 正しいかどうかなどは見ればわかるというのが技術者でしょう. ちなみに筆者が使っている平面骨組のプログラムは,言語はBasic, C, Fortran, Pythonと変わってきていますが, 30年来使ってきているものです.平面骨組については,何度か若い人たちが使っている市販プログラムと結果を比べたことがありますが, メッシュの切り方や荷重の与え方のテクニックの影響もありますが,筆者の自作版ほうが高精度でした.

ということで,筆者の立場としては,「自前のプログラムを持って,疑問に感じたことはどんどん確認しよう」ということを勧めます.



inserted by FC2 system