I am trying something simpler. I added a function in the f90 file that call
the relevant function in order to remove the issue of having optional
arguments. Hence, I wrote:
FUNCTION DKL_4_SIMPLE(NVAR,DDES,DELAYS,HISTORY,TSPAN) RESULT (SOL)
! Both BETA and HISTORY are user supplied vectors.
! .. Function Return Value ..
! TYPE (DDE_SOL), TARGET :: SOL
DOUBLE PRECISION :: SOL_d
TYPE (DDE_SOL), TARGET :: SOL
! ..
! .. Array Arguments ..
DOUBLE PRECISION, DIMENSION(2) :: TSPAN
INTEGER, DIMENSION(2) :: NVAR
DOUBLE PRECISION, DIMENSION(NVAR(1)) :: DELAYS
DOUBLE PRECISION, DIMENSION(NVAR(2)) :: HISTORY
INTERFACE
SUBROUTINE DDES(T,Y,Z,DY)
DOUBLE PRECISION :: T
DOUBLE PRECISION, DIMENSION(:) :: Y,DY
DOUBLE PRECISION, DIMENSION(:,:) :: Z
INTENT(IN):: T,Y,Z
INTENT(OUT) :: DY
END SUBROUTINE DDES
END INTERFACE
!
! PRINT *, '--> ENTRY dans DDE_SIMPLE'
! PRINT *, 'NVAR = ',NVAR(1)
! SOL = DKL_4(NVAR,DDES,DELAYS,HISTORY,TSPAN)
SOL_d = 1.2D0
PRINT *, 'NVAR = ', NVAR(1),NVAR(2)
PRINT *, 'TSPAN = ', TSPAN
PRINT *, 'DELAYS = ', DELAYS
PRINT *, 'HISTORY = ', HISTORY
SOL = DKL_4(NVAR,DDES,DELAYS,HISTORY,TSPAN)
PRINT *, 'DDE_SIMPLE done!'
PRINT *, SOL%T
RETURN
END FUNCTION DKL_4_SIMPLE
In passing, I check the values contained in OPTS and in SOL.
I realised I have an issue with specifying the structure. For example, I
wrap the type
TYPE, PUBLIC :: DDE_OPTS
LOGICAL, DIMENSION (:), POINTER :: ISTERMINAL
INTEGER, DIMENSION (:), POINTER :: DIRECTION
DOUBLE PRECISION :: HINIT, HMAX
DOUBLE PRECISION, DIMENSION (:), POINTER :: ABSERR, RELERR, JUMPS
LOGICAL :: NEUTRAL, TRACK_DISCONTINUITIES, INTERPOLATION
INTEGER :: TRACKING_LEVEL, MAX_EVENTS, MAX_STEPS, MOVING_AVERAGE
DOUBLE PRECISION, DIMENSION (:), POINTER :: THIT_EXACTLY
END TYPE DDE_OPTS
with
type DDE_OPTS
ISTERMINAL::Ptr{Bool}# = true
DIRECTION::Ptr{Cint}# = C_NULL
HINIT::Cdouble# = 0.
HMAX::Cdouble# = 0.
ABSERR::Cdouble # = C_NULL
RELERR::Ptr{Cint}# = C_NULL
JUMPS::Ptr{Cint}# = C_NULL
NEUTRAL::Bool# = true
TRACK_DISCONTINUITIES::Bool# = true
INTERPOLATION::Bool# = true
TRACKING_LEVEL::Cint# = 0
MAX_EVENTS::Cint# = 0
MAX_STEPS::Cint# = 0
MOVING_AVERAGE::Cint
THIT_EXACTLY::Ptr{Cdouble}# = C_NULL
end
However when calling the library, I check with a PRINT internal values of
OPT does not correspond to what is seen by my julia code. Is my julia type
not good enough?