注釈
完全なサンプルコードをダウンロードするには、 最後に進んでください。
はじめに#
このチュートリアルでは、FElupeを使用して問題を作成し、解決するための基本的な高レベルの部分について説明します。入門的な例として、超弾性材料挙動を持つ立方体の1/4モデルが、クランプされた端面で一軸の伸びを受けます。まず、FElupeをインポートし、1軸あたり n 点の6面体セルからメッシュ化された立方体を作成します。六面体用にあらかじめ定義された数値領域がメッシュ上に作成される。ベクトル値の変位場がその領域上で開始される。 次に、変位フィールドの上にフィールドコンテナが作成されます。
import felupe as fem
mesh = fem.Cube(n=6)
region = fem.RegionHexahedron(mesh=mesh)
displacement = fem.Field(region=region, dim=3)
field = fem.FieldContainer(fields=[displacement])
一軸荷重ケースは、フィールドコンテナ内に格納された変位フィールドに適用されます。これには、立方体の右端面のメッシュ点における所定の変位の絶対値だけでなく、対称面の設定が含まれます。右端面は*クランプ*されており、x方向の変位のみが許容されます。この事前に定義された荷重ケースの境界条件のdictは boundaries として返され、分割された自由度と外部変位は、返されたdict loadcase 内に格納されます。
boundaries, loadcase = fem.dof.uniaxial(
field,
move=0.2,
right=1,
clamped=True,
return_loadcase=True,
)
材料挙動はビルトインされたNeo-Hookeanの材料定式化によって定義されます。構成的等方性超弾性材料定式化は、固体の定義によって変位フィールドに適用されます。
umat = fem.NeoHooke(mu=1.0, bulk=2.0)
solid = fem.SolidBody(umat=umat, field=field)
The problem is solved by an iterative Newton-Raphson
procedure. A verbosity level of 2 enables a detailed text-based logging.
_______ _______ ___ __ __ _______ _______
| || || | | | | || || |
| ___|| ___|| | | | | || _ || ___|
| |___ | |___ | | | |_| || |_| || |___
| ___|| ___|| |___ | || ___|| ___|
| | | |___ | || || | | |___
|___| |_______||_______||_______||___| |_______|
FElupe Version 10.2.0-dev
Linux-7.0.0-1004-aws-x86_64-with-glibc2.35 x86_64 64bit
Run Job
=======
Newton-Raphson solver
=====================
| # | norm(fun) | norm(dx) |
|---|-----------|-----------|
| 1 | 7.553e-02 | 1.898e+00 |
| 2 | 1.310e-03 | 5.091e-02 |
| 3 | 3.086e-07 | 6.698e-04 |
| 4 | 2.257e-14 | 1.527e-07 |
Converged in 4 iterations (Assembly: 0.02499 s, Solve: 0.01099 s).
結果はインタラクティブなウィンドウで見ることができます。
field.plot("Displacement", component=0).show()

Total running time of the script: (0 minutes 0.268 seconds)