PythonFem
Linear Fem based on Pure Python
Install / Use
/learn @Yuxing-Wang-THU/PythonFemREADME
PythonFem
<img src="./gifs/Multiple_2D_Neohookean_implicit_False_bend_8.gif" div align=middle width = "49%" /><img src="./gifs/Multiple_2D_Neohookean_implicit_False_fall_8.gif" div align=middle width = "49%" />
Linear Finite Element Method (FEM) for simulating hyperelastic cubes, all codes are based on pure Python.
Overview
| Constitutive Models | Time Integration | Multiple cubes | | :------------- | :----------: | :----------: | | Linear Elasticity | Symplectic Euler | Yes | | St. Venant-Kirchhoff | Symplectic/Implict Euler | Yes | | Corotated linear elasticity | Symplectic Euler | Yes | | Neohookean elasticity | Symplectic/Implict Euler | Yes |
Requirements
imageio==2.28.1
matplotlib==3.5.3
numpy==1.21.5
seaborn==0.12.2
Usage
Single
python main_single_2d.py
Args
# Parameters of Afine transformation
'--theta', type=float, default=-25.0, help='Counterclockwise rotation angle'
'--tx', type=float, default=3.0, help='Movement along the x-axis'
'--ty', type=float, default=3.0, help='Movement along the y-axis'
'--sx', type=float, default=2, help='Stretching along the x-axis'
'--sy', type=float, default=2, help='Stretching along the y-axis'
# Parameters of FEM
'--model', type=int, default=3, help='Constitutive model, 0:Linear, 1:STVK, 2:Co-rotated, 3: Neohookean'
'--Y', type=int, default=100, help='Youngs modulus'
'--V', type=float, default=0.1, help='Poisson ratio, [-1, 0.5]'
'--dt', type=float, default=0.01, help='Time horizon'
'--max_iter', type=int, default=200, help='Iteration'
'--mass', type=float, default=1.0, help='Mass of the point'
'--gravity', type=bool, default=True, help='Add gravity'
'--fix', type=bool, default=True, help='Fix a point on the wall'
'--implict', action='store_true', help='Implict Euler Method, for STVK and Neohookean'
Visual Results
<p align="center">Symplectic Euler Methods</p>
<img src="./gifs/single_2D_Linear_implicit_False.gif" div align=middle width = "49%" /><img src="./gifs/single_2D_STVK_implicit_False.gif" div align=middle width = "49%" />
<img src="./gifs/single_2D_Co-rotated_implicit_False.gif" div align=middle width = "49%" /><img src="./gifs/single_2D_Neohookean_implicit_False.gif" div align=middle width = "49%" />
<p align="center">Implict Euler Methods</p>
<img src="./gifs/single_2D_STVK_implicit_True.gif" div align=middle width = "49%" /><img src="./gifs/single_2D_Neohookean_implicit_True.gif" div align=middle width = "49%" />
Multiple
python main_multiple_2d.py
Args
'--voxelx', type=int, default=8, help='Number of voxels (x-axis)'
'--voxely', type=int, default=3, help='Number of voxels (y-axis)'
'--em', type=list, default=[2,3,6,7,10,11,14,15], help='Empty voxels:[],[2,3,6,7,10,11,14,15],[2,3,6,7]'
# Parameters of FEM
'--mode', type=str, default="bend", help='Mode: bend/fall'
'--model', type=int, default=0, help='Constitutive model, 0:Linear, 1:STVK, 2:Co-rotated, 3: Neohookean'
'--Y', type=int, default=10000, help='Youngs modulus'
'--V', type=float, default=0.1, help='Poisson ratio [-1, 0.5]'
'--dt', type=float, default=0.001, help='Time horizon'
'--max_iter', type=int, default=200, help='Iteration'
'--mass', type=float, default=1.0, help='Mass of the point'
'--implict', action='store_true', help='Implict Euler Method, for STVK and Neohookean'
Visual Results
<p align="center"> Symplectic Euler Methods </p><p align="center"> Linear Elasticity </p>
<img src="./gifs/Multiple_2D_Linear_implicit_False_bend_8.gif" div align=middle width = "49%" /><img src="./gifs/Multiple_2D_Linear_implicit_False_fall_8.gif" div align=middle width = "49%" />
<p align="center"> St. Venant-Kirchhoff </p>
<img src="./gifs/Multiple_2D_STVK_implicit_False_bend_8.gif" div align=middle width = "49%" /><img src="./gifs/Multiple_2D_STVK_implicit_False_fall_8.gif" div align=middle width = "49%" />
<p align="center"> Corotated linear elasticity </p>
<img src="./gifs/Multiple_2D_Co-rotated_implicit_False_bend_8.gif" div align=middle width = "49%" /><img src="./gifs/Multiple_2D_Co-rotated_implicit_False_fall_8.gif" div align=middle width = "49%" />
<p align="center"> Neohookean elasticity </p>
<img src="./gifs/Multiple_2D_Neohookean_implicit_False_bend_8.gif" div align=middle width = "49%" /><img src="./gifs/Multiple_2D_Neohookean_implicit_False_fall_8.gif" div align=middle width = "49%" />
<p align="center"> Implict Euler Methods </p><p align="center"> St. Venant-Kirchhoff </p>
<img src="./gifs/Multiple_2D_STVK_implicit_True_bend_8.gif" div align=middle width = "49%" /><img src="./gifs/Multiple_2D_STVK_implicit_True_fall_8.gif" div align=middle width = "49%" />
<p align="center"> Neohookean elasticity </p>
<img src="./gifs/Multiple_2D_Neohookean_implicit_True_bend_8_inv.gif" div align=middle width = "49%" /><img src="./gifs/Multiple_2D_Neohookean_implicit_True_fall_8.gif" div align=middle width = "49%" />
Reference
Related Skills
node-connect
340.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
340.5kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.2kCommit, push, and open a PR
