看板 Fortran 關於我們 聯絡資訊
請參考如下 program main_test real,allocatable :: aaa(:,:,:,:) real,allocatable :: bbb(:,:,:,:) integer ii,jj,kk ! ii,jj,kk=..... allocate ( aaa(ii,jj,kk,3) ) allocate ( bbb(ii,jj,kk,3) ) do i=1,kk ... aaa(...)=... bbb(...)=... .. enddo call sub_test (aaa,bbb,ii,jj,kk) stop end subroutine sub_test(aaa,bbb,ii,jj,kk) real :: aaa,bbb integer :: ii,jj,kk dimenstion aaa(ii,jj,kk,3) dimenstion bbb(ii,jj,kk,3) print*, aaa,bbb return end ※ 引述《zx168zx (zx168zx)》之銘言: : 小弟想請益一下 : 如何將主程式所設定好的矩陣傳入副程式 : 小弟的矩陣是四維的 : 一開始先設定allocatable的四維可變矩陣 : allocatable :: aaa(:,:,:,:) : allocatable :: bbb(:,:,:,:) : ----中間計算ii,jj,kk-------- : allocate ( aaa(ii,jj,kk,3) ) : allocate ( bbb(ii,jj,kk,3) ) : 之後open六個檔案分別寫入aaa,bbb中 : 我是用 : do 1,kk : do 1,jj : do 1,ii : read(114,......) : read(115,......) : read(116,......) : read(117,......) : read(118,......) : read(119,......) : aaa(i,j,k,1) = 114的資料 : aaa(i,j,k,2) = 115的資料 : aaa(i,j,k,3) = 116的資料 : bbb(i,j,k,1) = 117的資料 : bbb(i,j,k,2) = 118的資料 : bbb(i,j,k,3) = 119的資料 : enddo : enddo : enddo : 把資料寫進去 像是四維資料庫的方式 : 然後我的subroutine需要用到我這個四維矩陣的值 : 但我現在不知道要如何將這個矩陣傳入 : 他在執行後出現 : error LNK2001: unresolved external symnol aaa@16 : error LNK2001: unresolved external symnol bbb@16 : 我有想過是不是要用interface 但看彭大的書好像是回傳在用 : 麻煩各位大大解惑 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.30.15 ※ 文章網址: http://www.ptt.cc/bbs/Fortran/M.1414028883.A.114.html ※ 編輯: laa7352 (118.163.30.15), 10/23/2014 09:48:46
screase: 副程式內要先宣告real :: ii,jj,kk才能接收參數 10/23 10:02
screase: 另外,3這個常數參數傳遞方式錯了 必須用變數去接收 10/23 10:05
screase: 實際上也沒有傳遞3的需要 因為直接在宣告大小裡寫出就好 10/23 10:06
screase: 抱歉 是宣告integer :: ii,jj,kk才對 10/23 10:08
※ 編輯: laa7352 (118.163.30.15), 10/23/2014 10:53:35 ※ 編輯: laa7352 (118.163.30.15), 10/23/2014 10:55:40
zx168zx: 謝謝兩位 問題已經解決了 之前我沒有定義到矩陣跟i j k 10/23 16:08
Casimir: Use "intent" attribute in the subroutine will save 11/02 03:13
Casimir: you a lot of trouble. 11/02 03:13