Ignore:
Timestamp:
Dec 31, 2007, 7:37:59 AM (16 years ago)
Author:
duncan
Message:

Outputting numeric arrays from mesh_engine. they aren't used yet though.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • anuga_core/source/anuga/mesh_engine/mesh_engine_c_layer.c

    r4894 r4898  
    3636     shape and mesh_engine.
    3737
    38      to return numeric arrays, check how it is done in
    39      quantity_ext.c compute_gradients
    4038         
    4139     Precondition
     
    9290 
    9391 
    94   PyArrayObject *r_test;
     92  PyArrayObject *gentrianglelist;
     93  PyArrayObject *genpointlist;
     94  PyArrayObject *genseglist;
     95  PyArrayObject *genpointmarkerlist;
     96  PyArrayObject *genpointattributelist;
     97  PyArrayObject *gentriangleattributelist;
     98  PyArrayObject *gensegmentlist;
     99  PyArrayObject *gensegmentmarkerlist;
     100  PyArrayObject *genneighborlist;
    95101  PyObject *R;
    96102
    97   int dimensions[1];
     103  int dimensions[2];
    98104   
    99105  REAL Attr;
     
    149155 
    150156  /* Point attribute list */
     157   /*printf ("in.pointattributelist -> dimensions[0] %i\n", pointattributelist -> dimensions[0]);
     158  printf ("in.pointattributelist -> dimensions[1] %i\n", pointattributelist -> dimensions[1]); */
    151159  if (0 == pointattributelist -> dimensions[0]) {
    152160    in.numberofpointattributes = 0;
     
    220228 
    221229 
     230 
     231  /* printf(" ***  back from triangulate\n" );    */
    222232  /*
     233    ------- Pass point numbers,coordinates and neighbors back to Python ------
     234    we send back a dictionary:                                               
     235    { index : [ coordinates, [connections], Attribute ] }
     236  */
     237  holder = PyDict_New();   
     238 
     239  /*
     240 
     241     to return numeric arrays, check how it is done in
     242     abs quantity_ext.c compute_gradients
     243     
    223244  PyArray_FromDims allolws you to create a Numeric array with unitialized data.
    224245   The first argument is the size of the second argument (
     
    230251  */
    231252 
    232   //Py_Initialize();
    233   // Testing passing a numeric array out
    234   dimensions[0] = 4;
    235   // Allocate space for return vectors a and b (don't DECREF)
    236   r_test = (PyArrayObject *) PyArray_FromDims(1, dimensions, PyArray_DOUBLE);
    237  
    238   /* printf(" ***  back from triangulate\n" );    */
    239   /*
    240     ------- Pass point numbers,coordinates and neighbors back to Python ------
    241     we send back a dictionary:                                               
    242     { index : [ coordinates, [connections], Attribute ] }
    243   */
    244   holder = PyDict_New();   
    245  
     253 
     254  /* Add triangle list */
     255  dimensions[0] = out.numberoftriangles;
     256  dimensions[1] = 3;   
     257  gentrianglelist = (PyArrayObject *) PyArray_FromDims(2,
     258                                                    dimensions,
     259                                                    PyArray_INT);
     260  gentrianglelist -> data = out.trianglelist;
     261   
    246262  /* Add triangle list */
    247263  listsize = out.numberoftriangles;
     
    255271  ii=PyString_FromString("generatedtrianglelist");
    256272  PyDict_SetItem(holder, ii, holderlist); Py_DECREF(ii); Py_DECREF(holderlist);
     273 
     274 
     275  /* Add pointlist */
     276  dimensions[0] = out.numberofpoints;
     277  dimensions[1] = 2;   
     278  genpointlist = (PyArrayObject *) PyArray_FromDims(2,
     279                                                 dimensions,
     280                                                 PyArray_DOUBLE);
     281  /*                                             
     282  (double*) genpointlist -> data = out.pointlist;               
     283  ((double*) genpointlist -> data) = out.pointlist;
     284  ( genpointlist -> data) = (double*) out.pointlist;
     285 
     286  */
     287  genpointlist -> data = out.pointlist;
    257288     
    258289  /* Add pointlist */
     
    269300 
    270301  /* Add point marker list */
     302  dimensions[0] = out.numberofpoints;
     303  genpointmarkerlist = (PyArrayObject *) PyArray_FromDims(1,
     304                                                    dimensions,
     305                                                    PyArray_INT);
     306  genpointmarkerlist -> data = out.pointmarkerlist;
     307 
     308  /* Add point marker list */
    271309  listsize = out.numberofpoints;
    272310  holderlist = PyList_New(listsize);
    273311 
    274312  for(i=0; i<listsize;i++){
    275     PyObject *mlist = Py_BuildValue((char *)"d",
     313    PyObject *mlist = Py_BuildValue((char *)"i",
    276314                                    out.pointmarkerlist[i]);     
    277315    PyList_SetItem(holderlist,i, mlist);
     
    280318  PyDict_SetItem(holder, ii, holderlist); Py_DECREF(ii); Py_DECREF(holderlist);
    281319   
     320  /* Add point attribute list */
     321  dimensions[0] = out.numberofpoints;
     322  dimensions[1] = out.numberofpointattributes;   
     323  genpointattributelist = (PyArrayObject *) PyArray_FromDims(2,
     324                                                 dimensions,
     325                                                 PyArray_DOUBLE);
     326  genpointattributelist -> data = out.pointattributelist;       
     327 
     328 
    282329  /* Add point attribute list */
    283330  listsize = out.numberofpoints;
     
    297344  PyDict_SetItem(holder, ii, holderlist); Py_DECREF(ii); Py_DECREF(holderlist); 
    298345 
     346  /* Add triangle attribute list */
     347  dimensions[0] = out.numberoftriangles;
     348  dimensions[1] = out.numberoftriangleattributes;   
     349  gentriangleattributelist = (PyArrayObject *) PyArray_FromDims(2,
     350                                                 dimensions,
     351                                                 PyArray_DOUBLE);
     352  gentriangleattributelist -> data = out.triangleattributelist;
    299353 
    300354  /* Add triangle attribute list */
     
    315369 
    316370  /* Add segment list */
     371  dimensions[0] = out.numberofsegments;
     372  dimensions[1] = 2;   
     373  gensegmentlist = (PyArrayObject *) PyArray_FromDims(2,
     374                                                    dimensions,
     375                                                    PyArray_INT);
     376  gensegmentlist -> data = out.segmentlist;
     377 
     378 
     379  /* Add segment list */
    317380  listsize = out.numberofsegments;
    318381  holderlist = PyList_New(listsize);
     
    327390 
    328391  /* Add segment marker list */
     392  dimensions[0] = out.numberofsegments;
     393  gensegmentmarkerlist = (PyArrayObject *) PyArray_FromDims(1,
     394                                                    dimensions,
     395                                                    PyArray_INT);
     396  gensegmentmarkerlist -> data = out.segmentmarkerlist;
     397 
     398 
     399  /* Add segment marker list */
    329400  listsize = out.numberofsegments;
    330401  holderlist = PyList_New(listsize);
     
    335406  }   
    336407  ii=PyString_FromString("generatedsegmentmarkerlist");
    337   PyDict_SetItem(holder, ii, holderlist); Py_DECREF(ii); Py_DECREF(holderlist); 
     408  PyDict_SetItem(holder, ii, holderlist); Py_DECREF(ii);
     409  Py_DECREF(holderlist); 
     410 
     411  /* Add triangle neighbor list */
     412  dimensions[0] = out.numberoftriangles;
     413  dimensions[1] = 3;   
     414  genneighborlist = (PyArrayObject *) PyArray_FromDims(2,
     415                                                    dimensions,
     416                                                    PyArray_INT);
     417  genneighborlist -> data = out.neighborlist;
     418 
     419 
    338420  /* Add triangle neighbor list */
    339421  if (out.neighborlist != NULL) {
     
    399481 
    400482  /* R = Py_BuildValue((char *)"O", holder); */
    401   R = Py_BuildValue((char *)"OO", holder, PyArray_Return(r_test));
     483  R = Py_BuildValue((char *)"OOOOOOOOO", holder
     484                    ,PyArray_Return(gentrianglelist)
     485                    ,PyArray_Return(genpointlist)
     486                    ,PyArray_Return(genpointmarkerlist)
     487                    ,PyArray_Return(genpointattributelist)
     488                    ,PyArray_Return(gentriangleattributelist)
     489                    ,PyArray_Return(gensegmentlist)
     490                    ,PyArray_Return(gensegmentmarkerlist)
     491                    ,PyArray_Return(genneighborlist)
     492                    );
    402493  Py_DECREF(holder); /** This fixed a  memory problem ticket#189 */
    403   Py_DECREF(r_test);
     494  Py_DECREF(gentrianglelist);
     495  Py_DECREF(genpointlist);
     496  Py_DECREF(genpointmarkerlist);
     497  Py_DECREF(genpointattributelist);
     498  Py_DECREF(gentriangleattributelist);
     499  Py_DECREF(gensegmentlist);
     500  Py_DECREF(gensegmentmarkerlist);
     501  Py_DECREF(genneighborlist);
    404502  return R;
    405503}
Note: See TracChangeset for help on using the changeset viewer.