Unity展示Fluent仿真结果的难点
在之前几篇文章当中,完成了从Abaqus模型的Inp文件当中提取有限元模型的节点和单元信息,从而在Unity当中建立和有限元网格相一致的Mesh. 由于Unity的Mesh和有限元网格保持一致,所以可以将有限元网格节点上的物理量通过颜色采样附着在Unity模型Mesh上,从而实现在Unity当中实现与有限元仿真一样的云图效果。
但是用Ansys的仿真结果如何在Unity当中重建呢?
Ansys有很多模块,比如Workbench和Fluent,有些模块可以直接导出Unity建模所需要的面片信息,但是像Fluent好像就没有导出面片信息的选项. 只能导出节点坐标和节点上的物理量。如下图所示:
然而在Unity当中重建Mesh还需要如下图所示三角面片信息,就是三角片的顶点序列号,Unity根据三角片信息在特定节点之间连接三角片,从而实现整个网格的重建。
但是Fluent根本就不提供这个三角片信息!!所以Fluent的网格在Unity当中重建的最重要的难点是:获取三角片信息!
解决方式
基本思路
既然已经实现从Abaqus的Inp文件当中解析顶点和三角片信息的话,那就把Fluent网格想办法转换到Inp格式。在此基础上有两种思路:
思路一:将Fluent的网格导入到HyperMesh当中生成Abaqus的inp文件,然后按照inp文件的处理方式得到三角片信息.
思路二:将Fluent的模型导出为stl模型,然后在Abaqus当中重新画网格.
以上两种办法都不难,而且也可以获取顶点和三角片信息,但是真正的问题是:经过这两种处理之后,所得到的其实是一个和原始Fluent 的网格所不一样的新的有限元网格。思路二更不用说,思路一只要经过HyperMesh导进导出,即便什么都不做,都会和原本在Fluent当中的网格信息不同。
有人问,那这有什么影响呢?
在Fluent原始网格上仿真模拟出来的节点数据和新的网格节点是不对应的,不仅是数量上不对应,而且顺序上也不知道如何对应.
空间插值
那就没有办法了吗?
肯定不是的,办法就是空间插值。空间插值的意思是,既然我已经知道原始网格节点的空间坐标和对应的物理量,虽然我经过转换之后的新的网格和原始网格的节点数量和编号顺序可能改变了,但新网格整体的空间区域和原始网格的空间区域是一样的! 空间插值能够实现的的原因是原始网格的节点是较均匀且密集分布的,那么可以知道新网格的每一个节点空间位置附近都应该有一部分原始网格节点空间位置的数值。根据这一想法便能实现从原始网格的物理量数值上插值出新的网格节点位置对应的物理量。并利用之前渲染的基础进行渲染就行.
下面两张图分别是Fluent的仿真结果和Unity重建的效果: