- Timestamp:
- Dec 31, 2007, 7:37:59 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
anuga_core/source/anuga/mesh_engine/mesh_engine_c_layer.c
r4894 r4898 36 36 shape and mesh_engine. 37 37 38 to return numeric arrays, check how it is done in39 quantity_ext.c compute_gradients40 38 41 39 Precondition … … 92 90 93 91 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; 95 101 PyObject *R; 96 102 97 int dimensions[ 1];103 int dimensions[2]; 98 104 99 105 REAL Attr; … … 149 155 150 156 /* 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]); */ 151 159 if (0 == pointattributelist -> dimensions[0]) { 152 160 in.numberofpointattributes = 0; … … 220 228 221 229 230 231 /* printf(" *** back from triangulate\n" ); */ 222 232 /* 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 223 244 PyArray_FromDims allolws you to create a Numeric array with unitialized data. 224 245 The first argument is the size of the second argument ( … … 230 251 */ 231 252 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 246 262 /* Add triangle list */ 247 263 listsize = out.numberoftriangles; … … 255 271 ii=PyString_FromString("generatedtrianglelist"); 256 272 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; 257 288 258 289 /* Add pointlist */ … … 269 300 270 301 /* 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 */ 271 309 listsize = out.numberofpoints; 272 310 holderlist = PyList_New(listsize); 273 311 274 312 for(i=0; i<listsize;i++){ 275 PyObject *mlist = Py_BuildValue((char *)" d",313 PyObject *mlist = Py_BuildValue((char *)"i", 276 314 out.pointmarkerlist[i]); 277 315 PyList_SetItem(holderlist,i, mlist); … … 280 318 PyDict_SetItem(holder, ii, holderlist); Py_DECREF(ii); Py_DECREF(holderlist); 281 319 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 282 329 /* Add point attribute list */ 283 330 listsize = out.numberofpoints; … … 297 344 PyDict_SetItem(holder, ii, holderlist); Py_DECREF(ii); Py_DECREF(holderlist); 298 345 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; 299 353 300 354 /* Add triangle attribute list */ … … 315 369 316 370 /* 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 */ 317 380 listsize = out.numberofsegments; 318 381 holderlist = PyList_New(listsize); … … 327 390 328 391 /* 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 */ 329 400 listsize = out.numberofsegments; 330 401 holderlist = PyList_New(listsize); … … 335 406 } 336 407 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 338 420 /* Add triangle neighbor list */ 339 421 if (out.neighborlist != NULL) { … … 399 481 400 482 /* 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 ); 402 493 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); 404 502 return R; 405 503 }
Note: See TracChangeset
for help on using the changeset viewer.