Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp =================================================================== --- ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp (revision 13902) +++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp (revision 13903) @@ -161,7 +161,7 @@ } } /*}}}*/ -/*FUNCTION Tria::GetDofList {{{*/ +/*FUNCTION Tria::SetwiseNodeConnectivity{{{*/ void Tria::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){ int index; Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp =================================================================== --- ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp (revision 13902) +++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp (revision 13903) @@ -2606,6 +2606,69 @@ else this->nodes=NULL; } /*}}}*/ +/*FUNCTION Penta::SetwiseNodeConnectivity{{{*/ +void Penta::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){ + + int index; + int set_enum; + + /*Find node index*/ + index = this->GetNodeIndex(node); + + /*Output */ + int d_nz = 0; + int o_nz = 0; + + /*Loop over all nodes*/ + for(int i=0;i<6;i++){ + + if(!flags[this->nodes[i]->Sid()]){ + + /*flag current node so that no other element processes it*/ + flags[this->nodes[i]->Sid()]=true; + + /*What set are we interested in?*/ + if(i!=index) + set_enum=set2_enum; + else + set_enum=set1_enum; + + /*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/ + switch(set2_enum){ + case FsetEnum: + if(nodes[i]->indexing.fsize){ + if(this->nodes[i]->IsClone()) + o_nz += 1; + else + d_nz += 1; + } + break; + case GsetEnum: + if(nodes[i]->indexing.gsize){ + if(this->nodes[i]->IsClone()) + o_nz += 1; + else + d_nz += 1; + } + break; + case SsetEnum: + if(nodes[i]->indexing.ssize){ + if(this->nodes[i]->IsClone()) + o_nz += 1; + else + d_nz += 1; + } + break; + default: _error_("not supported"); + } + } + } + + /*Assign output pointers: */ + *pd_nz=d_nz; + *po_nz=o_nz; +} +/*}}}*/ /*FUNCTION Penta::SpawnTria {{{*/ Tria* Penta::SpawnTria(int g0, int g1, int g2){ Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.h =================================================================== --- ../trunk-jpl/src/c/classes/objects/Elements/Penta.h (revision 13902) +++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.h (revision 13903) @@ -79,7 +79,7 @@ void ComputeStressTensor(); void Configure(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters); void SetCurrentConfiguration(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters); - void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum){_error_("not implemented yet");}; + void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum); void CreateKMatrix(Matrix* Kff, Matrix* Kfs,Vector* df); void CreatePVector(Vector* pf); void CreateJacobianMatrix(Matrix* Jff);