Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Linking my fortran subroutines with Mathematica

  • To: mathgroup at smc.vnet.net
  • Subject: [mg111320] Re: Linking my fortran subroutines with Mathematica
  • From: "Eduardo M. A. M.Mendes" <emammendes at gmail.com>
  • Date: Tue, 27 Jul 2010 04:18:53 -0400 (EDT)

Hi Patrick

Many many thanks.  I shall try it on both linux and Windows.

Do you think that I can swap g95 for gfortran for both Win and Linux?

Since my routines have multiple output parameters, I wonder whether if the
ReturnType could be something like {Real, Real}  (that is, instead of
functions I have subroutines with multiple input and output arguments}.

Cheers

Ed


-----Original Message-----
From: Patrick Scheibe [mailto:pscheibe at trm.uni-leipzig.de] 
Sent: Monday, July 26, 2010 10:37 AM
To: Eduardo M. A. M.Mendes
Cc: mathgroup at smc.vnet.net
Subject: [mg111320] Re: [mg111250] Linking my fortran subroutines with Mathematica

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!).
>>
>
>




  • Prev by Date: Re: Linking my fortran subroutines with Mathematica
  • Next by Date: Re: Linking my fortran subroutines with Mathematica
  • Previous by thread: Re: Linking my fortran subroutines with Mathematica
  • Next by thread: Re: Linking my fortran subroutines with Mathematica