source:
issm/oecreview/Archive/12081-12100/ISSM-12085-12086.diff@
12325
Last change on this file since 12325 was 12325, checked in by , 13 years ago | |
---|---|
File size: 7.0 KB |
-
proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/shared/TriMesh/SplitMeshForRifts.cpp
46 46 segments=*psegments; 47 47 segmentmarkerlist=*psegmentmarkerlist; 48 48 49 50 49 /*Establish list of segments that belong to a rift: */ 51 RiftSegmentsFromSegments(&nriftsegs,&riftsegments,nel,index,nsegs,segments); /*riftsegments of size nriftsegsx4 (4 for first element on segment,second element,52 first node and second snode)*/50 /*riftsegments of size nriftsegsx4 (4 for first element on segment,second element,first node and second snode)*/ 51 RiftSegmentsFromSegments(&nriftsegs,&riftsegments,nel,index,nsegs,segments); 53 52 54 53 /*Go through all nodes of the rift segments, and start splitting the mesh: */ 55 54 flags=(int*)xcalloc(nods,sizeof(int)); //to make sure we don't split the same nodes twice! … … 69 68 70 69 DetermineGridElementListOnOneSideOfRift(&NumGridElementListOnOneSideOfRift,&GridElementListOnOneSideOfRift,i,nriftsegs,riftsegments,node,index,nel); 71 70 72 /*Summary: we have for node, a list of elements (GridElementListOnOneSideOfRift, of size NumGridElementListOnOneSideOfRift) that all contain node 73 *and that are on the same side of the rift. For all these elements, we clone node into another node, and we swap all instances of node in the triangulation 74 *for those elements, to the new node.*/ 71 /*Summary: we have for node, a list of elements 72 * (GridElementListOnOneSideOfRift, of size 73 * NumGridElementListOnOneSideOfRift) that all contain node 74 *and that are on the same side of the rift. For all these 75 elements, we clone node into another node, and we swap all 76 instances of node in the triangulation *for those elements, to the 77 new node.*/ 75 78 76 79 //augment number of nodes 77 80 nods=nods+1; -
proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp
277 277 *we can only rely on the position (x,y) of the rift nodes to create a segment:*/ 278 278 for (k=0;k<3;k++){ 279 279 if ((x[(int)*(index+el1*3+k)-1]==x[(int)*(segments+3*j+0)-1]) && (y[(int)*(index+el1*3+k)-1]==y[(int)*(segments+3*j+0)-1])){ 280 *(segments+3*j+0)=*(index+el1*3+k); _assert_(segments[3*j+0]<nods );280 *(segments+3*j+0)=*(index+el1*3+k); _assert_(segments[3*j+0]<nods+1); 281 281 break; 282 282 } 283 283 } 284 284 for (k=0;k<3;k++){ 285 285 if ((x[(int)*(index+el1*3+k)-1]==x[(int)*(segments+3*j+1)-1]) && (y[(int)*(index+el1*3+k)-1]==y[(int)*(segments+3*j+1)-1])){ 286 *(segments+3*j+1)=*(index+el1*3+k); _assert_(segments[3*j+1]<nods );286 *(segments+3*j+1)=*(index+el1*3+k); _assert_(segments[3*j+1]<nods+1); 287 287 break; 288 288 } 289 289 } … … 292 292 *(segmentmarkerlist+(nsegs+i))=*(segmentmarkerlist+j); 293 293 for (k=0;k<3;k++){ 294 294 if ((x[(int)*(index+el2*3+k)-1]==x[(int)*(segments+3*j+0)-1]) && (y[(int)*(index+el2*3+k)-1]==y[(int)*(segments+3*j+0)-1])){ 295 *(segments+3*(nsegs+i)+0)=*(index+el2*3+k); _assert_(segments[3*(nsegs+i)+0]<nods );295 *(segments+3*(nsegs+i)+0)=*(index+el2*3+k); _assert_(segments[3*(nsegs+i)+0]<nods+1); 296 296 break; 297 297 } 298 298 } 299 299 for (k=0;k<3;k++){ 300 300 if ((x[(int)*(index+el2*3+k)-1]==x[(int)*(segments+3*j+1)-1]) && (y[(int)*(index+el2*3+k)-1]==y[(int)*(segments+3*j+1)-1])){ 301 *(segments+3*(nsegs+i)+1)=*(index+el2*3+k); _assert_(segments[3*(nsegs+i)+1]<nods );301 *(segments+3*(nsegs+i)+1)=*(index+el2*3+k); _assert_(segments[3*(nsegs+i)+1]<nods+1); 302 302 break; 303 303 } 304 304 } … … 308 308 /*Let's update segments[j][:] using element el2 and the corresponding rift segment: */ 309 309 for (k=0;k<3;k++){ 310 310 if ((x[(int)*(index+el2*3+k)-1]==x[(int)*(segments+3*j+0)-1]) && (y[(int)*(index+el2*3+k)-1]==y[(int)*(segments+3*j+0)-1])){ 311 *(segments+3*j+0)=*(index+el2*3+k); _assert_(segments[3*j+0]<nods );311 *(segments+3*j+0)=*(index+el2*3+k); _assert_(segments[3*j+0]<nods+1); 312 312 break; 313 313 } 314 314 } 315 315 for (k=0;k<3;k++){ 316 316 if ((x[(int)*(index+el2*3+k)-1]==x[(int)*(segments+3*j+1)-1]) && (y[(int)*(index+el2*3+k)-1]==y[(int)*(segments+3*j+1)-1])){ 317 *(segments+3*j+1)=*(index+el2*3+k);_assert_(segments[3*j+1]<nods );317 *(segments+3*j+1)=*(index+el2*3+k);_assert_(segments[3*j+1]<nods+1); 318 318 break; 319 319 } 320 320 } … … 323 323 *(segmentmarkerlist+(nsegs+i))=*(segmentmarkerlist+j); 324 324 for (k=0;k<3;k++){ 325 325 if ((x[(int)*(index+el1*3+k)-1]==x[(int)*(segments+3*j+0)-1]) && (y[(int)*(index+el1*3+k)-1]==y[(int)*(segments+3*j+0)-1])){ 326 *(segments+3*(nsegs+i)+0)=*(index+el1*3+k);_assert_(segments[3*(nsegs+i)+0]<nods );326 *(segments+3*(nsegs+i)+0)=*(index+el1*3+k);_assert_(segments[3*(nsegs+i)+0]<nods+1); 327 327 break; 328 328 } 329 329 } 330 330 for (k=0;k<3;k++){ 331 331 if ((x[(int)*(index+el1*3+k)-1]==x[(int)*(segments+3*j+1)-1]) && (y[(int)*(index+el1*3+k)-1]==y[(int)*(segments+3*j+1)-1])){ 332 *(segments+3*(nsegs+i)+1)=*(index+el1*3+k);_assert_(segments[3*(nsegs+i)+1]<nods );332 *(segments+3*(nsegs+i)+1)=*(index+el1*3+k);_assert_(segments[3*(nsegs+i)+1]<nods+1); 333 333 break; 334 334 } 335 335 } … … 435 435 counter=0; 436 436 for (j=0;j<numsegs;j++){ 437 437 if (segmentmarkerlist[j]==(2+i)){ 438 riftsegment[3*counter+0]=segments[3*j+0];_assert_(riftsegment[3*counter+0]<nods );439 riftsegment[3*counter+1]=segments[3*j+1];_assert_(riftsegment[3*counter+1]<nods );440 riftsegment[3*counter+2]=segments[3*j+2];_assert_(riftsegment[3*counter+2]<nel );438 riftsegment[3*counter+0]=segments[3*j+0];_assert_(riftsegment[3*counter+0]<nods+1); 439 riftsegment[3*counter+1]=segments[3*j+1];_assert_(riftsegment[3*counter+1]<nods+1); 440 riftsegment[3*counter+2]=segments[3*j+2];_assert_(riftsegment[3*counter+2]<nel+1); 441 441 counter++; 442 442 } 443 443 } … … 742 742 /*output: */ 743 743 double* riftstips=NULL; 744 744 745 746 745 /*Allocate byproduct of this routine, riftstips: */ 747 746 riftstips=(double*)xmalloc(numrifts*2*sizeof(double)); 748 747 … … 752 751 riftpairs=riftspairs[i]; 753 752 numsegs=riftsnumsegments[i]; 754 753 755 756 754 /*Allocate copy of riftsegments and riftpairs, 757 755 *as well as ordering vector: */ 758 756 riftsegments_copy=(double*)xmalloc(numsegs*3*sizeof(double)); … … 777 775 } 778 776 } 779 777 /* Make sure node3 faces node1 and node4 faces node2: */ 780 _assert_(node1<nods && node4<nods); 781 if ((x[node1]==x[node4]) && (y[node1]==y[node4])){ 778 _assert_(node1<nods+1 && node4<nods+1); 779 _assert_(node1>0 && node4>0); 780 if ((x[node1-1]==x[node4-1]) && (y[node1-1]==y[node4-1])){ 782 781 /*Swap node3 and node4:*/ 783 782 temp_node=node3; 784 783 node3=node4;
Note:
See TracBrowser
for help on using the repository browser.