Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 13893)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 13894)
@@ -353,4 +353,5 @@
 	Vector<IssmDouble> *df   = NULL;
 
+	//bool oldalloc=false;
 	bool oldalloc=true;
 
@@ -413,4 +414,5 @@
 	int     *next         = NULL;
 	int     *count2offset = NULL;
+	int     * sidlist     = NULL;
 
 	/*output*/
@@ -425,4 +427,5 @@
 	int numnodes            = nodes->NumberOfNodes(analysis_type);
 	int numberofdofspernode = nodes->MaxNumDofs(configuration_type,GsetEnum);
+	int N                   = nodes->NumberOfDofs(analysis_type,set2enum);
 	int m                   = nodes->NumberOfDofsLocal(analysis_type,set1enum);
 	int numnodesperobject   = elements->MaxNumNodes();
@@ -439,8 +442,11 @@
 	k=0;
 	for(i=0;i<elements->Size();i++){
-		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
-		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);
+		element = dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+		sidlist = xNew<int>(element->GetNumberOfNodes());
+		element->GetNodesSidList(sidlist);
+
+		for(j=0;j<element->GetNumberOfNodes();j++){
+			index = sidlist[j];
+			_assert_(index>=0 && index<numnodes);
 
 			count2offset[k]=i;
@@ -448,4 +454,7 @@
 			head[index]=k++;
 		}
+		for(j=0;j<numnodesperobject-element->GetNumberOfNodes();j++) k++;
+
+		xDelete<int>(sidlist);
 	}
 
@@ -503,6 +512,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]>N-m) o_nnz[count]=N-m;
 					count++;
 				}
@@ -719,5 +728,4 @@
 	IssmDouble          kmax;
 
-
 	/*Display message*/
 	if(VerboseModule()) _pprintLine_("   Generating matrices");
@@ -774,5 +782,4 @@
 	//Kff->AllocationInfo();
 	//Kfs->AllocationInfo();
-	//_error_("STOP");
 
 	/*Assign output pointers: */
