Changeset 13918
- Timestamp:
- 11/08/12 16:02:41 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/FemModel.cpp
r13909 r13918 409 409 int configuration_type; 410 410 int d_nz,o_nz; 411 Element *element = NULL; 412 int *head = NULL; 413 int *next = NULL; 414 int *count2offset = NULL; 415 int * sidlist = NULL; 411 Element *element = NULL; 412 Load *load = NULL; 413 int *head_e = NULL; 414 int *next_e = NULL; 415 int *count2offset_e = NULL; 416 int *head_l = NULL; 417 int *next_l = NULL; 418 int *count2offset_l = NULL; 419 int *sidlist = NULL; 416 420 417 421 /*output*/ … … 429 433 int m = nodes->NumberOfDofsLocal(configuration_type,set1enum); 430 434 int n = nodes->NumberOfDofsLocal(configuration_type,set2enum); 431 int numnodesperobject = elements->MaxNumNodes(); 435 int numnodesperelement = elements->MaxNumNodes(); 436 int numnodesperload = loads->MaxNumNodes(configuration_type); 432 437 433 438 /*First, we are building chaining vectors so that we know what nodes are … … 436 441 * will loop over all the elements that are connected to the node number 437 442 * id*/ 438 head = xNew<int>(numnodes); for(i=0;i<numnodes;i++) head[i]=-1;439 next = xNew<int>(elements->Size()*numnodesperobject);440 count2offset = xNew<int>(elements->Size()*numnodesperobject);443 head_e = xNew<int>(numnodes); for(i=0;i<numnodes;i++) head_e[i]=-1; 444 next_e = xNew<int>(elements->Size()*numnodesperelement); 445 count2offset_e = xNew<int>(elements->Size()*numnodesperelement); 441 446 442 447 k=0; … … 450 455 _assert_(index>=0 && index<numnodes); 451 456 452 count2offset [k]=i;453 next [k]=head[index];454 head [index]=k++;457 count2offset_e[k]=i; 458 next_e[k]=head_e[index]; 459 head_e[index]=k++; 455 460 } 456 for(j=0;j<numnodesperobject-element->GetNumberOfNodes();j++) k++; 461 for(j=0;j<numnodesperelement-element->GetNumberOfNodes();j++) k++; 462 463 xDelete<int>(sidlist); 464 } 465 466 /*Chain for loads*/ 467 head_l = xNew<int>(numnodes); for(i=0;i<numnodes;i++) head_l[i]=-1; 468 next_l = xNew<int>(loads->Size(configuration_type)*numnodesperload); 469 count2offset_l = xNew<int>(loads->Size(configuration_type)*numnodesperload); 470 k=0; 471 for(i=0;i<loads->Size();i++){ 472 load = dynamic_cast<Load*>(loads->GetObjectByOffset(i)); 473 if(!load->InAnalysis(configuration_type)) continue; 474 sidlist = xNew<int>(load->GetNumberOfNodes()); 475 load->GetNodesSidList(sidlist); 476 477 for(j=0;j<load->GetNumberOfNodes();j++){ 478 index = sidlist[j]; 479 _assert_(index>=0 && index<numnodes); 480 481 count2offset_l[k]=i; 482 next_l[k]=head_l[index]; 483 head_l[index]=k++; 484 } 485 for(j=0;j<numnodesperload-load->GetNumberOfNodes();j++) k++; 457 486 458 487 xDelete<int>(sidlist); … … 475 504 476 505 /*Loop over elements that hold node number i*/ 477 _assert_(head [node->Sid()]!=-1);478 for(j=head [node->Sid()];j!=-1;j=next[j]){479 offset=count2offset [j];506 _assert_(head_e[node->Sid()]!=-1 || head_l[node->Sid()]!=-1); 507 for(j=head_e[node->Sid()];j!=-1;j=next_e[j]){ 508 offset=count2offset_e[j]; 480 509 element=dynamic_cast<Element*>(elements->GetObjectByOffset(offset)); 481 510 element->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,set1enum,set2enum); … … 488 517 } 489 518 } 519 for(j=head_l[node->Sid()];j!=-1;j=next_l[j]){ 520 offset=count2offset_l[j]; 521 load=dynamic_cast<Load*>(loads->GetObjectByOffset(offset)); 522 load->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,set1enum,set2enum); 523 if(node->IsClone()){ 524 connectivity_clone[node->Sid()]+=d_nz+o_nz; 525 } 526 else{ 527 d_connectivity[node->Sid()]+=d_nz; 528 o_connectivity[node->Sid()]+=o_nz; 529 } 530 } 490 531 } 491 532 } 492 533 xDelete<bool>(flags); 493 xDelete<int>(count2offset); 494 xDelete<int>(head); 495 xDelete<int>(next); 534 xDelete<int>(count2offset_e); 535 xDelete<int>(head_e); 536 xDelete<int>(next_e); 537 xDelete<int>(count2offset_l); 538 xDelete<int>(head_l); 539 xDelete<int>(next_l); 496 540 497 541 /*sum over all cpus*/
Note:
See TracChangeset
for help on using the changeset viewer.