1

我有一个大小为 3D 的网格NxNxNdata在一个称为维度的数组中,N**3我存储了与每个网格点对应的标量值。任何人都可以建议一个 FORTRAN 程序,它给我网格的 T 点的坐标,这些点的 T 值data是 CSV 格式的?

输出应该是这样的,

x1,y1,z1,value1
x2,y2,z2,value2
...............
...............
x9,y9,z9,value9
x10,y10,z10,value10

如果值按排序顺序会很好。

4

1 回答 1

3

按照@Yossarian 的建议,我放弃了我的旧答案并提供了这个经过改进的版本。不过,大部分功劳归功于约塞连。

PROGRAM sort

  USE, INTRINSIC :: iso_fortran_env

  INTEGER, PARAMETER :: ne = 50
  INTEGER, PARAMETER :: tops = 10

  REAL(real64), DIMENSION(ne,ne,ne) :: data_array
  LOGICAL, DIMENSION(ne,ne,ne) :: mask_array
  INTEGER, DIMENSION(tops,SIZE(SHAPE(data_array))) :: top_array
  INTEGER :: ix

  CALL RANDOM_SEED(put=[1])
  CALL RANDOM_NUMBER(data_array)

  mask_array = .TRUE.

  DO ix = 1, tops
     top_array(ix,:) = MAXLOC(data_array,mask=mask_array)
     mask_array(top_array(ix,1),top_array(ix,2),top_array(ix,3)) = .FALSE.
  END DO

END PROGRAM sort

现在,在程序的末尾top_array包含 的最大tops元素的索引data_array

我仍然怀疑这是否与编写良好的排序例程一样有效,但我已经在数组上对它进行了测试,直到512^3元素并且它在合理的时间内运行。

于 2013-06-12T13:07:56.567 回答