From: emamm on 25 Jul 2010 01:58 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!).
From: Patrick Scheibe on 26 Jul 2010 06:42 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!). >
From: Eduardo M. A. M.Mendes on 27 Jul 2010 04:14 Hi Many thanks. Won't you have an example? Cheers Ed -----Original Message----- From: Patrick Scheibe [mailto:pscheibe(a)trm.uni-leipzig.de] Sent: Sunday, July 25, 2010 10:35 PM To: emamm Cc: mathgroup(a)smc.vnet.net Subject: Re: 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!). >
From: Patrick Scheibe on 27 Jul 2010 04:14 Hi, yes, I'm pretty sure you can just use gfortran. It just wasn't available as osx-port on my mac at work here, so I used g95. And if your functions have multiple output parameter why don't you use a subroutine in fortran. When I understood this right, it's just like have pointers arguments in C and you set the value through adress. In your MathLink C function it would then be something like void mathlinkfunc(double input1, double intput2) { double out1, out2; fortransub_(&input1, &intput2, &out1, &out2); MLPutFunction(stdlink, "List", 2); MLPutReal(stdlink, out1); MLPutReal(stdlink, out2); } You need to set the :ReturnType: of the template to Manual and it *should* work. But hey, you are the fortran-guy. Those were my first 5 lines of fortran, so please take this as a hint and not as a working sample. Cheers Patrick Am Jul 26, 2010 um 6:44 PM schrieb Eduardo M. A. M.Mendes: > 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(a)trm.uni-leipzig.de] > Sent: Monday, July 26, 2010 10:37 AM > To: Eduardo M. A. M.Mendes > Cc: mathgroup(a)smc.vnet.net > Subject: Re: 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(a)trm.uni-leipzig.de] >> Sent: Sunday, July 25, 2010 10:35 PM >> To: emamm >> Cc: mathgroup(a)smc.vnet.net >> Subject: Re: 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!). >>> >> >> > >
From: Eduardo M. A. M.Mendes on 27 Jul 2010 04:15 Hi again >yes, I'm pretty sure you can just use gfortran. It just wasn't >available as osx-port on my mac at work here, so I used g95. Great! >And if your functions have multiple output parameter why don't >you use a subroutine in fortran. When I understood this right, it's >just like have pointers arguments in C and you set the value through >adress. In your MathLink C function it would then be something like >void mathlinkfunc(double input1, double intput2) { >double out1, out2; >fortransub_(&input1, &intput2, &out1, &out2); >MLPutFunction(stdlink, "List", 2); >MLPutReal(stdlink, out1); >MLPutReal(stdlink, out2); >} I only use subroutines. The C-wrapper for another software does the job of allocating (I cannot write the name of the software and if I do the Moderator will go berserk) the variables (pointers in C). Just to be sure, the above chunk of code goes where > double multiply( double a, double b) > { > return fortfunc_(&a, &b); > } is, isn't it? If not, where in you earlier example? >You need to set the :ReturnType: of the template to Manual and it >*should* >work. But hey, you are the fortran-guy. Those were my first 5 lines of >fortran, >so please take this as a hint and not as a working sample. Long time without coding in fortran. I became lazy due to the extensive use of another software. Cheers Ed Am Jul 26, 2010 um 6:44 PM schrieb Eduardo M. A. M.Mendes: > 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(a)trm.uni-leipzig.de] > Sent: Monday, July 26, 2010 10:37 AM > To: Eduardo M. A. M.Mendes > Cc: mathgroup(a)smc.vnet.net > Subject: Re: 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(a)trm.uni-leipzig.de] >> Sent: Sunday, July 25, 2010 10:35 PM >> To: emamm >> Cc: mathgroup(a)smc.vnet.net >> Subject: Re: 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!). >>> >> >> > >
|
Next
|
Last
Pages: 1 2 Prev: Prediction Bands and Confidence Intervals Next: mathematica gives strange result |