python+feon有限元分析|求解实例

目录

1、feon框架结构

2. 支持的单元类型

3、实例


1、feon框架结构

包含三个包:

sa:结构分析包

ffa:流体分析包

derivation:刚度矩阵包

2. 支持的单元类型

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')

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()
​
#查看节点的水平和竖向位移。
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]])}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/197912.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

go标准库

golang标准库io包 input output io操作是一个很庞大的工程,被封装到了许多包中以供使用 先来讲最基本的io接口 Go语言中最基本的I/O接口是io.Reader和io.Writer。这些接口定义了读取和写入数据的通用方法,为不同类型的数据源和数据目标提供了统一的接…

【JavaEE初阶】——Linux 基本使用和 web 程序部署(下)

文章目录 前言一、Linux 常用命令 1.1 ls 命令 1.2 pwd 命令 1.3 cd 命令 1.4 touch 命令 1.5 cat 命令 1.6 mkdir 命令 1.7 rm 命令 1.8 cp 命令 1.9 mv 命令 1.10 man 命令 1.11 less 命令 1.12 head 命令 1.13 tail 命…

ABAP算法 模拟退火

模拟退火算法 算法原理及概念本文仅结合实现过程做简述 模拟退火算法是一种解决优化问题的算法。通过模拟固体退火过程中的原子热运动来寻找全局最优解。在求解复杂问题时,模拟退火算法可以跳出局部最优解获取全局最优解。 模拟退火算法包含退火过程和Metropolis算法…

八、Lua数组和迭代器

一、Lua数组 数组,就是相同数据类型的元素按一定顺序排列的集合,可以是一维数组和多维数组。 在 Lua 中,数组不是一种特定的数据类型,而是一种用来存储一组值的数据结构。 实际上,Lua 中并没有专门的数组类型&#xf…

供配电系统智能化监控

供配电系统智能化监控是指利用先进的监测技术、自动化控制技术、计算机网络技术等,对供配电系统进行实时、全方位的监测和控制,以实现供配电系统的安全、稳定、高效运行。 供配电系统智能化监控的主要功能包括: 实时数据采集:通过…

使用 SwiftUI 创建一个灵活的选择器

文章目录 前言可选择协议自定义化FlexiblePicker 逻辑FlexiblePicker 视图总结 前言 最近,在我正在开发一个在 Dribbble 上找到的设计的 SwiftUI 实现时,我想到了一个点子,可以通过一些酷炫的筛选器扩展该项目以缩小结果列表。 我决定筛选视…

为什么我不能给shopify的图片添加alt

首先我们要明白是什么ALT标签,为什么要添加这个标签,这个标签有什么用 ALT标签是什么 ALT属性是HTML的一部分,它为那些无法查看图像的用户提供替代的文本描述。 ALT标签有什么用 使用ALT属性还可以帮助搜索引擎爬虫更好地理解您的网站内容。有…

OpenSSL 使用AES对文件加解密

