2013-06-12 35 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