WANtaroHP: Pythonによる有限要素法プログラム(Top Page)

  Last update: 22 May 2017 at 11:42:49 (since 08 December 2016) pic


このページは何?

この Web ページは,Python3 による有限要素法のプログラムとその使用事例を紹介しているページです.

Python はインタプリタなので,Fortran などでコンパイルされたプログラムに対し,実行速度に不安がありましたが,試してみた所,numpy の行列演算や数値計算ライブラリが思った以上に高速で,使えそうだということに気が付き,各種 FEM 計算プログラムを Python で作ってみたわけです.

実際にPythonでプログラムを書いてみると,メインルーチンの部分は,かなり見通しの良いものができたと思っています.しかし,入出力部については,ごちゃごちゃした感じがします.自分の低スキルのせいかもしれませんが.

計算結果の図化には,Python の作図ライブラリである matplotlib の他,GMT 5 (Generic Mapping Tools) や gnuplot 5 も使っています.

画像の余白調整やフォーマット変換などの処理には ImageMagickを,複数画像の整形表示には TeX を使っています.

プログラム作成や Web ページ作成に使っているエディタは,Geany と CotEditor です.

プログラミングの環境は,以下に示すとおりです.


ItemDescription
Machine MacBook Pro (Retina, 13-inch, Mid 2014)
Processor 2.6GHz Intel Core 5
Memory 8GB 1600MHz
Storage SSD 128GB, SD card 128GB
OS macOS Sierra Version 10.12.3
Software Python 3.6.0 (numpy, scipy, matplotlib),

GMT 5, gnuplot 5, ImageMagick,

TeX, Geany, CotEditor

現在,掲載している FEM プログラムは,以下のものです.


FEM programType of elementSolver of equation
2次元弾性骨組構造解析 1要素2節点,1節点3自由度,梁要素 x=numpy.linalg.solve(A,b)
2次元弾性トラス構造解析 1要素2節点,1節点2自由度,トラス要素 x=numpy.linalg.solve(A,b)
格子桁構造解析 1要素2節点,1節点3自由度,梁要素 x=numpy.linalg.solve(A,b)
2次元弾性応力解析 1要素4節点・4ガウス積分点,1節点2自由度x=numpy.linalg.solve(A,b)
軸対称弾性応力解析 1要素4節点・4ガウス積分点,1節点2自由度x=numpy.linalg.solve(A,b)
2次元飽和-不飽和浸透流解析 1要素4節点・4ガウス積分点,1節点1自由度x=numpy.linalg.solve(A,b)
2次元非定常熱伝導解析 1要素4節点・4ガウス積分点,1節点1自由度A-1=numpy.linalg.inv(A)
2次元弾性骨組構造時刻歴応答解析 1要素2節点,1節点3自由度,梁要素 A-1=numpy.linalg.inv(A)
2次元弾性骨組構造振動固有値解析 1要素2節点,1節点3自由度,梁要素 w,vr=scipy.linalg.eig(K,M)
2次元弾性骨組構造幾何学的非線形解析1要素2節点,1節点3自由度,梁要素 x=numpy.linalg.solve(A,b)
2次元弾性骨組構造座屈解析 1要素2節点,1節点3自由度,梁要素 w,vr=scipy.linalg.eig(K,G)
1次元非定常熱伝導解析 1要素2節点・1節点1自由度,線形要素 A-1=numpy.linalg.inv(A)

プログラムは,各種教科書やネットの情報を参考にしていますが,基本的に全て自作です.仕事で簡単な計算にも使っているので,おかしな挙動を発見したときは,逐次修正していますが,完璧かどうかはわかりません.万が一,使ってみたい場合には,全て自己責任でお願い致します.


PythonによるFEMプログラムは,以下の参考書掲載のBasicプログラムをベースにしています.


(参考文献) パソコン構造力学 - 力学挙動の可視化 - ,宮澤健二著,啓学出版株式会社,1984年6月


この本では,Basicによる2次元骨組構造解析などのFEMプログラムが紹介されています.Basicでは,配列の添字は0から始まるため,Pythonに書き換えるのが比較的容易です.また,要素剛性行列の全体剛性行列への組み込みや境界条件の処理がわかり易いプログラムとなっています.そのかわり,強制変位の扱いなど,連立方程式を組み替えなければならない場合に非対称行列になるなどのデメリットもありますが,Pythonの数値演算ライブラリであるnumpyの処理能力が高いため,数千自由度程度の連立方程式なら大きなストレスなしに問題を解くことができます.



注意事項

  • このサイトは,HTML5 により書かれています.また IE で HTML5 のタグを有効にするため,JavaScript を読み込んでいます.
  • このサイトの数式表示には,MathJax を使っています.環境によっては表示が遅い,あるいは数式がうまく表示できないかもしれません.
  • このサイト上の情報は,不正確な説明と誤植を含むかもしれません.
  • 管理人は,このサイト上の情報を,予告なく変更する場合があります.
  • このサイトの利用から生じる,いかなる事項に対しても,このサイトの管理人は,全く責任を負いません.
  • このサイトへのリンクあるいはリンクのとりはずしは,自由に行っていただいて結構です.


管理人の連絡先

e-mail adress of WANtaro
wantaro@jcom.home.ne.jp
damyarou@yahoo.co.jp


inserted by FC2 system