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?  

Reply via email to