Ignore:
Timestamp:
Feb 9, 2015, 10:13:02 PM (10 years ago)
Author:
steve
Message:

Reverted back to a working verions of fitsmooth.c

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/anuga_core/anuga/fit_interpolate/fitsmooth.c

    r9648 r9650  
    152152    int k,k6;
    153153    double x0,y0,x1,y1,x2,y2;
    154     triangle *T;
    155154
    156155    // set up quad tree and allocate memory
     
    168167        x2 = vertex_coordinates[k6 + 4];
    169168        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);
    171170        quad_tree_insert_triangle(tree,T);
    172171    }
     
    188187              {
    189188
     189
     190
    190191    int k;
     192
     193
     194
    191195    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 
    200196    for(w=0;w<zdims;w++){
    201197        for(i=0;i<N;i++){
     
    204200    }
    205201
     202    edge_key_t key;
     203
     204
     205
    206206
    207207    #pragma omp parallel for private(k,i,key,w)
     
    209209
    210210
    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);
    214214
    215215        if(T!=NULL){
    216             sigma = calculate_sigma(T,x,y);
    217 
     216            double * sigma = calculate_sigma(T,x,y);
     217            int js[3];
    218218            for(i=0;i<3;i++){
    219219                js[i]=triangles[3*(T->index)+i];
     
    251251                             double* Atz2,
    252252                             int n, int zdim){
     253
     254    add_sparse_dok(dok_AtA1,1,dok_AtA2,1);
     255
    253256    int i;
    254 
    255     add_sparse_dok(dok_AtA1,1,dok_AtA2,1);
    256 
    257257    for(i=0;i<n*zdim;i++){
    258258        Atz1[i]+=Atz2[i];
     
    369369    PyArrayObject *vertex_coordinates;
    370370    PyArrayObject *extents;
    371     int n;
    372371
    373372
     
    387386    CHECK_C_CONTIG(extents);
    388387
    389     n = triangles->dimensions[0];
     388    int n = triangles->dimensions[0];
    390389
    391390    #ifdef PYVERSION273
     
    417416    PyArrayObject *areas;
    418417    PyArrayObject *vertex_coordinates;
    419     sparse_dok * smoothing_mat; // Should be an input argument?
    420418    int err;
    421     int n;
    422419
    423420    // Convert Python arguments to C
     
    436433    CHECK_C_CONTIG(vertex_coordinates);
    437434
    438     n = triangles->dimensions[0];
    439 
     435    int n = triangles->dimensions[0];
     436
     437
     438    sparse_dok * smoothing_mat; // Should be an input argument?
    440439    smoothing_mat = make_dok();
    441440
     
    478477    PyArrayObject *point_coordinates;
    479478    PyArrayObject *z;
    480     sparse_dok * dok_AtA; // Should be an input argument?
    481479    int N; // Number of triangles
    482480    int err;
    483481    int npts;
    484482    int zdims;
    485     int i;
    486483    PyObject *tree;
    487     quad_tree *quadtree;
    488     double ** Atz;
    489484
    490485    // Convert Python arguments to C
     
    507502
    508503    #ifdef PYVERSION273
    509     quadtree = (quad_tree*) PyCapsule_GetPointer(tree,"quad tree");
    510     #else
    511     quadtree = (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?
    515510    dok_AtA = make_dok();
    516     Atz = malloc(sizeof(double*)*zdims);
     511    double ** Atz = malloc(sizeof(double*)*zdims);
     512    int i;
    517513    for(i=0;i<zdims;i++){
    518514        Atz[i] = malloc(sizeof(double)*N);
     
    566562    PyObject *tree;
    567563    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 
    580564
    581565    // Convert Python arguments to C
     
    590574
    591575    #ifdef PYVERSION273
    592     quadtree = (quad_tree*) PyCapsule_GetPointer(tree,"quad tree");
    593     #else
    594     quadtree = (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;
    598582    if(PyArray_TYPE(point)==7){
    599         ipointd = (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]);
    602586    }
    603587    else{
    604         pointd = (double*)point->data;
     588        double *pointd = (double*)point->data;
    605589        xp = pointd[0];
    606590        yp = pointd[1];
    607591    }
    608592
    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;
    612597   
    613598    if(T!=NULL){
    614             sigma = calculate_sigma(T,xp,yp);
     599            double * sigma = calculate_sigma(T,xp,yp);
    615600            sigmalist = c_double_array_to_list(sigma,3);
    616601            free(sigma);
     
    618603            index = (long)T->index;
    619604    }else{
    620 
    621             ssigma[0]=ssigma[1]=ssigma[2]=-1;
    622             sigmalist = c_double_array_to_list(ssigma,3);
     605            double sigma[3];
     606            sigma[0]=sigma[1]=sigma[2]=-1;
     607            sigmalist = c_double_array_to_list(sigma,3);
    623608            index = -10;
    624609            found = 0;
    625610    }
    626     retlist = PyList_New(3);
     611    PyObject * retlist = PyList_New(3);
    627612    PyList_SET_ITEM(retlist,0,PyInt_FromLong(found));
    628613    PyList_SET_ITEM(retlist,1,sigmalist);
     
    641626    // Setting up variables to parse input
    642627    PyObject *tree; // capsule to hold quad_tree pointer
    643     quad_tree *quadtree;
    644628
    645629    // Convert Python arguments to C
     
    653637    // Extract quad_tree pointer from capsule
    654638    #ifdef PYVERSION273
    655     quadtree = (quad_tree*) PyCapsule_GetPointer(tree,"quad tree");
    656     #else
    657     quadtree = (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);
    658642    #endif
    659643   
     
    669653    // Setting up variables to parse input
    670654    PyObject *tree; // capsule to hold quad_tree pointer
    671     quad_tree *quadtree;
    672655
    673656    // Convert Python arguments to C
     
    681664    // Extract quad_tree pointer from capsule
    682665    #ifdef PYVERSION273
    683     quadtree = (quad_tree*) PyCapsule_GetPointer(tree,"quad tree");
    684     #else
    685     quadtree = (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);
    686669    #endif
    687670   
     
    707690    PyArrayObject *Atz1, *Atz2;
    708691    int n,zdim; // number of nodes
    709     sparse_dok *dok_AtA1;
    710     sparse_dok *dok_AtA2;
    711692
    712693    // Convert Python arguments to C
     
    721702    // Get pointers to sparse_dok objects from capsules
    722703    #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);
    728709    #endif
    729710
     
    750731    PyObject *D_cap; // capsule object holding sparse_dok pointer
    751732    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;
    757733
    758734    // Convert Python arguments to C
     
    766742    // Get pointer to spars_dok struct
    767743    #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);
    771747    #endif
    772748
     
    780756
    781757    // 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;
    784762    for(i=0;i<n;i++)
    785763    {
     
    816794    PyObject *smoothing_mat_cap; // Capsule storing D pointer (sparse_dok struct)
    817795    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;
    825796
    826797    // Convert Python arguments to C
     
    834805    // Extract pointers to c structs from capsules
    835806    #ifdef PYVERSION273
    836     smoothing_mat = (sparse_dok*) PyCapsule_GetPointer(smoothing_mat_cap,"sparse dok");
    837     dok_AtA = (sparse_dok*) PyCapsule_GetPointer(AtA_cap,"sparse dok");
    838     #else
    839     smoothing_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);
    841812    #endif
    842813
     
    845816   
    846817    // Create sparse_csr matrix and convert result to this format
     818    sparse_csr * B;
    847819    B = make_csr();
    848820    convert_to_csr_ptr(B,smoothing_mat);
    849821   
    850822    // 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,
    852824                                B->num_entries);
    853     colind = c_int_array_to_list(B->colind,
     825    PyObject *colind = c_int_array_to_list(B->colind,
    854826                                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,
    856828                                B->num_rows);
    857829
    858830    // Build python list for return
    859     lst = PyList_New(3);
     831    PyObject *lst = PyList_New(3);
    860832    PyList_SET_ITEM(lst, 0, data);
    861833    PyList_SET_ITEM(lst, 1, colind);
Note: See TracChangeset for help on using the changeset viewer.