Changeset 16042
- Timestamp:
- 08/30/13 11:44:43 (12 years ago)
- Location:
- issm/trunk-jpl/src/c/classes
- Files:
-
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Elements/Element.h
r16026 r16042 36 36 virtual void Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters)=0; 37 37 virtual void SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters)=0; 38 virtual void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum)=0;38 virtual void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum)=0; 39 39 virtual void CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs)=0; 40 40 virtual void CreateDVector(Vector<IssmDouble>* df)=0; … … 45 45 virtual int GetNumberOfNodes(void)=0; 46 46 virtual void GetNodesSidList(int* sidlist)=0; 47 virtual void GetNodesLidList(int* sidlist)=0; 47 48 48 49 virtual int Sid()=0; -
issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
r16037 r16042 1327 1327 } 1328 1328 /*}}}*/ 1329 /*FUNCTION Penta::GetNodesLidList{{{*/ 1330 void Penta::GetNodesLidList(int* lidlist){ 1331 1332 _assert_(lidlist); 1333 _assert_(nodes); 1334 int numnodes = this->NumberofNodes(); 1335 1336 for(int i=0;i<numnodes;i++){ 1337 lidlist[i]=nodes[i]->Lid(); 1338 } 1339 } 1340 /*}}}*/ 1329 1341 /*FUNCTION Penta::GetNumberOfNodes;{{{*/ 1330 1342 int Penta::GetNumberOfNodes(void){ … … 3251 3263 /*}}}*/ 3252 3264 /*FUNCTION Penta::SetwiseNodeConnectivity{{{*/ 3253 void Penta::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){3265 void Penta::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum){ 3254 3266 3255 3267 /*Intermediaries*/ … … 3267 3279 /*flag current node so that no other element processes it*/ 3268 3280 flags[this->nodes[i]->Lid()]=true; 3281 3282 int counter=0; 3283 while(flagsindices[counter]>=0) counter++; 3284 flagsindices[counter]=this->nodes[i]->Lid(); 3269 3285 3270 3286 /*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/ -
issm/trunk-jpl/src/c/classes/Elements/Penta.h
r16026 r16042 80 80 void Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters); 81 81 void SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters); 82 void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);82 void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum); 83 83 void CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs); 84 84 void CreateDVector(Vector<IssmDouble>* df); … … 89 89 int GetNodeIndex(Node* node); 90 90 void GetNodesSidList(int* sidlist); 91 void GetNodesLidList(int* lidlist); 91 92 int GetNumberOfNodes(void); 92 93 void GetSolutionFromInputs(Vector<IssmDouble>* solution); -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r16036 r16042 119 119 /*Other*/ 120 120 /*FUNCTION Tria::SetwiseNodeConnectivity{{{*/ 121 void Tria::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){121 void Tria::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum){ 122 122 123 123 /*Intermediaries*/ … … 135 135 /*flag current node so that no other element processes it*/ 136 136 flags[this->nodes[i]->Lid()]=true; 137 138 int counter=0; 139 while(flagsindices[counter]>=0) counter++; 140 flagsindices[counter]=this->nodes[i]->Lid(); 137 141 138 142 /*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/ … … 1110 1114 for(int i=0;i<numnodes;i++){ 1111 1115 sidlist[i]=nodes[i]->Sid(); 1116 } 1117 } 1118 /*}}}*/ 1119 /*FUNCTION Tria::GetNodesLidList{{{*/ 1120 void Tria::GetNodesLidList(int* lidlist){ 1121 1122 _assert_(lidlist); 1123 _assert_(nodes); 1124 int numnodes = this->NumberofNodes(); 1125 1126 for(int i=0;i<numnodes;i++){ 1127 lidlist[i]=nodes[i]->Lid(); 1112 1128 } 1113 1129 } … … 7569 7585 vx_input->GetInputValue(&vx,gauss); 7570 7586 vy_input->GetInputValue(&vy,gauss); 7571 norms = sqrt(slope[0]*slope[0]+slope[1]*slope[1] );7587 norms = sqrt(slope[0]*slope[0]+slope[1]*slope[1]+1.e-10); 7572 7588 normv = sqrt(vx*vx + vy*vy); 7573 7589 if(normv>15./(365.*24.*3600.)) slope[0] = -vx/normv*norms; … … 7621 7637 vx_input->GetInputValue(&vx,gauss); 7622 7638 vy_input->GetInputValue(&vy,gauss); 7623 norms = sqrt(slope[0]*slope[0]+slope[1]*slope[1] );7639 norms = sqrt(slope[0]*slope[0]+slope[1]*slope[1]+1.e-10); 7624 7640 normv = sqrt(vx*vx + vy*vy); 7625 7641 if(normv>15./(365.*24.*3600.)) slope[1] = -vy/normv*norms; -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r16026 r16042 76 76 void Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters); 77 77 void SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters); 78 void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);78 void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum); 79 79 void CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs); 80 80 void CreateDVector(Vector<IssmDouble>* df); … … 84 84 int GetNodeIndex(Node* node); 85 85 void GetNodesSidList(int* sidlist); 86 void GetNodesLidList(int* lidlist); 86 87 int GetNumberOfNodes(void); 87 88 int Sid(); -
issm/trunk-jpl/src/c/classes/FemModel.cpp
r16038 r16042 518 518 /*OK now count number of dofs and flag each nodes for each node i*/ 519 519 bool *flags = xNew<bool>(localnumnodes); 520 int *flagsindices = xNew<int>(localnumnodes); 520 521 int *d_connectivity = xNewZeroInit<int>(numnodes); 521 522 int *o_connectivity = xNewZeroInit<int>(numnodes); … … 523 524 int *all_connectivity_clone = xNewZeroInit<int>(numnodes); 524 525 526 /*Resetting flags to false at eahc iteration takes a lot of time, so we keep track of the flags 527 * to reset in flagsindices, initialized with -1*/ 528 for(i = 0;i<localnumnodes;i++) flags[i] = false; 529 for(i = 0;i<localnumnodes;i++) flagsindices[i] = -1; 530 525 531 /*Create connectivity vector*/ 526 532 for(i=0;i<nodes->Size();i++){ … … 528 534 if(node->InAnalysis(configuration_type)){ 529 535 530 /*Reinitialize flags to 0*/ 531 for(j=0;j<localnumnodes;j++) flags[j]=false; 536 /*Reinitialize flags to false*/ 537 j=0; 538 while(true){ 539 if(flagsindices[j]>=0){ 540 flags[flagsindices[j]] = false; 541 flagsindices[j] = -1; 542 j++; 543 } 544 else{ 545 break; 546 } 547 } 548 549 //for(j=0;j<localnumnodes;j++) flags[j]=false; 532 550 533 551 /*Loop over elements that hold node number i*/ 534 //if(head_e[node-> Sid()]==-1 && head_l[node->Sid()]==-1){535 // printf("[%i] vertex %i\n",IssmComm::GetRank(),node-> Sid()+1);552 //if(head_e[node->Lid()]==-1 && head_l[node->Lid()]==-1){ 553 // printf("[%i] vertex %i\n",IssmComm::GetRank(),node->Lid()+1); 536 554 //} 537 555 for(j=head_e[node->Sid()];j!=-1;j=next_e[j]){ 538 556 offset=count2offset_e[j]; 539 557 element=dynamic_cast<Element*>(elements->GetObjectByOffset(offset)); 540 element->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags, set1enum,set2enum);558 element->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,flagsindices,set1enum,set2enum); 541 559 if(node->IsClone()){ 542 560 connectivity_clone[node->Sid()]+=d_nz+o_nz; … … 550 568 offset=count2offset_l[j]; 551 569 load=dynamic_cast<Load*>(loads->GetObjectByOffset(offset)); 552 load->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags, set1enum,set2enum);570 load->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,flagsindices,set1enum,set2enum); 553 571 if(node->IsClone()){ 554 572 connectivity_clone[node->Sid()]+=d_nz+o_nz; … … 562 580 } 563 581 xDelete<bool>(flags); 582 xDelete<int>(flagsindices); 564 583 xDelete<int>(count2offset_e); 565 584 xDelete<int>(head_e); -
issm/trunk-jpl/src/c/classes/Loads/Load.h
r15649 r16042 30 30 virtual int GetNumberOfNodes(void)=0; 31 31 virtual void GetNodesSidList(int* sidlist)=0; 32 virtual void GetNodesLidList(int* lidlist)=0; 32 33 virtual void SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters)=0; 33 34 virtual void CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs)=0; … … 38 39 virtual void PenaltyCreatePVector(Vector<IssmDouble>* pf, IssmDouble kmax)=0; 39 40 virtual bool InAnalysis(int analysis_type)=0; 40 virtual void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum)=0;41 virtual void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum)=0; 41 42 }; 42 43 #endif -
issm/trunk-jpl/src/c/classes/Loads/Numericalflux.cpp
r16035 r16042 325 325 } 326 326 /*}}}*/ 327 /*FUNCTION Numericalflux::GetNodesLidList{{{*/ 328 void Numericalflux::GetNodesLidList(int* lidlist){ 329 330 int type; 331 inputs->GetInputValue(&type,NumericalfluxTypeEnum); 332 _assert_(lidlist); 333 _assert_(nodes); 334 335 switch(type){ 336 case InternalEnum: 337 for(int i=0;i<NUMNODES_INTERNAL;i++) lidlist[i]=nodes[i]->Lid(); 338 return; 339 case BoundaryEnum: 340 for(int i=0;i<NUMNODES_BOUNDARY;i++) lidlist[i]=nodes[i]->Lid(); 341 return; 342 default: 343 _error_("Numericalflux type " << EnumToStringx(type) << " not supported yet"); 344 } 345 } 346 /*}}}*/ 327 347 /*FUNCTION Numericalflux::GetNumberOfNodes{{{*/ 328 348 int Numericalflux::GetNumberOfNodes(void){ … … 370 390 /*}}}*/ 371 391 /*FUNCTION Numericalflux::SetwiseNodeConnectivity{{{*/ 372 void Numericalflux::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){392 void Numericalflux::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum){ 373 393 374 394 /*Output */ … … 383 403 /*flag current node so that no other element processes it*/ 384 404 flags[this->nodes[i]->Lid()]=true; 405 406 int counter=0; 407 while(flagsindices[counter]>=0) counter++; 408 flagsindices[counter]=this->nodes[i]->Lid(); 385 409 386 410 /*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/ -
issm/trunk-jpl/src/c/classes/Loads/Numericalflux.h
r15767 r16042 67 67 void CreatePVector(Vector<IssmDouble>* pf); 68 68 void GetNodesSidList(int* sidlist); 69 void GetNodesLidList(int* lidlist); 69 70 int GetNumberOfNodes(void); 70 71 void CreateJacobianMatrix(Matrix<IssmDouble>* Jff){_error_("Not implemented yet");}; … … 73 74 void PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* kfs, IssmDouble kmax); 74 75 void PenaltyCreatePVector(Vector<IssmDouble>* pf, IssmDouble kmax); 75 void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);76 void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum); 76 77 bool InAnalysis(int analysis_type); 77 78 /*}}}*/ -
issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp
r16035 r16042 204 204 205 205 sidlist[0]=node->Sid(); 206 } 207 /*}}}*/ 208 /*FUNCTION Pengrid::GetNodesLidList{{{*/ 209 void Pengrid::GetNodesLidList(int* lidlist){ 210 211 _assert_(lidlist); 212 _assert_(node); 213 214 lidlist[0]=node->Lid(); 206 215 } 207 216 /*}}}*/ … … 292 301 /*}}}*/ 293 302 /*FUNCTION Pengrid::SetwiseNodeConnectivity{{{*/ 294 void Pengrid::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){303 void Pengrid::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum){ 295 304 296 305 /*Output */ … … 302 311 /*flag current node so that no other element processes it*/ 303 312 flags[this->node->Lid()]=true; 313 314 int counter=0; 315 while(flagsindices[counter]>=0) counter++; 316 flagsindices[counter]=this->node->Lid(); 304 317 305 318 /*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/ -
issm/trunk-jpl/src/c/classes/Loads/Pengrid.h
r15740 r16042 78 78 void CreateJacobianMatrix(Matrix<IssmDouble>* Jff){_error_("Not implemented yet");}; 79 79 void GetNodesSidList(int* sidlist); 80 void GetNodesLidList(int* lidlist); 80 81 int GetNumberOfNodes(void); 81 82 bool IsPenalty(void); … … 83 84 void PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* kfs, IssmDouble kmax); 84 85 void PenaltyCreatePVector(Vector<IssmDouble>* pf, IssmDouble kmax); 85 void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);86 void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum); 86 87 bool InAnalysis(int analysis_type); 87 88 /*}}}*/ -
issm/trunk-jpl/src/c/classes/Loads/Penpair.cpp
r16035 r16042 151 151 152 152 for(int i=0;i<NUMVERTICES;i++) sidlist[i]=nodes[i]->Sid(); 153 } 154 /*}}}*/ 155 /*FUNCTION Penpair::GetNodesLidList{{{*/ 156 void Penpair::GetNodesLidList(int* lidlist){ 157 158 _assert_(lidlist); 159 _assert_(nodes); 160 161 for(int i=0;i<NUMVERTICES;i++) lidlist[i]=nodes[i]->Lid(); 153 162 } 154 163 /*}}}*/ … … 208 217 /*}}}*/ 209 218 /*FUNCTION Penpair::SetwiseNodeConnectivity{{{*/ 210 void Penpair::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){219 void Penpair::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum){ 211 220 212 221 /*Output */ … … 221 230 /*flag current node so that no other element processes it*/ 222 231 flags[this->nodes[i]->Lid()]=true; 232 233 int counter=0; 234 while(flagsindices[counter]>=0) counter++; 235 flagsindices[counter]=this->nodes[i]->Lid(); 223 236 224 237 /*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/ -
issm/trunk-jpl/src/c/classes/Loads/Penpair.h
r15771 r16042 58 58 void CreateJacobianMatrix(Matrix<IssmDouble>* Jff); 59 59 void GetNodesSidList(int* sidlist); 60 void GetNodesLidList(int* lidlist); 60 61 int GetNumberOfNodes(void); 61 62 bool IsPenalty(void); … … 63 64 void PenaltyCreatePVector(Vector<IssmDouble>* pf, IssmDouble kmax); 64 65 void PenaltyCreateJacobianMatrix(Matrix<IssmDouble>* Jff,IssmDouble kmax); 65 void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);66 void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum); 66 67 bool InAnalysis(int analysis_type); 67 68 /*}}}*/ -
issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp
r16035 r16042 372 372 } 373 373 /*}}}*/ 374 /*FUNCTION Riftfront::GetNodesLidList{{{*/ 375 void Riftfront::GetNodesLidList(int* lidlist){ 376 377 _assert_(lidlist); 378 _assert_(nodes); 379 380 for(int i=0;i<NUMVERTICES;i++) lidlist[i]=nodes[i]->Lid(); 381 } 382 /*}}}*/ 374 383 /*FUNCTION Riftfront::GetNumberOfNodes{{{*/ 375 384 int Riftfront::GetNumberOfNodes(void){ … … 385 394 /*}}}*/ 386 395 /*FUNCTION Riftfront::SetwiseNodeConnectivity{{{*/ 387 void Riftfront::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){396 void Riftfront::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum){ 388 397 389 398 /*Output */ … … 398 407 /*flag current node so that no other element processes it*/ 399 408 flags[this->nodes[i]->Lid()]=true; 409 410 int counter=0; 411 while(flagsindices[counter]>=0) counter++; 412 flagsindices[counter]=this->nodes[i]->Lid(); 400 413 401 414 /*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/ -
issm/trunk-jpl/src/c/classes/Loads/Riftfront.h
r15771 r16042 79 79 void CreateJacobianMatrix(Matrix<IssmDouble>* Jff){_error_("Not implemented yet");}; 80 80 void GetNodesSidList(int* sidlist); 81 void GetNodesLidList(int* lidlist); 81 82 int GetNumberOfNodes(void); 82 83 bool IsPenalty(void); … … 84 85 void PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* kfs, IssmDouble kmax); 85 86 void PenaltyCreatePVector(Vector<IssmDouble>* pf, IssmDouble kmax); 86 void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);87 void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum); 87 88 bool InAnalysis(int analysis_type); 88 89 /*}}}*/
Note:
See TracChangeset
for help on using the changeset viewer.