Index: /issm/trunk/src/c/objects/Model.cpp
===================================================================
--- /issm/trunk/src/c/objects/Model.cpp	(revision 1885)
+++ /issm/trunk/src/c/objects/Model.cpp	(revision 1886)
@@ -123,4 +123,81 @@
 }
 
+#undef __FUNCT__
+#define __FUNCT__ "Model::AddFormulation"
+void  Model::AddFormulation(ConstDataHandle MODEL, int analysis_type){
+
+	/*FemModel: */
+	FemModel*           femmodel=NULL;
+	DataSet*            elements=NULL;
+	DataSet*            nodes=NULL;
+	DataSet*            constraints=NULL;
+	DataSet*            loads=NULL;
+	DataSet*            materials=NULL;
+	DataSet*            parameters=NULL;
+	Vec                 partition=NULL;
+	Vec                 tpartition=NULL;
+	Vec                 yg=NULL;
+	Mat                 Rmg=NULL;
+	Mat                 Gmn=NULL;
+	NodeSets*           nodesets=NULL;
+	Vec                 ys=NULL;
+	Vec                 ys0=NULL;
+
+	/*intermediary: */
+	IoModel* iomodel=NULL;
+	int sub_analysis_type;
+	
+	_printf_("   fill model with matlab workspace data\n");
+	IoModelInit(&iomodel,MODEL); 
+
+	_printf_("   specifying analysis\n");
+	if (analysis_type!=0){
+		iomodel->analysis_type=analysis_type;
+	}
+	/*sub_analysis_type should default to none, as it was not specified: */
+	sub_analysis_type=NoneAnalysisEnum();
+	
+	if (sub_analysis_type!=0){
+		iomodel->sub_analysis_type=sub_analysis_type;
+	}
+
+	_printf_("   create datasets:\n");
+	CreateDataSets(&elements,&nodes,&materials,&constraints,&loads,&parameters,iomodel,MODEL);
+
+	_printf_("   create degrees of freedom: \n");
+	Dofx( &partition,&tpartition,elements,nodes, parameters);
+	
+	_printf_("   create single point constraints: \n");
+	SpcNodesx( &yg, nodes,constraints); 
+	
+	_printf_("   create rigid body constraints:\n");
+	MpcNodesx( &Rmg, nodes,constraints); 
+	
+	_printf_("   create node sets:\n");
+	BuildNodeSetsx(&nodesets, nodes);
+
+	_printf_("   reducing single point constraints vector:\n");
+	Reducevectorgtosx(&ys,&ys0, yg,nodesets);
+	
+	_printf_("   normalizing rigid body constraints matrix:\n");
+	NormalizeConstraintsx(&Gmn, Rmg,nodesets);
+
+	_printf_("   configuring element and loads:\n");
+	ConfigureObjectsx(elements, loads, nodes, materials);
+
+	_printf_("   process parameters:\n");
+	ProcessParamsx( parameters, partition);
+
+	_printf_("   free ressources:\n");
+	DeleteIoModel(&iomodel);
+
+	/*Use all the data created to create an femmodel: */
+	femmodel=new FemModel(elements,nodes,constraints,loads,materials,parameters,
+			              partition,tpartition,yg,Rmg,Gmn,nodesets,ys,ys0);
+
+	/*Add to femmodels in model: */
+	femmodels->AddObject((Object*)femmodel);
+
+}
 
 #undef __FUNCT__
Index: /issm/trunk/src/c/objects/Model.h
===================================================================
--- /issm/trunk/src/c/objects/Model.h	(revision 1885)
+++ /issm/trunk/src/c/objects/Model.h	(revision 1886)
@@ -30,4 +30,5 @@
 
 		void  AddFormulation(ConstDataHandle MODEL, int analysis_type,int sub_analysis_type);
+		void  AddFormulation(ConstDataHandle MODEL, int analysis_type);
 
 		/*all overloaded forms of the FindParam routine: */
Index: /issm/trunk/src/c/parallel/control.cpp
===================================================================
--- /issm/trunk/src/c/parallel/control.cpp	(revision 1885)
+++ /issm/trunk/src/c/parallel/control.cpp	(revision 1886)
@@ -83,5 +83,5 @@
 	
 	_printf_("\n   reading surface and bed slope computation model data:\n");
