Я пытаюсь вызвать некоторый код fortran (f90) из julia, но, похоже, я не могу заставить fortran понимать динамически распределяемые массивы, переданные из julia.Этот код Фортрана:
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.
Есть ли способ заставить это работать без изменения кода на фортране?Я знаю, что мог бы переписать код на Фортране, чтобы включить измерение массива в вызов функции, но я бы предпочел иметь возможность вызывать код на Фортране, который уже был написан аналогично приведенному мною примеру.