目录
1、feon框架结构
2. 支持的单元类型
3、实例
包含三个包:
sa:结构分析包
ffa:流体分析包
derivation:刚度矩阵包
Spring1D11 - 一维弹簧单元
Spring2D11 - 二维弹簧单元
Spring3D11 - 三维弹簧单元
Link1D11 - 一维杆单元
Link2D11 - 二维弹簧单元
Link3D11 - 三维弹簧单元
Beam1D11- 一维梁单元
Beam2D11- 二维弹簧单元
Beam3D11- 三维弹簧单元
Tri2d11S---- 平面应力三角形单元
Tri2D11 ---- 平面应变三角形单元
Tetra3D11 ---- 四面体单元
Quad2D11S ---- 平面应力四边形单元
Quad2D11 ---- 平面应变四边形单元
Plate3D11 ---Midline 板单元
Brick3D11 --- 六面体单元
单元命名方式为 "Name" + "dimension" + 'order" + "type", type 1 means elastic
import feon.sa as fsa
#创建二维节点,(1,2)为坐标
n=fsa.Node(1,2)
#访问x坐标
print(n.x)
#访问y坐标
print(n.y)
#访问坐标
print(n.coord)
#访问节点位移keys
print(n.nAk)
#访问节点位移
print(n.disp)
#访问节点力
print(n.force)
#访问节力移keys
print(n.nBk)
#设置节点力
n.set_force(Fx=100,Fy=100)
#设置节点位移
n.set_disp(Ux=0.1)
1.0
2.0
(1.0, 2.0)
('Ux', 'Uy', 'Phz')
{'Ux': 0.0, 'Uy': 0.0, 'Phz': 0.0}
{'Fx': 0.0, 'Fy': 0.0, 'Mz': 0.0}
('Fx', 'Fy', 'Mz')
# 从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()
#查看节点的水平和竖向位移。
print([nd.disp['Ux'] for nd in s.get_nodes()])
print([nd.disp['Uy'] for nd in s.get_nodes()])
#查看1号节点的位移
print(n1.disp)
#查看单元轴力
print([el.force['N'] for el in s.get_elements()])
#查看1号单元的轴力
print(e1.force)
[0.0, 9.523809523809543e-05, 0.00019047619047619086, 0.00023809523809523858, 0.0005274897818499404, 0.0004798707342308927, 0.0]
[0.0, -0.00020356152587617366, -0.0002710686299836396, -0.00017721518987341803, -0.00020356152587617366, -0.00017773529665030604, 0.0]
{'Ux': 9.523809523809543e-05, 'Uy': -0.00020356152587617366, 'Phz': 0.0}
[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]]), array([[ 14.],
[-14.]])]
{'N': array([[-20.],
[ 20.]])}
# 从feon.sa(结构分析子包)中导入所有的对象
from feon.sa import *
if __name__ == "__main__":
# 定义材料参数
E = 210e6 # 弹性模量
A = 0.005 # 截面面积
K = 79e3 # 弹簧刚度
# 通过Node对象创建节点,需要输入节点坐标
n0 = Node(0, 0)
n1 = Node(0.4, 0)
n2 = Node(0.4, 0.3)
n3 = Node(0, 0.3)
# 通过节点创建单元,Link2D11为二维杆单元,输入参数为单元节点,弹性模量和截面面积
e0 = Link2D11((n0, n1), E,A)
e1 = Link2D11((n1, n2), E,A)
e2 = Link2D11((n2, n3), E,A)
e3 = Link2D11((n1, n3), E,A)
e4 = Link2D11((n0, n2), E,A)
# 创建一个有限元系统
s = System()
# 将节点和单元添加到系统中
s.add_nodes(n0, n1, n2, n3)
s.add_elements(e0, e1, e2, e3, e4)
# 添加力边界条件
s.add_node_force(1, Fx=20)
s.add_node_force(2, Fy=-25)
# 添加固定支座,输入节点的编号0和6
s.add_fixed_sup(0, 3)
# 求解系统
s.solve()
#查看节点的水平和竖向位移。
print([nd.disp['Ux'] for nd in s.get_nodes()])
print([nd.disp['Uy'] for nd in s.get_nodes()])
#查看1号节点的位移
print(n1.disp)
#查看单元轴力
print([el.force['N'] for el in s.get_elements()])
#查看1号单元的轴力
print(e1.force)
[0.0, 4.891240446796015e-07, 5.5684891240446785e-06, 0.0]
[0.0, -1.791534391534391e-05, -2.1925925925925923e-05, 0.0]
{'Ux': 4.891240446796015e-07, 'Uy': -1.791534391534391e-05, 'Phz': 0.0}
[array([[-1.28395062],
[ 1.28395062]]), array([[ 14.03703704],
[-14.03703704]]), array([[-14.61728395],
[ 14.61728395]]), array([[-23.39506173],
[ 23.39506173]]), array([[ 18.27160494],
[-18.27160494]])]
{'N': array([[ 14.03703704],
[-14.03703704]])}