Hi, everyone!
I’m new to Julia and I’m trying to implement some existing Fortran libraries to use in Julia code.
However, the ccall
function does not appear to change the values of variables which I pass to it.
A simplified version of Fortran code is:
SUBROUTINE TEST (IOPT,PARMOD,PS,X,Y,Z,VX,VY,VZ)
REAL IOPT,PARMOD(10),PS,X,Y,Z,VX,VY,VZ
VX=5.
VY=VX*3.
RETURN
END
I compile is to the shared library with:
gfortran -shared -fPIC test.for -o test.so
in Julia when I run yhis code:
iopt = 0.; ps = π / 180. * 11
parmod = [1., -9., 2.51, 0.97, 0.032, 0.009, 0.193, 0.008, 0.001, 0.004]
x = 3.; y = 0.; z = 0.
Vx = -1e31; Vy = -1e31; Vz = -1e31
ccall((:test_, "./test.so"),
Cvoid, # output
(Ref{Float64}, # IOPT, REAL
Ref{Float64}, # PARMOD, REAL
Ref{Float64}, # PS, REAL
Ref{Float64}, # X, REAL
Ref{Float64}, # Y, REAL
Ref{Float64}, # Z, REAL
Ref{Float64}, # Vx, REAL
Ref{Float64}, # Vy, REAL
Ref{Float64}), # Vz, REAL
iopt, parmod, ps, x, y, z, Vx, Vy, Vz)
The values of Vx, Vy, Vz
stay the same. Even though they had to chanhe.
Can someone please help me out with this issue?