Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 13888)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 13889)
@@ -406,11 +406,11 @@
 
 	/*Intermediary*/
-	int      i,j,k,index,count;
+	int      i,j,k,index,offset,count;
 	int      analysis_type,configuration_type;
-	int      fsize,dim;
 	int      d_nz,o_nz;
-	Element *element = NULL;
-	int     *head    = NULL;
-	int     *next    = NULL;
+	Element *element      = NULL;
+	int     *head         = NULL;
+	int     *next         = NULL;
+	int     *count2offset = NULL;
 
 	/*output*/
@@ -421,5 +421,4 @@
 	this->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
 	this->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
-	this->parameters->FindParam(&dim,MeshDimensionEnum);
 
 	/*Get vector size and number of nodes*/
@@ -427,4 +426,5 @@
 	int numberofdofspernode = nodes->MaxNumDofs(configuration_type,GsetEnum);
 	int m                   = nodes->NumberOfDofsLocal(analysis_type,set1enum);
+	int numnodesperobject   = elements->MaxNumNodes();
 
 	/*First, we are building chaining vectors so that we know what nodes are
@@ -433,21 +433,16 @@
 	 * will loop over all the elements that are connected to the node number
 	 * id*/
-	if(dim==2){
-		head=xNew<int>(numnodes); for(i=0;i<numnodes;i++) head[i]=-1;
-		next=xNew<int>(elements->Size()*3); /*3 = number of nodes per element*/
-	}
-	else if(dim==3){
-		head=xNew<int>(numnodes); for(i=0;i<numnodes;i++) head[i]=-1;
-		next=xNew<int>(elements->Size()*6); /*6 = number of nodes per element*/
-	}
-	else{
-		_error_("dim "<<dim<<" not supported yet");
-	}
+	head         = xNew<int>(numnodes); for(i=0;i<numnodes;i++) head[i]=-1;
+	next         = xNew<int>(elements->Size()*numnodesperobject);
+	count2offset = xNew<int>(elements->Size()*numnodesperobject);
+
 	k=0;
 	for(i=0;i<elements->Size();i++){
 		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
-		for(int j=0;j<3;j++){
-			int index =dynamic_cast<Tria*>(element)->nodes[j]->sid;//starts at 0 for a given analysis
+		for(int j=0;j<numnodesperobject;j++){
+			index =dynamic_cast<Tria*>(element)->nodes[j]->sid;//starts at 0 for a given analysis
 			_assert_(k>=0 && k<numnodes*elements->Size() && index>=0 && index<numnodes);
+
+			count2offset[k]=i;
 			next[k]=head[index];
 			head[index]=k++;
@@ -473,14 +468,6 @@
 			_assert_(head[node->Sid()]!=-1);
 			for(j=head[node->Sid()];j!=-1;j=next[j]){
-				if(dim==2){
-					index = (int)(double(j)/3);
-				}
-				else if(dim==3){
-					index = (int)(double(j)/6);
-				}
-				else{
-					_error_("dim "<<dim<<" not supported yet");
-				}
-				element=dynamic_cast<Element*>(elements->GetObjectByOffset(index));
+				offset=count2offset[j];
+				element=dynamic_cast<Element*>(elements->GetObjectByOffset(offset));
 				element->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,set1enum,set2enum);
 				if(node->IsClone()){
@@ -495,4 +482,5 @@
 	}
 	xDelete<bool>(flags);
+	xDelete<int>(count2offset);
 	xDelete<int>(head);
 	xDelete<int>(next);
@@ -515,6 +503,6 @@
 					d_nnz[count]=numberofdofspernode*(d_connectivity[node->Sid()] + all_connectivity_clone[node->Sid()]);
 					o_nnz[count]=numberofdofspernode*(o_connectivity[node->Sid()] + all_connectivity_clone[node->Sid()]);
-					if(d_nnz[count]>m)   d_nnz[count]=m;
-					if(o_nnz[count]>fsize-m) o_nnz[count]=fsize-m;
+					//if(d_nnz[count]>m)   d_nnz[count]=m;
+					//if(o_nnz[count]>fsize-m) o_nnz[count]=fsize-m;
 					count++;
 				}
