用Python有限元框架Feon求解弹簧支座二维杆问题

1、Feon简介

Feon是湖北工业大学土木建筑与环境学院教师裴尧尧基于Python开发的一个开源免费的有限元计算框架。这是一个致力于有限元编程教学和有限元理论研究的框架,上手快,可扩展性强,代码开源。著有《Python和有限元》。

2、安装

使用pip安装 pip install feon,或者源码安装 python setup.py install

3、使用feon求解如下图所示二维杆系统

用Python有限元框架Feon求解弹簧支座二维杆问题_第1张图片
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与有限元》

你可能感兴趣的:(python,有限元)