【问题标题】:Nonreflecting boundaries for a wave equation simulation波动方程模拟的非反射边界
【发布时间】:2014-08-11 17:42:06
【问题描述】:

我正在实现wave equation 的模拟,它使用一个数组来离散地模拟波可以在其中传播的空间区域。目前,波从空间区域的边界反射。但是,我想消除这种反射,使波看起来永远传播出去。

我知道有许多学术论文讨论了非反射/吸收边界条件(例如完美匹配的层?),但大多数似乎都集中在解析解决方案上。我无法弄清楚如何在我的模拟中以数字方式实现非反射边界。这是我正在编写的代码:

for (var i = 1; i < width - 1; ++i) {
    for (var j = 1; j < height - 1; ++j) {
        var d2f_dx2 = f[i + 1][j] - f[i][j] * 2 + f[i - 1][j];
        var d2f_dy2 = f[i][j + 1] - f[i][j] * 2 + f[i][j - 1];
        var d2f_dt2 = c2[i][j] * (d2f_dx2 + d2f_dy2);
        df_dt[i][j] += d2f_dt2;
    }
}
for (var i = 1; i < width - 1; ++i) {
    for (var j = 1; j < height - 1; ++j) {
        f[i][j] += df_dt[i][j];
    }
}

其中f 是字段,df_dt 是字段相对于时间的偏导数,d2f_dt2 是字段相对于时间的二阶偏导数,d2f_dx2 是二阶偏导数场在 x 方向上的二阶偏导数,d2f_dy2 是场在 y 方向上的二阶偏导数。

有谁知道我可以如何调整此代码以使其具有非反射边界?

【问题讨论】:

  • 我不相信上面的代码显示了您正在寻求消除的 (x,y) 边界约束,除非 df/dt、dx/dt 或 dy/dt 的系数矩阵变得渐近或阻尼。看,我在上面的代码中看不到任何会导致波速或加速度方向反转的硬边界。您能否发布您正在使用的波动方程的相关部分(是的,我查看了 wiki,但大量可能的边界条件使您的代码不具体)。另外,你能在 f(x) 和 f(y) 的拐点周围发布几行输出吗?
  • 让我澄清一下。你有f[i + 1][j] - f[i][j] * 2 + f[i - 1][j]; x 加速度和f[i][j + 1] - f[i][j] * 2 + f[i][j - 1]; y。看你的条件。对于 x,任何时候((f[i][j] * 2 ) &gt; (f[i + 1][j] + f[i - 1][j])) 你都会得到加速度幅度的反转。对于 y,任何时候((f[i][j] * 2) &gt; (f[i][j + 1] + f[i][j - 1])) 你都会得到 y 的反转。您将必须检查条件f[i][j] * 2 在哪里合并到您的等式中。如果所有系数都是正数,这是唯一会引起反射的项。

标签: physics numeric numerical-methods physics-engine numerical-integration


【解决方案1】:

清除几个 25 年前的蜘蛛网后,您的问题的解决方案将取决于您设置方程以满足以下初始条件和无穷大条件。将初始和无限边界条件转换为偏微分,然后为您转换为代码对我来说已经很久了,但是知道要应用的正确边界条件将提供您正在尝试创建的数值模型。希望这会有所帮助。

对于无阻尼非反射条件,您正在寻找建模的边界值问题在您网站上的The_Sturm-Liouville_formulation 最后一段下的维基百科文章中进行了描述。 The_Sturm-Liouville 公式本身可能无法提供正确的模型,但标题下最后一段中讨论的边界条件是您必须满足的条件。推导是在一维中解释的,但正如文章中所指出的,一维问题的数值解可以扩展到任意维数。

无阻尼无限传播的边界条件

boundary value at t=0 == value at t=infinity after X whole periods, where
y = Asin(Bx - C) + D or y = Acos(Bx - C) + D.

f(x)tf(y)t 的解决方案将是波传播到无穷远的周期性三角函数。如果你想一想,条件就很清楚了。在任何时间点,您要描述的波只是一个无阻尼的周期性谐波,它将被建模为正弦、余弦等。在任何时间点描述波的唯一区别是幅度和相位为它在正常时期循环。哪个三角函数将满足您的初始条件的身份将取决于相位角和时间 t=0 的偏移。当时间接近无穷大时,边界条件将是在整数个周期完成后的相同函数。

【讨论】:

  • 我不确定我是否理解正确。我想我想问的问题是我应该如何处理空间区域边界处的网格点(即 i == 0 或 j == 0 或 i == 宽度 - 1 或 j == 高度 - 1),包括场值及其导数,以防止波反射出模拟边界。
  • 我喜欢你可以真正解决的问题(反之亦然)。简短回答:与 i,j == 0+1 或 i,j == (width -2, height -2) 没有什么不同。这不是人为的。您将在时间 t=0 时处于波浪状态。它的状态要么是在任意选择的 t=0 处到达 i,j=0 的波的延续,要么是新的波,新的干扰的结果。无论如何,如果您想从那时起简单地模拟该波的传播,那么该波的传播向量将保持不变且不变,作为所有 i,j 的正弦/余弦波。
  • 所以基本上你有一个正弦曲线,你将从 t=0 到 t=INF 建模,所有用于波浪模拟的正常边界相互作用,不会包含在你的计算中,你只想要描述任何时间点的波浪状态,包括 i,j = 宽度, 高度。假设你自己是 i,j = 宽度、高度的观察者,你所看到的只是一个滚过的波浪和跟随它的新波浪。在那个点 i,j 你会简单地看到一个正弦或余弦,其中 x 固定在宽度上,y 是波周期过程中的正常振幅周期。
  • 我想理解 i,j = 0 和 i,j 在宽度、高度上的关系的另一个关键是要知道波在给定的距离 2pi 上是周期性的。一旦有了波长,如果宽度或高度是波长的倍数,那么在 0 和宽度、高度时,波的特性(幅度、相移等)将完全相同。如果 width, height 不是波长的倍数,那么在 width, height 处,您的波浪将由最后一个完整周期与 width, height 之间的波浪变化来描述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-07
  • 2016-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-20
  • 2016-04-02
相关资源
最近更新 更多