2

我正在使用Dask尝试使用有限差分设置一些简单的 PDE 解决方案,我想知道是否有一种方法可以指定每个边界的边界条件。

文档在这里

当前ghost.ghost函数允许指定几个不同的 BC,但它们对于 y 边界和 x 边界总是相同的。

文档提到我可以任意填充边界,我很乐意这样做,但是有没有办法告诉ghost.ghost不要块的外部添加任何边界?

4

1 回答 1

1

ghost_internal

目前似乎没有办法从面向用户ghostmap_overlap功能上做到这一点。但是,您可以使用该dask.array.ghost.ghost_internal函数来完成内部重影,而无需指定外部边界(这是 使用的主要函数ghost)。

In [1]: import dask.array as da

In [2]: x = da.arange(10, chunks=5)

In [3]: x.chunks
Out[3]: ((5, 5),)

In [4]: y = da.ghost.ghost_internal(x, {0: 2})

In [5]: y.chunks
Out[5]: ((7, 7),)

In [6]: y.compute()
Out[6]: array([0, 1, 2, 3, 4, 5, 6, 3, 4, 5, 6, 7, 8, 9])

您可能想要这样做,然后调用map_blocks较大的块,然后调用dask.array.ghost.trim_internal以相同的轴深度修剪掉多余的重叠。

但更一般地说,这应该可以从更方便的ghost功能map_overlap中访问。我可以请你提出一个问题吗?

有限的差异

更普遍地适用于有限差分的应用。Dask.arrays 在这里有些限制,因为它们拒绝改变现有数据。这导致许多副本的运行速度比简单的有限差分方案要慢一些。对于更昂贵的计算,复制的成本将不那么痛苦。这是一个快速笔记本,演示了这种放缓。自创建该笔记本以来,复制开销已减少了两倍,但仍然很重要。

于 2015-07-24T18:46:17.260 回答