Changeset 13889
- Timestamp:
- 11/06/12 16:39:48 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/FemModel.cpp
r13888 r13889 406 406 407 407 /*Intermediary*/ 408 int i,j,k,index, count;408 int i,j,k,index,offset,count; 409 409 int analysis_type,configuration_type; 410 int fsize,dim;411 410 int d_nz,o_nz; 412 Element *element = NULL; 413 int *head = NULL; 414 int *next = NULL; 411 Element *element = NULL; 412 int *head = NULL; 413 int *next = NULL; 414 int *count2offset = NULL; 415 415 416 416 /*output*/ … … 421 421 this->parameters->FindParam(&analysis_type,AnalysisTypeEnum); 422 422 this->parameters->FindParam(&configuration_type,ConfigurationTypeEnum); 423 this->parameters->FindParam(&dim,MeshDimensionEnum);424 423 425 424 /*Get vector size and number of nodes*/ … … 427 426 int numberofdofspernode = nodes->MaxNumDofs(configuration_type,GsetEnum); 428 427 int m = nodes->NumberOfDofsLocal(analysis_type,set1enum); 428 int numnodesperobject = elements->MaxNumNodes(); 429 429 430 430 /*First, we are building chaining vectors so that we know what nodes are … … 433 433 * will loop over all the elements that are connected to the node number 434 434 * id*/ 435 if(dim==2){ 436 head=xNew<int>(numnodes); for(i=0;i<numnodes;i++) head[i]=-1; 437 next=xNew<int>(elements->Size()*3); /*3 = number of nodes per element*/ 438 } 439 else if(dim==3){ 440 head=xNew<int>(numnodes); for(i=0;i<numnodes;i++) head[i]=-1; 441 next=xNew<int>(elements->Size()*6); /*6 = number of nodes per element*/ 442 } 443 else{ 444 _error_("dim "<<dim<<" not supported yet"); 445 } 435 head = xNew<int>(numnodes); for(i=0;i<numnodes;i++) head[i]=-1; 436 next = xNew<int>(elements->Size()*numnodesperobject); 437 count2offset = xNew<int>(elements->Size()*numnodesperobject); 438 446 439 k=0; 447 440 for(i=0;i<elements->Size();i++){ 448 441 element=dynamic_cast<Element*>(elements->GetObjectByOffset(i)); 449 for(int j=0;j< 3;j++){450 in t index =dynamic_cast<Tria*>(element)->nodes[j]->sid;//starts at 0 for a given analysis442 for(int j=0;j<numnodesperobject;j++){ 443 index =dynamic_cast<Tria*>(element)->nodes[j]->sid;//starts at 0 for a given analysis 451 444 _assert_(k>=0 && k<numnodes*elements->Size() && index>=0 && index<numnodes); 445 446 count2offset[k]=i; 452 447 next[k]=head[index]; 453 448 head[index]=k++; … … 473 468 _assert_(head[node->Sid()]!=-1); 474 469 for(j=head[node->Sid()];j!=-1;j=next[j]){ 475 if(dim==2){ 476 index = (int)(double(j)/3); 477 } 478 else if(dim==3){ 479 index = (int)(double(j)/6); 480 } 481 else{ 482 _error_("dim "<<dim<<" not supported yet"); 483 } 484 element=dynamic_cast<Element*>(elements->GetObjectByOffset(index)); 470 offset=count2offset[j]; 471 element=dynamic_cast<Element*>(elements->GetObjectByOffset(offset)); 485 472 element->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,set1enum,set2enum); 486 473 if(node->IsClone()){ … … 495 482 } 496 483 xDelete<bool>(flags); 484 xDelete<int>(count2offset); 497 485 xDelete<int>(head); 498 486 xDelete<int>(next); … … 515 503 d_nnz[count]=numberofdofspernode*(d_connectivity[node->Sid()] + all_connectivity_clone[node->Sid()]); 516 504 o_nnz[count]=numberofdofspernode*(o_connectivity[node->Sid()] + all_connectivity_clone[node->Sid()]); 517 if(d_nnz[count]>m) d_nnz[count]=m;518 if(o_nnz[count]>fsize-m) o_nnz[count]=fsize-m;505 //if(d_nnz[count]>m) d_nnz[count]=m; 506 //if(o_nnz[count]>fsize-m) o_nnz[count]=fsize-m; 519 507 count++; 520 508 }
Note:
See TracChangeset
for help on using the changeset viewer.