原项目:https://github.com/chiefenne/PyAero
我的项目:https://github.com/sn1979c/PyAero

我的项目里面有一些pr作者还没merge进去。本文介绍一下采用该项目生成翼型网格的流程。

原项目采用pyside6写了一个生成多块网格的小软件,下载源代码并根据readme文件安装相关的库,将<settings.json>文件中的python编译器改成自己的,在vscode中构建程序,软件界面如下:

可以看到左侧的操作栏有6项,通过前三项就可以画出自己想要的翼型:

  1. 在airfoil database中导入一个翼型,导入时会将#行视为注释。
  2. 在contour splining and Refinement中平滑翼型,并给翼型添加后缘。
  3. 在Meshing栏中Create Mesh,并选一个翼型格式导出。

导出SU2格式的时候有可能会出错,这似乎是这个开源代码依赖的库meshio.py的一个Bug造成的,可以找到meshio库中的__su2.py文件,把第340行改为如下所示的代码,似乎能解决这个问题:

            for index, cell_block in enumerate(mesh.cells):cell_type = cell_block.typedata = cell_block.data

所生成的多块网格如下图所示:

如果只是想生成一个质量还不错的网格,看到这里就可以结束了。下面讨论一下如何批量生成网格。

首先在Meshing栏中不断调整网格生成的参数,满意后记录到文件data/Batch/batch_control中。

接着原作者提供了采用tui的方式批量生成网格,在anaconda prompt 中激活环境,并运行python src/PyAero.py -no-gui data/Batch/batch_control.json即可批量生成翼型网格。

但笔者觉得原作者的上述方法不太灵活,但源码中的各个程序又都和gui高度耦合,不能直接拿来调用,笔者将翼型和网格生成相关的代码整理成了MeshingApi.py和FoilApi.py两个Api,并去除了pyside6的gui代码,可以通过在python脚本中从外部调用两个Api来更灵活地生成网格。

https://github.com/sn1979c/PyAero

下载上述项目,打开项目中的api文件,LoadBatch.py是采用Api批量生成翼型网格的示例。

注:如果你要把这两个Api复制到其他地方用,你需要注意把Utils.py这个依赖也复制走。

总的来说,生成网格的流程如下所示:

airfoil = FoilApi(foilname)
# 读取翼型
airfoil.readContour(foilpath, '#')

接着修改refine翼型的参数,默认参数如下所示:

airfoil.refine_parameters = {"Airfoil contour refinement": {"Refinement tolerance": 172.0,"Refine trailing edge old": 3,"Refine trailing edge new": 6,"Refine trailing edge ratio" : 3,"Number of points on spline" : 200},"Airfoil trailing edge": {"Upper side blending length": 30.0,"Lower side blending length": 30.0,"Upper blending polynomial exponent": 3,"Lower blending polynomial exponent" : 3,"Trailing edge thickness relative to chord" : 0.4}
}

修改后refine翼型、给翼型添加后缘(可选):

airfoil.doSplineRefine()
airfoil.addTrailingEdge()

之后就可以查看翼型的形状了,翼型点的数据储存在spine_data的第一项:

f = airfoil.spline_data[0]
plt.plot(f[0], f[1])
plt.legend()

将网格生成参数改成之前在软件里记下来的值,并生成网格,默认值如下:

# make mesh
wind_tunnel = MeshingApi.Windtunnel(airfoil)
# 默认参数
wind_tunnel.mesh_parameters = {"Airfoil trailing edge": {"Upper side blending length": 30.0,"Lower side blending length": 30.0,"Upper blending polynomial exponent": 3,"Lower blending polynomial exponent" : 3,"Trailing edge thickness relative to chord" : 0.4},"Airfoil contour mesh": {"Divisions normal to airfoil": 15,"1st cell layer thickness": 0.004,"Cell growth rate": 1.05},"Airfoil trailing edge mesh": {"Divisions at trailing edge": 3,"Divisions downstream": 15,"1st cell layer thickness": 0.004,"Cell growth rate" : 1.05},"Windtunnel mesh airfoil": {"Windtunnel height": 3.5,"Divisions of tunnel height": 100,"Cell thickness ratio": 10.0,"Distribution biasing" : "symmetric"},"Windtunnel mesh wake": {"Windtunnel wake": 7.0,"Divisions in the wake": 100,"Cell thickness ratio": 15.0,"Equalize vertical wake line at" : 30.0}
}
# 生成网格
wind_tunnel.makeMesh()

接着也可以用pyplot来画出翼型网格:

wind_tunnel.drawMesh()

最后导出不同格式的网格,这里这个fluent的导出程序是我自己写的,边界条件全给成farfield了,meshio的导出程序有点问题,其他的导出格式我都没测试过。

output_formats = ['FLMA', 'FLUENT']
for output_format in output_formats:extension = {'FLMA': '.flma','SU2': '.su2','GMSH': '.msh','VTK': '.vtk','CGNS': '.cgns','ABAQUS': '.inp','FLUENT': '.msh'}mesh_name = os.path.join(mesh_path, basename + extension[output_format])getattr(MeshingApi.BlockMesh, 'write'+output_format)(wind_tunnel, name=mesh_name)

