在 MATLAB 中可视化有限元解

计算科学 有限元 可视化
2021-11-25 19:19:53

在我的三角形网格上,我有(x,y,z)每个三角形的每个顶点的坐标。对于更高阶的元素,我对每个元素进行了几次细化,这样我就有更多的点可以使用。如果我只需要为自己可视化解决方案,我会使用fill3但我不完全确定如何插入我自己的颜色条。理想情况下,我希望最小的 z 值对应于蓝色,最大的 z 值对应于红色,就像surf图中的典型颜色条一样。这是我要实现的目标的示例:

在此处输入图像描述

fill3工作正常,我只是不太确定如何根据我的需要设置自定义颜色图,并且文档没有太大帮助。

我也愿意接受其他建议,只是 MATLAB 是我熟悉的可视化工具。

另外,只是好奇是否有人知道这个情节是用什么软件制作的,因为我在许多论文中都看到过类似的情节。

3个回答

对于更高阶的元素,我对每个元素进行了几次细化,这样我就有更多的点可以使用。如果我只需要为自己可视化解决方案。

让我们以二次拉格朗日元素为例。您需要网格数据、点p和三角形t,还需要数值解uh. 出于可视化目的,我们只需要使用二次拉格朗日元素(二次拉格朗日具有边缘自由度和节点自由度)的数值解中的节点值。对于高阶元素也是如此,我们只需要节点自由度的值来可视化解决方案。

例如:您的解决方案列向量uzsurf情节的价值。对于二次元,最自然的数据结构是为第一NNodes = size(p,1)行分配节点自由度的值,然后NEdges = size(e,1)在行中分配边缘自由度的值。因为你使用三角网格,我们可以使用 MATLAB 的 trisurf 来做到这一点:

h = trisurf(t, p(:,1), p(:,2), u(1:size(p,1))');

colormap范围可以手动分配,请参阅此处的 MATLAB 文档。有一些内置方案,如 jet,您可以使用m×3RGB 矩阵也是如此(您可以通过键入来检索颜色矩阵,c = colormap;然后检查c它的样子)。

这是另一个非常有用的 MATLAB 文档,关于如何手动设置colormap补丁对象(surf并且trisurf都使用补丁来绘制东西):着色网格和曲面图

这是使用二次元的数值解的样子Δu=1在 L 形域上具有齐次 Dirichlet 边界数据。节点之间没有不连续的间隙,例如您的地块产量。除非你使用hp- 不连续 Galerkin,对于任何椭圆方程的通常连续有限元解,您的绘图都是错误的。

L形

您可以以一种广泛使用的文件格式(例如 VTK)输出数据,然后使用 VisIt 或 Paraview 进行可视化。这些程序被大量用于 PDE 解决方案的可视化,并为此目的而设计。

使用这些功能更简单,pdemesh或者pdesurf因为它们正是为此目的而完成的。然后,您可以使用

colormap('jet')

这会将颜色图更改为您需要的颜色。还有其他预设的颜色图,您也可以定义自己的,请参阅颜色图功能帮助。

如果您没有 Matlab 中的 PDE 包,您可以使用具有相同功能的 Octave。