在单元格和节点之间移动数据的插值方案

计算科学 有限差分 自适应网格细化 插值 有限体积
2021-12-04 01:16:10

我在非分级四叉树网格上工作,其中整个网格是使用四叉树数据结构指定的单元格层次结构,其中,一般来说,对相邻单元格(或任何单元格)的相对大小没有限制。

有效的 XHTML

我的库主要基于有限差分方案,该方案在每个单元顶点(即“节点”)处对未知数进行采样。然而,最近,我发现对于某些类型的方程,我需要切换到有限体积方案(用于质量守恒特性),我在单元中心对值进行采样。

但是,我仍然喜欢重用我为基于顶点的值编写的许多函数/类,因此我需要能够在单元格和顶点之间来回插入数据。从顶点到中心很容易;可以使用一个简单的平均算子……我们称之为算子。我现在需要的是构造反向运算符,其属性为其中是身份运算符.V2CC2VV2C(C2V)IcC2V(V2C)IvIcIv

我已经看过这个问题了然而,那里提到的一般方案或我自己能想到的方案,例如反距离加权 (IDW) 或径向基函数 (RBF) 方法似乎并不满足此属性(至少如果它们满足,它对我来说并不明显;我很高兴被证明是错误的)。

解决这个问题的最佳方法是什么?如果有人可以向我推荐可能的来源,我将不胜感激?需要说,我需要一些准确的东西(至少能够以合理的准确度近似身份运算符)和快速的,因为这必须在每个时间步完成。I

2个回答

不存在这样的运算符,因此同时存在。如果您只有 2 个顶点和 1 个单元的一维情况,这已经很容易看出。在这种情况下,是一个矩阵,而是一个矩阵。很容易验证您找不到满足您要求的标准的这两个矩阵的条目。如果您从结构化的 1d 网格转到分层的 2d 网格,情况不会有所不同。V2C(C2V)=IC2V(V2C)=IC2V2×1V2C1×2

更一般地说,操作是一种平滑操作,因为您从每个单元上的分段常数开始,您会发现自己的顶点值类似于周围单元的平均值。另一方面,操作为每个单元格计算一个值,该值类似于围绕它的顶点值的平均值。换句话说,也是一种平滑操作!显然,C2VV2CV2CC2V(V2C)V2C(C2V)是以基于单元的字段开始和结束的操作(或者,在第二种情况下,以基于顶点的字段开始和结束)并且在两种情况下都具有输入的平滑版本作为输出。根本不可能有一个操作在第二步中将输入重构到在第一步中完成的平均操作。

由于 Wolfgang 所说的原因,您不能将其作为本地操作来执行。正如您所说,只是集成。对于“逆”,您可以执行投影。根据边界条件,顶点的数量可以小于或大于像元的数量,在这种情况下,您必须选择兼容的字段。投影是全局保守的(模边界条件和网格细化),但不是局部保守的。投影也是密集的,这意味着您必须迭代求解(它条件良好,CG 或 Kaczmarz 快速收敛)。V2CC2VL2L2C2V

实际上,值得花时间修改例程以使用以单元为中心的字段,而不是依赖于单元和顶点之间的频繁投影。