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<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs,Vector<IssmDouble>* df);
 		void   CreatePVector(Vector<IssmDouble>* pf);
 		void   CreateJacobianMatrix(Matrix<IssmDouble>* Jff);
