MathGroup Archive 2005

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

Search the Archive

Re: MLPutRealList vs. sequence of MLPutDouble

  • To: mathgroup at smc.vnet.net
  • Subject: [mg61737] Re: MLPutRealList vs. sequence of MLPutDouble
  • From: "Jens-Peer Kuska" <kuska at informatik.uni-leipzig.de>
  • Date: Thu, 27 Oct 2005 05:54:31 -0400 (EDT)
  • Organization: Uni Leipzig
  • References: <djq618$jb5$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Hi,

because

MLPutFunction(link, SCRIPT_NAME, 1);
MLPutRealList(link,x,NUM_VARS);

call in Mathematica SCRIPT_NAME[{x0,x1}]

and

MLPutFunction(link, SCRIPT_NAME, NUM_VARS);
for ( i=0; i<NUM_VARS; i++ ) { MLPutDouble(link, 
x[i]); }

call in Mathematica

SCRIPT_NAME[x0,x1]

Regards
  Jens

"Reese Jones" <rjones at sandia.gov> schrieb im 
Newsbeitrag news:djq618$jb5$1 at smc.vnet.net...
| Hi
|   I am a new subscriber to the list and I have a 
seemingly
| simple (read: stupid) question: why does this 
code work
| when I send a sequence of reals and not work 
when I send
| a list?
|
| <SNIP>
|        /* Now initialize and call Mathematica */
|        env = MLInitialize(NULL);
|        if (env == NULL) return 1;
|
|        link = MLOpen(num_strings, Mparams);
|        if (link == NULL) return 1;
|
|        MLActivate(link);
|
|        /* Load the compare function definition 
into Mathematica */
|        MLPutFunction(link, "EnterTextPacket", 
1);
|        MLPutString(link, "<<" SCRIPT_NAME ".m");
|        MLEndPacket(link);
|
|        /* call the compare function with x[1], 
x[2]*/
|        MLPutFunction(link, "EvaluatePacket", 1);
| #if REAL_LIST
|        MLPutFunction(link, SCRIPT_NAME, 1);
|        MLPutRealList(link,x,NUM_VARS);
| #else
|        MLPutFunction(link, SCRIPT_NAME, 
NUM_VARS);
|        for ( i=0; i<NUM_VARS; i++ ) { 
MLPutDouble(link, x[i]); }
| #endif
|        MLEndPacket(link);
|
|        /* skip any packets before the first 
ReturnPacket
|           and then get the result from the 
calculation   */
|        int pkt;
|        while( (pkt = MLNextPacket(link), pkt) && 
pkt != RETURNPKT) {
|                MLNewPacket(link);
|                if (MLError(link)) {
|                        fprintf( stderr, "2 Error 
detected by MathLink:
| %s.\n",
|                        MLErrorMessage(link)); }
|        }
|
|        double fn_val=0.0;
|        MLGetDouble(link, &fn_val);
|        if (MLError(link)) {
|                fprintf( stderr, "3 Error 
detected by MathLink: %s.\n",
|                MLErrorMessage(link)); }
|        MLClose(link);
|        MLDeinitialize(env);
| <SNIP>
|
| this is the Mathematica script that is called 
(it takes a list and
| returns a single value) :
|
| (* test[x_Real,x2_Real] := x; *)
| test[y_List] := y[[2]];
|
|
| this is the output:
|
| Error detected by MathLink: MLGet out of 
sequence.
| test : { 0.616000, 29.000000} -> f: 0.000000
|
|
| thanks
| Reese
|
| -- 
| 
:::::::::::::::::::::::::::::::::::::::::::::::::::::
| Reese Jones
| Sandia National Laboratories, MS 9042, P.O. Box 
0969
| Livermore, CA 94551
|
| phone: (925) 294-4744 or (800) 4SANDIA x4-4744
| fax:   (925) 294-1459
| e-mail: rjones at sandia.gov
| 
:::::::::::::::::::::::::::::::::::::::::::::::::::::
|
| 



  • Prev by Date: Re: ParametricPlot3D
  • Next by Date: Re: aggregation of related elements in a list
  • Previous by thread: MLPutRealList vs. sequence of MLPutDouble
  • Next by thread: Re: Re: MLPutRealList vs. sequence of MLPutDouble