Index: ../trunk-jpl/src/c/classes/objects/Elements/Element.h
===================================================================
--- ../trunk-jpl/src/c/classes/objects/Elements/Element.h	(revision 13859)
+++ ../trunk-jpl/src/c/classes/objects/Elements/Element.h	(revision 13860)
@@ -28,6 +28,7 @@
 
 		virtual void   Configure(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters)=0;
 		virtual void   SetCurrentConfiguration(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters)=0;
+		virtual void   SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum)=0;
 		virtual void   CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>*  Kfs,Vector<IssmDouble>* df)=0;
 		virtual void   CreatePVector(Vector<IssmDouble>* pf)=0;
 		virtual void   CreateJacobianMatrix(Matrix<IssmDouble>* Jff)=0;
Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp
===================================================================
--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13859)
+++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13860)
@@ -161,6 +161,69 @@
 	}
 }
 /*}}}*/
+/*FUNCTION Tria::GetDofList {{{*/
+void Tria::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<3;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 Tria::CreateKMatrix {{{*/
 void  Tria::CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs,Vector<IssmDouble>* df){
 
Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.h
===================================================================
--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.h	(revision 13859)
+++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.h	(revision 13860)
@@ -75,6 +75,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);
 		void   CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs,Vector<IssmDouble>* df);
 		void   CreatePVector(Vector<IssmDouble>* pf);
 		void   CreateJacobianMatrix(Matrix<IssmDouble>* Jff);
Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.h
===================================================================
--- ../trunk-jpl/src/c/classes/objects/Elements/Penta.h	(revision 13859)
+++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.h	(revision 13860)
@@ -79,6 +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   CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs,Vector<IssmDouble>* df);
 		void   CreatePVector(Vector<IssmDouble>* pf);
 		void   CreateJacobianMatrix(Matrix<IssmDouble>* Jff);
