Changeset 9650 for trunk/anuga_core/anuga/fit_interpolate/fitsmooth.c
- Timestamp:
- Feb 9, 2015, 10:13:02 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/anuga_core/anuga/fit_interpolate/fitsmooth.c
r9648 r9650 152 152 int k,k6; 153 153 double x0,y0,x1,y1,x2,y2; 154 triangle *T;155 154 156 155 // set up quad tree and allocate memory … … 168 167 x2 = vertex_coordinates[k6 + 4]; 169 168 y2 = vertex_coordinates[k6 + 5]; 170 T = new_triangle(k,x0,y0,x1,y1,x2,y2);169 triangle * T = new_triangle(k,x0,y0,x1,y1,x2,y2); 171 170 quad_tree_insert_triangle(tree,T); 172 171 } … … 188 187 { 189 188 189 190 190 191 int k; 192 193 194 191 195 int i,w; 192 edge_key_t key;193 double x;194 double y;195 triangle * T;196 double * sigma;197 int js[3];198 199 200 196 for(w=0;w<zdims;w++){ 201 197 for(i=0;i<N;i++){ … … 204 200 } 205 201 202 edge_key_t key; 203 204 205 206 206 207 207 #pragma omp parallel for private(k,i,key,w) … … 209 209 210 210 211 x = point_coordinates[2*k];212 y = point_coordinates[2*k+1];213 T = search(quadtree,x,y);211 double x = point_coordinates[2*k]; 212 double y = point_coordinates[2*k+1]; 213 triangle * T = search(quadtree,x,y); 214 214 215 215 if(T!=NULL){ 216 sigma = calculate_sigma(T,x,y);217 216 double * sigma = calculate_sigma(T,x,y); 217 int js[3]; 218 218 for(i=0;i<3;i++){ 219 219 js[i]=triangles[3*(T->index)+i]; … … 251 251 double* Atz2, 252 252 int n, int zdim){ 253 254 add_sparse_dok(dok_AtA1,1,dok_AtA2,1); 255 253 256 int i; 254 255 add_sparse_dok(dok_AtA1,1,dok_AtA2,1);256 257 257 for(i=0;i<n*zdim;i++){ 258 258 Atz1[i]+=Atz2[i]; … … 369 369 PyArrayObject *vertex_coordinates; 370 370 PyArrayObject *extents; 371 int n;372 371 373 372 … … 387 386 CHECK_C_CONTIG(extents); 388 387 389 n = triangles->dimensions[0];388 int n = triangles->dimensions[0]; 390 389 391 390 #ifdef PYVERSION273 … … 417 416 PyArrayObject *areas; 418 417 PyArrayObject *vertex_coordinates; 419 sparse_dok * smoothing_mat; // Should be an input argument?420 418 int err; 421 int n;422 419 423 420 // Convert Python arguments to C … … 436 433 CHECK_C_CONTIG(vertex_coordinates); 437 434 438 n = triangles->dimensions[0]; 439 435 int n = triangles->dimensions[0]; 436 437 438 sparse_dok * smoothing_mat; // Should be an input argument? 440 439 smoothing_mat = make_dok(); 441 440 … … 478 477 PyArrayObject *point_coordinates; 479 478 PyArrayObject *z; 480 sparse_dok * dok_AtA; // Should be an input argument?481 479 int N; // Number of triangles 482 480 int err; 483 481 int npts; 484 482 int zdims; 485 int i;486 483 PyObject *tree; 487 quad_tree *quadtree;488 double ** Atz;489 484 490 485 // Convert Python arguments to C … … 507 502 508 503 #ifdef PYVERSION273 509 quad tree = (quad_tree*) PyCapsule_GetPointer(tree,"quad tree");510 #else 511 quad tree = (quad_tree*) PyCObject_AsVoidPtr(tree);512 #endif 513 514 504 quad_tree * quadtree = (quad_tree*) PyCapsule_GetPointer(tree,"quad tree"); 505 #else 506 quad_tree * quadtree = (quad_tree*) PyCObject_AsVoidPtr(tree); 507 #endif 508 509 sparse_dok * dok_AtA; // Should be an input argument? 515 510 dok_AtA = make_dok(); 516 Atz = malloc(sizeof(double*)*zdims); 511 double ** Atz = malloc(sizeof(double*)*zdims); 512 int i; 517 513 for(i=0;i<zdims;i++){ 518 514 Atz[i] = malloc(sizeof(double)*N); … … 566 562 PyObject *tree; 567 563 PyArrayObject *point; 568 quad_tree *quadtree;569 double xp,yp;570 int *ipointd;571 double *pointd;572 triangle *T;573 PyObject *sigmalist;574 long found;575 long index;576 double *sigma;577 double ssigma[3];578 PyObject *retlist;579 580 564 581 565 // Convert Python arguments to C … … 590 574 591 575 #ifdef PYVERSION273 592 quad tree = (quad_tree*) PyCapsule_GetPointer(tree,"quad tree");593 #else 594 quad tree = (quad_tree*) PyCObject_AsVoidPtr(tree);595 #endif 596 597 576 quad_tree * quadtree = (quad_tree*) PyCapsule_GetPointer(tree,"quad tree"); 577 #else 578 quad_tree * quadtree = (quad_tree*) PyCObject_AsVoidPtr(tree); 579 #endif 580 581 double xp,yp; 598 582 if(PyArray_TYPE(point)==7){ 599 i pointd = (int*)point->data;600 xp = (double)( ipointd[0]);601 yp = (double)( ipointd[1]);583 int *pointd = (int*)point->data; 584 xp = (double)(pointd[0]); 585 yp = (double)(pointd[1]); 602 586 } 603 587 else{ 604 pointd = (double*)point->data;588 double *pointd = (double*)point->data; 605 589 xp = pointd[0]; 606 590 yp = pointd[1]; 607 591 } 608 592 609 T = search(quadtree,xp,yp); 610 sigmalist = PyList_New(3); 611 593 triangle * T = search(quadtree,xp,yp); 594 PyObject * sigmalist = PyList_New(3); 595 long found; 596 long index; 612 597 613 598 if(T!=NULL){ 614 sigma = calculate_sigma(T,xp,yp);599 double * sigma = calculate_sigma(T,xp,yp); 615 600 sigmalist = c_double_array_to_list(sigma,3); 616 601 free(sigma); … … 618 603 index = (long)T->index; 619 604 }else{ 620 621 s sigma[0]=ssigma[1]=ssigma[2]=-1;622 sigmalist = c_double_array_to_list(s sigma,3);605 double sigma[3]; 606 sigma[0]=sigma[1]=sigma[2]=-1; 607 sigmalist = c_double_array_to_list(sigma,3); 623 608 index = -10; 624 609 found = 0; 625 610 } 626 retlist = PyList_New(3);611 PyObject * retlist = PyList_New(3); 627 612 PyList_SET_ITEM(retlist,0,PyInt_FromLong(found)); 628 613 PyList_SET_ITEM(retlist,1,sigmalist); … … 641 626 // Setting up variables to parse input 642 627 PyObject *tree; // capsule to hold quad_tree pointer 643 quad_tree *quadtree;644 628 645 629 // Convert Python arguments to C … … 653 637 // Extract quad_tree pointer from capsule 654 638 #ifdef PYVERSION273 655 quad tree = (quad_tree*) PyCapsule_GetPointer(tree,"quad tree");656 #else 657 quad tree = (quad_tree*) PyCObject_AsVoidPtr(tree);639 quad_tree * quadtree = (quad_tree*) PyCapsule_GetPointer(tree,"quad tree"); 640 #else 641 quad_tree * quadtree = (quad_tree*) PyCObject_AsVoidPtr(tree); 658 642 #endif 659 643 … … 669 653 // Setting up variables to parse input 670 654 PyObject *tree; // capsule to hold quad_tree pointer 671 quad_tree *quadtree;672 655 673 656 // Convert Python arguments to C … … 681 664 // Extract quad_tree pointer from capsule 682 665 #ifdef PYVERSION273 683 quad tree = (quad_tree*) PyCapsule_GetPointer(tree,"quad tree");684 #else 685 quad tree = (quad_tree*) PyCObject_AsVoidPtr(tree);666 quad_tree * quadtree = (quad_tree*) PyCapsule_GetPointer(tree,"quad tree"); 667 #else 668 quad_tree * quadtree = (quad_tree*) PyCObject_AsVoidPtr(tree); 686 669 #endif 687 670 … … 707 690 PyArrayObject *Atz1, *Atz2; 708 691 int n,zdim; // number of nodes 709 sparse_dok *dok_AtA1;710 sparse_dok *dok_AtA2;711 692 712 693 // Convert Python arguments to C … … 721 702 // Get pointers to sparse_dok objects from capsules 722 703 #ifdef PYVERSION273 723 dok_AtA1 = (sparse_dok*) PyCapsule_GetPointer(AtA_cap1,"sparse dok");724 dok_AtA2 = (sparse_dok*) PyCapsule_GetPointer(AtA_cap2,"sparse dok");725 #else 726 dok_AtA1 = (sparse_dok*) PyCObject_AsVoidPtr(AtA_cap1);727 dok_AtA2 = (sparse_dok*) PyCObject_AsVoidPtr(AtA_cap2);704 sparse_dok * dok_AtA1 = (sparse_dok*) PyCapsule_GetPointer(AtA_cap1,"sparse dok"); 705 sparse_dok * dok_AtA2 = (sparse_dok*) PyCapsule_GetPointer(AtA_cap2,"sparse dok"); 706 #else 707 sparse_dok * dok_AtA1 = (sparse_dok*) PyCObject_AsVoidPtr(AtA_cap1); 708 sparse_dok * dok_AtA2 = (sparse_dok*) PyCObject_AsVoidPtr(AtA_cap2); 728 709 #endif 729 710 … … 750 731 PyObject *D_cap; // capsule object holding sparse_dok pointer 751 732 int n; // number of matrix columns/rows 752 sparse_dok * D_mat;753 PyObject *ret_D;754 int i,j;755 edge_key_t key;756 edge_t *s;757 733 758 734 // Convert Python arguments to C … … 766 742 // Get pointer to spars_dok struct 767 743 #ifdef PYVERSION273 768 D_mat = (sparse_dok*) PyCapsule_GetPointer(D_cap,"sparse dok");769 #else 770 D_mat = (sparse_dok*) PyCObject_AsVoidPtr(D_cap);744 sparse_dok * D_mat = (sparse_dok*) PyCapsule_GetPointer(D_cap,"sparse dok"); 745 #else 746 sparse_dok * D_mat = (sparse_dok*) PyCObject_AsVoidPtr(D_cap); 771 747 #endif 772 748 … … 780 756 781 757 // Build new python list containing the full matrix to return 782 ret_D = PyList_New(n); 783 758 PyObject *ret_D = PyList_New(n); 759 int i,j; 760 edge_key_t key; 761 edge_t *s; 784 762 for(i=0;i<n;i++) 785 763 { … … 816 794 PyObject *smoothing_mat_cap; // Capsule storing D pointer (sparse_dok struct) 817 795 PyObject *AtA_cap; // Capsule storing AtA pointer (sparse_dok struct) 818 sparse_dok *smoothing_mat;819 sparse_dok *dok_AtA;820 sparse_csr *B;821 PyObject *data;822 PyObject *colind;823 PyObject *row_ptr;824 PyObject *lst;825 796 826 797 // Convert Python arguments to C … … 834 805 // Extract pointers to c structs from capsules 835 806 #ifdef PYVERSION273 836 s moothing_mat = (sparse_dok*) PyCapsule_GetPointer(smoothing_mat_cap,"sparse dok");837 dok_AtA = (sparse_dok*) PyCapsule_GetPointer(AtA_cap,"sparse dok");838 #else 839 s moothing_mat = (sparse_dok*) PyCObject_AsVoidPtr(smoothing_mat_cap);840 dok_AtA = (sparse_dok*) PyCObject_AsVoidPtr(AtA_cap);807 sparse_dok * smoothing_mat = (sparse_dok*) PyCapsule_GetPointer(smoothing_mat_cap,"sparse dok"); 808 sparse_dok * dok_AtA = (sparse_dok*) PyCapsule_GetPointer(AtA_cap,"sparse dok"); 809 #else 810 sparse_dok * smoothing_mat = (sparse_dok*) PyCObject_AsVoidPtr(smoothing_mat_cap); 811 sparse_dok * dok_AtA = (sparse_dok*) PyCObject_AsVoidPtr(AtA_cap); 841 812 #endif 842 813 … … 845 816 846 817 // Create sparse_csr matrix and convert result to this format 818 sparse_csr * B; 847 819 B = make_csr(); 848 820 convert_to_csr_ptr(B,smoothing_mat); 849 821 850 822 // Extract the sparse_csr data to be returned as python lists 851 data = c_double_array_to_list(B->data,823 PyObject *data = c_double_array_to_list(B->data, 852 824 B->num_entries); 853 colind = c_int_array_to_list(B->colind,825 PyObject *colind = c_int_array_to_list(B->colind, 854 826 B->num_entries); 855 row_ptr = c_int_array_to_list(B->row_ptr,827 PyObject *row_ptr = c_int_array_to_list(B->row_ptr, 856 828 B->num_rows); 857 829 858 830 // Build python list for return 859 lst = PyList_New(3);831 PyObject *lst = PyList_New(3); 860 832 PyList_SET_ITEM(lst, 0, data); 861 833 PyList_SET_ITEM(lst, 1, colind);
Note: See TracChangeset
for help on using the changeset viewer.