Changeset 14310 for issm/trunk/src/c/shared/TriMesh/TriMeshUtils.cpp
- Timestamp:
- 02/04/13 08:01:04 (12 years ago)
- Location:
- issm/trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk
- Property svn:mergeinfo changed
/issm/trunk-jpl merged: 14068-14070,14073-14074,14077-14095,14097-14112,14117,14134-14135,14138-14142,14144,14149-14151,14153,14156-14208,14210-14308
- Property svn:mergeinfo changed
-
issm/trunk/src
- Property svn:mergeinfo changed
-
issm/trunk/src/c/shared/TriMesh/TriMeshUtils.cpp
r13975 r14310 36 36 }/*}}}*/ 37 37 /*FUNCTION GridElementsList{{{*/ 38 int GridElementsList(int** pGridElements, int* pNumGridElements,int node, double* index,int nel){38 int GridElementsList(int** pGridElements, int* pNumGridElements,int node,int* index,int nel){ 39 39 40 40 /*From a node, recover all the elements that are connected to it: */ … … 58 58 for (i=0;i<nel;i++){ 59 59 for (j=0;j<3;j++){ 60 if ( (int)*(index+3*i+j)==node){60 if (index[3*i+j]==node){ 61 61 if (NumGridElements<=(current_size-1)){ 62 62 GridElements[NumGridElements]=i; … … 90 90 }/*}}}*/ 91 91 /*FUNCTION IsNeighbor{{{*/ 92 int IsNeighbor(int el1,int el2, double* index){92 int IsNeighbor(int el1,int el2,int* index){ 93 93 /*From a triangulation held in index, figure out if elements 1 and 2 have two nodes in common: */ 94 94 int i,j; … … 96 96 for (i=0;i<3;i++){ 97 97 for (j=0;j<3;j++){ 98 if ( *(index+3*el1+i)==*(index+3*el2+j))count++;98 if (index[3*el1+i]==index[3*el2+j])count++; 99 99 } 100 100 } … … 118 118 }/*}}}*/ 119 119 /*FUNCTION RiftSegmentsFromSegments{{{*/ 120 void RiftSegmentsFromSegments(int* pnriftsegs, int** priftsegments, int nel, double* index, int nsegs,double* segments){120 void RiftSegmentsFromSegments(int* pnriftsegs, int** priftsegments, int nel,int* index,int nsegs,int* segments){ 121 121 122 122 int i,counter; … … 126 126 int* riftsegments=NULL; 127 127 int* riftsegments_uncompressed=NULL; 128 doubleelement_nodes[3];128 int element_nodes[3]; 129 129 130 130 /*Allocate segmentflags: */ … … 143 143 element_nodes[2]=*(index+3*el+2); 144 144 145 *(index+3*el+0)=-1;146 *(index+3*el+1)=-1;147 *(index+3*el+2)=-1;145 index[3*el+0]=-1; 146 index[3*el+1]=-1; 147 index[3*el+2]=-1; 148 148 149 149 el2=FindElement(*(segments+3*i+0),*(segments+3*i+1),index,nel); 150 150 151 151 /*Restore index: */ 152 *(index+3*el+0)=element_nodes[0];153 *(index+3*el+1)=element_nodes[1];154 *(index+3*el+2)=element_nodes[2];152 index[3*el+0]=element_nodes[0]; 153 index[3*el+1]=element_nodes[1]; 154 index[3*el+2]=element_nodes[2]; 155 155 156 156 if (el2!=-1){ 157 157 /*el and el2 are on a segment rift, facing one another, plug them into riftsegments_uncompressed: */ 158 *(riftsegments_uncompressed+5*i+0)=1;159 *(riftsegments_uncompressed+5*i+1)=el;160 *(riftsegments_uncompressed+5*i+2)=el2;161 *(riftsegments_uncompressed+5*i+3)=(int)*(segments+3*i+0);162 *(riftsegments_uncompressed+5*i+4)=(int)*(segments+3*i+1);163 nriftsegs++;158 riftsegments_uncompressed[5*i+0]=1; 159 riftsegments_uncompressed[5*i+1]=el; 160 riftsegments_uncompressed[5*i+2]=el2; 161 riftsegments_uncompressed[5*i+3]=segments[3*i+0]; 162 riftsegments_uncompressed[5*i+4]=segments[3*i+1]; 163 nriftsegs++; 164 164 } 165 165 } … … 169 169 counter=0; 170 170 for (i=0;i<nsegs;i++){ 171 if ( *(riftsegments_uncompressed+5*i+0)){172 *(riftsegments+counter*4+0)=*(riftsegments_uncompressed+5*i+1);173 *(riftsegments+counter*4+1)=*(riftsegments_uncompressed+5*i+2);174 *(riftsegments+counter*4+2)=*(riftsegments_uncompressed+5*i+3);175 *(riftsegments+counter*4+3)=*(riftsegments_uncompressed+5*i+4);171 if (riftsegments_uncompressed[5*i+0]){ 172 riftsegments[counter*4+0]=riftsegments_uncompressed[5*i+1]; 173 riftsegments[counter*4+1]=riftsegments_uncompressed[5*i+2]; 174 riftsegments[counter*4+2]=riftsegments_uncompressed[5*i+3]; 175 riftsegments[counter*4+3]=riftsegments_uncompressed[5*i+4]; 176 176 counter++; 177 177 } 178 178 } 179 180 179 xDelete<int>(riftsegments_uncompressed); 181 180 … … 185 184 }/*}}}*/ 186 185 /*FUNCTION DetermineGridElementListOnOneSideOfRift{{{*/ 187 int DetermineGridElementListOnOneSideOfRift(int* pNumGridElementListOnOneSideOfRift, int** pGridElementListOnOneSideOfRift, int segmentnumber, int nriftsegs, int* riftsegments, int node, double* index,int nel){186 int DetermineGridElementListOnOneSideOfRift(int* pNumGridElementListOnOneSideOfRift, int** pGridElementListOnOneSideOfRift, int segmentnumber, int nriftsegs, int* riftsegments, int node,int* index,int nel){ 188 187 189 188 int noerr=1; … … 249 248 }/*}}}*/ 250 249 /*FUNCTION UpdateSegments{{{*/ 251 int UpdateSegments( double** psegments,double** psegmentmarkerlist, int* pnsegs, double* index, double* x,double* y,int* riftsegments,int nriftsegs,int nods,int nel){250 int UpdateSegments(int** psegments,int** psegmentmarkerlist, int* pnsegs,int* index, double* x,double* y,int* riftsegments,int nriftsegs,int nods,int nel){ 252 251 253 252 int noerr=1; … … 255 254 int el1,el2; 256 255 257 double*segments = NULL;258 double*segmentmarkerlist = NULL;259 int 256 int *segments = NULL; 257 int *segmentmarkerlist = NULL; 258 int nsegs; 260 259 261 260 /*Recover input: */ … … 265 264 266 265 /*Reallocate segments: */ 267 segments =xReNew< double>(segments, nsegs*3,(nsegs+nriftsegs)*3);268 segmentmarkerlist=xReNew< double>(segmentmarkerlist,nsegs,(nsegs+nriftsegs));266 segments =xReNew<int>(segments, nsegs*3,(nsegs+nriftsegs)*3); 267 segmentmarkerlist=xReNew<int>(segmentmarkerlist,nsegs,(nsegs+nriftsegs)); 269 268 270 269 /*First, update the existing segments to the new nodes :*/ … … 278 277 *we can only rely on the position (x,y) of the rift nodes to create a segment:*/ 279 278 for (k=0;k<3;k++){ 280 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])){279 if ((x[*(index+el1*3+k)-1]==x[*(segments+3*j+0)-1]) && (y[*(index+el1*3+k)-1]==y[*(segments+3*j+0)-1])){ 281 280 *(segments+3*j+0)=*(index+el1*3+k); _assert_(segments[3*j+0]<nods+1); 282 281 break; … … 284 283 } 285 284 for (k=0;k<3;k++){ 286 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])){285 if ((x[*(index+el1*3+k)-1]==x[*(segments+3*j+1)-1]) && (y[*(index+el1*3+k)-1]==y[*(segments+3*j+1)-1])){ 287 286 *(segments+3*j+1)=*(index+el1*3+k); _assert_(segments[3*j+1]<nods+1); 288 287 break; … … 293 292 *(segmentmarkerlist+(nsegs+i))=*(segmentmarkerlist+j); 294 293 for (k=0;k<3;k++){ 295 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])){294 if ((x[*(index+el2*3+k)-1]==x[*(segments+3*j+0)-1]) && (y[*(index+el2*3+k)-1]==y[*(segments+3*j+0)-1])){ 296 295 *(segments+3*(nsegs+i)+0)=*(index+el2*3+k); _assert_(segments[3*(nsegs+i)+0]<nods+1); 297 296 break; … … 299 298 } 300 299 for (k=0;k<3;k++){ 301 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])){300 if ((x[*(index+el2*3+k)-1]==x[*(segments+3*j+1)-1]) && (y[*(index+el2*3+k)-1]==y[*(segments+3*j+1)-1])){ 302 301 *(segments+3*(nsegs+i)+1)=*(index+el2*3+k); _assert_(segments[3*(nsegs+i)+1]<nods+1); 303 302 break; … … 309 308 /*Let's update segments[j][:] using element el2 and the corresponding rift segment: */ 310 309 for (k=0;k<3;k++){ 311 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])){310 if ((x[*(index+el2*3+k)-1]==x[*(segments+3*j+0)-1]) && (y[*(index+el2*3+k)-1]==y[*(segments+3*j+0)-1])){ 312 311 *(segments+3*j+0)=*(index+el2*3+k); _assert_(segments[3*j+0]<nods+1); 313 312 break; … … 315 314 } 316 315 for (k=0;k<3;k++){ 317 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])){316 if ((x[*(index+el2*3+k)-1]==x[*(segments+3*j+1)-1]) && (y[*(index+el2*3+k)-1]==y[*(segments+3*j+1)-1])){ 318 317 *(segments+3*j+1)=*(index+el2*3+k);_assert_(segments[3*j+1]<nods+1); 319 318 break; … … 324 323 *(segmentmarkerlist+(nsegs+i))=*(segmentmarkerlist+j); 325 324 for (k=0;k<3;k++){ 326 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])){325 if ((x[*(index+el1*3+k)-1]==x[*(segments+3*j+0)-1]) && (y[*(index+el1*3+k)-1]==y[*(segments+3*j+0)-1])){ 327 326 *(segments+3*(nsegs+i)+0)=*(index+el1*3+k);_assert_(segments[3*(nsegs+i)+0]<nods+1); 328 327 break; … … 330 329 } 331 330 for (k=0;k<3;k++){ 332 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])){331 if ((x[*(index+el1*3+k)-1]==x[*(segments+3*j+1)-1]) && (y[*(index+el1*3+k)-1]==y[*(segments+3*j+1)-1])){ 333 332 *(segments+3*(nsegs+i)+1)=*(index+el1*3+k);_assert_(segments[3*(nsegs+i)+1]<nods+1); 334 333 break; … … 348 347 }/*}}}*/ 349 348 /*FUNCTION FindElement{{{*/ 350 int FindElement(double A,double B,double* index,int nel){ 351 352 int n; 349 int FindElement(int A,int B,int* index,int nel){ 350 353 351 int el=-1; 354 for ( n=0;n<nel;n++){355 if (((*(index+3*n+0)==A) || (*(index+3*n+1)==A) || (*(index+3*n+2)==A) ) && ((*(index+3*n+0)==B) || (*(index+3*n+1)==B) || (*(index+3*n+2)==B))){352 for (int n=0;n<nel;n++){ 353 if(((index[3*n+0]==A) || (index[3*n+1]==A) || (index[3*n+2]==A)) && ((index[3*n+0]==B) || (index[3*n+1]==B) || (index[3*n+2]==B))){ 356 354 el=n; 357 355 break; … … 361 359 }/*}}}*/ 362 360 /*FUNCTION SplitRiftSegments{{{*/ 363 int SplitRiftSegments( double** psegments,double** psegmentmarkerlist, int* pnumsegs, int* pnumrifts,int** priftsnumsegs,double*** priftssegments,int numrifts,int nods,int nel){361 int SplitRiftSegments(int** psegments,int** psegmentmarkerlist, int* pnumsegs, int* pnumrifts,int** priftsnumsegs,int*** priftssegments,int numrifts,int nods,int nel){ 364 362 365 363 /*Using segment markers, wring out the rift segments from the segments. Rift markers are … … 370 368 371 369 /*input: */ 372 double*segments = NULL;373 double*segmentmarkerlist = NULL;370 int *segments = NULL; 371 int *segmentmarkerlist = NULL; 374 372 int numsegs; 375 373 376 374 /*output: */ 377 int 378 int 379 double**riftssegments = NULL;380 double*new_segments = NULL;381 double*new_segmentmarkers = NULL;375 int new_numsegs; 376 int *riftsnumsegs = NULL; 377 int **riftssegments = NULL; 378 int *new_segments = NULL; 379 int *new_segmentmarkers = NULL; 382 380 383 381 /*intermediary: */ 384 double* riftsegment=NULL;382 int* riftsegment=NULL; 385 383 386 384 /*Recover input arguments: */ 387 segments =*psegments;388 numsegs =*pnumsegs;389 segmentmarkerlist =*psegmentmarkerlist;385 segments = *psegments; 386 numsegs = *pnumsegs; 387 segmentmarkerlist = *psegmentmarkerlist; 390 388 391 389 /*First, figure out how many segments will be left in 'segments': */ … … 396 394 /*Allocate new segments: */ 397 395 new_numsegs=counter; 398 new_segments=xNew< double>(new_numsegs*3);399 new_segmentmarkers=xNew< double>(new_numsegs);396 new_segments=xNew<int>(new_numsegs*3); 397 new_segmentmarkers=xNew<int>(new_numsegs); 400 398 401 399 /*Copy new segments info : */ … … 413 411 /*Now deal with rift segments: */ 414 412 riftsnumsegs=xNew<int>(numrifts); 415 riftssegments=xNew< double*>(numrifts);413 riftssegments=xNew<int*>(numrifts); 416 414 for (i=0;i<numrifts;i++){ 417 415 /*Figure out how many segments for rift i: */ … … 421 419 } 422 420 riftsnumsegs[i]=counter; 423 riftsegment=xNew< double>(counter*3);421 riftsegment=xNew<int>(counter*3); 424 422 /*Copy new segments info :*/ 425 423 counter=0; … … 436 434 437 435 /*Free ressources: */ 438 xDelete< double>(segments);436 xDelete<int>(segments); 439 437 440 438 /*Assign output pointers: */ … … 448 446 }/*}}}*/ 449 447 /*FUNCTION PairRiftElements{{{*/ 450 int PairRiftElements(int** priftsnumpairs, double*** priftspairs,int numrifts,int* riftsnumsegments, double** riftssegments,double* x,double* y){448 int PairRiftElements(int** priftsnumpairs,int*** priftspairs,int numrifts,int* riftsnumsegments,int** riftssegments,double* x,double* y){ 451 449 452 450 int noerr=1; … … 454 452 455 453 /*output: */ 456 int 457 double**riftspairs = NULL;454 int *riftsnumpairs = NULL; 455 int **riftspairs = NULL; 458 456 459 457 /*intermediary :*/ 460 int 461 double* segments=NULL;462 double* pairs=NULL;463 int 458 int numsegs; 459 int* segments=NULL; 460 int* pairs=NULL; 461 int node1,node2,node3,node4; 464 462 465 463 riftsnumpairs=xNew<int>(numrifts); 466 riftspairs=xNew< double*>(numrifts);464 riftspairs=xNew<int*>(numrifts); 467 465 for (i=0;i<numrifts;i++){ 468 466 segments=riftssegments[i]; 469 numsegs =riftsnumsegments[i];467 numsegs =riftsnumsegments[i]; 470 468 riftsnumpairs[i]=numsegs; 471 pairs=xNew< double>(2*numsegs);469 pairs=xNew<int>(2*numsegs); 472 470 for (j=0;j<numsegs;j++){ 473 *(pairs+2*j+0)=*(segments+3*j+2); //retrieve element to which this segment belongs.474 node1= (int)*(segments+3*j+0)-1; node2=(int)*(segments+3*j+1)-1;471 pairs[2*j+0]=segments[3*j+2]; //retrieve element to which this segment belongs. 472 node1=segments[3*j+0]-1; node2=segments[3*j+1]-1; 475 473 /*Find element facing on other side of rift: */ 476 474 for (k=0;k<numsegs;k++){ 477 475 if (k==j)continue; 478 node3= (int)*(segments+3*k+0)-1; node4=(int)*(segments+3*k+1)-1;476 node3=segments[3*k+0]-1; node4=segments[3*k+1]-1; 479 477 /*We are trying to find 2 elements, where position of node3 == position of node1, and position of node4 == position of node2*/ 480 478 if ( (x[node3]==x[node1]) && (y[node3]==y[node1]) && (x[node4]==x[node2]) && (y[node4]==y[node2]) 481 479 || (x[node3]==x[node2]) && (y[node3]==y[node2]) && (x[node4]==x[node1]) && (y[node4]==y[node1]) ){ 482 480 /*We found the corresponding element: */ 483 *(pairs+2*j+1)=*(segments+3*k+2);481 pairs[2*j+1]=segments[3*k+2]; 484 482 break; 485 483 } … … 495 493 }/*}}}*/ 496 494 /*FUNCTION RemoveRifts{{{*/ 497 int RemoveRifts( double** pindex,double** px,double** py,int* pnods,double** psegments,int* pnumsegs,int numrifts1,int* rifts1numsegs,double** rifts1segments,double** rifts1pairs,int nel){495 int RemoveRifts(int** pindex,double** px,double** py,int* pnods,int** psegments,int* pnumsegs,int numrifts1,int* rifts1numsegs,int** rifts1segments,int** rifts1pairs,int nel){ 498 496 499 497 int noerr=1; 500 498 int i,j,k,counter,counter1,counter2; 501 499 502 /*input: */503 double* index=NULL;504 double* x=NULL;505 double* y=NULL;506 int nods;507 double* segments=NULL;508 int numsegs;509 510 500 /*intermediary: */ 511 double*riftsegments = NULL;512 double*riftpairs = NULL;501 int *riftsegments = NULL; 502 int *riftpairs = NULL; 513 503 int node1,node2,node3,node4,temp_node; 514 doubleel2;504 int el2; 515 505 int newnods; //temporary # node counter. 516 506 double xmin,ymin; … … 523 513 524 514 /*Recover input: */ 525 in dex=*pindex;526 x=*px;527 y=*py;528 nods=*pnods;;529 segments=*psegments;530 numsegs=*pnumsegs;515 int *index = *pindex; 516 double *x = *px; 517 double *y = *py; 518 int nods = *pnods; ; 519 int *segments = *psegments; 520 int numsegs = *pnumsegs; 531 521 532 522 /*initialize newnods : */ … … 558 548 riftpairs=rifts1pairs[i]; 559 549 for (j=0;j<rifts1numsegs[i];j++){ 560 el2= *(riftpairs+2*j+1);550 el2=riftpairs[2*j+1]; 561 551 node1=(int)*(riftsegments+3*j+0); 562 552 node2=(int)*(riftsegments+3*j+1); … … 565 555 for (k=0;k<rifts1numsegs[i];k++){ 566 556 if (*(riftsegments+3*k+2)==el2){ 567 node3= (int)*(riftsegments+3*k+0);568 node4= (int)*(riftsegments+3*k+1);557 node3=*(riftsegments+3*k+0); 558 node4=*(riftsegments+3*k+1); 569 559 break; 570 560 } … … 677 667 }/*}}}*/ 678 668 /*FUNCTION IsRiftPresent{{{*/ 679 int IsRiftPresent(int* priftflag,int* pnumrifts, double* segmentmarkerlist,int nsegs){669 int IsRiftPresent(int* priftflag,int* pnumrifts,int* segmentmarkerlist,int nsegs){ 680 670 681 671 int i; … … 686 676 int numrifts=0; 687 677 688 doublemaxmark=1; //default marker for regular segments678 int maxmark=1; //default marker for regular segments 689 679 690 680 /*Any marker >=2 indicates a certain rift: */ … … 696 686 } 697 687 } 698 if 688 if(numrifts)riftflag=1; 699 689 700 690 /*Assign output pointers:*/ … … 704 694 }/*}}}*/ 705 695 /*FUNCTION OrderRifts{{{*/ 706 int OrderRifts( double** priftstips, double** riftssegments,double** riftspairs,int numrifts,int* riftsnumsegments,double* x,double* y,int nods,int nels){696 int OrderRifts(int** priftstips,int** riftssegments,int** riftspairs,int numrifts,int* riftsnumsegments,double* x,double* y,int nods,int nels){ 707 697 708 698 int noerr=1; … … 710 700 711 701 /*intermediary: */ 712 double*riftsegments = NULL;713 double*riftpairs = NULL;702 int *riftsegments = NULL; 703 int *riftpairs = NULL; 714 704 int numsegs; 715 705 716 706 /*ordering and copy: */ 717 int 718 double*riftsegments_copy = NULL;719 double*riftpairs_copy = NULL;707 int *order = NULL; 708 int *riftsegments_copy = NULL; 709 int *riftpairs_copy = NULL; 720 710 721 711 /*node and element manipulation: */ 722 int 723 doubleel2;724 int 712 int node1,node2,node3,node4,temp_node,tip1,tip2,node; 713 int el2; 714 int already_ordered=0; 725 715 726 716 /*output: */ 727 double* riftstips=NULL;717 int* riftstips=NULL; 728 718 729 719 /*Allocate byproduct of this routine, riftstips: */ 730 riftstips=xNew< double>(numrifts*2);720 riftstips=xNew<int>(numrifts*2); 731 721 732 722 /*Go through all rifts: */ 733 723 for (i=0;i<numrifts;i++){ 734 riftsegments =riftssegments[i];735 riftpairs =riftspairs[i];736 numsegs =riftsnumsegments[i];724 riftsegments = riftssegments[i]; 725 riftpairs = riftspairs[i]; 726 numsegs = riftsnumsegments[i]; 737 727 738 728 /*Allocate copy of riftsegments and riftpairs, 739 729 *as well as ordering vector: */ 740 riftsegments_copy=xNew< double>(numsegs*3);741 riftpairs_copy=xNew< double>(numsegs*2);730 riftsegments_copy=xNew<int>(numsegs*3); 731 riftpairs_copy=xNew<int>(numsegs*2); 742 732 order=xNew<int>(numsegs); 743 733 … … 748 738 for (j=0;j<numsegs;j++){ 749 739 el2=*(riftpairs+2*j+1); 750 node1= (int)*(riftsegments+3*j+0);751 node2= (int)*(riftsegments+3*j+1);740 node1=*(riftsegments+3*j+0); 741 node2=*(riftsegments+3*j+1); 752 742 /*Summary, el1 and el2 are facing one another across the rift. node1 and node2 belong to el1 and 753 743 *are located on the rift. Find node3 and node4, nodes belonging to el2 and located on the rift: */ 754 744 for (k=0;k<numsegs;k++){ 755 745 if (*(riftsegments+3*k+2)==el2){ 756 node3= (int)*(riftsegments+3*k+0);757 node4= (int)*(riftsegments+3*k+1);746 node3=*(riftsegments+3*k+0); 747 node4=*(riftsegments+3*k+1); 758 748 break; 759 749 } … … 796 786 797 787 /*Record tips in riftstips: */ 798 *(riftstips+2*i+0)= (double)tip1;799 *(riftstips+2*i+1)= (double)tip2;788 *(riftstips+2*i+0)=tip1; 789 *(riftstips+2*i+1)=tip2; 800 790 801 791 /*We have the two tips for this rift. Go from tip1 to tip2, and figure out the order in which segments are sequential. … … 804 794 for (counter=0;counter<numsegs;counter++){ 805 795 for (j=0;j<numsegs;j++){ 806 node1= (int)*(riftsegments+3*j+0);807 node2= (int)*(riftsegments+3*j+1);796 node1=*(riftsegments+3*j+0); 797 node2=*(riftsegments+3*j+1); 808 798 809 799 if ((node1==node) || (node2==node)){ … … 849 839 850 840 xDelete<int>(order); 851 xDelete< double>(riftsegments_copy);852 xDelete< double>(riftpairs_copy);841 xDelete<int>(riftsegments_copy); 842 xDelete<int>(riftpairs_copy); 853 843 854 844 } … … 859 849 }/*}}}*/ 860 850 /*FUNCTION PenaltyPairs{{{*/ 861 int PenaltyPairs(double*** priftspenaltypairs,int** priftsnumpenaltypairs,int numrifts, double** riftssegments,862 int* riftsnumsegs, double** riftspairs,double* riftstips,double* x,double* y){851 int PenaltyPairs(double*** priftspenaltypairs,int** priftsnumpenaltypairs,int numrifts,int** riftssegments, 852 int* riftsnumsegs,int** riftspairs,int* riftstips,double* x,double* y){ 863 853 864 854 int noerr=1; … … 875 865 /*intermediary: */ 876 866 int numsegs; 877 double* riftsegments=NULL;878 double* riftpairs=NULL;867 int* riftsegments=NULL; 868 int* riftpairs=NULL; 879 869 int counter; 880 870 double normal[2]; … … 980 970 /*Renormalize normals: */ 981 971 for(j=0;j<counter;j++){ 982 double magnitude=sqrt(pow( *(riftpenaltypairs+j*7+4),2) + pow( *(riftpenaltypairs+j*7+5),2) );972 double magnitude=sqrt(pow( double(riftpenaltypairs[j*7+4]),2) + pow( double(riftpenaltypairs[j*7+5]),2) ); 983 973 *(riftpenaltypairs+j*7+4)=*(riftpenaltypairs+j*7+4)/magnitude; 984 974 *(riftpenaltypairs+j*7+5)=*(riftpenaltypairs+j*7+5)/magnitude; … … 993 983 *priftsnumpenaltypairs=riftsnumpenaltypairs; 994 984 return noerr; 995 } 996 997 /****************************************************************************************************************************** 998 RemoveCorners 999 ******************************************************************************************************************************/ 1000 1001 int RemoveCornersFromRifts(double** pindex,int* pnel,double** px,double** py,int* pnods, double* segments,double* segmentmarkers,int num_seg){ 985 }/*}}}*/ 986 int RemoveCornersFromRifts(int** pindex,int* pnel,double** px,double** py,int* pnods,int* segments,int* segmentmarkers,int num_seg){/*{{{*/ 1002 987 1003 988 int noerr=1; 1004 989 int i,j,k; 1005 doublenode1,node2,node3;990 int node1,node2,node3; 1006 991 int el; 1007 1008 /*input: */1009 double* index=NULL;1010 int nel;1011 double* x=NULL;1012 double* y=NULL;1013 int nods;1014 992 double pair[2]; 1015 993 int pair_count=0; … … 1017 995 1018 996 /*Recover input: */ 1019 in dex=*pindex;1020 nel=*pnel;1021 x=*px;1022 y=*py;1023 nods=*pnods;997 int *index = *pindex; 998 int nel = *pnel; 999 double *x = *px; 1000 double *y = *py; 1001 int nods = *pnods; 1024 1002 1025 1003 for (i=0;i<num_seg;i++){ … … 1083 1061 x[nods]=(x[(int)node1-1]+x[(int)node2-1]+x[(int)node3-1])/3; 1084 1062 y[nods]=(y[(int)node1-1]+y[(int)node2-1]+y[(int)node3-1])/3; 1085 index=xReNew< double>(index,nel*3,(nel+2*3));1063 index=xReNew<int>(index,nel*3,(nel+2*3)); 1086 1064 /*First, reassign element el: */ 1087 1065 *(index+3*el+0)=node1; … … 1098 1076 /*we need to change the segment elements corresponding to el: */ 1099 1077 for (k=0;k<num_seg;k++){ 1100 if (*(segments+3*k+2)==( double)(el+1)){1101 if ( ((*(segments+3*k+0)==node1) && (*(segments+3*k+1)==node2)) || ((*(segments+3*k+0)==node2) && (*(segments+3*k+1)==node1))) *(segments+3*k+2)= (double)(el+1);1102 if ( ((*(segments+3*k+0)==node2) && (*(segments+3*k+1)==node3)) || ((*(segments+3*k+0)==node3) && (*(segments+3*k+1)==node2))) *(segments+3*k+2)= (double)(nel+1);1103 if ( ((*(segments+3*k+0)==node3) && (*(segments+3*k+1)==node1)) || ((*(segments+3*k+0)==node1) && (*(segments+3*k+1)==node3))) *(segments+3*k+2)= (double)(nel+2);1078 if (*(segments+3*k+2)==(el+1)){ 1079 if ( ((*(segments+3*k+0)==node1) && (*(segments+3*k+1)==node2)) || ((*(segments+3*k+0)==node2) && (*(segments+3*k+1)==node1))) *(segments+3*k+2)=el+1; 1080 if ( ((*(segments+3*k+0)==node2) && (*(segments+3*k+1)==node3)) || ((*(segments+3*k+0)==node3) && (*(segments+3*k+1)==node2))) *(segments+3*k+2)=nel+1; 1081 if ( ((*(segments+3*k+0)==node3) && (*(segments+3*k+1)==node1)) || ((*(segments+3*k+0)==node1) && (*(segments+3*k+1)==node3))) *(segments+3*k+2)=nel+2; 1104 1082 } 1105 1083 } … … 1121 1099 *pnods=nods; 1122 1100 return noerr; 1123 } 1101 }/*}}}*/
Note:
See TracChangeset
for help on using the changeset viewer.