采用上述方法,可以采用脚本控制生成翼型的网格,如果你想定制网格生成算法,可以参考makeMesh里面的流程:先生成每个块的网格BlockMesh,再用Connect类将各个BlockMesh连接起来。如果想对具体的网格生成算法作研究,可以去修改具体某个BlockMesh的网格生成程序,在makeMesh程序中将其添加进去即可。

pyAero生成网格的质量和用journal文件控制ICEM生成的网格质量相比还是比较高的,表面的正交性比较好,并且程序框架比较清晰,想修改具体的网格生成算法也可以在上面做进一步的开发。

采用开源程序pyAero批量生成高质量的多块翼型网格相关推荐

  1. NVIDIA开源DG-Net:用GAN生成高质量行人图像,辅助行人重识别/在线试衣

    前几天英伟达开源了DG-Net的源码.让我们来回顾一下这篇CVPR19 Oral的论文. 论文是英伟达(NVIDIA), 悉尼科技大学(UTS), 澳大利亚国立大学(ANU)的研究人员 在CVPR19 ...

  2. matlab输出高分辨率图片有白色毛刺,科学网—图片空白边缘处理/统计直方图---matlab/保存生成高质量的清晰图 - 杨小林的博文...

    这里介绍hist函数结合bar函数绘制统计直方图 一组原始采集数据,如:data=[2 3 -4 -1 4 -5 1 5 -2 -3]; 数据范围为range=-5:5; 首先可以采用hist函数进行 ...

  3. 科技最前沿!Adobe提出自动生成高质量合成图像新方法

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习> ...

  4. 无需用户输入,Adobe提出自动生成高质量合成图像新方法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 没有用户输入,也能生成高质量的合成图像吗? 编辑:迈威AI研习社 ...

  5. 无需用户输入!Adobe提出自动生成高质量合成图像新方法

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 本文转载自:机器之心  |  作者:He Zhang等 编辑:小舟.杜伟 没有用户输入,也能生 ...

  6. EMNLP 2021 | 大道至简:微软提出可生成高质量文本表示的预训练语言模型

    ©作者 | 常馨 学校 | 北京邮电大学硕士生 研究方向 | NLP.信息检索 Abstract 基于自动编码器的语言模型在 Dense Retrieval(DR)中受到越来越多的关注,因为其训练编码 ...

  7. StyleGAN v1 :用于生成高质量图像数据的生成对抗方法

    StyleGAN是2018年的一篇文章,目前已经被TPAMI收录,该方法能够生成高质量的图像数据并且做到了高层特征可控,v1的主要工作在于设计了一个style-based生成器,其中包括了styles ...

  8. 如何微调GPT-2生成高质量的歌词

    自然语言生成(NLG)近年来取得了令人难以置信的进步.2019年初,OpenAI发布了GPT-2,一个巨大的预训练模型(1.5B参数),能够生成类人质量的文本. 生成预训Transformer2 (G ...

  9. 苏黎世大学 AI 新研究:仅用少量样本生成高质量光声图像

    近日,苏黎世联邦理工学院和苏黎世大学的科学家宣布,可以利用机器学习方法来改善光声成像,成果发表在Nature Machine Intelligence上(点击查看论文链接) "光声成像&qu ...

最新文章

  1. Android实现富文本时遇到的一些问题(2)字体效果的保存
  2. Linux的mmap内存映射机制解析
  3. 地球上环境最恶劣的数据中心
  4. 搭架SSH服务器学习笔记
  5. hadoop博客 oschina
  6. Taro+react开发(39)taro中model使用
  7. ERP会给企业带来什么好处?
  8. Ubuntu 8.04 Hardy LTS 软件源设置
  9. 长沙戴维营教育iOS开发面试题周刊
  10. 第六章 使用ADO.NET查询和操作数据
  11. 什么是“5个9”(99.999%)的可靠性?
  12. 商务部:保障春节期间“菜篮子”供应充足、价格稳定
  13. Windows USB功能驱动开发总结
  14. OFFICE激活报错0X80080005
  15. 数据分析常见的英文缩写(一)
  16. springboot王道考研课程资料购物网站
  17. C#使用System.Speech制作语音提示功能
  18. app启动页html模板,APP引导页设计的五种常见表现方式
  19. Revit API: Dimension 尺寸标注
  20. R语言心得说:R语言之xlsx包读写Excel数据

热门文章

  1. 记录对接移动Mas平台发送短信踩的坑
  2. 解密中国互联网构成与发展
  3. 《世界因你不同(李开复自传)》
  4. C语言 求众数 程序
  5. EMC VNX5200 故障灯亮,但无任何硬件故障提示
  6. 【手把手教你学习51单片机】74HC138 三八译码器的应用
  7. Springboot配置MongoDB连接池
  8. android 6.0 vold shutdown流程
  9. 智能制造工业物联网IoT平台建设方案
  10. 如何快速把Excel数据导入SQL数据库