当前位置: 首页 > news >正文

sfe_py的应力云图计算与显示step by step

1.依赖环境

首先是相关环境的安装,如果你使用wsl模式的linux环境,你还是趁此机会给ubuntu装个虚拟显示器。相关的一系列安装动作:

  1. pip install sfepy
    1. 如果你安装的是2025.2版,你需要:
    2. pip install jax
      1. 这是sfe_py矩阵运算的数学库依赖
      2. 大概率是numpy的速度不够快
  2. sudo apt update && sudo apt install libgl1-mesa-glx x11-apps -y
    1. 如果你使用了ubuntu 22.4以上的版本:
      1. sudo apt update && sudo apt install libglx-mesa0 x11-apps -y
  3. echo "export DISPLAY=$(grep nameserver /etc/resolv.conf | awk '{print $2}'):0.0" >> ~/.bashrc
    source ~/.bashrc
    注意这里只是一次性地得到了宿主机的ip,如果需要长期使用x11,需要修改~/.bashrc:
    # enable programmable completion features (you don't need to enable
    # this, if it's already enabled in /etc/bash.bashrc and /etc/profile
    # sources /etc/bash.bashrc).
    #if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    #    . /etc/bash_completion
    #fi
    #export DISPLAY=172.26.208.1:0.0
    # 方法1:从路由表提取默认网关(宿主机IP)
    host_ip_via_route=$(ip route | awk '/default/ {print $3}' | head -n1)# 方法2:从 resolv.conf 提取DNS服务器(宿主机IP)
    host_ip_via_dns=$(grep -oP 'nameserver \K[\d.]+' /etc/resolv.conf | head -n1)# 优先使用路由表结果,失败则回退DNS解析
    host_ip="${host_ip_via_route:-$host_ip_via_dns}"
    export DISPLAY="${host_ip}:0.0"
  4. windows环境安装:
    1. vcxsrv-64.1.20.14.0.installer.exe

2. 例程

代码不建议上来徒手做.mesh文件建模,可以先跑一下系统自带的例程:

比如:

sfepy-run ./mixed_mesh.py

     ...................... .mixed_mesh.py 在sfepy的安装目录,如果你的python启用了.venv,它位置很好找:

find .venv -name "mixed_mesh.py"

sfepy-view beam_h* -f u:s0:wu:e:p0 u:s1:wu:e:p0

............................显示生成的.vtk文件

例程里的beam:

 

  • 这个还没有仔细校对参数,应该是匀质梁的单端固定的效果。 
  • 接下来可以先从改变外力,叠加外部载荷开始。

3.受力变化

例程里的受力是一种匀质梁一样的受力:

def get_force(ts, coors, mode=None, **kwargs):if mode == 'qp':F = 1e3val = nm.zeros_like(coors)[..., None]val[:, 2, 0] = -coors[:, 0] / 0.7 * Freturn {'val': val}
  • 这里的F是受力
  • coors是所有点的坐标
  • 然后coors[:,0]取的是所有的点的坐标。
  • val[:,2, 0],第二个2,实际是z坐标,那个0大概是指压力,他可能会受到拉压扭力。

3.1 修改后的

def get_force(ts, coors, mode=None, **kwargs):if mode == 'qp':F = 8e4tol = 1e-5  # 容差范围,避免浮点误差# 计算中点坐标val = nm.zeros_like(coors)[..., None]x_mid = (nm.max(coors[:, 0]) + nm.min(coors[:, 0])) / 2.0#y_mid = (nm.max(coors[:, 1]) + nm.min(coors[:, 1])) / 2.0  # 若为三维模型#z_mid = (nm.max(coors[:, 2]) + nm.min(coors[:, 2])) / 2.0#仅有三点受力val[:, 2, 0] = 0# 中点受力dist = nm.abs(coors[:, 0] - x_mid)idx_center = nm.argmin(dist)  # 找到最近节点的索引#print(f'{x_mid} - {idx} - {nm.max(coors[:, 0])}, {nm.min(coors[:, 0])}')#os._exit(0)val[idx_center, 2, 0] = -F#左端点x_min = nm.min(coors[:,0])dist = nm.abs(coors[:, 0] - x_min)idx_left = nm.argmin(dist)  # 找到最近节点的索引val[idx_left, 2, 0] = F*0.5#右端点x_max = nm.max(coors[:,0])dist = nm.abs(coors[:, 0] - x_max)idx_right = nm.argmin(dist)  # 找到最近节点的索引val[idx_right, 2, 0] = F*0.5print(f'>>>>>>>>>>>>>>>>>>>>>>>>pos= {idx_left} {idx_center} {idx_right}')        #os._exit(0)return {'val': val}

我相当于做了一个简支梁,仅考虑中点处的外力,但是应力云图不对:
sfepy-view beam_h*.vtk -f u:s1:wu:e:p0 u:s0:wu:e:p

附录A 原始文档,例程位置

SfePy: Simple Finite Elements in Python — SfePy version: 2025.2+git.e2f7d954 documentation

有一篇关于mesh的文可能会用到:

mesh算法进化如何实现?这里是成功实例......_几何_三角形_数量

它给出了更少点数,更好的效果的一种实施例。

附录B 关于测点位置与剪力滞 

实际埋点时,剪力滞的问题可能会影响误差,目前已知的解决方案是,把传感器放置在腹板,而不是上下翼板,避开这个问题。 

附录C .mesh文件的格式

  • Dimension 3 定义了这是一个3维结构
  • Vertices是点,每个点因为是3维,所以有3个点,第4列是点类目标的标记。
  • Hexahedra是六面体,由8个点组成,最后一列是类型标记,1.
  • Tetrahedra是三棱锥,也就是4面体,由4个点组成,最后一列是类型标记,2.
  • 六面体,三棱锥中的坐标都是顶点坐标,Vertices.单独的点没有意义。只能在纳入一个结构中才有意义。

