有限元建模中非均匀厚度3D模型指定节点厚度计算方法咨询
针对带非均匀厚度分布的3D有限元模型,结合你可导出的stl/obj/wrl/feb/geo多格式支持,有三类成熟可落地的计算方法,精度完全满足跨模型结果对比的要求:
射线法(通用度最高,适配三角面格式)
这是薄壁结构厚度计算的最常用方案,原理是在待测量的目标节点位置,基于节点邻域网格拟合出局部法向,沿法向正反两个方向发射射线,分别找到射线与模型另一侧表面的交点,两个交点的直线距离即为该位置的厚度。
该方法适配所有三角网格格式(stl/obj/wrl),不需要模型保留拓扑分组信息,常规网格处理工具都自带该功能,手动测点操作耗时不超过10分钟;如果需要批量计算,也可以通过简单脚本实现,核心逻辑如下:# 三角网格厚度计算核心逻辑示意 def get_node_thickness(tri_mesh, target_node_xyz): # 基于节点周围三角面拟合局部法向,避免全局法向误差 local_normal = tri_mesh.fit_local_normal(target_node_xyz, neighbor_range=1e-3) # 正反方向发射射线求交 hit_front = tri_mesh.ray_cast(target_node_xyz, local_normal) hit_back = tri_mesh.ray_cast(target_node_xyz, -local_normal) # 两交点欧氏距离即为厚度 return calc_distance(hit_front, hit_back)注意如果模型局部曲率较大,要缩小法向拟合的邻域范围,避免法向偏斜导致厚度计算误差。
拓扑面距离法(精度最高,适配带实体信息的格式)
如果你导出的feb(FEBio格式)、geo(Gmsh格式)保留了完整的实体拓扑、上下表面分组信息,不需要做射线求交:- 先将4个待计算节点映射到模型任意一侧的基准表面
- 直接计算每个节点到模型对侧表面的最短法向距离,就是该位置的真实厚度
该方法完全规避了射线法可能出现的打偏、漏交面问题,计算结果和建模理论值偏差最小,优先推荐在能导出带拓扑信息格式时使用。
全模型壁厚分析法(效率最高,适配所有格式)
通用有限元前处理工具、3D建模工具基本都自带壁厚分析模块,将模型导入后直接运行全模型壁厚计算,即可生成覆盖整个模型的厚度分布云图,直接在云图上定位到4个目标节点的位置读取数值即可。该方法除了提取目标测点厚度外,还能快速排查全模型的厚度异常区域,适合后续需要增加测点数、做全模型厚度对标时使用。
注意事项:不要用全局统一坐标系方向计算非均匀厚度模型的测点厚度,必须基于每个测点的局部法向计算,否则对于带曲率、倒角的结构,厚度计算误差可能超过10%,无法满足对标要求。
内容的提问来源于stack exchange,提问作者royan

