主题:自定义函数参数调用的问题
如下Fortran程序:
program diagonalize
implicit none
byte i,j,m,n,D,k
real A(2,2),B(2,2),AB(2,2)
real,external :: multiply
data A/1.d0,1.d0,1.d0,1.d0/
data B/2.d0,2.d0,2.d0,2.d0/
write(*,*) "main A="
call outputmatrix(A)
write(*,*) "main B="
call outputmatrix(B)
AB=multiply(A,B)
end
***** matrix multiplication
function multiply(A,B)
implicit none
byte i,j,k
real A(2,2),B(2,2),AB(2,2)
real multiply(2,2)
write(*,*) "multiply A="
call outputmatrix(A)
write(*,*) "multiply B="
call outputmatrix(B)
c do i=1,D
c do j=1,D
c AB(i,j)=0
c do k=1,D
c AB(i,j)=A(i,k)*B(k,j)+AB(i,j)
c end do
c end do
c end do
c multiply=AB
end
***** output matrix
subroutine outputmatrix(B)
implicit none
byte i,j
real B(2,2)
do i=1,2
write(*,*) B(i,1),B(i,2)
end do
end
子程序multiply中的A、B为什么和主程序中的不一样?
program diagonalize
implicit none
byte i,j,m,n,D,k
real A(2,2),B(2,2),AB(2,2)
real,external :: multiply
data A/1.d0,1.d0,1.d0,1.d0/
data B/2.d0,2.d0,2.d0,2.d0/
write(*,*) "main A="
call outputmatrix(A)
write(*,*) "main B="
call outputmatrix(B)
AB=multiply(A,B)
end
***** matrix multiplication
function multiply(A,B)
implicit none
byte i,j,k
real A(2,2),B(2,2),AB(2,2)
real multiply(2,2)
write(*,*) "multiply A="
call outputmatrix(A)
write(*,*) "multiply B="
call outputmatrix(B)
c do i=1,D
c do j=1,D
c AB(i,j)=0
c do k=1,D
c AB(i,j)=A(i,k)*B(k,j)+AB(i,j)
c end do
c end do
c end do
c multiply=AB
end
***** output matrix
subroutine outputmatrix(B)
implicit none
byte i,j
real B(2,2)
do i=1,2
write(*,*) B(i,1),B(i,2)
end do
end
子程序multiply中的A、B为什么和主程序中的不一样?