作者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/cn.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