2013-01-18 52 views
0

嘗試從xyz數據文件創建數組。數據文件的排列使得每個原子的x,y,z都在一個新的行上,我希望數組能夠反映這一點。 然後使用這個數組找到列表中每個原子與其他所有原子的距離。Fortran90創建了可分配數組,但元素不正確

爲此陣列已經被複制,使得ATOM1 & atom2應該是相同的輸入文件。

長度是簡單地在列表中的原子數。 寫入語句:WRITE(20,'(3F12.9)')atom1實際上給出了想要的矩陣,但是當我嘗試查找單個元素時,它們都是錯誤的!

任何幫助將非常感激! 謝謝你們。

DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE ::atom1,atom2' 
ALLOCATE(atom1(length,3),atom2(length,3))  
READ(10,*) ((atom1(i,j), i=1,length), j=1,3)  
atom2=atom1     
distn=0 
distc=0       

DO n=1,length 
     x1=atom1(n,1) 
     y1=atom1(n,2)    !1st atom 
     z1=atom1(n,3) 
     DO m=1,length 
      x2=atom2(m,1) 
      y2=atom2(m,2)   !2nd atom 
      z2=atom2(m,3)` 
+0

你能提供關於元素如何「全部錯誤」的例子和描述? – bobs

+0

您的示例寫入語句表明您已切換數組索引。該寫入的第一條記錄將包含atom1(1:3,1) - 即原子1,2和3的x座標。那是你的意圖嗎? (正如你所寫的,在你的READ語句中嵌套的io-implicit-do是多餘的,這些隱式do的元素訪問順序與整個數組引用的數組元素順序相同,也許你的嵌套錯誤。 – IanH

回答

0

你讀的聲明內容從然而,許多記錄所有的原子,那麼所有的y座標,那麼所有的Z座標所有的X座標。這與您對輸入文件的描述不一致。您在錯誤的方式中嵌入了READ語句中的io-implied-do,它應該是((atom1(i,j),j=1,3),i=1,length)。同樣,根據評論,您的診斷書寫誤導了您 - 您輸出的所有x縱座標,其次是所有y縱座標等。整個數組引用的數組元素順序會使第一個(最左側)維度變得最快(通俗地說稱爲列主要訂單)。 (有與列表定向格式相關的各種陷阱,這意味着我不會推薦它用於生產代碼(或者可能是專門用於防止這些陷阱的知識編寫的輸入)。其中一個缺陷是控制之下的格式將盡可能多的記錄拉,因爲它需要滿足輸入列表清單仔細閱讀。如果你使用的是提名的每個記錄的字段數顯式格式,您可能已經發現問題早。)

+0

謝謝@IanH這個小小的改變已經奏效,我現在意識到爲什麼寫作聲明看起來是正確的。謝謝你的幫助!我會投這個答案,但顯然我不能。 – user1988979