python 悬臂梁的有限元分析

news/2024/12/19 17:53:23/文章来源:https://www.cnblogs.com/invo/p/18617711

依赖包

fenics是一种用于有限元计算的动态面向对象库,它提供了一种专用的数学语言UFL来表述变分形式,并自动生成底层C++代码。

fenics 名称释义:

  • fe:finite element的简写
  • cs:computational software的简写
  • ni:有了fe和cs后,由于最初fenics软件是在芝加哥大学(简称为phoenix)编译的,故而在其间加入ni就很自然而然了

fenics 库实现

fenics 匹配的python 2.0,反正3.0以上的无法调包成功

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from fenics import *# 定义梁的参数
L = 5.0  # 梁长度 (m)
b = 0.1  # 梁宽度 (m)
h = 0.2  # 梁高度 (m)
E = 2e11  # 弹性模量 (Pa)
F = 1000  # 施加的集中力 (N)# 创建网格
nx, ny = 20, 5
mesh = RectangleMesh(Point(0, 0), Point(L, h), nx, ny)# 定义函数空间
V = FiniteElement('Lagrange', mesh.ufl_cell(), 1)
u = TrialFunction(V)
v = TestFunction(V)# 定义变分问题
a = dot(grad(u), grad(v)) * dx
L = Constant(F) * v * ds(2)# 求解变分问题
u = Function(V)
solve(a == L, u)# 计算位移和应力
x = mesh.coordinates()[:, 0]
y = mesh.coordinates()[:, 1]
u_values = u.vector().get_local()
sigma_xx = E * diff(u, 'x')# 绘制梁的变形和应力分布
fig = plt.figure(figsize=(12, 6))# 绘制变形图
ax1 = fig.add_subplot(121, projection='3d')
ax1.plot_trisurf(x, y, u_values, cmap='viridis')
ax1.set_xlabel('x (m)')
ax1.set_ylabel('y (m)')
ax1.set_zlabel('Displacement (m)')
ax1.set_title('Deformation of the Cantilever Beam')# 绘制应力分布图
ax2 = fig.add_subplot(122)
ax2.plot(x, sigma_xx)
ax2.set_xlabel('x (m)')
ax2.set_ylabel('Stress (Pa)')
ax2.set_title('Stress Distribution in the Cantilever Beam')
plt.tight_layout()
plt.show()

有限元分析代码实现

# @Time:2024/10/17
# @Autho:Jiang Gang
# @Version:1.0
# @Contact:sivxiu@foxmail.comimport numpy as np
import matplotlib.pyplot as plt
from scipy.linalg import solve# 定义悬臂梁的参数
L = 1.0  # 梁长度 (m)
b = 0.2  # 梁宽度 (m)
h = 0.2  # 梁高度 (m)
E = 250e6  # 杨氏模量 (Pa),泊松比0.3,可以不需要密度
F = 10000  # 末端集中力 (N)
n = 100  # 节点数# 计算截面属性
A = b * h  # 刚体横截面积 (m^2)
I = b * h ** 3 / 12  # 截面惯性矩 (m^4)# 离散化梁
x = np.linspace(0, L, n) # 沿梁长度方向的节点坐标
y = np.linspace(-h/2, h/2, n)
X, Y = np.meshgrid(x, y) # 二维网格# 建立刚度矩阵
K = np.zeros((n * n, n * n))
for i in range(n):
    for j in range(n):
        K[i * n + j, i * n + j] = 12 * E * I / (b * h ** 3)
        if i > 0:
            K[i * n + j, (i - 1) * n + j] = 6 * E * I / (b * h ** 2)
            K[(i - 1) * n + j, i * n + j] = 6 * E * I / (b * h ** 2)
