2013-06-12 31 views
1

我有一个尺寸为NxNxN的3D网格。在尺寸为N**3的称为data的数组中,我存储了与每个网格点相对应的标量值。任何人都可以建议一个FORTRAN程序,它给了我网格T点的坐标,它的顶部T值为data以CSV格式?网格的前10个值的坐标

输出应该是这样的,

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

这将是很好,如果值在排定的顺序。

+0

尚未。让我读一下它。 “编辑:”但即使是这样,它看起来不是很琐碎:( – jhaprade

回答

3

以下@ Yossarian的建议我扔掉了我的旧回答,并提供这个大大改进的版本。尽管如此,大部分信贷归功于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的末尾包含的data_array最大tops元素的索引。

我仍然怀疑这是一个有效的作为一个精心编写的排序例程,但我已经在数组上测试了它,并且它在合理的时间内运行。

+0

不错!这几乎是我心中的想法。我同意,它可能不是最有效的做事方式 - 它需要如果需要重复多次,那么可能需要一个fortran排序库, – Yossarian

+0

谢谢..完美的工作! – jhaprade