Index: /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h
===================================================================
--- /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h	(revision 4027)
+++ /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h	(revision 4028)
@@ -21,4 +21,5 @@
 	/*}}}*/
 	/*Analysis types {{{1 */
+	SolutionTypeEnum,
 	AnalysisEnum,
 	AnalysisTypeEnum,
Index: /issm/trunk/src/c/modules/ModelProcessorx/CreateDataSets.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 4027)
+++ /issm/trunk/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 4028)
@@ -16,5 +16,5 @@
 
 
-void CreateDataSets(DataSet** pelements,DataSet** pnodes, DataSet** pvertices, DataSet** pmaterials, DataSet** pconstraints, DataSet** ploads,Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_type,int nummodels,int analysis_counter){
+void CreateDataSets(DataSet** pelements,DataSet** pnodes, DataSet** pvertices, DataSet** pmaterials, DataSet** pconstraints, DataSet** ploads,Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle,int solution_type,int analysis_type,int nummodels,int analysis_counter){
 
 	bool continuous=true;
@@ -116,5 +116,5 @@
 	
 	/*Generate objects that are not dependent on any analysis_type: */
-	CreateParameters(pparameters,iomodel,iomodel_handle,analysis_type);
+	CreateParameters(pparameters,iomodel,iomodel_handle,solution_type,analysis_type);
 
 	/*Sort datasets: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 4027)
+++ /issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 4028)
@@ -12,5 +12,5 @@
 #include "./ModelProcessorx.h"
 
-void CreateParameters(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_type){
+void CreateParameters(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle,int solution_type,int analysis_type){
 	
 	int i;
@@ -31,15 +31,16 @@
 	parameters = new Parameters(ParametersEnum);
 
+	parameters->AddObject(new    IntParam(SolutionTypeEnum,solution_type));
 	if (iomodel->dim==2) parameters->AddObject(new IntParam(DimEnum,2));
 	else parameters->AddObject(new IntParam(DimEnum,3));
 	parameters->AddObject(new StringParam(OutputFileNameEnum,iomodel->outputfilename));
-	parameters->AddObject(new   BoolParam(IsHutterEnum,iomodel->ishutter));
-	parameters->AddObject(new   BoolParam(IsMacAyealPattynEnum,iomodel->ismacayealpattyn));
-	parameters->AddObject(new   BoolParam(IsStokesEnum,iomodel->isstokes));
-	parameters->AddObject(new    IntParam(VerboseEnum,iomodel->verbose));
+	parameters->AddObject(new BoolParam(IsHutterEnum,iomodel->ishutter));
+	parameters->AddObject(new BoolParam(IsMacAyealPattynEnum,iomodel->ismacayealpattyn));
+	parameters->AddObject(new BoolParam(IsStokesEnum,iomodel->isstokes));
+	parameters->AddObject(new IntParam(VerboseEnum,iomodel->verbose));
 	parameters->AddObject(new DoubleParam(EpsResEnum,iomodel->eps_res));
 	parameters->AddObject(new DoubleParam(EpsRelEnum,iomodel->eps_rel));
 	parameters->AddObject(new DoubleParam(EpsAbsEnum,iomodel->eps_abs));
-	parameters->AddObject(new    IntParam(MaxNonlinearIterationsEnum,iomodel->max_nonlinear_iterations));
+	parameters->AddObject(new IntParam(MaxNonlinearIterationsEnum,iomodel->max_nonlinear_iterations));
 	parameters->AddObject(new DoubleParam(EpsVelEnum,iomodel->epsvel));
 	parameters->AddObject(new DoubleParam(YtsEnum,iomodel->yts));
@@ -48,20 +49,20 @@
 	parameters->AddObject(new DoubleParam(PenaltyOffsetEnum,iomodel->penalty_offset));
 	parameters->AddObject(new DoubleParam(SparsityEnum,iomodel->sparsity));
-	parameters->AddObject(new   BoolParam(LowmemEnum,iomodel->lowmem));
-	parameters->AddObject(new    IntParam(ConnectivityEnum,iomodel->connectivity));
+	parameters->AddObject(new BoolParam(LowmemEnum,iomodel->lowmem));
+	parameters->AddObject(new IntParam(ConnectivityEnum,iomodel->connectivity));
 	parameters->AddObject(new DoubleParam(BetaEnum,iomodel->beta));
 	parameters->AddObject(new DoubleParam(MeltingPointEnum,iomodel->meltingpoint));
 	parameters->AddObject(new DoubleParam(LatentHeatEnum,iomodel->latentheat));
 	parameters->AddObject(new DoubleParam(HeatCapacityEnum,iomodel->heatcapacity));
-	parameters->AddObject(new   BoolParam(ArtDiffEnum,iomodel->artdiff));
+	parameters->AddObject(new BoolParam(ArtDiffEnum,iomodel->artdiff));
 	parameters->AddObject(new DoubleParam(PenaltyMeltingEnum,iomodel->penalty_melting));
-	parameters->AddObject(new    IntParam(MinThermalConstraintsEnum,iomodel->min_thermal_constraints));
-	parameters->AddObject(new    IntParam(StabilizeConstraintsEnum,iomodel->stabilize_constraints));
+	parameters->AddObject(new IntParam(MinThermalConstraintsEnum,iomodel->min_thermal_constraints));
+	parameters->AddObject(new IntParam(StabilizeConstraintsEnum,iomodel->stabilize_constraints));
 	parameters->AddObject(new DoubleParam(StokesReconditioningEnum,iomodel->stokesreconditioning));
 	parameters->AddObject(new DoubleParam(ViscosityOvershootEnum,iomodel->viscosity_overshoot));
-	parameters->AddObject(new   BoolParam(WaitOnLockEnum,iomodel->waitonlock));
+	parameters->AddObject(new BoolParam(WaitOnLockEnum,iomodel->waitonlock));
 	parameters->AddObject(new StringParam(SolverStringEnum,iomodel->solverstring));
-	parameters->AddObject(new    IntParam(NumberOfVerticesEnum,iomodel->numberofvertices));
-	parameters->AddObject(new    IntParam(NumberOfElementsEnum,iomodel->numberofelements));
+	parameters->AddObject(new IntParam(NumberOfVerticesEnum,iomodel->numberofvertices));
+	parameters->AddObject(new IntParam(NumberOfElementsEnum,iomodel->numberofelements));
 
 	/*Deal with more complex parameters*/
@@ -74,11 +75,11 @@
 
 	DistributeNumDofs(&numberofdofspernode,analysis_type);
-	parameters->AddObject(new    IntParam(NumberOfDofsPerNodeEnum,numberofdofspernode));
+	parameters->AddObject(new IntParam(NumberOfDofsPerNodeEnum,numberofdofspernode));
 
 	IoModelFetchData(&iomodel->riftinfo,&iomodel->numrifts,NULL,iomodel_handle,"riftinfo");
-	parameters->AddObject(new    IntParam(NumRiftsEnum,iomodel->numrifts));
+	parameters->AddObject(new IntParam(NumRiftsEnum,iomodel->numrifts));
 	xfree((void**)&iomodel->riftinfo); 
 
-	parameters->AddObject(new    IntParam(NumOutputEnum,iomodel->numoutput));
+	parameters->AddObject(new IntParam(NumOutputEnum,iomodel->numoutput));
 	if(iomodel->numoutput){
 		parameteroutput=(char**)xmalloc(iomodel->numoutput*sizeof(char*));
Index: /issm/trunk/src/c/modules/ModelProcessorx/ModelProcessorx.h
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 4027)
+++ /issm/trunk/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 4028)
@@ -14,7 +14,7 @@
 
 /*Creation of fem datasets: general drivers*/
-void  CreateDataSets(DataSet** pelements,DataSet** pnodes,DataSet** pvertices, DataSet** pmaterials, DataSet** pconstraints, DataSet** ploads,Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_type,int nummodels,int analysis_counter);
+void  CreateDataSets(DataSet** pelements,DataSet** pnodes,DataSet** pvertices, DataSet** pmaterials, DataSet** pconstraints, DataSet** ploads,Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle,int solution_type,int analysis_type,int nummodels,int analysis_counter);
 void  CreateElementsVerticesAndMaterials(DataSet** pelements,DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle,int nummodels);
-void  CreateParameters(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_type);
+void  CreateParameters(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle,int solution_type,int analysis_type);
 void  CreateParametersControl(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_type);
 void  CreateParametersQmu(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_type);
Index: /issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 4027)
+++ /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 4028)
@@ -880,6 +880,7 @@
 void  Tria::CreateKMatrix(Mat Kgg,int analysis_type,int sub_analysis_type){
 
-	/*if debugging mode, check that all pointers exist*/
+	/*asserts: {{{2*/
 	ISSMASSERT(this->nodes && this->matice && this->matpar && this->parameters && this->inputs);
+	/*}}}*/
 
 	/*Just branch to the correct element stiffness matrix generator, according to the type of analysis we are carrying out: */
Index: /issm/trunk/src/c/objects/FemModel.cpp
===================================================================
--- /issm/trunk/src/c/objects/FemModel.cpp	(revision 4027)
+++ /issm/trunk/src/c/objects/FemModel.cpp	(revision 4028)
@@ -20,5 +20,5 @@
 /*Object constructors and destructor*/
 /*FUNCTION FemModel::constructor {{{1*/
-FemModel::FemModel(ConstDataHandle IOMODEL,int* analyses, int nummodels){
+FemModel::FemModel(ConstDataHandle IOMODEL,int in_solution_type,int* analyses, int nummodels){
 
 	/*intermediary*/
@@ -27,5 +27,7 @@
 	int analysis_type;
 
+	/*Initialize internal data: */
 	this->nummodels=nummodels;
+	this->solution_type=in_solution_type;
 	analysis_counter=nummodels-1; //point to last analysis_type carried out.
 	
@@ -54,5 +56,5 @@
 	
 		_printf_("   create datasets:\n");
-		CreateDataSets(&elements,&nodes,&vertices,&materials,&constraints,&loads,&parameters,iomodel,IOMODEL,analysis_type,nummodels,i);
+		CreateDataSets(&elements,&nodes,&vertices,&materials,&constraints,&loads,&parameters,iomodel,IOMODEL,solution_type,analysis_type,nummodels,i);
 
 		_printf_("   create degrees of freedom: \n");
Index: /issm/trunk/src/c/objects/FemModel.h
===================================================================
--- /issm/trunk/src/c/objects/FemModel.h	(revision 4027)
+++ /issm/trunk/src/c/objects/FemModel.h	(revision 4028)
@@ -24,4 +24,5 @@
 
 		int                 nummodels;
+		int                 solution_type;
 		int*                analysis_type_list; //list of analyses this femmodel is going to carry out
 		int                 analysis_counter; //counter into analysis_type_list
@@ -46,5 +47,5 @@
 
 		/*constructors, destructors: */
-		FemModel(ConstDataHandle IOMODEL,int* analyses, int nummodels);
+		FemModel(ConstDataHandle IOMODEL,int solution_type,int* analyses, int nummodels);
 		~FemModel();
 
Index: /issm/trunk/src/c/solutions/diagnostic.cpp
===================================================================
--- /issm/trunk/src/c/solutions/diagnostic.cpp	(revision 4027)
+++ /issm/trunk/src/c/solutions/diagnostic.cpp	(revision 4028)
@@ -39,4 +39,5 @@
 
 	int analyses[5]={DiagnosticHorizAnalysisEnum,DiagnosticVertAnalysisEnum,DiagnosticStokesAnalysisEnum,DiagnosticHutterAnalysisEnum,SlopeComputeAnalysisEnum};
+	int solution_type=DiagnosticAnalysisEnum;
 
 	MODULEBOOT();
@@ -66,5 +67,5 @@
 
 	_printf_("create finite element model, using analyses types statically defined above:\n");
-	femmodel=new FemModel(fid,analyses,5);
+	femmodel=new FemModel(fid,solution_type,analyses,5);
 	
 	/*get parameters: */
Index: /issm/trunk/src/c/solutions/diagnostic_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/diagnostic_core.cpp	(revision 4027)
+++ /issm/trunk/src/c/solutions/diagnostic_core.cpp	(revision 4028)
@@ -72,8 +72,8 @@
 
 			//"recondition" pressure computed previously:
-			DuplicateInputx(femmodel,PressureEnum,PressureStokesEnum); ScaleInputx(femmmodel,PressureStokesEnum,1.0/stokesreconditioning);
+			DuplicateInputx(femmodel,PressureEnum,PressureStokesEnum); 
+			ScaleInputx(femmmodel,PressureStokesEnum,1.0/stokesreconditioning);
 
 			if(verbose)_printf_("%s\n"," update boundary conditions for stokes using velocities previously computed...");
-			GetSolutionFromInputsx( &ug, femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials,  femmodel->parameters, DiagnosticAnalysisEnum,StokesAnalysisEnum);
 			ResetBoundaryConditions(femmodel,DiagnosticAnalysisEnum,StokesAnalysisEnum);
 
Index: /issm/trunk/src/m/solutions/jpl/CreateFemModel.m
===================================================================
--- /issm/trunk/src/m/solutions/jpl/CreateFemModel.m	(revision 4027)
+++ /issm/trunk/src/m/solutions/jpl/CreateFemModel.m	(revision 4028)
@@ -6,10 +6,10 @@
 %-----------------------------------------------------------------------
 
-function  m=CreateFEMModel(md,analyses)
+function  m=CreateFEMModel(md,solution_type,analysis_types)
 	
 	displaystring(md.verbose,'\n   reading data from model %s...',md.name);
-	[m.elements,m.nodes,m.vertices,m.constraints,m.loads,m.materials,m.parameters]=ModelProcessor(md,analyses);
+	[m.elements,m.nodes,m.vertices,m.constraints,m.loads,m.materials,m.parameters]=ModelProcessor(md,solution_type,analysis_types);
 
-	for i=1:length(analyses),
+	for i=1:length(analysis_types),
 
 		displaystring(md.verbose,'%s','   generating degrees of freedom...');
@@ -18,11 +18,11 @@
 
 		displaystring(md.verbose,'%s','   generating single point constraints...');
-		[m.nodes,m.yg(i)]=SpcNodes(m.nodes,m.constraints,analyses[i]);
+		[m.nodes,m.yg(i)]=SpcNodes(m.nodes,m.constraints,analysis_types[i]);
 
 		displaystring(md.verbose,'%s','   generating rigid body constraints...');
-		[m.Rmg(i),m.nodes]=MpcNodes(m.nodes,m.constraints,analyses[i]);
+		[m.Rmg(i),m.nodes]=MpcNodes(m.nodes,m.constraints,analysis_types[i]);
 
 		displaystring(md.verbose,'%s','   generating node sets...');
-		m.nodesets(i)=BuildNodeSets(m.nodes,analyses[i]);
+		m.nodesets(i)=BuildNodeSets(m.nodes,analysis_types[i]);
 
 		displaystring(md.verbose,'%s','   reducing single point constraints vector...');
Index: /issm/trunk/src/m/solutions/jpl/diagnostic.m
===================================================================
--- /issm/trunk/src/m/solutions/jpl/diagnostic.m	(revision 4027)
+++ /issm/trunk/src/m/solutions/jpl/diagnostic.m	(revision 4028)
@@ -8,8 +8,9 @@
 	t1=clock;
 
-	analyses=[DiagnosticHorizAnalysisEnum,DiagnosticVertAnalysisEnum,DiagnosticStokesAnalysisEnum,DiagnosticHutterAnalysisEnum,SlopecomputeAnalysisEnum];
+	solution_type=DiagnosticAnalysisEnum;
+	analysis_types=[DiagnosticHorizAnalysisEnum,DiagnosticVertAnalysisEnum,DiagnosticStokesAnalysisEnum,DiagnosticHutterAnalysisEnum,SlopecomputeAnalysisEnum];
 
 	displaystring(md.verbose,'%s',['create fem model']);
-	femmodel=CreateFemModel(md,analyses);
+	femmodel=CreateFemModel(md,solution_type,analysis_types);
 
 	%compute solution