-	model->AddFormulation(fid,SlopeComputeAnalysisEnum(),NoneAnalysisEnum());
+	model->AddFormulation(fid,SlopeComputeAnalysisEnum());
 
 	_printf_("initialize inputs:\n");
Index: /issm/trunk/src/c/parallel/diagnostic.cpp
===================================================================
--- /issm/trunk/src/c/parallel/diagnostic.cpp	(revision 1885)
+++ /issm/trunk/src/c/parallel/diagnostic.cpp	(revision 1886)
@@ -76,9 +76,10 @@
 	
 	_printf_("\n   reading surface and bed slope computation model data:\n");
-	model->AddFormulation(fid,SlopeComputeAnalysisEnum(),NoneAnalysisEnum());
+	model->AddFormulation(fid,SlopeComputeAnalysisEnum());
 
 	_printf_("initialize inputs:\n");
 	model->FindParam(&u_g_initial,"u_g",DiagnosticAnalysisEnum(),HorizAnalysisEnum());
 	model->FindParam(&numberofnodes,"numberofnodes");
+	model->FindParam(&qmu_analysis,"qmu_analysis");
 
 	inputs=new ParameterInputs;
@@ -89,6 +90,4 @@
 
 	/*are we running the solution sequence, or a qmu wrapper around it? : */
-	model->FindParam(&qmu_analysis,"qmu_analysis");
-	
 	if(!qmu_analysis){
 
Index: /issm/trunk/src/c/parallel/diagnostic_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/diagnostic_core.cpp	(revision 1885)
+++ /issm/trunk/src/c/parallel/diagnostic_core.cpp	(revision 1886)
@@ -73,5 +73,5 @@
 	fem_ds=model->GetFormulation(DiagnosticAnalysisEnum(),StokesAnalysisEnum());
 	fem_dhu=model->GetFormulation(DiagnosticAnalysisEnum(),HutterAnalysisEnum());
-	fem_sl=model->GetFormulation(SlopeComputeAnalysisEnum(),NoneAnalysisEnum());
+	fem_sl=model->GetFormulation(SlopeComputeAnalysisEnum());
 
 	//specific parameters for specific models
Index: /issm/trunk/src/c/parallel/prognostic.cpp
===================================================================
--- /issm/trunk/src/c/parallel/prognostic.cpp	(revision 1885)
+++ /issm/trunk/src/c/parallel/prognostic.cpp	(revision 1886)
@@ -72,5 +72,5 @@
 
 	_printf_("read and create finite element model:\n");
-	model->AddFormulation(fid,PrognosticAnalysisEnum(),NoneAnalysisEnum());
+	model->AddFormulation(fid,PrognosticAnalysisEnum());
 
 	//retrieve parameters used to fill inputs
Index: /issm/trunk/src/c/parallel/steadystate.cpp
===================================================================
--- /issm/trunk/src/c/parallel/steadystate.cpp	(revision 1885)
+++ /issm/trunk/src/c/parallel/steadystate.cpp	(revision 1886)
@@ -82,5 +82,5 @@
 	
 	_printf_("\n   reading surface and bed slope computation model data:\n");
-	model->AddFormulation(fid,SlopeComputeAnalysisEnum(),NoneAnalysisEnum());
+	model->AddFormulation(fid,SlopeComputeAnalysisEnum());
 
 	_printf_("\n   read and create thermal finite element model:\n");
Index: /issm/trunk/src/c/parallel/transient.cpp
===================================================================
--- /issm/trunk/src/c/parallel/transient.cpp	(revision 1885)
+++ /issm/trunk/src/c/parallel/transient.cpp	(revision 1886)
@@ -85,8 +85,8 @@
 	
 	_printf_("\n   reading surface and bed slope computation model data:\n");
-	model->AddFormulation(fid,SlopeComputeAnalysisEnum(),NoneAnalysisEnum());
+	model->AddFormulation(fid,SlopeComputeAnalysisEnum());
 
 	_printf_("\n   reading prognositc model data:\n");
-	model->AddFormulation(fid,PrognosticAnalysisEnum(),NoneAnalysisEnum());
+	model->AddFormulation(fid,PrognosticAnalysisEnum());
 	
 	/*Do we run in 3d?, in which case we need thermal and melting also:*/
