Index: /issm/trunk/src/m/classes/@model/model.m
===================================================================
--- /issm/trunk/src/m/classes/@model/model.m	(revision 1628)
+++ /issm/trunk/src/m/classes/@model/model.m	(revision 1629)
@@ -75,4 +75,5 @@
 	md.segmentmarkers=NaN;
 	md.rifts=NaN;
+	md.riftinfo=NaN;
 	md.numrifts=0;
 
Index: /issm/trunk/src/m/classes/public/marshall.m
===================================================================
--- /issm/trunk/src/m/classes/public/marshall.m	(revision 1628)
+++ /issm/trunk/src/m/classes/public/marshall.m	(revision 1629)
@@ -151,10 +151,5 @@
 
 %Rifts
-WriteData(fid,md.numrifts,'Integer','numrifts');
-for i=1:md.numrifts,
-	WriteData(fid,md.rifts(i).penaltypairs,'Mat',['penaltypairs' num2str(i)]);
-	WriteData(fid,md.rifts(i).fill,'Scalar',['fill' num2str(i)]);
-	WriteData(fid,md.rifts(i).friction,'Scalar',['friction' num2str(i)]);
-end
+WriteData(fid,md.riftinfo,'Mat','riftinfo');
 
 %Qmu: the rest will be handle by qmumarshall
Index: /issm/trunk/src/m/classes/public/presolve.m
===================================================================
--- /issm/trunk/src/m/classes/public/presolve.m	(revision 1629)
+++ /issm/trunk/src/m/classes/public/presolve.m	(revision 1629)
@@ -0,0 +1,25 @@
+function md=presolve(md)
+%PRESOLVE - pre-solve phase operations.
+%
+%   Usage:
+%      md=presolve(md)
+
+%first, deal with rifts.
+
+md.numrifts=numel(md.rifts);
+
+numpairs=0;
+for i=1:md.numrifts,
+	numpairs=numpairs+size(md.rifts(i).penaltypairs,1);
+end
+
+md.riftinfo=zeros(numpairs,9); % 2 for grids + 2 for elements+ 2 for  normals + 1 for length + 1 for fill + 1 for friction.
+
+count=1;
+for i=1:md.numrifts,
+	numpairsforthisrift=size(md.rifts(i).penaltypairs,1);
+	md.riftinfo(count:count+numpairsforthisrift-1,1:7)=md.rifts(i).penaltypairs;
+	md.riftinfo(count:count+numpairsforthisrift-1,8)=md.rifts(i).fill;
+	md.riftinfo(count:count+numpairsforthisrift-1,9)=md.rifts(i).friction;
+	count=count+numpairsforthisrift;
+end
Index: /issm/trunk/src/m/classes/public/solve.m
===================================================================
--- /issm/trunk/src/m/classes/public/solve.m	(revision 1628)
+++ /issm/trunk/src/m/classes/public/solve.m	(revision 1629)
@@ -36,4 +36,7 @@
 	error(' '); %previous error messages should explain what is going on.
 end
+
+%preprocesses model before solving
+md=presolve(md);
 
 %if running qmu analysis, some preprocessing of dakota files using 
Index: /issm/trunk/src/m/solutions/cielo/diagnostic.m
===================================================================
--- /issm/trunk/src/m/solutions/cielo/diagnostic.m	(revision 1628)
+++ /issm/trunk/src/m/solutions/cielo/diagnostic.m	(revision 1629)
@@ -20,5 +20,5 @@
 	displaystring(md.debug,'\n%s',['reading diagnostic stokes model data']);
 	md.analysis_type='diagnostic'; md.sub_analysis_type='stokes'; models.ds=CreateFemModel(md);
-
+	
 	displaystring(md.debug,'\n%s',['reading diagnostic hutter model data']);
 	md.analysis_type='diagnostic'; md.sub_analysis_type='hutter'; models.dhu=CreateFemModel(md);
Index: /issm/trunk/src/mex/ModelProcessor/ModelProcessor.cpp
===================================================================
--- /issm/trunk/src/mex/ModelProcessor/ModelProcessor.cpp	(revision 1628)
+++ /issm/trunk/src/mex/ModelProcessor/ModelProcessor.cpp	(revision 1629)
@@ -33,4 +33,5 @@
 	/*Create elements, nodes and materials: */
 	CreateDataSets(&elements,&nodes,&materials,&constraints, &loads, &parameters, model,MODEL);
+	
 	/*Write output data: */
 	WriteData(ELEMENTS,elements,0,0,"DataSet",NULL);
