Вызов кода Fortran из julia, доступ к массиву, динамически размещаемому в fortran - PullRequest
1 голос
/ 27 июня 2019

Мне нужно вызвать некоторый код Fortran, который динамически распределяет массивы, как в этом базовом примере. (в отличие от этого примера в коде, с которым я работаю, размер массива неизвестен в начале функции)

subroutine getIdentity(n,I)
    integer, intent(in) :: n
    integer, allocatable,dimension(:,:), intent(out) :: I
    integer :: j,k
    write(*,*) "creating " ,n, "x", n, "identity matrix"

    allocate(I(n,n))

    do j=1,n
        do k=1,n
        if(k==j) then
            I(j,k) = 1
        else
            I(j,k) = 0
        end if
    end do
    end do
end subroutine getIdentity

Когда я звоню с этим кодом Джулии:

I = zeros(Int32,1,1)
n = Ref{Int32}(3)
ccall((:__myModule_MOD_getidentity,"./test.so"), Cvoid ,
      (Ref{Int32},Ref{Int32}), n,I)
println(I)

Когда я смотрю на себя в Джулии, это просто мусор, а не матрица идентичности, которую я ожидал бы. Как правильно это сделать?

...