Changeset 23167
- Timestamp:
- 08/23/18 11:09:21 (7 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/IoModel.cpp
r23066 r23167 130 130 131 131 this->my_elements=NULL; 132 this->my_faces=NULL; 133 this->my_edges=NULL; 132 134 this->my_vertices=NULL; 133 135 … … 192 194 /*Initialize permanent data: */ 193 195 this->my_elements = NULL; 196 this->my_faces = NULL; 197 this->my_edges = NULL; 194 198 this->my_vertices = NULL; 195 199 … … 236 240 237 241 xDelete<bool>(this->my_elements); 242 xDelete<bool>(this->my_faces); 243 xDelete<bool>(this->my_edges); 238 244 xDelete<int>(this->my_vertices); 239 245 -
issm/trunk-jpl/src/c/classes/IoModel.h
r22004 r23167 64 64 /*Partitioning*/ 65 65 bool *my_elements; 66 bool *my_faces; 67 bool *my_edges; 66 68 int *my_vertices; 67 69 -
issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
r22362 r23167 62 62 /*Higher-order finite elements*/ 63 63 int v1,v2; 64 bool *my_edges = NULL;65 bool *my_faces = NULL;66 64 bool *boundaryedge = NULL; 67 65 … … 84 82 case P1xP3Enum: 85 83 case P1xP4Enum: 86 EdgesPartitioning( &my_edges,iomodel);84 EdgesPartitioning(iomodel); 87 85 break; 88 86 case P2xP1Enum: 89 EdgesPartitioning( &my_edges,iomodel);87 EdgesPartitioning(iomodel); 90 88 break; 91 89 case P2Enum: 92 EdgesPartitioning(&my_edges,iomodel); 93 if(iomodel->meshelementtype==PentaEnum){ 94 FacesPartitioning(&my_faces,iomodel); 95 } 90 EdgesPartitioning(iomodel); 91 if(iomodel->meshelementtype==PentaEnum) FacesPartitioning(iomodel); 96 92 EdgeOnBoundaryFlags(&boundaryedge,iomodel); 97 93 break; 98 94 case P2bubbleEnum: 99 EdgesPartitioning( &my_edges,iomodel);95 EdgesPartitioning(iomodel); 100 96 if(iomodel->meshelementtype==PentaEnum){ 101 FacesPartitioning( &my_faces,iomodel);97 FacesPartitioning(iomodel); 102 98 } 103 99 EdgeOnBoundaryFlags(&boundaryedge,iomodel); … … 110 106 break; 111 107 case P2xP4Enum: 112 EdgesPartitioning( &my_edges,iomodel);113 FacesPartitioning( &my_faces,iomodel);108 EdgesPartitioning(iomodel); 109 FacesPartitioning(iomodel); 114 110 break; 115 111 default: … … 140 136 } 141 137 for(i=0;i<iomodel->numberofedges;i++){ 142 if( my_edges[i] && boundaryedge[i]){138 if(iomodel->my_edges[i] && boundaryedge[i]){ 143 139 v1 = iomodel->edges[3*i+0]-1; 144 140 v2 = iomodel->edges[3*i+1]-1; … … 153 149 for(i=0;i<iomodel->numberoffaces;i++){ 154 150 if(iomodel->faces[i*iomodel->facescols+2]==2){/*Vertical quads*/ 155 if( my_faces[i]){151 if(iomodel->my_faces[i]){ 156 152 numfacevertices = iomodel->faces[i*iomodel->facescols+3]; 157 153 value=0.; … … 181 177 } 182 178 for(i=0;i<iomodel->numberofedges;i++){ 183 if( my_edges[i] && boundaryedge[i]){179 if(iomodel->my_edges[i] && boundaryedge[i]){ 184 180 v1 = iomodel->edges[3*i+0]-1; 185 181 v2 = iomodel->edges[3*i+1]-1; … … 194 190 for(i=0;i<iomodel->numberoffaces;i++){ 195 191 if(iomodel->faces[i*iomodel->facescols+2]==2){/*Vertical quads*/ 196 if( my_faces[i]){192 if(iomodel->my_faces[i]){ 197 193 numfacevertices = iomodel->faces[i*iomodel->facescols+3]; 198 194 value=0.; … … 238 234 for(i=0;i<iomodel->numberofedges;i++){ 239 235 if(iomodel->edges[i*3+2]==2){/*Vertical edges*/ 240 if( my_edges[i]){236 if(iomodel->my_edges[i]){ 241 237 v1 = iomodel->edges[3*i+0]-1; 242 238 v2 = iomodel->edges[3*i+1]-1; … … 253 249 } 254 250 if(iomodel->edges[i*3+2]==1){/*Horizontal edges*/ 255 if( my_edges[i]){251 if(iomodel->my_edges[i]){ 256 252 v1 = iomodel->edges[3*i+0]-1; 257 253 v2 = iomodel->edges[3*i+1]-1; … … 266 262 for(i=0;i<iomodel->numberoffaces;i++){ 267 263 if(iomodel->faces[i*iomodel->facescols+2]==2){/*Vertical quads*/ 268 if( my_faces[i]){264 if(iomodel->my_faces[i]){ 269 265 numfacevertices = iomodel->faces[i*iomodel->facescols+3]; 270 266 value=0.; … … 332 328 for(i=0;i<iomodel->numberofedges;i++){ 333 329 if(iomodel->edges[i*3+2]==2){ 334 if( my_edges[i]){330 if(iomodel->my_edges[i]){ 335 331 v1 = iomodel->edges[3*i+0]-1; 336 332 v2 = iomodel->edges[3*i+1]-1; … … 355 351 for(i=0;i<iomodel->numberofedges;i++){ 356 352 if(iomodel->edges[i*3+2]==2){ 357 if( my_edges[i]){353 if(iomodel->my_edges[i]){ 358 354 v1 = iomodel->edges[3*i+0]-1; 359 355 v2 = iomodel->edges[3*i+1]-1; … … 380 376 for(i=0;i<iomodel->numberofedges;i++){ 381 377 if(iomodel->edges[i*3+2]==2){/*Vertical edges*/ 382 if( my_edges[i]){378 if(iomodel->my_edges[i]){ 383 379 v1 = iomodel->edges[3*i+0]-1; 384 380 v2 = iomodel->edges[3*i+1]-1; … … 407 403 for(i=0;i<iomodel->numberofedges;i++){ 408 404 if(iomodel->edges[i*3+2]!=2){ 409 if( my_edges[i]){405 if(iomodel->my_edges[i]){ 410 406 v1 = iomodel->edges[3*i+0]-1; 411 407 v2 = iomodel->edges[3*i+1]-1; … … 472 468 } 473 469 for(i=0;i<iomodel->numberofedges;i++){ 474 if( my_edges[i]){470 if(iomodel->my_edges[i]){ 475 471 v1 = iomodel->edges[3*i+0]-1; 476 472 v2 = iomodel->edges[3*i+1]-1; … … 511 507 for(i=0;i<iomodel->numberofedges;i++){ 512 508 if(iomodel->edges[i*3+2]==2){ 513 if( my_edges[i]){509 if(iomodel->my_edges[i]){ 514 510 v1 = iomodel->edges[3*i+0]-1; 515 511 v2 = iomodel->edges[3*i+1]-1; … … 551 547 for(i=0;i<iomodel->numberofedges;i++){ 552 548 if(iomodel->edges[i*3+2]==2){ 553 if( my_edges[i]){549 if(iomodel->my_edges[i]){ 554 550 v1 = iomodel->edges[3*i+0]-1; 555 551 v2 = iomodel->edges[3*i+1]-1; … … 601 597 for(i=0;i<iomodel->numberofedges;i++){ 602 598 if(iomodel->edges[i*3+2]!=2){ 603 if( my_edges[i]){599 if(iomodel->my_edges[i]){ 604 600 v1 = iomodel->edges[3*i+0]-1; 605 601 v2 = iomodel->edges[3*i+1]-1; … … 634 630 xDelete<IssmDouble>(times); 635 631 xDelete<IssmDouble>(values); 636 xDelete<bool>(my_edges);637 xDelete<bool>(my_faces);638 632 xDelete<bool>(boundaryedge); 639 633 }/*}}}*/ … … 649 643 /*Higher-order finite elements*/ 650 644 int v1,v2; 651 bool *my_edges = NULL;652 bool *my_faces = NULL;653 645 bool *boundaryedge = NULL; 654 646 … … 669 661 break; 670 662 case P1xP2Enum: 671 EdgesPartitioning( &my_edges,iomodel);663 EdgesPartitioning(iomodel); 672 664 break; 673 665 case P1xP3Enum: 674 EdgesPartitioning( &my_edges,iomodel);666 EdgesPartitioning(iomodel); 675 667 break; 676 668 case P2xP1Enum: 677 EdgesPartitioning( &my_edges,iomodel);669 EdgesPartitioning(iomodel); 678 670 break; 679 671 case P2Enum: 680 EdgesPartitioning( &my_edges,iomodel);672 EdgesPartitioning(iomodel); 681 673 if(iomodel->meshelementtype==PentaEnum){ 682 FacesPartitioning( &my_faces,iomodel);674 FacesPartitioning(iomodel); 683 675 } 684 676 EdgeOnBoundaryFlags(&boundaryedge,iomodel); 685 677 break; 686 678 case P2bubbleEnum: 687 EdgesPartitioning( &my_edges,iomodel);679 EdgesPartitioning(iomodel); 688 680 if(iomodel->meshelementtype==PentaEnum){ 689 FacesPartitioning( &my_faces,iomodel);681 FacesPartitioning(iomodel); 690 682 } 691 683 EdgeOnBoundaryFlags(&boundaryedge,iomodel); … … 698 690 break; 699 691 case P2xP4Enum: 700 EdgesPartitioning( &my_edges,iomodel);701 FacesPartitioning( &my_faces,iomodel);692 EdgesPartitioning(iomodel); 693 FacesPartitioning(iomodel); 702 694 break; 703 695 default: … … 729 721 for(i=0;i<iomodel->numberofedges;i++){ 730 722 if(iomodel->edges[i*3+2]==2){ 731 if( my_edges[i]){723 if(iomodel->my_edges[i]){ 732 724 v1 = iomodel->edges[3*i+0]-1; 733 725 v2 = iomodel->edges[3*i+1]-1; … … 752 744 for(i=0;i<iomodel->numberofedges;i++){ 753 745 if(iomodel->edges[i*3+2]==2){ 754 if( my_edges[i]){746 if(iomodel->my_edges[i]){ 755 747 v1 = iomodel->edges[3*i+0]-1; 756 748 v2 = iomodel->edges[3*i+1]-1; … … 780 772 xDelete<IssmDouble>(times); 781 773 xDelete<IssmDouble>(values); 782 xDelete<bool>(my_edges);783 xDelete<bool>(my_faces);784 774 xDelete<bool>(boundaryedge); 785 775 }/*}}}*/ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
r22077 r23167 15 15 int numberoffaces,elementnbv; 16 16 int id0 = iomodel->nodecounter; 17 bool *my_faces = NULL;18 bool *my_edges = NULL;19 17 bool *my_nodes = NULL; 20 18 Node *node = NULL; … … 70 68 71 69 case P1xP2Enum: 72 EdgesPartitioning( &my_edges,iomodel);70 EdgesPartitioning(iomodel); 73 71 for(i=0;i<iomodel->numberofvertices;i++){ 74 72 if(iomodel->my_vertices[i]){ … … 80 78 for(i=0;i<iomodel->numberofedges;i++){ 81 79 if(iomodel->edges[i*3+2]==2){ 82 if( my_edges[i]){80 if(iomodel->my_edges[i]){ 83 81 node = new Node(id0+iomodel->numberofvertices+i+1,counter+1,lid++,0,iomodel,analysis,approximation); 84 82 nodes->AddObject(node); … … 90 88 91 89 case P1xP3Enum: 92 EdgesPartitioning( &my_edges,iomodel);90 EdgesPartitioning(iomodel); 93 91 for(i=0;i<iomodel->numberofvertices;i++){ 94 92 if(iomodel->my_vertices[i]){ … … 100 98 for(i=0;i<iomodel->numberofedges;i++){ 101 99 if(iomodel->edges[i*3+2]==2){ 102 if( my_edges[i]){100 if(iomodel->my_edges[i]){ 103 101 node = new Node(id0+iomodel->numberofvertices+2*i+1,counter+1,lid++,0,iomodel,analysis,approximation); 104 102 nodes->AddObject(node); … … 111 109 break; 112 110 case P1xP4Enum: 113 EdgesPartitioning( &my_edges,iomodel);111 EdgesPartitioning(iomodel); 114 112 for(i=0;i<iomodel->numberofvertices;i++){ 115 113 if(iomodel->my_vertices[i]){ … … 120 118 for(i=0;i<iomodel->numberofedges;i++){ 121 119 if(iomodel->edges[i*3+2]==2){/*Vertical edges*/ 122 if( my_edges[i]){120 if(iomodel->my_edges[i]){ 123 121 node = new Node(id0+iomodel->numberofvertices+3*i+1,counter+1,lid++,0,iomodel,analysis,approximation); 124 122 nodes->AddObject(node); … … 134 132 135 133 case P2xP1Enum: 136 EdgesPartitioning( &my_edges,iomodel);134 EdgesPartitioning(iomodel); 137 135 for(i=0;i<iomodel->numberofvertices;i++){ 138 136 if(iomodel->my_vertices[i]){ … … 144 142 for(i=0;i<iomodel->numberofedges;i++){ 145 143 if(iomodel->edges[i*3+2]!=2){ 146 if( my_edges[i]){144 if(iomodel->my_edges[i]){ 147 145 node = new Node(id0+iomodel->numberofvertices+i+1,counter+1,lid++,0,iomodel,analysis,approximation); 148 146 nodes->AddObject(node); … … 154 152 155 153 case P2Enum: 156 EdgesPartitioning( &my_edges,iomodel);157 for(i=0;i<iomodel->numberofvertices;i++){ 158 if(iomodel->my_vertices[i]){ 159 nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,approximation)); 160 } 161 } 162 for(i=0;i<iomodel->numberofedges;i++){ 163 if( my_edges[i]){154 EdgesPartitioning(iomodel); 155 for(i=0;i<iomodel->numberofvertices;i++){ 156 if(iomodel->my_vertices[i]){ 157 nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,approximation)); 158 } 159 } 160 for(i=0;i<iomodel->numberofedges;i++){ 161 if(iomodel->my_edges[i]){ 164 162 nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,approximation)); 165 163 } … … 167 165 id0 = id0+iomodel->numberofvertices+iomodel->numberofedges; 168 166 if(iomodel->meshelementtype==PentaEnum){ 169 FacesPartitioning( &my_faces,iomodel);167 FacesPartitioning(iomodel); 170 168 for(i=0;i<iomodel->numberoffaces;i++){ 171 169 if(iomodel->faces[i*iomodel->facescols+2]==2){/*Vertical quads*/ 172 if( my_faces[i]){170 if(iomodel->my_faces[i]){ 173 171 node = new Node(id0+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,0,iomodel,analysis,approximation); 174 172 nodes->AddObject(node); … … 185 183 break; 186 184 case P2bubbleEnum: 187 EdgesPartitioning( &my_edges,iomodel);188 for(i=0;i<iomodel->numberofvertices;i++){ 189 if(iomodel->my_vertices[i]){ 190 nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,approximation)); 191 } 192 } 193 for(i=0;i<iomodel->numberofedges;i++){ 194 if( my_edges[i]){185 EdgesPartitioning(iomodel); 186 for(i=0;i<iomodel->numberofvertices;i++){ 187 if(iomodel->my_vertices[i]){ 188 nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,approximation)); 189 } 190 } 191 for(i=0;i<iomodel->numberofedges;i++){ 192 if(iomodel->my_edges[i]){ 195 193 nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,approximation)); 196 194 } … … 198 196 id0 = id0+iomodel->numberofvertices+iomodel->numberofedges; 199 197 if(iomodel->meshelementtype==PentaEnum){ 200 FacesPartitioning( &my_faces,iomodel);198 FacesPartitioning(iomodel); 201 199 for(i=0;i<iomodel->numberoffaces;i++){ 202 200 if(iomodel->faces[i*iomodel->facescols+2]==2){/*Vertical quads*/ 203 if( my_faces[i]){201 if(iomodel->my_faces[i]){ 204 202 node = new Node(id0+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,0,iomodel,analysis,approximation); 205 203 nodes->AddObject(node); … … 222 220 break; 223 221 case P2xP4Enum: 224 EdgesPartitioning( &my_edges,iomodel);225 FacesPartitioning( &my_faces,iomodel);222 EdgesPartitioning(iomodel); 223 FacesPartitioning(iomodel); 226 224 for(i=0;i<iomodel->numberofvertices;i++){ 227 225 if(iomodel->my_vertices[i]){ … … 232 230 for(i=0;i<iomodel->numberofedges;i++){ 233 231 if(iomodel->edges[i*3+2]==2){/*Vertical edges*/ 234 if( my_edges[i]){232 if(iomodel->my_edges[i]){ 235 233 node = new Node(id0+iomodel->numberofvertices+3*i+1,counter+1,lid++,0,iomodel,analysis,approximation); 236 234 nodes->AddObject(node); … … 243 241 } 244 242 else if(iomodel->edges[i*3+2]==1){/*Horizontal edges*/ 245 if( my_edges[i]){243 if(iomodel->my_edges[i]){ 246 244 node = new Node(id0+iomodel->numberofvertices+3*i+1,counter+1,lid++,0,iomodel,analysis,approximation); 247 245 nodes->AddObject(node); … … 256 254 for(i=0;i<iomodel->numberoffaces;i++){ 257 255 if(iomodel->faces[i*iomodel->facescols+2]==2){/*Vertical quads*/ 258 if( my_faces[i]){256 if(iomodel->my_faces[i]){ 259 257 node = new Node(id0+3*i+1,counter+1,lid++,0,iomodel,analysis,approximation); 260 258 nodes->AddObject(node); … … 356 354 _assert_(approximation==FSApproximationEnum); 357 355 /*P2 velocity*/ 358 EdgesPartitioning( &my_edges,iomodel);359 for(i=0;i<iomodel->numberofvertices;i++){ 360 if(iomodel->my_vertices[i]){ 361 nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum)); 362 } 363 } 364 for(i=0;i<iomodel->numberofedges;i++){ 365 if( my_edges[i]){356 EdgesPartitioning(iomodel); 357 for(i=0;i<iomodel->numberofvertices;i++){ 358 if(iomodel->my_vertices[i]){ 359 nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum)); 360 } 361 } 362 for(i=0;i<iomodel->numberofedges;i++){ 363 if(iomodel->my_edges[i]){ 366 364 nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,FSvelocityEnum)); 367 365 } … … 369 367 id0 = id0+iomodel->numberofvertices+iomodel->numberofedges; 370 368 if(iomodel->meshelementtype==PentaEnum){ 371 FacesPartitioning( &my_faces,iomodel);369 FacesPartitioning(iomodel); 372 370 for(i=0;i<iomodel->numberoffaces;i++){ 373 371 if(iomodel->faces[i*iomodel->facescols+2]==2){/*Vertical quads*/ 374 if( my_faces[i]){372 if(iomodel->my_faces[i]){ 375 373 node = new Node(id0+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,0,iomodel,analysis,FSvelocityEnum); 376 374 nodes->AddObject(node); … … 403 401 _assert_(approximation==FSApproximationEnum); 404 402 /*P2 velocity*/ 405 EdgesPartitioning( &my_edges,iomodel);406 for(i=0;i<iomodel->numberofvertices;i++){ 407 if(iomodel->my_vertices[i]){ 408 nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum)); 409 } 410 } 411 for(i=0;i<iomodel->numberofedges;i++){ 412 if( my_edges[i]){403 EdgesPartitioning(iomodel); 404 for(i=0;i<iomodel->numberofvertices;i++){ 405 if(iomodel->my_vertices[i]){ 406 nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum)); 407 } 408 } 409 for(i=0;i<iomodel->numberofedges;i++){ 410 if(iomodel->my_edges[i]){ 413 411 nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,FSvelocityEnum)); 414 412 } … … 416 414 id0 = id0+iomodel->numberofvertices+iomodel->numberofedges; 417 415 if(iomodel->meshelementtype==PentaEnum){ 418 FacesPartitioning( &my_faces,iomodel);416 FacesPartitioning(iomodel); 419 417 for(i=0;i<iomodel->numberoffaces;i++){ 420 418 if(iomodel->faces[i*iomodel->facescols+2]==2){/*Vertical quads*/ 421 if( my_faces[i]){419 if(iomodel->my_faces[i]){ 422 420 node = new Node(id0+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,0,iomodel,analysis,FSvelocityEnum); 423 421 nodes->AddObject(node); … … 437 435 case OneLayerP4zEnum: 438 436 _assert_(approximation==FSApproximationEnum); 439 EdgesPartitioning( &my_edges,iomodel);440 FacesPartitioning( &my_faces,iomodel);437 EdgesPartitioning(iomodel); 438 FacesPartitioning(iomodel); 441 439 /*P2xP4 velocity*/ 442 440 for(i=0;i<iomodel->numberofvertices;i++){ … … 448 446 for(i=0;i<iomodel->numberofedges;i++){ 449 447 if(iomodel->edges[i*3+2]==2){/*Vertical edges*/ 450 if( my_edges[i]){448 if(iomodel->my_edges[i]){ 451 449 node = new Node(id0+iomodel->numberofvertices+3*i+1,counter+1,lid++,0,iomodel,analysis,FSvelocityEnum); 452 450 nodes->AddObject(node); … … 459 457 } 460 458 else if(iomodel->edges[i*3+2]==1){/*Horizontal edges*/ 461 if( my_edges[i]){459 if(iomodel->my_edges[i]){ 462 460 node = new Node(id0+iomodel->numberofvertices+3*i+1,counter+1,lid++,0,iomodel,analysis,FSvelocityEnum); 463 461 nodes->AddObject(node); … … 472 470 for(i=0;i<iomodel->numberoffaces;i++){ 473 471 if(iomodel->faces[i*iomodel->facescols+2]==2){/*Vertical quads*/ 474 if( my_faces[i]){472 if(iomodel->my_faces[i]){ 475 473 node = new Node(id0+3*i+1,counter+1,lid++,0,iomodel,analysis,FSvelocityEnum); 476 474 nodes->AddObject(node); … … 502 500 _assert_(approximation==FSApproximationEnum); 503 501 /*P2b velocity*/ 504 EdgesPartitioning( &my_edges,iomodel);505 for(i=0;i<iomodel->numberofvertices;i++){ 506 if(iomodel->my_vertices[i]){ 507 nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum)); 508 } 509 } 510 for(i=0;i<iomodel->numberofedges;i++){ 511 if( my_edges[i]){502 EdgesPartitioning(iomodel); 503 for(i=0;i<iomodel->numberofvertices;i++){ 504 if(iomodel->my_vertices[i]){ 505 nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum)); 506 } 507 } 508 for(i=0;i<iomodel->numberofedges;i++){ 509 if(iomodel->my_edges[i]){ 512 510 nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,FSvelocityEnum)); 513 511 } … … 515 513 id0 = id0+iomodel->numberofvertices+iomodel->numberofedges; 516 514 if(iomodel->meshelementtype==PentaEnum){ 517 FacesPartitioning( &my_faces,iomodel);515 FacesPartitioning(iomodel); 518 516 for(i=0;i<iomodel->numberoffaces;i++){ 519 517 if(iomodel->faces[i*iomodel->facescols+2]==2){/*Vertical quads*/ 520 if( my_faces[i]){518 if(iomodel->my_faces[i]){ 521 519 node = new Node(id0+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,0,iomodel,analysis,FSvelocityEnum); 522 520 nodes->AddObject(node); … … 558 556 _assert_(approximation==FSApproximationEnum); 559 557 /*P2b velocity*/ 560 EdgesPartitioning( &my_edges,iomodel);561 for(i=0;i<iomodel->numberofvertices;i++){ 562 if(iomodel->my_vertices[i]){ 563 nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum)); 564 } 565 } 566 for(i=0;i<iomodel->numberofedges;i++){ 567 if( my_edges[i]){558 EdgesPartitioning(iomodel); 559 for(i=0;i<iomodel->numberofvertices;i++){ 560 if(iomodel->my_vertices[i]){ 561 nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum)); 562 } 563 } 564 for(i=0;i<iomodel->numberofedges;i++){ 565 if(iomodel->my_edges[i]){ 568 566 nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,FSvelocityEnum)); 569 567 } … … 571 569 id0 = id0+iomodel->numberofvertices+iomodel->numberofedges; 572 570 if(iomodel->meshelementtype==PentaEnum){ 573 FacesPartitioning( &my_faces,iomodel);571 FacesPartitioning(iomodel); 574 572 for(i=0;i<iomodel->numberoffaces;i++){ 575 573 if(iomodel->faces[i*iomodel->facescols+2]==2){/*Vertical quads*/ 576 if( my_faces[i]){574 if(iomodel->my_faces[i]){ 577 575 node = new Node(id0+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,0,iomodel,analysis,FSvelocityEnum); 578 576 nodes->AddObject(node); … … 602 600 603 601 /*Clean up*/ 604 xDelete<bool>(my_faces);605 xDelete<bool>(my_edges);606 602 xDelete<bool>(my_nodes); 607 603 } -
issm/trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp
r17692 r23167 8 8 #include "./ModelProcessorx.h" 9 9 10 void EdgesPartitioning( bool** pmy_edges,IoModel* iomodel){10 void EdgesPartitioning(IoModel* iomodel){ 11 11 12 /*I ntermediaries*/13 i nt elementnbe;12 /*If faces are already present, exit*/ 13 if(iomodel->my_edges) return; 14 14 15 15 /*Get edges and elements*/ … … 18 18 19 19 /*Mesh dependent variables*/ 20 int elementnbe; 20 21 switch(iomodel->meshelementtype){ 21 22 case TriaEnum: elementnbe = 3; break; … … 26 27 27 28 /*output: */ 28 bool*my_edges=xNewZeroInit<bool>(iomodel->numberofedges);29 iomodel->my_edges=xNewZeroInit<bool>(iomodel->numberofedges); 29 30 30 31 for(int i=0;i<iomodel->numberofelements;i++){ 31 32 if(iomodel->my_elements[i]){ 32 33 for(int j=0;j<elementnbe;j++){ 33 my_edges[iomodel->elementtoedgeconnectivity[i*elementnbe+j]] = true;34 iomodel->my_edges[iomodel->elementtoedgeconnectivity[i*elementnbe+j]] = true; 34 35 } 35 36 } 36 37 } 37 38 /*Free data and assign output pointers */39 *pmy_edges=my_edges;40 38 } -
issm/trunk-jpl/src/c/modules/ModelProcessorx/FacesPartitioning.cpp
r17700 r23167 8 8 #include "./ModelProcessorx.h" 9 9 10 void FacesPartitioning( bool** pmy_faces,IoModel* iomodel){10 void FacesPartitioning(IoModel* iomodel){ 11 11 12 /*I ntermediaries*/13 i nt elementnbf;12 /*If faces are already present, exit*/ 13 if(iomodel->my_faces) return; 14 14 15 15 /*Get faces and elements*/ … … 18 18 19 19 /*Mesh dependent variables*/ 20 int elementnbf; 20 21 if(iomodel->domaintype==Domain2DhorizontalEnum){ 21 22 elementnbf = 3; … … 31 32 } 32 33 /*output: */ 33 bool*my_faces=xNewZeroInit<bool>(iomodel->numberoffaces);34 iomodel->my_faces=xNewZeroInit<bool>(iomodel->numberoffaces); 34 35 35 36 for(int i=0;i<iomodel->numberofelements;i++){ … … 38 39 _assert_(iomodel->elementtofaceconnectivity[i*elementnbf+j] >= 0); 39 40 _assert_(iomodel->elementtofaceconnectivity[i*elementnbf+j] < iomodel->numberoffaces); 40 my_faces[iomodel->elementtofaceconnectivity[i*elementnbf+j]] = true;41 iomodel->my_faces[iomodel->elementtofaceconnectivity[i*elementnbf+j]] = true; 41 42 } 42 43 } 43 44 } 44 45 /*Free data and assign output pointers */46 *pmy_faces=my_faces;47 45 } -
issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
r22739 r23167 26 26 void ElementsAndVerticesPartitioning(bool** pmy_elements, int** pmy_vertices, IoModel* iomodel); 27 27 void NodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel, bool continuous); 28 void FacesPartitioning( bool** pmy_faces,IoModel* iomodel);29 void EdgesPartitioning( bool** pmy_edges,IoModel* iomodel);28 void FacesPartitioning(IoModel* iomodel); 29 void EdgesPartitioning(IoModel* iomodel); 30 30 31 31 /*Mesh properties*/ -
issm/trunk-jpl/src/c/solutionsequences/convergence.cpp
r18619 r23167 37 37 if (VerboseConvergence()){ 38 38 39 / /compute KUF = KU - F = K*U - F39 /*compute KUF = KU - F = K*U - F*/ 40 40 KU=uf->Duplicate(); Kff->MatMult(uf,KU); 41 41 KUF=KU->Duplicate(); KU->Copy(KUF); KUF->AYPX(pf,-1.0); 42 42 43 / /compute norm(KUF), norm(F) and residue43 /*compute norm(KUF), norm(F) and residue*/ 44 44 nKUF=KUF->Norm(NORM_TWO); 45 45 nF=pf->Norm(NORM_TWO); 46 46 solver_residue=nKUF/nF; 47 47 _printf0_("\n" << " solver residue: norm(KU-F)/norm(F)=" << solver_residue << "\n"); 48 if(xIsNan<IssmDouble>(solver_residue)){ 49 //Kff->Echo(); 50 } 48 51 49 / /clean up52 /*clean up*/ 50 53 delete KU; 51 54 delete KUF; … … 54 57 /*Force equilibrium (Mandatory)*/ 55 58 56 / /compute K[n]U[n-1]F = K[n]U[n-1] - F59 /*compute K[n]U[n-1]F = K[n]U[n-1] - F*/ 57 60 _assert_(uf); _assert_(Kff); 58 61 KUold=uf->Duplicate(); Kff->MatMult(old_uf,KUold);
Note:
See TracChangeset
for help on using the changeset viewer.