本文简单介绍利用PyPrimeMesh生成计算网格的基本方法。
PyPrimeMesh隶属于PyAnsys,其目的在于增强利用Python操纵Ansys系列模块的能力。PyPrimeMesh 由各种 Python 模块组成,可帮助用户获取几何体信息并为各求解器生成面网格及体网格。其核心模块为ansys-meshing-prime。
PyPrimeMesh可以实现的功能包括:
生成四边形占优及三角形面网格
使用各种网格尺寸生成面网格
使用各种形状(如四面体、六面体、金字塔及棱柱等)的线性及二次单元体网格
以串行或并行的方式生成体网格
进行网格质量检查
对模型中的自由边、多重边、自相交及重叠面进行网格诊断
模块化的网格生成算法、组件及服务,可以在其他应用程序中重用
公开的用于网格生成操作的微服务及API,以利于网格划分工作流设计
PyPrimeMesh将Ansys Prime服务的网格生成能力直接集成到客户端应用程序中。器提供了一个Python友好的接口,用于驱动管理低级Prime命令提交的软件,同时通过高性能gRPC接口 交换数据。
”
PyPrimeMesh官方在线文档地址:https://prime.docs.pyansys.com/release/0.3/index.html PyPrimeMesh官方案例地址:https://prime.docs.pyansys.com/release/0.3/examples/index.html
PyPrimeMesh隶属于pyansys,因此在安装pyansys后即可使用。
如果图省事儿的话,可以先安装Anaconda,然后直接利用pip命令进行安装:
pip install pyansys
之后即可使用PyPrimeMesh了。下面这个简单的例子来自PyPrimeMesh的官方帮助。
几何:https://github.com/pyansys/example-data/。
几何模型如图所示。
可以利用下面的程序代码读取几何模型、生成面网格及体网格。
import os
import tempfile
from ansys.meshing import prime
from ansys.meshing.prime.graphics import Graphics
# 启动prime环境
prime_client = prime.launch_prime()
model = prime_client.model
mesh_util = prime.lucid.Mesh(model = model)
# 读入几何模型并创建边界zone
mesh_util.read(file_name='mixing_elbow.fmd')
mesh_util.create_zones_from_labels("inlet,outlet")
# 指定面网格尺寸
mesh_util.surface_mesh(min_size=1,max_size=10)
# 指定体网格参数。这里的VolueeFillType.POLY表示生成多面体网格
mesh_util.volume_mesh(
volume_fill_type=prime.VolumeFillType.POLY,
prism_surface_expression="* !inlet !outlet",
prism_layers=3,
)
运行完毕后生成体网格,利用下面的代码显示生成完毕后的网格。
display = Graphics(model=model)
display()
生成的网格如下图所示。
# 得到网格部件
part = model.get_part_by_name("flow_volume")
# 统计网格信息
part_summary_res = part.get_summary(prime.PartSummaryParams(model=model))
# 统计网格单元的质量信息
search = prime.VolumeSearch(model=model)
params = prime.VolumeQualitySummaryParams(
model=model,
scope=prime.ScopeDefinition(model=model, part_expression="*"),
cell_quality_measures=[prime.CellQualityMeasure.SKEWNESS],
quality_limit=[0.95],
)
results = search.get_volume_quality_summary(params=params)
print(part_summary_res)
print("\nMaximum skewness: ", results.quality_results_part[0].max_quality)
输出信息如图所示。
message :
Part Name: flow_volume
Part ID: 2
13 Topo Edges
9 Topo Faces
1 Topo Volumes
0 Edge Zones
Edge Zone Name(s) : []
2 Face Zones
Face Zone Name(s) : [inlet, outlet]
1 Volume Zones
Volume Zone Name(s) : [volume]
2 Label(s)
Names: [inlet, outlet]
Bounding box (-203.2 -228.6 -50.8)
(203.2 203.2 50.8)
Mesh Summary:
87059 Nodes
5403 Poly Faces
0 Quad Faces
0 Tri Faces
5403 Faces
26073 Poly Cells
0 Hex Cells
0 Prism Cells
0 Pyramid Cells
0 Tet Cells
26073 Cells
0 out of 9 TopoFaces are unmeshed
n_topo_edges : 13
n_topo_faces : 9
n_topo_volumes : 1
n_edge_zonelets : 0
n_face_zonelets : 0
n_cell_zonelets : 0
n_edge_zones : 0
n_face_zones : 2
n_volume_zones : 1
n_labels : 2
n_nodes : 87059
n_faces : 5403
n_cells : 26073
n_tri_faces : 0
n_poly_faces : 5403
n_quad_faces : 0
n_tet_cells : 0
n_pyra_cells : 0
n_prism_cells : 0
n_poly_cells : 26073
n_hex_cells : 0
n_unmeshed_topo_faces : 0
Maximum skewness: 0.753242
可以利用下面的代码保存网格:
mesh_file = 'mixing_elbow.cas'
mesh_util.write(mesh_file)
assert os.path.exists(mesh_file)
print('\nExported file:\n',mesh_file)
在当前路径下输出网格文件mixing_elbow.cas。在Fluent中打开,如下图所示。
边界信息如图所示。
这里将两个入口都命名为inlet
,边界命名通常是在几何创建时完成的。利用这种方法无法根据边界名称推测合适的边界类型,只能手工在Fluent中修改了。
(完)