AES(Advanced Encryption Standard)是一种对称加密算法,它是目前广泛使用的加密算法之一。AES算法是由美国国家标准与技术研究院(NIST)于2001年发布的,它取代了原先的DES(Data Encryption Stand…

sed命令

目录 一、sed 1.sed命令选项 2.语法选项 3.sed脚本格式 4.搜索替代 5.分组后向引用 1.提取版本号: 2.提取IP地址 3.提取数字权限 6.变量 二、免交互 1.多行重定向 2.免交互脚本 总结:本章主要介绍了seq和免交互的用法及相关知识 一、sed s…

p9 第55题 两个有序单链表L1,L2求交的操作,得到新的链表L3,L3任然保持有序的状态 中国计量大学2016年数据结构题(c语言代码实现)

本题代码如下 linklist merge(linklist* L1, linklist* L2)//将两个链表的公共元素合并产生新链表 {lnode* ra (*L1)->next, * rb (*L2)->next;lnode* r;lnode* s;lnode* C (lnode*)malloc(sizeof(lnode));C->next NULL;r C;while (ra && rb)//循环跳出…

泛微 E-Office sample权限绕过+文件上传组合漏洞Getshell

0x01 产品简介 泛微E-Office是一款标准化的协同 OA 办公软件,泛微协同办公产品系列成员之一,实行通用化产品设计,充分贴合企业管理需求,本着简洁易用、高效智能的原则,为企业快速打造移动化、无纸化、数字化的办公平台。 0x02 漏…

lv11 嵌入式开发 WDT实验 12

目录 1 WDT简介 2 Exynos4412下的WDT控制器 2.1 概述 2.2 WDT的特性 2.3 工作原理 2.4 其他细节 3 WDT寄存器详解 3.1 WTCON控制寄存器 3.2 WTDAT 实时中断寄存器 3.3 WTCNT 递减计数器 3.4 WTCLRINT清除中断寄存器 4 WDT编程 1 WDT简介 Watch Dog Timer即看门狗定…

探索三种生成模型:基于DDPMs、NCSNs和SDEs方法的Diffusion

探索三种生成模型:基于DDPMs、NCSNs和SDEs方法的Diffusion 去噪扩散概率模型(DDPMs)正向过程反向过程 噪声条件得分网络(NCSNs)正向过程初始化训练 NCSNs生成样本 反向过程 随机微分方程(SDEs)原…

自然资源科普交互大屏助力自然资源的保护

在当代社会,自然资源的科学管理和可持续利用变得愈发重要。为了提高公众对于自然资源的认知和理解,科普交互大屏成为一个新兴的工具。它通过生动的图像和实时数据展示,以及与观众的互动方式,让人们更深入地了解自然资源和环境保护…

eNSP防火墙USG6000V使用Web界面登入教程

文章目录 登入流程1、下载USG6000V的镜像包2、导入USG6000V的镜像包3、配置防火墙web页面4、修改本机vmnet1网卡的ipv4地址5、在eNSP上添加云6、配置防火墙管理地址,开启http服务7、关闭电脑防火墙8、访问web页面 登入流程 1、下载USG6000V的镜像包 链接&#xff…

数据库应用:MongoDB 库与集合管理

目录 一、理论 1.MongoDB用户管理 2.MogoDB库管理 3.MogoDB集合管理 二、实验 1.MongoDB用户管理 2.MogoDB库管理 3.MogoDB集合管理 三、问题 1.不显示新创建的数据库 2.插入数据报错 3.删除指定数据库报错 一、理论 1.MongoDB用户管理 (1) 内置角色 数据库用户…

Postman进阶功能实战演练

Postman除了前面介绍的一些功能,还有其他一些小功能在日常接口测试或许用得上。今天,我们就来盘点一下,如下所示: 1.数据驱动 想要批量执行接口用例,我们一般会将对应的接口用例放在同一个Collection中,然…

ZYNQ_project:IIC_EEPROM

EEPROM简介: EEPROM(Electrically Erasable Progammable Read Only Memory, E2PROM)是指带电可擦可编程只读存 储器,是一种常用的非易失性存储器(掉电数据不丢失), E2PROM 有多种类型的产品,我…

【计算机网络学习之路】序列化,反序列化和初识协议

文章目录 前言一. 序列化和反序列化1.自己实现2. JSON 二. 初识协议结束语 前言 本系列文章是计算机网络学习的笔记,欢迎大佬们阅读,纠错,分享相关知识。希望可以与你共同进步。 本篇博文讲解应用层的序列化和反序列化,还有见一…

Linux基础项目开发1:量产工具——显示系统(二)

前言: 前面我们已经对这个项目的基本框架有了一个初步的了解与认识,要实现显示管理器与输入管理器,有输入有输出基本就实现这个项目的大部分功能了,首先我们先来做显示系统,对于上层系统为了让程序更好扩展&#xff0c…