Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fortran et Matlab

trying to call matlab from Fortran (Using MPI)

    4 mai 2018 à 21:22:40

    Bonjour,

    J'ai essaye d'utiliser ce code disponible sur un site pour voir si il est possible d’appeler un code matlab a partir d'un Fortran; mais j'ai eu ces erreurs.
    Voila le code :

    #include "fintrf.h"
    C
    #if 0
    C
    C     test.F
    C     .F file need to be preprocessed to generate .for equivalent
    C
    #endif
    C
    C     test.F
    C
    C     This is a simple program modified from a sample code that
    C     illustrates how to call the MATLAB Engine functions.
    C
    C NASA Ames Research Center
    C======================================================================
    C 2015/7/7
    
          program main
    USE mpi
    
    C     Declarations
          implicit none
    C#USE mpi
    C-----------------------------------------------------------------------
    C     (pointer) Replace integer by integer*8 on 64-bit platforms
    C
       25       mwpointer engOpen, engGetVariable, mxCreateDoubleMatrix
       26       mwpointer mxGetPr
       27       mwpointer ep, DPtr, sPtr
    C----------------------------------------------------------------------
    C
    C     Other variable declarations here
       31       integer, parameter :: n=3, M=12
       32       double precision D(n,n), Darray(n,n,M), s
       33       integer engPutVariable, engEvalString, engClose
       34       integer i,k, temp, status
       35       integer :: ierror, size, rank, MPI_COMM_WORLD
    C
    C MPI initilization
       38       call MPI_INIT(ierror)
       39       call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierror)
       40       call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierror)
    
                ep = engOpen('matlab ')
    C
       43       if (ep .eq. 0) then
       44          write(6,*) 'Can''t start MATLAB engine'
       45          stop
       46      endif
    C
    C    Define the pointer of a Matlab scalar
               sPtr = mxCreateDoubleMatrix(1, 1, 0) 
    
    C    Obtain the value of k from a routine (here it is just random generator  k = IRAND(rank)
    C      Copy Fortran value k to Matlab array mxGetPr(sPtr)
                 call mxCopyReal8ToPtr(dble(k), mxGetPr(sPtr), 1)
       55        status = engPutVariable(ep, 's', sPtr)
       56        if (status .ne. 0) write(*,*)"FAIL!!! engPutVariable s"
    C
    C      Compute via matlab function : sampleFn
                 if (engEvalString(ep, 'D = sampleFn(s);') .ne. 0) then
       60         write(6,*) 'engEvalString failed'
       61         stop
       62       endif
    C
    C     Bring pointer back to Fortran
                DPtr = engGetVariable(ep, "D")
                call mxCopyPtrToReal8(mxGetPr(DPtr), D, n*n)
    
    C     The MPI master can gather all D's to Darray
    C     via MPI_Send/Recv or MPI_Gather or MPI_Reduce
    C     Darray(:,:,k) <= D(:,:)
    C
       72     print *, 'Print results created by Matlab :'
       73        do i=1,n
       74        write(*,*) D(:,i)
       75        enddo
       76        write(*,*) " "
    C
    C
       79     call mxDestroyArray(sPtr)
       80     call mxDestroyArray(DPtr)
       81     status = engClose(ep)
    C
       83     if (status .ne. 0) then
       84        write(6,*) 'engClose failed'
       85        stop
       86      endif
       87      call MPI_Finalize(ierror)
    C
       89      stop
       90      end
    
    
    


    et voila les erreurs que j'ai recu

    Error using mex
    test.obj : error LNK2019: symbole externe non résolu MPI_INIT référencé dans la fonction MAIN__
    test.obj : error LNK2019: symbole externe non résolu MPI_COMM_SIZE référencé dans la fonction MAIN__
    test.obj : error LNK2019: symbole externe non résolu MPI_COMM_RANK référencé dans la fonction MAIN__
    test.obj : error LNK2019: symbole externe non résolu MPI_FINALIZE référencé dans la fonction MAIN__
    test.exe : fatal error LNK1120: 4 externes non résolus



     

    Any help ?!!

    • Partager sur Facebook
    • Partager sur Twitter
      8 mai 2018 à 19:49:09

      Hello,

      on dirait plus un problème de lien avec MPI qu'un problème de Matlab. Est-ce que tu compiles bien avec mpifort/mpif90 ou son équivalent windows ? Peut-être faudra-t-il inclure le header correspondant. Si tu veux juste faire le lien, tu peux peut-être aussi virer les routines MPI ?

      Edit: j'ai vu le use MPI

      -
      Edité par Nozio 8 mai 2018 à 20:52:39

      • Partager sur Facebook
      • Partager sur Twitter

      Avez-vous entendu parler de Julia ? Laissez-vous tenter ...

      Fortran et Matlab

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown