1

4 次元ではサイズが異なる場合がありますが、1 次元、2 次元、3 次元で同じサイズの多数の配列があるプロジェクトに取り組んでいます。

これらの配列を連結するポインターを作成して、これらの配列をグループ化したいと思います。

これを抽象化するために、2 つの配列があるとします。

A (size: N1 x N2 x N3 x N4a)
B (size: N1 x N2 x N3 x N4b)

プロジェクトの以前のバージョンでは、これらの配列はサイズの配列 C にコピーされN1 x N2 x N3 x (N4a + N4b)、サブルーチンに渡されてこの配列で fft を実行していました。

pこのコピー操作を避けて、以前のバージョンの配列 C と同じデータを含むポインターを作成したいと思いますが、明示的なコピーと追加のメモリ割り当ては必要ありません。

これは Fortran で可能ですか?

4

1 に答える 1

1

いいえ。ポインターは、そのような 2 つの独立したオブジェクトを同時に指すことはできません。

状況によっては、(N1、N2、N3、N4a+N4b) の次元の配列から始めて、A と B をその関連部分に関連付ける (ポインター、ストレージ、または引数) こともできます。何らかの方法で最初の大きな配列。

REAL, TARGET :: c(N1,N2,N3,N4a+N4b)
REAL, POINTER :: a(:,:,:,:)
REAL, POINTER :: b(:,:,:,:)

a => c(:,:,:,:n4a)
b => c(:,:,:,n4a+1:)
! Go forth and do things with a and b.

! Then later do things with c.

Fortran が何らかの動的メモリ割り当てを行う前の暗黒時代には、この種の 1 つの配列からすべてを規則に分割して分割する方法が一般的に使用されていました。

于 2013-11-15T02:10:31.433 に答える