Changeset 12604


Ignore:
Timestamp:
07/03/12 09:17:57 (13 years ago)
Author:
Mathieu Morlighem
Message:

only interpolate for points that are inside the model domain

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp

    r12600 r12604  
    5151        /*read background mesh*/
    5252        Mesh Th(index_data,x_data,y_data,nods_data,nels_data);
     53
     54        /*Get reference number (for subdomains)*/
     55        long* reft = xNew<long>(Th.nbt);
     56        Th.TriangleReferenceList(reft);
    5357        Th.CreateSingleVertexToTriangleConnectivity();
    5458
     
    5660        for(i=0;i<N_interp;i++){
    5761
    58                 //Get current point coordinates
     62                /*Get current point coordinates*/
    5963                r.x=x_interp[i]; r.y=y_interp[i];
    6064                I2 I=Th.R2ToI2(r);
    6165
    62                 //Find triangle holding r/I
     66                /*Find triangle holding r/I*/
    6367                Triangle &tb=*Th.TriangleFindFromCoord(I,dete);
    6468
    65                 // internal point
     69                /*point inside convex*/
    6670                if (tb.det>0){
    67                         //Area coordinate
     71
     72                        /*Area coordinates*/
    6873                        areacoord[0]= (double) dete[0]/tb.det;
    6974                        areacoord[1]= (double) dete[1]/tb.det;
    7075                        areacoord[2]= (double) dete[2]/tb.det;
    71                         //3 vertices of the triangle
     76                        /*3 vertices of the triangle*/
    7277                        i0=Th.GetId(tb[0]);
    7378                        i1=Th.GetId(tb[1]);
    7479                        i2=Th.GetId(tb[2]);
    75                         //triangle number
     80                        /*triangle number*/
    7681                        it=Th.GetId(tb);
     82
     83                        /*Inside convex but outside mesh*/
     84                        if (reft[it]<0 & isdefault){
     85                                for(j=0;j<N_data;j++) data_interp[i*N_data+j]=defaultvalue;
     86                                continue;
     87                        }
    7788                }
    7889                //external point
     
    115126        }
    116127
    117         /*Assign output pointers:*/
     128        /*clean-up and return*/
     129        xDelete<long>(reft);
    118130        *pdata_interp=data_interp;
    119 
    120         /*No error return*/
    121131        return 1;
    122132}
Note: See TracChangeset for help on using the changeset viewer.