This is the mail archive of the gsl-discuss@sourceware.cygnus.com mailing list for the GSL project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Problems with integration when wrapping it for Python.


Did you compile all of the GSL libs with the -fpic option to make a
shared library version of GSL?

If not the program will crash on the first call to a gsl_ function. In
this case that would be the gsl_integration_workspace_alloc.

Our next release will support libtool to build a shared version of GSL
automatically.

Vanroose Wim writes:
 > 
 > Dear Sir, Madam,
 > 
 >     I am new  to GSL discuss list.
 >     I recently started to use the GSL library to do calculations in
 > physics.  Previously I used a collection of fortran function that I
 > f2c'd to use in C++, python and C.   So I am very happy with the GSL
 > library, It makes my life easier.
 >      I used the integration package to do some integrations in C. The
 > program works fine and gives very accurate results. My pure C program
 > was based on the example included in the on-line manual.
 >      But when I tried to wrap the function that calculates the integral
 > into a "shared library" to be used by python. the troubles start. I
 > seems that as soon as I  allocate the memory with
 > "gsl_integration_workspace" my application crashes.
 >     Does anybody has the same experiences.
 > 
 > 
 >     I include some code snippets of the  example,  When I eleminate the
 > integration application in "calculate" and just return a number it works
 > fine but as soon I allocate the workspace the problems start
 > 
 > 
 > ##############################################################################
 > 
 > double calculate( double oscillatorL, int n,int m){
 >   double output,error;
 >   gsl_integration_workspace * w = gsl_integration_workspace_alloc(1000);
 > 
 >   gsl_function F;
 >   struct integration_params  p;
 >   F.function = &integrationformula;
 >   F.params = &p;
 >   p.n=n;
 >   p.m=m;
 >   p.b=oscillatorL;
 >   gsl_integration_qag(&F, 0, 30, 0, 1e-5, 1000, 4,w, &output, &error);
 >   return  output;
 > }
 > 
 > 
 > static PyObject *  matrix(PyObject *self, PyObject *args){
 >   double oscillatorL;
 >   if(!PyArg_ParseTuple(args,"d",&oscillatorL)
 >     return NULL;
 >   return Py_BuildValue("f",calculate(oscillatorL,1,1));
 > }
 > 
 > static PyMethodDef potentialMethods[] = {
 >   {"matrix",matrix,1},
 >   {"wim",wim,1},
 >   {NULL,NULL}
 > };
 > 
 > void initpotential(){
 >   PyObject *m, *d;
 >   m = Py_InitModule("potential", potentialMethods);
 >   import_array();
 >   d = PyModule_GetDict(m);
 > }
 > 
 > #############################################################################
 > 
 > MakeFile
 > 
 > potential: potential.c
 >     gcc -c -fpic potential  -I$(PYTHONINCL) -I$(GSLINCLUDE)
 >     gcc -shared -fpic -o potentialmodule.sl potential.o -L(GSLLIB)
 > -lgslspecfunc -lgslerr -lgslintegration -lm
 > 
 > 
 > 
 > 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]