FEniCS学习笔记07:结果可视化

本文介绍了如何使用FEniCS库与pyvista结合,通过Python实现网格数据的转换和可视化,包括网格赋值、颜色设置以及等值线绘制,以展示有限元方法计算结果。
摘要由CSDN通过智能技术生成

FEniCS绘图是依赖于第3方软件包——VTK的python库“pyvista”,

因此,具体函数操作可参照pyvista的官网:https://docs.pyvista.org/version/stable/

1.绘制云图基本操作

step1:生成pyvista格式的网格

假设已用fenics内置的mesh.create_xxx()函数生成一网格domain,该网格不能直接被pyvista操作

需用fenics的plot.vtk_mesh()函数获取网格的拓扑信息、单元类型和几何信息

然后用pyvista.UnstructuredGrid(拓扑信息, 单元类型, 几何信息)函数生成pyvista格式的非结构化网格

# pyvista创建非结构网格u_grid,其中传入的参数是拓扑信息、单元类型和几何信息
u_topology, u_cell_types, u_geometry = plot.vtk_mesh(V) #V是基于FEniCS网格创建的函数空间
u_grid = pyvista.UnstructuredGrid(u_topology, u_cell_types, u_geometry)

step2:对网格进行赋值

pyvista支持对网格节点、网格单元进行赋值,函数分别是mesh.point_data[]和mesh.cell_data[]

考虑有限元方法的结果储存在节点上,所以采用mesh.point_data[‘自定义节点值的名称’]=array

# 给非结构网格u_grid的顶点数据"u",赋值数值解uh的实部(uh.x.array.real)
u_grid.point_data["u"] = uh.x.array.real
u_grid.set_active_scalars("u") # 把‘u’设置为活动标量,绘图函数pyvista.Plotter.add_mesh()不设置scalar值时默认用活动标量绘图

step3:创建可视化窗口,并进行绘图设置

# 创建可视化Plotter窗口,并对窗口进行设置
u_plotter = pyvista.Plotter()
u_plotter.add_mesh(u_grid, show_edges=False, cmap="jet") # 将网格对象u_grid添加到可视化对象u_plotter中,并设置显示网格线,设置颜色循环类别
u_plotter.add_text("uh", position="upper_edge", font_size=14, color="black") # 设置图像标题
u_plotter.view_xy() # 设置可视化对象u_plotter的视图为XY平面(可以根据需求设置不同的视图)

step4:窗口显示

# 检查pyvista库是否在无图形界面环境下运行,有图形界面则直接展示
if not pyvista.OFF_SCREEN:
    u_plotter.show()

2.云图颜色设置

云图的各种参数设置可参见函数pyvista.Plotter.add_mesh()的官方文档:pyvista.Plotter.add_mesh()

其中云图的颜色设置为cmap,可选参数见matplotlib官网:matplotlib_colormap

一些常用cmap:

3.等值线绘制

必须先给网格赋值,才能使用mesh.contour()函数

contours=u_grid.contour(isosurfaces=20) # 创建19条等值线,可以不设置参数,默认isosurfaces=10
u_plotter.add_mesh(contours,color="black", line_width=2) # 将等值线添加到可视化对象中,并设置颜色和粗细

4.结果展示

用以上画图代码,对一个uh计算结果的展示

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值