使用Gmsh为H型管道划分网格时,发现网格加密之后计算非常慢,考虑使用局部网格加密的方法划分网格,查看教程发现Gmsh划分非均匀网格的时候比较麻烦,而且发现onshape配和cfmesh使用起来很方便,因此尝试使用Onshape建模用cfmesh来划分网格和局部加密。但是onshape建模的时候最小的尺寸单位为毫米,如果要为纳米级别的管道直接建模实现不了,因为onshape不能无限放大,如下图,画出来的图形看不到,无法完成后面的的修剪等建模操作,因此先建模然后在openFoam里面划分网格后用transformPoint命令缩放。(这里设置的onshape尺度为mm)
先画好平面图
因为我们需要的是二维的模型,拉伸时选“曲面”。
得到
接着就可以导出模型,全选模型然后鼠标右键选导出。弹出以下框,选择二进制、STL格式和单位。
将.stl文件拷贝到算例文件夹里面。
在终端输入以下代码(需要在ubantu里面下载cfmesh,根据多次尝试,发现在很多网络下载不了的情况下,用手机联通卡开热点下载有奇效)
surfaceAutoPatch E.stl Ohmic.stl 150 //E.stl 是在onshape导出的文件名 Ohmic.stl是导进openFoam里面想要的名字,可以任意给 150表示面与面之间的角度<150°的patch 分开成独立的patch
打开paraview 打开Ohmic.stl文件就可以看到模型了
生成.fms文件,输入
surfaceToFMS Ohmic.stl
参考上面paraview里面的模型,看.fms文件,根据paraview里面图形的patch的颜色,判断patch0是哪个面、patch1是哪个面(深蓝色为0、接着是1 以此类推)
需要注意的是,以上修改的名称不能重复(通过在名称后面添加1、2 如walls1、walls2),若重复,paraview识别不了全部相同名称的面。
在system里面添加meshDict字典,定义为:
maxCellSize 5; //网格尺寸
surfaceFile "Ohmic.fms";
objectRefinements //局部网格细化
{
boxExample
{
type box; //以一个六面体的形式框选需要细化的区域
cellSize 1; //细化的网格尺寸
centre (0 0 5); //六面体中心点
lengthX 110; //六面体X方向长度
lengthY 200; //六面体Y方向长度
lengthZ 10; //六面体Z方向长度
在终端输入:
cartesian2DMesh
生成polyMesh文件夹,解压里面的boundary文件,查看里面的empty对应的名称是否需要修改(一般需要修改empty边界的名称例如:frontAndBack,为了与0文件夹中字典的名称对应)
还需要注意的是0文件夹里面的字典也需要修改,这就是cfmesh不够方便的地方,它不会将同样的名称归类到一起,而且面的名字也不能重复(通过在名称后面添加1、2 如walls1、walls2),则0文件夹里面字典的内容中命名也要对应修改为.fms文件中对应的名字,如
paraFoam
可以看到生成网格成功了,但是生成的模型和网格是mm尺度的,还需要缩小,输入终端下列命令得到nm级别的。
transformPoints -scale '(0.000001 0.000001 0.000001)'//表示xyz方向都×0.000001