作者laa7352 (Laa)
看板Fortran
標題Re: [請益] 如何將矩陣值傳入副程式?
時間Thu Oct 23 09:48:00 2014
請參考如下
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://webptt.com/m.aspx?n=bbs/Fortran/M.1414028883.A.114.html
※ 編輯: laa7352 (118.163.30.15), 10/23/2014 09:48:46
1F:→ screase: 副程式內要先宣告real :: ii,jj,kk才能接收參數 10/23 10:02
2F:→ screase: 另外,3這個常數參數傳遞方式錯了 必須用變數去接收 10/23 10:05
3F:→ screase: 實際上也沒有傳遞3的需要 因為直接在宣告大小裡寫出就好 10/23 10:06
4F:→ 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
5F:→ zx168zx: 謝謝兩位 問題已經解決了 之前我沒有定義到矩陣跟i j k 10/23 16:08
6F:→ Casimir: Use "intent" attribute in the subroutine will save 11/02 03:13
7F:→ Casimir: you a lot of trouble. 11/02 03:13