Feon是湖北工业大学土木建筑与环境学院教师裴尧尧基于Python开发的一个开源免费的有限元计算框架。这是一个致力于有限元编程教学和有限元理论研究的框架,上手快,可扩展性强,代码开源。著有《Python和有限元》。
使用pip安装 pip install feon,或者源码安装 python setup.py install
Feon使用非常简单,只包含3种数据结构,分别为节点,单元和系统。
#从feon.sa(结构分析子包)中导入所有的对象
from feon.sa import *
if __name__ == "__main__":
#定义材料参数
E = 210e6 #弹性模量
A = 0.005 #截面面积
K = 79e3 #弹簧刚度
#通过Node对象创建节点,需要输入节点坐标
n0 = Node(0,0)
n1 = Node(5,0)
n2 = Node(10,0)
n3 = Node(15,0)
n4 = Node(5,7)
n5 = Node(10,7)
n6 = Node(15,-1)
#通过节点创建单元,Link2D11为杆单元,输入参数为单元节点,弹性模量和截面面积
e0 = Link2D11((n0,n1),E,A)
e1 = Link2D11((n1,n2),E,A)
e2 = Link2D11((n2,n3),E,A)
e3 = Link2D11((n4,n0),E,A)
e4 = Link2D11((n4,n1),E,A)
e5 = Link2D11((n4,n2),E,A)
e6 = Link2D11((n4,n5),E,A)
e7 = Link2D11((n5,n2),E,A)
e8 = Link2D11((n5,n3),E,A)
#创建弹簧单元
e9 = Spring2D11((n3,n6),K)
#创建一个有限元系统
s = System()
#将节点和单元添加到系统中
s.add_nodes(n0,n1,n2,n3,n4,n5,n6)
s.add_elements(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9)
#添加力边界条件
s.add_node_force(4,Fx = 30)
#添加固定支座,输入节点的编号0和6
s.add_fixed_sup(0,6)
#求解系统
s.solve()
F5运行,接下来就可以查看结果。
#查看节点的水平和竖向位移。
>>> [nd.disp['Ux'] for nd in s.get_nodes()]
[0.0, 9.523809523809531e-05, 0.00019047619047619062, 0.00023809523809523823, 0.0005274897818499395, 0.0004798707342308918, 0.0]
>>> [nd.disp['Uy'] for nd in s.get_nodes()]
[0.0, -0.00020356152587617328, -0.00027106862998363895, -0.00017721518987341765, -0.00020356152587617328, -0.00017773529665030566, 0.0]
#查看1号节点的位移
>>> n1.disp
{'Ux': 9.523809523809531e-05, 'Uy': -0.00020356152587617328, 'Phz': 0.0}
#查看单元轴力
>>> [el.force['N'] for el in s.get_elements()]
[array([[-20.],
[ 20.]]), array([[-20.],
[ 20.]]), array([[-10.],
[ 10.]]), array([[-17.20465053],
[ 17.20465053]]), array([[0.],
[0.]]), array([[ 17.20465053],
[-17.20465053]]), array([[ 10.],
[-10.]]), array([[-14.],
[ 14.]]), array([[ 17.20465053],
[-17.20465053]]), ar
#查看1号单元的轴力
>>> e1.force
{'N': array([[-20.],
[ 20.]])}
更多例子可关注github开源链接
Feon
或者作者的著作,京东链接为
《Pyhton与有限元》