Re: Linking my fortran subroutines with Mathematica
- To: mathgroup at smc.vnet.net
- Subject: [mg111316] Re: Linking my fortran subroutines with Mathematica
- From: Patrick Scheibe <pscheibe at trm.uni-leipzig.de>
- Date: Tue, 27 Jul 2010 04:18:09 -0400 (EDT)
Hi, I never wrote fortran but it shouldn't be too hard. First the fortran-file "function.f90" with the content >>>>> real*8 function fortfunc(a,b) real*8 a,b fortfunc=a*b end function fortfunc >>>>> Second the interface.tm for the MathLink >>>>> #include "mathlink.h" extern "C" double fortfunc_(double *a, double *b); :Begin: :Function: multiply :Pattern: multiply[a_?NumericQ, b_?NumericQ] :Arguments: { a, b } :ArgumentTypes: { Real, Real } :ReturnType: Real :End: double multiply( double a, double b) { return fortfunc_(&a, &b); } int main(int argc, char* argv[]) { return MLMain(argc, argv); } >>>>> Compile the fortran file with g95 -Wall -c function.f90 process the .tm file with the mprep program to create the .c file mprep -o interface.c interface.tm compile the file and link it with the objectfile from your fortran code g++ -I$mpath interface.c function.o -L$mpath -lMLi3 Here $mpath contains the path to the MathLink compiler stuff. On my OSX this is mpath=/Applications/Development/Mathematica7.app/SystemFiles/Links/ MathLink/DeveloperKit/CompilerAdditions/ on a linux box the Mathematica root is usually under /usr/local/ Wolfram/Mathematica/ Then you can start the executable ./a.out -linkname blub -linkmode listen and use it inside a Mathematica session with e.g. lnk = Install[LinkConnect["blub"]] LinkPatterns[lnk] multiply[10.0, 11.0] Uninstall[lnk] That's it. Cheers Patrick Am Jul 26, 2010 um 1:06 PM schrieb Eduardo M. A. M.Mendes: > Hi > > Many thanks. > > Won't you have an example? > > Cheers > > Ed > > > -----Original Message----- > From: Patrick Scheibe [mailto:pscheibe at trm.uni-leipzig.de] > Sent: Sunday, July 25, 2010 10:35 PM > To: emamm > Cc: mathgroup at smc.vnet.net > Subject: Re: [mg111250] Linking my fortran subroutines with > Mathematica > > Hi, > > just make a wrapper for your Fortran functions so you can call them > from > C. Once this is done you can simply call them through the MathLink. > You could start by compiling your Fortran functions into a .so or .dll > or however the shared libraries are called on your OS. Then create a > MathLink-template and call those functions from there.. > > I really don't know how to explain this better since it is straight > forward and you should have a running example in a few minutes. > > Cheers > Patrick > > On Sun, 2010-07-25 at 01:58 -0400, emamm wrote: >> Hello >> >> I am new to Mathematica. Although I have searched the web for answers >> on how to link fortran to Mathematica without buying MathCode F90, I >> have not found good examples on how to link Fortran to Mathematica. >> >> All my fortran functions were modified to accept a C-wrapper. I did >> that to link them to another system. I have no problem to create >> mex files > on >> either Windows or Linux using gcc,gfortran or g95 (all free >> compilers!). My fortran functions work exactly as m-file on the other > system >> with lots of input and output arguments - The input arguments >> determine the size of the output arguments via malloc on C. >> >> I believe that there is something similar to a mex file for >> Mathematica but the documentation on Wolfram's site does not give me >> much information. >> >> Would someone out there have a nice, neat example (not too simple, >> please - addrow from Wolfram's site is way too simple!) on how to >> link >> fortran to Mathematica? >> >> Many thanks >> >> Ed >> >> >> PS. MathCode F90 seems to do what I want but for a a price (and >> what a >> price!). >> > >