首页 > 解决方案 > 我可以安全地使用`spread`从数组切片复制到同一个数组吗?

问题描述

我将 2D 数据存储在一个文件中,我想在最后一个索引上加载并传播到一个 3D 数组中。我可以安全地将数据加载到一个切片中,然后从中使用扩展,如下所示:

real, dimension(nx,ny,nz) :: data

call load_some_data(data(:,:,1))

data = spread(data(:,:,1), 3, nz)

或者我是否需要一个临时的二维数组来使传播符合标准?该spread调用是否也适用于 OpenMPworkshare子句?

标签: fortran

解决方案


是的,你可以这么做。根据编译器优化的级别,它会或不会使用临时数组,但它是合法的。

不,它不会在workshare构造中并行化。一个简单的数组赋值将是,但我担心函数结果会有问题。并且调用spread肯定是连续的。


推荐阅读