K[:n, :n] = 1.0  # 固定端约束# 计算位移 u,载荷向量 F_vec
F_vec = np.zeros(n * n)
F_vec[-n:] = -F
u = solve(K, F_vec).reshape((n, n)) # 求解线性方程组 K * u = F_vec# 计算应力 simga
M = -F * (L - X)  # 弯矩
sigma = M * Y / I  # 应力 (Pa)
epsilon = sigma / E  # 应变# 绘制应力云图
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))im = ax1.imshow(np.abs (sigma) / 1e6, cmap='coolwarm', extent=(0, L, -h/2, h/2)) # imshow() 函数绘制二维应力分布,sigma为应力
ax1.set_xlabel('Position (m)')
ax1.set_ylabel('Height (m)')
ax1.set_title('Stress in Cantilever Beam')
cbar = fig.colorbar(im, ax=ax1) # 添加颜色条和标签
cbar.set_label('Stress (MPa)')im2 = ax2.imshow(np.abs(epsilon), cmap='coolwarm', extent=(0, L, -h/2, h/2))
ax2.set_xlabel('Position (m)')
ax2.set_ylabel('Height (m)')
ax2.set_title('Strain in Cantilever Beam')
cbar2 = fig.colorbar(im2, ax=ax2)
cbar2.set_label('Strain (%)')plt.tight_layout()
plt.show()

代码结果,没有显示变形

应力
images/python 悬臂梁的有限元分析-20241219165143862.webp

应变
images/python 悬臂梁的有限元分析-20241219163956239.webp

使用ansys模拟相同边界和条件,除去应力奇异,仿真结果也是相当的给力,等效应力和等效应变

images/python 悬臂梁的有限元分析-20241219164726843.webp

等效应力

images/python 悬臂梁的有限元分析-20241219163225970.webp

等效应变

images/python 悬臂梁的有限元分析-20241219162809921.webp

应力集中

images/python 悬臂梁的有限元分析-20241219163235754.webp

Von Mises应力

等效应力

  • 范式等效应力(Von Mises Stress)是一种屈服准则,习惯称为Mises等效应力,它遵循材料力学第四强度理论(形状改变比能理论)
  • stress intensity(应力强度),是由第三强度理论得到的当量应力,其值为第一主应力减去第三主应力
  • 一般脆性材料,如铸铁、石料、混凝土,多用第一强度理论。考察绝对值最大的主应力。
  • 一般材料在外力作用下产生塑性变形,以流动形式破坏时,应该采用第三或第四强度理论。压力容器上用第三强度理论(安全第一),其它多用第四强度理论

屈服准则

  • A.受力物体内质点处于单向应力状态时,只要单向应力大到材料的屈服点时,则该质点开始由弹性状态进入塑性状态,即处于屈服。
  • B.受力物体内质点处于多向应力状态时,必须同时考虑所有的应力分量。在一定的变形条件(变形温度、变形速度等) 下,只有当各应力分量之间符合一定关系时,质点才开始进入塑性状态,这种关系称为屈服准则,也称塑性条件。它是描述受力物体中不同应力状态下的质点进入塑性状态并使塑性变形继续进行所必须遵守的力学条件

第三强度理论认为最大剪应力是引起流动破坏的主要原因,如低碳钢拉伸时在与轴线成45度的截面上发生最大剪应力,材料沿着这个平面发生滑移,出现滑移线。这一理论比较好的解释了塑性材料出现塑性变形的现象。

第四强度理论认为形状改变比能是引起材料流动破坏的主要原因,钢材等塑性材料遵循第四强度理论,结果更符合实际。

工程应力-应变曲线

金属或者弹性体的应力-应变曲线,通常分为四个阶段: 弹性阶段、屈服阶段、应变硬化阶段和颈缩断裂阶段

塑件材料在拉伸试验进入屈服阶段以后,开始产生显著的塑性变形,其数值远比弹性变形大。此外,试件横截面也渐渐变小。进入强化阶段后,试件伸长和横截面收缩就更加明显。特别是在局部变形阶段,试件颈缩部分的拉伸应变比其余各处大,截面面积也与其余各处明显不同。

真应变和真应力比工程应变和工程应力更准确,但是我们却很少需要真实应变和真实应力。由于负荷值的变化随时可以读出,但瞬间截面积很难直接读出,因此,工程应力应变曲线较容易得到。

塑性形变过程中,假设体积不变,真应变\(\epsilon _t\)与工程应变\(\epsilon\):$$\epsilon _t = \int d\epsilon_t= \int _{l_0}^{l} \frac{dl}{l} =\ln \frac{l}{l_0}=\ln (1+\epsilon )$$
其中,\(l_0\)为初始标距值,\(l\)为标距内瞬时长度值,\(A_0\)为初始横截面积,\(A\)为瞬时横截面积

