带有重影的单个磁盘阵列边界



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

文档在这里

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

文档提到,我可以垫出一个边界任意,我很乐意这样做,但是有没有一种方法告诉ghost.ghost 在块的外部添加任何边界?

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以相同的轴深修剪掉多余的重叠。

但更一般地说,这应该可以通过更方便的ghostmap_overlap函数来访问。我能请你提个问题吗?

有限的差异

更普遍的是有限差分的应用。Dask。数组在这里有一定的局限性,因为它们拒绝改变现有数据。这导致许多副本的运行速度比简单的有限差分方案要慢一些。对于成本更高的计算来说,复制的成本会更少。这里有一个快速的笔记本来演示这种减速。自从创建了那个笔记本,复制开销减少了1/2,但仍然很大。

最新更新