MeshVersionFormatted 2
Dimension 3

Vertices
32
0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0
0.0000000000000000e+00 1.0000000000000001e-01 0.0000000000000000e+00 0
0.0000000000000000e+00 1.0000000000000001e-01 1.0000000000000001e-01 0
0.0000000000000000e+00 0.0000000000000000e+00 1.0000000000000001e-01 0
1.0000000000000001e-01 0.0000000000000000e+00 0.0000000000000000e+00 0
1.0000000000000001e-01 1.0000000000000001e-01 0.0000000000000000e+00 0
1.0000000000000001e-01 1.0000000000000001e-01 1.0000000000000001e-01 0
1.0000000000000001e-01 0.0000000000000000e+00 1.0000000000000001e-01 0
2.0000000000000001e-01 0.0000000000000000e+00 0.0000000000000000e+00 0
2.0000000000000001e-01 1.0000000000000001e-01 0.0000000000000000e+00 0
2.0000000000000001e-01 1.0000000000000001e-01 1.0000000000000001e-01 0
2.0000000000000001e-01 0.0000000000000000e+00 1.0000000000000001e-01 0
2.9999999999999999e-01 0.0000000000000000e+00 0.0000000000000000e+00 0
2.9999999999999999e-01 1.0000000000000001e-01 0.0000000000000000e+00 0
2.9999999999999999e-01 1.0000000000000001e-01 1.0000000000000001e-01 0
2.9999999999999999e-01 0.0000000000000000e+00 1.0000000000000001e-01 0
4.0000000000000002e-01 0.0000000000000000e+00 0.0000000000000000e+00 0
4.0000000000000002e-01 1.0000000000000001e-01 0.0000000000000000e+00 0
4.0000000000000002e-01 1.0000000000000001e-01 1.0000000000000001e-01 0
4.0000000000000002e-01 0.0000000000000000e+00 1.0000000000000001e-01 0
5.0000000000000000e-01 0.0000000000000000e+00 0.0000000000000000e+00 0
5.0000000000000000e-01 1.0000000000000001e-01 0.0000000000000000e+00 0
5.0000000000000000e-01 1.0000000000000001e-01 1.0000000000000001e-01 0
5.0000000000000000e-01 0.0000000000000000e+00 1.0000000000000001e-01 0
5.9999999999999998e-01 0.0000000000000000e+00 0.0000000000000000e+00 0
5.9999999999999998e-01 1.0000000000000001e-01 0.0000000000000000e+00 0
5.9999999999999998e-01 1.0000000000000001e-01 1.0000000000000001e-01 0
5.9999999999999998e-01 0.0000000000000000e+00 1.0000000000000001e-01 0
6.9999999999999996e-01 0.0000000000000000e+00 0.0000000000000000e+00 0
6.9999999999999996e-01 1.0000000000000001e-01 0.0000000000000000e+00 0
6.9999999999999996e-01 1.0000000000000001e-01 1.0000000000000001e-01 0
6.9999999999999996e-01 0.0000000000000000e+00 1.0000000000000001e-01 0

Hexahedra
5
1 2 3 4 5 6 7 8 1
5 6 7 8 9 10 11 12 1
9 10 11 12 13 14 15 16 1
13 14 15 16 17 18 19 20 1
21 22 23 24 25 26 27 28 1

Tetrahedra
12
17 18 21 20 2
18 24 21 20 2
18 22 21 24 2
18 19 22 20 2
19 24 22 20 2
19 23 22 24 2
25 26 29 28 2
26 32 29 28 2
26 30 29 32 2
26 27 30 28 2
27 32 30 28 2
27 31 30 32 2

End
 

http://www.lryc.cn/news/588220.html

相关文章:

  • 夏令营集训7月14日模拟赛④
  • 7.14 Java|搞清楚String 和StringBuilder
  • 【HarmonyOS】元服务入门详解 (一)
  • Java学习————————ThreadLocal
  • 九、官方人格提示词汇总(中-2)
  • 【笔记】chrome 无法打开特定协议或访问特定协议时卡死
  • 计算机基础:小端字节序
  • muduo面试准备
  • 算法:投票法
  • Debezium日常分享系列之:Debezium 3.2.0.Final发布
  • 观察应用宝进程的自启动行为
  • JAVA经典单例模式
  • 分布式系统中设计临时节点授权的自动化安全审计
  • 生信技能74 - WGS插入片段长度分布数据提取与绘图
  • Vue3 学习教程,从入门到精通,Vue 3 表单控件绑定详解与案例(7)
  • Linux连接跟踪Conntrack:原理、应用与内核实现
  • 分布式一致性协议
  • 零基础 “入坑” Java--- 十一、多态
  • 详解同步、异步、阻塞、非阻塞
  • 12.4 Hinton与Jeff Dean突破之作:稀疏门控MoE如何用1%计算量训练万亿参数模型?
  • UM680A模块接地与散热和封装推荐设计
  • MIPI DSI(三) MIPI DSI 物理层和 D-PHY
  • 2D和3D激光slam的点云去运动畸变
  • SLAM 前端
  • Doll靶机渗透
  • openEuler系统PCIE降速方法简介
  • 基于YOLOV8的烟火检测报警系统的设计与实现【全网独一、报警声音机制、实时画面、系统交互、日志记录】
  • SSM框架学习——day1
  • MySQL窗口函数详讲
  • VUE3 添加长按手势