由此,真应力\(\sigma _t\)与工程应力\(\sigma\):$$\sigma _t=\frac {F}{A}=\frac {Fl}{A_0 l_0}=\frac {F}{A_0}(1+\epsilon)=\sigma (1+ \epsilon)$$
真应变或真应力均比对应的工程值要大

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

枚举思想——算法学习(一)

枚举思想——算法学习(一)前言 在算法学习的道路上,枚举思想是一种简单却强大的思想。作为一种暴力求解方法,枚举算法通过穷尽所有可能的解,从中找到满足条件的最优解或所有解。虽然它看似“低效”,但在解决许多实际问题时却显得直观且有效,尤其是在问题规模可控的情况下…

20222307 2024-2025-1 《网络与系统攻防技术》实验八实验报告

1.实验内容 (1)Web前端HTML 能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。 (2)Web前端javascipt 理解JavaScript的基本功能,理解DOM。 在(1)的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎+…

《Django 5 By Example》读后感

一、 为什么选择这本书? 本人的工作方向为Python Web方向,想了解下今年该方向有哪些新书出版,遂上packt出版社网站上看了看,发现这本书出版时间比较新(2024年9月),那就它了。 从2024年11月11日至2024年12月18日期间,花了 22 天阅读完《Django 5 By Example》(《Django项目…

面向对象编程,类和对象

类的关键词 Class 类一般申明在namespace中,枚举和struct一般也在namespace中申明 类的申明语法(类前面可以加访问修饰符) class 类名 {特征——成员变量行为——成员方法保护特征——成员属性构造函数和析构函数索引器运算符重载静态成员 }类申明实例 命名使用帕斯 在同一个…

mysql mysqldump 定时备份

mysqldump方式备份Windows 一、创建bat 任务脚本 ⚠️ 内容背后不能有中文空格,否则会运行失败 新建 bat 脚本复制以下内容,安装自己的需求对内容进行修改@echo off::命令行窗口中显示此条信息 @echo 开始备份数据库::将hour设置为此刻小时位的时间,从0位置开始取2位 set h…

OCS2::ocs2_centroidal_model_质心动量模型

1. ModelHelperFunctions.cpp 1.1 updateCentroidalDynamics() : 质心动力学更新 template <typename SCALAR_T> void updateCentroidalDynamics(PinocchioInterfaceTpl<SCALAR_T>& interface, const CentroidalModelInfoTpl<SCALAR_T>& info,const …

密码学-古典密码

密码学-古典密码 前言 古典密码学(Classic cryptography)和现代密码学(Modern cryptography)的主要差别在于计算机的使用,一般来说,古典密码学是基于字符的,而现代密码学是基于二进制位的。 代换 代换密码是将明文中的字符替代成其他字符,即替代转换,若整个加密过程中…

【笔记】组合数学初步

一些初等的组合数学知识二项式系数 定义: 我们在高中时常见的二项式系数的形式是 \[C_{n}^{k} = \frac{n!}{k!(n-k)!} \]但下文将采用如下的定义: \[\binom{n}{k} = \begin{cases}\dfrac{n^{\underline{k}}}{k!} & k \ge 0\\\\0 & k < 0\end{cases} \]注意这里对 …

翻转字符串翻转单词

一、翻转字符串问题描述 请实现⼀个算法,在不使⽤额外数据结构和储存空间的情况下,翻转⼀个给定的字符串(可以使⽤单个过程变量)。 解题思路 由于不允许使用额外的数据接口和存储空间,所以我们将⼀个字符串以中间字符为轴,前后翻转,也就是将str[len]赋值给str[0],将str[0…

拒绝 Helm? 如何在 K8s 上部署 KRaft 模式 Kafka 集群?

首发:运维有术 今天分享的主题是:不使用 Helm、Operator,如何在 K8s 集群上手工部署一个开启 SASL 认证的 KRaft 模式的 Kafka 集群? 本文,我将为您提供一份全面的实战指南,逐步引导您完成以下关键任务:配置 Kafka Secret:管理用户密码和集群 ID 配置 Kafka Service:使…

Vulnhub 靶场 Jetty: 1

前期准备 靶机地址:https://www.vulnhub.com/entry/jetty-1,621/ Description Back to the Top The company Aquarium Life S.L. has contacted you to perform a pentest against one of their machines. They suspect that one of their employees has been committing frau…