我试图从julia调用一些fortran(f90)代码,但是我似乎无法让fortran理解从julia传递的动态分配的数组。此fortran代码:
MODULE myModule
implicit none
public Func
CONTAINS
subroutine Func(A,B)
integer*8, intent(inout) :: A(3)
integer*8, intent(inout) :: B(:)
integer :: i
write(*,*) "size of A"
write(*,*) size(A)
write(*,*) "A"
do i=1,3
write(*,*) A(i)
enddo
write(*,*) "size of B"
write(*,*) size(B)
write(*,*) "B"
do i=1,size(B)
write(*,*) B(i)
enddo
end subroutine Func
end module
此茱莉亚代码调用
A = [1,2,3]
B = [4,5,6]
ccall((:__mymodule_MOD_func,"./test.so"), Nothing ,(Ref{Int64},Ref{Int64}), A,B)
产生这个结果
size of A
3
A
1
2
3
size of B
0
B
我希望大小(B)为3。
是否有任何方法可以使此工作不更改fortran代码?我知道我可以重写fortran代码以在函数调用中包括数组的维数,但是我希望能够调用已经以与我提供的示例类似的方式编写的fortran代码。
答案 0 :(得分:0)
我决定创建一个fortran包装函数,以接受传入的动态数组的大小。
subroutine wrapFunc(A,B,Bdim)
integer*8, intent(inout) :: A(3)
integer*8, intent(inout) :: Bdim
integer*8, intent(inout) :: B(Bdim)
call Func(A,B)
end subroutine wrapFunc
这使我不必更改现有的fortran代码。