Index: /issm/trunk/src/c/ModelProcessorx/BedSlopeCompute/CreateConstraintsBedSlopeCompute.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/BedSlopeCompute/CreateConstraintsBedSlopeCompute.cpp	(revision 300)
+++ /issm/trunk/src/c/ModelProcessorx/BedSlopeCompute/CreateConstraintsBedSlopeCompute.cpp	(revision 300)
@@ -0,0 +1,31 @@
+/*
+ * CreateConstraintsBedSlopeCompute.c:
+ */
+
+#undef __FUNCT__ 
+#define __FUNCT__ "CreateConstraintsBedSlopeCompute"
+
+#include "../../DataSet/DataSet.h"
+#include "../../toolkits/toolkits.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+#include "../../objects/objects.h"
+#include "../../shared/shared.h"
+#include "../Model.h"
+
+
+void	CreateConstraintsBedSlopeCompute(DataSet** pconstraints, Model* model,ConstDataHandle model_handle){
+
+
+	DataSet* constraints = NULL;
+
+	/*Create constraints: */
+	constraints = new DataSet(ConstraintsEnum());
+
+	/*Now, is the flag isstokes on? otherwise, do nothing: */
+	if (!model->isstokes)goto cleanup_and_return;
+	
+	cleanup_and_return:	
+	
+	/*Assign output pointer: */
+	*pconstraints=constraints;
+}
Index: /issm/trunk/src/c/ModelProcessorx/BedSlopeCompute/CreateElementsNodesAndMaterialsBedSlopeCompute.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/BedSlopeCompute/CreateElementsNodesAndMaterialsBedSlopeCompute.cpp	(revision 300)
+++ /issm/trunk/src/c/ModelProcessorx/BedSlopeCompute/CreateElementsNodesAndMaterialsBedSlopeCompute.cpp	(revision 300)
@@ -0,0 +1,39 @@
+/*
+ * CreateElementsNodesAndMaterialsBedSlopeCompute.c:
+ */
+
+#undef __FUNCT__ 
+#define __FUNCT__ "CreateElementsNodesAndMaterialsBedSlopeCompute"
+
+#include "../../DataSet/DataSet.h"
+#include "../../toolkits/toolkits.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+#include "../../objects/objects.h"
+#include "../../shared/shared.h"
+#include "../../MeshPartitionx/MeshPartitionx.h"
+#include "../Model.h"
+
+
+void	CreateElementsNodesAndMaterialsBedSlopeCompute(DataSet** pelements,DataSet** pnodes, DataSet** pmaterials, Model* model,ConstDataHandle model_handle){
+
+
+	/*DataSets: */
+	DataSet*    elements  = NULL;
+	DataSet*    nodes = NULL;
+	DataSet*    materials = NULL;
+	
+	/*First create the elements, nodes and material properties: */
+	elements  = new DataSet(ElementsEnum());
+	nodes     = new DataSet(NodesEnum());
+	materials = new DataSet(MaterialsEnum());
+
+	/*Now, is the flag isstokes on? otherwise, do nothing: */
+	if (!model->isstokes)goto cleanup_and_return;
+
+	cleanup_and_return:
+
+	/*Assign output pointer: */
+	*pelements=elements;
+	*pnodes=nodes;
+	*pmaterials=materials;
+}
Index: /issm/trunk/src/c/ModelProcessorx/BedSlopeCompute/CreateLoadsBedSlopeCompute.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/BedSlopeCompute/CreateLoadsBedSlopeCompute.cpp	(revision 300)
+++ /issm/trunk/src/c/ModelProcessorx/BedSlopeCompute/CreateLoadsBedSlopeCompute.cpp	(revision 300)
@@ -0,0 +1,33 @@
+/*! \file CreateLoadsBedSlopeCompute.c:
+ */
+
+#undef __FUNCT__ 
+#define __FUNCT__ "CreateLoadsBedSlopeCompute"
+
+#include "../../DataSet/DataSet.h"
+#include "../../toolkits/toolkits.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+#include "../../objects/objects.h"
+#include "../../shared/shared.h"
+#include "../../include/macros.h"
+#include "../Model.h"
+
+
+void	CreateLoadsBedSlopeCompute(DataSet** ploads, Model* model,ConstDataHandle model_handle){
+
+	DataSet*    loads    = NULL;
+
+	/*Create loads: */
+	loads   = new DataSet(LoadsEnum());
+
+	/*Now, is the flag isstokes on? otherwise, do nothing: */
+	if (!model->isstokes)goto cleanup_and_return;
+
+	cleanup_and_return:
+	
+	/*Assign output pointer: */
+	*ploads=loads;
+
+}
+
+
Index: /issm/trunk/src/c/ModelProcessorx/CreateConstraints.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/CreateConstraints.cpp	(revision 299)
+++ /issm/trunk/src/c/ModelProcessorx/CreateConstraints.cpp	(revision 300)
@@ -23,5 +23,18 @@
 	else if (strcmp(model->analysis_type,"diagnostic_vert")==0){
 		CreateConstraintsDiagnosticVert(pconstraints,model,model_handle);
-	}/*
+	}
+	else if (strcmp(model->analysis_type,"diagnostic_stokes")==0){
+		CreateConstraintsDiagnosticStokes(pconstraints,model,model_handle);
+	}
+	else if (strcmp(model->analysis_type,"diagnostic_hutter")==0){
+		CreateConstraintsDiagnosticHutter(pconstraints,model,model_handle);
+	}
+	else if (strcmp(model->analysis_type,"surface_slope_compute")==0){
+		CreateConstraintsSurfaceSlopeCompute(pconstraints,model,model_handle);
+	}
+	else if (strcmp(model->analysis_type,"bed_slope_compute")==0){
+		CreateConstraintsBedSlopeCompute(pconstraints,model,model_handle);
+	}
+	/*
 	else if (strcmp(model->analysis_type,"melting")==0){
 		CreateConstraintsMelting(pconstraints,model,model_handle);
Index: /issm/trunk/src/c/ModelProcessorx/CreateElementsNodesAndMaterials.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/CreateElementsNodesAndMaterials.cpp	(revision 299)
+++ /issm/trunk/src/c/ModelProcessorx/CreateElementsNodesAndMaterials.cpp	(revision 300)
@@ -29,4 +29,24 @@
 	
 	}
+	else if ((strcmp(model->analysis_type,"diagnostic_stokes")==0)){
+
+		CreateElementsNodesAndMaterialsDiagnosticStokes(pelements,pnodes,pmaterials, model,model_handle);
+	
+	}
+	else if ((strcmp(model->analysis_type,"diagnostic_hutter")==0)){
+
+		CreateElementsNodesAndMaterialsDiagnosticHutter(pelements,pnodes,pmaterials, model,model_handle);
+	
+	}
+	else if ((strcmp(model->analysis_type,"surface_slope_compute")==0)){
+
+		CreateElementsNodesAndMaterialsSurfaceSlopeCompute(pelements,pnodes,pmaterials, model,model_handle);
+	
+	}
+	else if ((strcmp(model->analysis_type,"bed_slope_compute")==0)){
+
+		CreateElementsNodesAndMaterialsBedSlopeCompute(pelements,pnodes,pmaterials, model,model_handle);
+	
+	}
 	/*
 	else if (strcmp(model->analysis_type,"melting")==0){
Index: /issm/trunk/src/c/ModelProcessorx/CreateLoads.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/CreateLoads.cpp	(revision 299)
+++ /issm/trunk/src/c/ModelProcessorx/CreateLoads.cpp	(revision 300)
@@ -25,5 +25,22 @@
 
 		CreateLoadsDiagnosticVert(ploads,model,model_handle);
-	}/*
+	}
+	else if (strcmp(model->analysis_type,"diagnostic_stokes")==0){
+
+		CreateLoadsDiagnosticStokes(ploads,model,model_handle);
+	}
+	else if (strcmp(model->analysis_type,"diagnostic_hutter")==0){
+
+		CreateLoadsDiagnosticHutter(ploads,model,model_handle);
+	}
+	else if (strcmp(model->analysis_type,"surface_slope_compute")==0){
+
+		CreateLoadsSurfaceSlopeCompute(ploads,model,model_handle);
+	}
+	else if (strcmp(model->analysis_type,"bed_slope_compute")==0){
+
+		CreateLoadsBedSlopeCompute(ploads,model,model_handle);
+	}
+	/*
 	else if (strcmp(model->analysis_type,"melting")==0){
 
Index: /issm/trunk/src/c/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/CreateParameters.cpp	(revision 299)
+++ /issm/trunk/src/c/ModelProcessorx/CreateParameters.cpp	(revision 300)
@@ -22,13 +22,6 @@
 	int      analysis_type;
 	int      numberofdofspernode;
-
-	double* fit=NULL;
-	double* optscal=NULL;
-	double* maxiter=NULL; 
-	double* control_parameter=NULL;
-	double* vx=NULL;
-	double* vy=NULL;
-	double* vz=NULL;
-	
+	int      dim;
+
 	/*Initialize dataset: */
 	parameters   = new DataSet(ParametersEnum());
@@ -42,5 +35,30 @@
 	parameters->AddObject(param);
 
-	
+	//dimension 2d or 3d:
+	if (strcmp(model->meshtype,"2d")==0)dim=2;
+	else dim=3;
+
+	count++;
+	param= new Param(count,"dim",INTEGER);
+	param->SetInteger(dim);
+	parameters->AddObject(param);
+
+	//elements types
+	count++;
+	param= new Param(count,"ishutter",INTEGER);
+	param->SetInteger(model->ishutter);
+	parameters->AddObject(param);
+
+	count++;
+	param= new Param(count,"ismacayealpattyn",INTEGER);
+	param->SetInteger(model->ismacayealpattyn);
+	parameters->AddObject(param);
+
+
+	count++;
+	param= new Param(count,"isstokes",INTEGER);
+	param->SetInteger(model->isstokes);
+	parameters->AddObject(param);
+
 	/*debug: */
 	param= new Param(count,"debug",INTEGER);
@@ -174,37 +192,9 @@
 		CreateParametersControl(parameters,model,model_handle,&count);
 	}
-
-	/*Diagnostic: */
-	/*Get vx and vy: */
-	ModelFetchData((void**)&vx,NULL,NULL,model_handle,"vx","Matrix","Mat");
-	ModelFetchData((void**)&vy,NULL,NULL,model_handle,"vy","Matrix","Mat");
-	ModelFetchData((void**)&vz,NULL,NULL,model_handle,"vz","Matrix","Mat");
-
-	if(vx) for(i=0;i<model->numberofnodes;i++)vx[i]=vx[i]/model->yts;
-	if(vy) for(i=0;i<model->numberofnodes;i++)vy[i]=vy[i]/model->yts;
-	if(vz) for(i=0;i<model->numberofnodes;i++)vz[i]=vz[i]/model->yts;
-
-	count++;
-	param= new Param(count,"vx",DOUBLEVEC);
-	if(vx) param->SetDoubleVec(vx,model->numberofnodes);
-	else param->SetDoubleVec(vx,0);
-	parameters->AddObject(param);
-
-	count++;
-	param= new Param(count,"vy",DOUBLEVEC);
-	if(vy) param->SetDoubleVec(vy,model->numberofnodes);
-	else param->SetDoubleVec(vy,0);
-	parameters->AddObject(param);
-
-	count++;
-	param= new Param(count,"vz",DOUBLEVEC);
-	if(vz) param->SetDoubleVec(vz,model->numberofnodes);
-	else param->SetDoubleVec(vz,0);
-	parameters->AddObject(param);
-
-	xfree((void**)&vx);
-	xfree((void**)&vy);
-	xfree((void**)&vz);
-
+	if (analysis_type==DiagnosticHorizAnalysisEnum()){
+		CreateParametersDiagnosticHoriz(parameters,model,model_handle,&count);
+	}
+
+	
 	/*All our datasets are already ordered by ids. Set presort flag so that later on, when sorting is requested on these 
 	 * datasets, it will not be redone: */
Index: /issm/trunk/src/c/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 299)
+++ /issm/trunk/src/c/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 300)
@@ -34,4 +34,7 @@
 	/*Create constraints: */
 	constraints = new DataSet(ConstraintsEnum());
+
+	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
+	if (!model->ismacayealpattyn)goto cleanup_and_return;
 
 	/*Fetch data: */
@@ -80,8 +83,10 @@
 	constraints->Presort();
 
+	
+	cleanup_and_return:
 	/*Free data: */
 	xfree((void**)&gridondirichlet_diag);
 	xfree((void**)&dirichletvalues_diag);
-
+	
 	/*Assign output pointer: */
 	*pconstraints=constraints;
Index: /issm/trunk/src/c/ModelProcessorx/DiagnosticHoriz/CreateElementsNodesAndMaterialsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/DiagnosticHoriz/CreateElementsNodesAndMaterialsDiagnosticHoriz.cpp	(revision 299)
+++ /issm/trunk/src/c/ModelProcessorx/DiagnosticHoriz/CreateElementsNodesAndMaterialsDiagnosticHoriz.cpp	(revision 300)
@@ -150,6 +150,4 @@
 	int     grid_id;
 
-	/*Get analysis_type: */
-	analysis_type=AnalysisTypeAsEnum(model->analysis_type);
 
 	/*First create the elements, nodes and material properties: */
@@ -157,4 +155,10 @@
 	nodes     = new DataSet(NodesEnum());
 	materials = new DataSet(MaterialsEnum());
+
+	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
+	if (!model->ismacayealpattyn)goto cleanup_and_return;
+
+	/*Get analysis_type: */
+	analysis_type=AnalysisTypeAsEnum(model->analysis_type);
 
 	/*Width of elements: */
Index: /issm/trunk/src/c/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 299)
+++ /issm/trunk/src/c/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 300)
@@ -71,4 +71,7 @@
 	/*Create loads: */
 	loads   = new DataSet(LoadsEnum());
+
+	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
+	if (!model->ismacayealpattyn)goto cleanup_and_return;
 	
 	/*Create pressure loads as boundary conditions. Pay attention to the partitioning if we are running in parallel (the grids
@@ -262,4 +265,6 @@
 	loads->Presort();
 
+	cleanup_and_return:
+
 	/*Free ressources:*/
 	xfree((void**)&riftsnumpenaltypairs); 
Index: /issm/trunk/src/c/ModelProcessorx/DiagnosticHoriz/CreateParametersDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/DiagnosticHoriz/CreateParametersDiagnosticHoriz.cpp	(revision 300)
+++ /issm/trunk/src/c/ModelProcessorx/DiagnosticHoriz/CreateParametersDiagnosticHoriz.cpp	(revision 300)
@@ -0,0 +1,66 @@
+/*!\file: CreateParametersDiagnosticHoriz.cpp
+ * \brief driver for creating parameters dataset, for diagnostic horiz analysis.
+ */ 
+
+#undef __FUNCT__ 
+#define __FUNCT__ "CreateParametersDiagnosticHoriz"
+
+#include "../../DataSet/DataSet.h"
+#include "../../toolkits/toolkits.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+#include "../../objects/objects.h"
+#include "../../shared/shared.h"
+#include "../Model.h"
+
+void CreateParametersDiagnosticHoriz(DataSet* parameters,Model* model,ConstDataHandle model_handle,int* pcount){
+	
+	Param*   param = NULL;
+	int      count;
+	int i;
+
+	double* vx=NULL;
+	double* vy=NULL;
+	double* vz=NULL;
+
+	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
+	if (!model->ismacayealpattyn)return;
+
+	/*Get counter : */
+	count=*pcount;
+
+	/*Get vx and vy: */
+	ModelFetchData((void**)&vx,NULL,NULL,model_handle,"vx","Matrix","Mat");
+	ModelFetchData((void**)&vy,NULL,NULL,model_handle,"vy","Matrix","Mat");
+	ModelFetchData((void**)&vz,NULL,NULL,model_handle,"vz","Matrix","Mat");
+
+	if(vx) for(i=0;i<model->numberofnodes;i++)vx[i]=vx[i]/model->yts;
+	if(vy) for(i=0;i<model->numberofnodes;i++)vy[i]=vy[i]/model->yts;
+	if(vz) for(i=0;i<model->numberofnodes;i++)vz[i]=vz[i]/model->yts;
+
+	count++;
+	param= new Param(count,"vx",DOUBLEVEC);
+	if(vx) param->SetDoubleVec(vx,model->numberofnodes);
+	else param->SetDoubleVec(vx,0);
+	parameters->AddObject(param);
+
+	count++;
+	param= new Param(count,"vy",DOUBLEVEC);
+	if(vy) param->SetDoubleVec(vy,model->numberofnodes);
+	else param->SetDoubleVec(vy,0);
+	parameters->AddObject(param);
+
+	count++;
+	param= new Param(count,"vz",DOUBLEVEC);
+	if(vz) param->SetDoubleVec(vz,model->numberofnodes);
+	else param->SetDoubleVec(vz,0);
+	parameters->AddObject(param);
+
+	xfree((void**)&vx);
+	xfree((void**)&vy);
+	xfree((void**)&vz);
+	
+	/*Assign output pointer: */
+	*pcount=count;
+}
+
+	
Index: /issm/trunk/src/c/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 300)
+++ /issm/trunk/src/c/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 300)
@@ -0,0 +1,31 @@
+/*
+ * CreateConstraintsDiagnosticHutter.c:
+ */
+
+#undef __FUNCT__ 
+#define __FUNCT__ "CreateConstraintsDiagnosticHutter"
+
+#include "../../DataSet/DataSet.h"
+#include "../../toolkits/toolkits.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+#include "../../objects/objects.h"
+#include "../../shared/shared.h"
+#include "../Model.h"
+
+
+void	CreateConstraintsDiagnosticHutter(DataSet** pconstraints, Model* model,ConstDataHandle model_handle){
+
+
+	DataSet* constraints = NULL;
+
+	/*Create constraints: */
+	constraints = new DataSet(ConstraintsEnum());
+
+	/*Now, is the flag ishutter on? otherwise, do nothing: */
+	if (!model->ishutter)goto cleanup_and_return;
+	
+	cleanup_and_return:	
+	
+	/*Assign output pointer: */
+	*pconstraints=constraints;
+}
Index: /issm/trunk/src/c/ModelProcessorx/DiagnosticHutter/CreateElementsNodesAndMaterialsDiagnosticHutter.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/DiagnosticHutter/CreateElementsNodesAndMaterialsDiagnosticHutter.cpp	(revision 300)
+++ /issm/trunk/src/c/ModelProcessorx/DiagnosticHutter/CreateElementsNodesAndMaterialsDiagnosticHutter.cpp	(revision 300)
@@ -0,0 +1,39 @@
+/*
+ * CreateElementsNodesAndMaterialsDiagnosticHutter.c:
+ */
+
+#undef __FUNCT__ 
+#define __FUNCT__ "CreateElementsNodesAndMaterialsDiagnosticHutter"
+
+#include "../../DataSet/DataSet.h"
+#include "../../toolkits/toolkits.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+#include "../../objects/objects.h"
+#include "../../shared/shared.h"
+#include "../../MeshPartitionx/MeshPartitionx.h"
+#include "../Model.h"
+
+
+void	CreateElementsNodesAndMaterialsDiagnosticHutter(DataSet** pelements,DataSet** pnodes, DataSet** pmaterials, Model* model,ConstDataHandle model_handle){
+
+
+	/*DataSets: */
+	DataSet*    elements  = NULL;
+	DataSet*    nodes = NULL;
+	DataSet*    materials = NULL;
+	
+	/*First create the elements, nodes and material properties: */
+	elements  = new DataSet(ElementsEnum());
+	nodes     = new DataSet(NodesEnum());
+	materials = new DataSet(MaterialsEnum());
+
+	/*Now, is the flag ishutter on? otherwise, do nothing: */
+	if (!model->ishutter)goto cleanup_and_return;
+
+	cleanup_and_return:
+
+	/*Assign output pointer: */
+	*pelements=elements;
+	*pnodes=nodes;
+	*pmaterials=materials;
+}
Index: /issm/trunk/src/c/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp	(revision 300)
+++ /issm/trunk/src/c/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp	(revision 300)
@@ -0,0 +1,33 @@
+/*! \file CreateLoadsDiagnosticHutter.c:
+ */
+
+#undef __FUNCT__ 
+#define __FUNCT__ "CreateLoadsDiagnosticHutter"
+
+#include "../../DataSet/DataSet.h"
+#include "../../toolkits/toolkits.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+#include "../../objects/objects.h"
+#include "../../shared/shared.h"
+#include "../../include/macros.h"
+#include "../Model.h"
+
+
+void	CreateLoadsDiagnosticHutter(DataSet** ploads, Model* model,ConstDataHandle model_handle){
+
+	DataSet*    loads    = NULL;
+
+	/*Create loads: */
+	loads   = new DataSet(LoadsEnum());
+
+	/*Now, is the flag ishutter on? otherwise, do nothing: */
+	if (!model->ishutter)goto cleanup_and_return;
+
+	cleanup_and_return:
+	
+	/*Assign output pointer: */
+	*ploads=loads;
+
+}
+
+
Index: /issm/trunk/src/c/ModelProcessorx/DiagnosticStokes/CreateConstraintsDiagnosticStokes.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/DiagnosticStokes/CreateConstraintsDiagnosticStokes.cpp	(revision 300)
+++ /issm/trunk/src/c/ModelProcessorx/DiagnosticStokes/CreateConstraintsDiagnosticStokes.cpp	(revision 300)
@@ -0,0 +1,31 @@
+/*
+ * CreateConstraintsDiagnosticStokes.c:
+ */
+
+#undef __FUNCT__ 
+#define __FUNCT__ "CreateConstraintsDiagnosticStokes"
+
+#include "../../DataSet/DataSet.h"
+#include "../../toolkits/toolkits.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+#include "../../objects/objects.h"
+#include "../../shared/shared.h"
+#include "../Model.h"
+
+
+void	CreateConstraintsDiagnosticStokes(DataSet** pconstraints, Model* model,ConstDataHandle model_handle){
+
+
+	DataSet* constraints = NULL;
+
+	/*Create constraints: */
+	constraints = new DataSet(ConstraintsEnum());
+
+	/*Now, is the flag ishutter on? otherwise, do nothing: */
+	if (!model->isstokes)goto cleanup_and_return;
+	
+	cleanup_and_return:	
+	
+	/*Assign output pointer: */
+	*pconstraints=constraints;
+}
Index: /issm/trunk/src/c/ModelProcessorx/DiagnosticStokes/CreateElementsNodesAndMaterialsDiagnosticStokes.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/DiagnosticStokes/CreateElementsNodesAndMaterialsDiagnosticStokes.cpp	(revision 300)
+++ /issm/trunk/src/c/ModelProcessorx/DiagnosticStokes/CreateElementsNodesAndMaterialsDiagnosticStokes.cpp	(revision 300)
@@ -0,0 +1,39 @@
+/*
+ * CreateElementsNodesAndMaterialsDiagnosticStokes.c:
+ */
+
+#undef __FUNCT__ 
+#define __FUNCT__ "CreateElementsNodesAndMaterialsDiagnosticStokes"
+
+#include "../../DataSet/DataSet.h"
+#include "../../toolkits/toolkits.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+#include "../../objects/objects.h"
+#include "../../shared/shared.h"
+#include "../../MeshPartitionx/MeshPartitionx.h"
+#include "../Model.h"
+
+
+void	CreateElementsNodesAndMaterialsDiagnosticStokes(DataSet** pelements,DataSet** pnodes, DataSet** pmaterials, Model* model,ConstDataHandle model_handle){
+
+
+	/*DataSets: */
+	DataSet*    elements  = NULL;
+	DataSet*    nodes = NULL;
+	DataSet*    materials = NULL;
+	
+	/*First create the elements, nodes and material properties: */
+	elements  = new DataSet(ElementsEnum());
+	nodes     = new DataSet(NodesEnum());
+	materials = new DataSet(MaterialsEnum());
+
+	/*Now, is the flag ishutter on? otherwise, do nothing: */
+	if (!model->isstokes)goto cleanup_and_return;
+
+	cleanup_and_return:
+
+	/*Assign output pointer: */
+	*pelements=elements;
+	*pnodes=nodes;
+	*pmaterials=materials;
+}
Index: /issm/trunk/src/c/ModelProcessorx/DiagnosticStokes/CreateLoadsDiagnosticStokes.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/DiagnosticStokes/CreateLoadsDiagnosticStokes.cpp	(revision 300)
+++ /issm/trunk/src/c/ModelProcessorx/DiagnosticStokes/CreateLoadsDiagnosticStokes.cpp	(revision 300)
@@ -0,0 +1,33 @@
+/*! \file CreateLoadsDiagnosticStokes.c:
+ */
+
+#undef __FUNCT__ 
+#define __FUNCT__ "CreateLoadsDiagnosticStokes"
+
+#include "../../DataSet/DataSet.h"
+#include "../../toolkits/toolkits.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+#include "../../objects/objects.h"
+#include "../../shared/shared.h"
+#include "../../include/macros.h"
+#include "../Model.h"
+
+
+void	CreateLoadsDiagnosticStokes(DataSet** ploads, Model* model,ConstDataHandle model_handle){
+
+	DataSet*    loads    = NULL;
+
+	/*Create loads: */
+	loads   = new DataSet(LoadsEnum());
+
+	/*Now, is the flag ishutter on? otherwise, do nothing: */
+	if (!model->isstokes)goto cleanup_and_return;
+
+	cleanup_and_return:
+	
+	/*Assign output pointer: */
+	*ploads=loads;
+
+}
+
+
Index: /issm/trunk/src/c/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 299)
+++ /issm/trunk/src/c/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 300)
@@ -22,4 +22,9 @@
 	constraints = new DataSet(ConstraintsEnum());
 
+	/*Now, is the model running in 3d? : */
+	if (strcmp(model->meshtype,"2d")==0)goto cleanup_and_return;
+	
+	cleanup_and_return:	
+	
 	/*Assign output pointer: */
 	*pconstraints=constraints;
Index: /issm/trunk/src/c/ModelProcessorx/DiagnosticVert/CreateElementsNodesAndMaterialsDiagnosticVert.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/DiagnosticVert/CreateElementsNodesAndMaterialsDiagnosticVert.cpp	(revision 299)
+++ /issm/trunk/src/c/ModelProcessorx/DiagnosticVert/CreateElementsNodesAndMaterialsDiagnosticVert.cpp	(revision 300)
@@ -131,6 +131,4 @@
 	
 
-	/*Get analysis_type: */
-	analysis_type=AnalysisTypeAsEnum(model->analysis_type);
 
 	/*First create the elements, nodes and material properties: */
@@ -138,4 +136,10 @@
 	nodes     = new DataSet(NodesEnum());
 	materials = new DataSet(MaterialsEnum());
+
+	/*Now, is the model running in 3d? : */
+	if (strcmp(model->meshtype,"2d")==0)goto cleanup_and_return;
+
+	/*Get analysis_type: */
+	analysis_type=AnalysisTypeAsEnum(model->analysis_type);
 
 	/*Width of elements: */
Index: /issm/trunk/src/c/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp	(revision 299)
+++ /issm/trunk/src/c/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp	(revision 300)
@@ -20,4 +20,9 @@
 	/*Create loads: */
 	loads   = new DataSet(LoadsEnum());
+
+	/*Now, is the model running in 3d? : */
+	if (strcmp(model->meshtype,"2d")==0)goto cleanup_and_return;
+
+	cleanup_and_return:
 	
 	/*Assign output pointer: */
Index: /issm/trunk/src/c/ModelProcessorx/Model.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/Model.cpp	(revision 299)
+++ /issm/trunk/src/c/ModelProcessorx/Model.cpp	(revision 300)
@@ -150,4 +150,9 @@
 	model->melting=NULL;
 	model->accumulation=NULL;
+
+	/*elements type: */
+	model->ishutter=0;
+	model->ismacayealpattyn=0;
+	model->isstokes=0;
 
 	return model;
@@ -283,5 +288,10 @@
 		ModelFetchData((void**)&model->numlayers,NULL,NULL,model_handle,"numlayers","Integer",NULL);
 	}
-	
+
+	/*elements type: */
+	ModelFetchData((void**)&model->ishutter,NULL,NULL,model_handle,"ishutter","Integer",NULL);
+	ModelFetchData((void**)&model->ismacayealpattyn,NULL,NULL,model_handle,"ismacayealpattyn","Integer",NULL);
+	ModelFetchData((void**)&model->isstokes,NULL,NULL,model_handle,"isstokes","Integer",NULL);
+
 	/*!Get drag_type, drag and p,q: */
 	ModelFetchData((void**)&model->drag_type,NULL,NULL,model_handle,"drag_type","Integer",NULL);
Index: /issm/trunk/src/c/ModelProcessorx/Model.h
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/Model.h	(revision 299)
+++ /issm/trunk/src/c/ModelProcessorx/Model.h	(revision 300)
@@ -35,4 +35,8 @@
 	double* uppernodes;
 
+	/*elements type: */
+	int     ishutter;
+	int     ismacayealpattyn;
+	int     isstokes;
 
 	/*results: */
@@ -174,4 +178,5 @@
 	void	CreateConstraintsDiagnosticHoriz(DataSet** pconstraints,Model* model,ConstDataHandle model_handle);
 	void    CreateLoadsDiagnosticHoriz(DataSet** ploads, Model* model, ConstDataHandle model_handle);
+	void    CreateParametersDiagnosticHoriz(DataSet* parameters,Model* model,ConstDataHandle model_handle,int* pcount);
 
 	/*diagnostic vertical*/
@@ -179,5 +184,30 @@
 	void	CreateConstraintsDiagnosticVert(DataSet** pconstraints,Model* model,ConstDataHandle model_handle);
 	void    CreateLoadsDiagnosticVert(DataSet** ploads, Model* model, ConstDataHandle model_handle);
-	
+	void    CreateParametersDiagnosticVert(DataSet* parameters,Model* model,ConstDataHandle model_handle,int* pcount);
+
+	/*diagnostic hutter*/
+	void	CreateElementsNodesAndMaterialsDiagnosticHutter(DataSet** pelements,DataSet** pnodes, DataSet** pmaterials, Model* model,ConstDataHandle model_handle);
+	void	CreateConstraintsDiagnosticHutter(DataSet** pconstraints,Model* model,ConstDataHandle model_handle);
+	void    CreateLoadsDiagnosticHutter(DataSet** ploads, Model* model, ConstDataHandle model_handle);
+	void    CreateParametersDiagnosticHutter(DataSet* parameters,Model* model,ConstDataHandle model_handle,int* pcount);
+
+	/*diagnostic stokes*/
+	void	CreateElementsNodesAndMaterialsDiagnosticStokes(DataSet** pelements,DataSet** pnodes, DataSet** pmaterials, Model* model,ConstDataHandle model_handle);
+	void	CreateConstraintsDiagnosticStokes(DataSet** pconstraints,Model* model,ConstDataHandle model_handle);
+	void    CreateLoadsDiagnosticStokes(DataSet** ploads, Model* model, ConstDataHandle model_handle);
+	void    CreateParametersDiagnosticStokes(DataSet* parameters,Model* model,ConstDataHandle model_handle,int* pcount);
+
+	/*surface slope compute*/
+	void	CreateElementsNodesAndMaterialsSurfaceSlopeCompute(DataSet** pelements,DataSet** pnodes, DataSet** pmaterials, Model* model,ConstDataHandle model_handle);
+	void	CreateConstraintsSurfaceSlopeCompute(DataSet** pconstraints,Model* model,ConstDataHandle model_handle);
+	void    CreateLoadsSurfaceSlopeCompute(DataSet** ploads, Model* model, ConstDataHandle model_handle);
+	void    CreateParametersSurfaceSlopeCompute(DataSet* parameters,Model* model,ConstDataHandle model_handle,int* pcount);
+
+	/*bed slope compute*/
+	void	CreateElementsNodesAndMaterialsBedSlopeCompute(DataSet** pelements,DataSet** pnodes, DataSet** pmaterials, Model* model,ConstDataHandle model_handle);
+	void	CreateConstraintsBedSlopeCompute(DataSet** pconstraints,Model* model,ConstDataHandle model_handle);
+	void    CreateLoadsBedSlopeCompute(DataSet** ploads, Model* model, ConstDataHandle model_handle);
+	void    CreateParametersBedSlopeCompute(DataSet* parameters,Model* model,ConstDataHandle model_handle,int* pcount);
+
 	/*control:*/
 	void    CreateParametersControl(DataSet* parameters,Model* model,ConstDataHandle model_handle,int* pcount);
Index: /issm/trunk/src/c/ModelProcessorx/SurfaceSlopeCompute/CreateConstraintsSurfaceSlopeCompute.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/SurfaceSlopeCompute/CreateConstraintsSurfaceSlopeCompute.cpp	(revision 300)
+++ /issm/trunk/src/c/ModelProcessorx/SurfaceSlopeCompute/CreateConstraintsSurfaceSlopeCompute.cpp	(revision 300)
@@ -0,0 +1,31 @@
+/*
+ * CreateConstraintsSurfaceSlopeCompute.c:
+ */
+
+#undef __FUNCT__ 
+#define __FUNCT__ "CreateConstraintsSurfaceSlopeCompute"
+
+#include "../../DataSet/DataSet.h"
+#include "../../toolkits/toolkits.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+#include "../../objects/objects.h"
+#include "../../shared/shared.h"
+#include "../Model.h"
+
+
+void	CreateConstraintsSurfaceSlopeCompute(DataSet** pconstraints, Model* model,ConstDataHandle model_handle){
+
+
+	DataSet* constraints = NULL;
+
+	/*Create constraints: */
+	constraints = new DataSet(ConstraintsEnum());
+
+	/*Now, is the flag ishutter on? otherwise, do nothing: */
+	if (!model->ishutter)goto cleanup_and_return;
+	
+	cleanup_and_return:	
+	
+	/*Assign output pointer: */
+	*pconstraints=constraints;
+}
Index: /issm/trunk/src/c/ModelProcessorx/SurfaceSlopeCompute/CreateElementsNodesAndMaterialsSurfaceSlopeCompute.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/SurfaceSlopeCompute/CreateElementsNodesAndMaterialsSurfaceSlopeCompute.cpp	(revision 300)
+++ /issm/trunk/src/c/ModelProcessorx/SurfaceSlopeCompute/CreateElementsNodesAndMaterialsSurfaceSlopeCompute.cpp	(revision 300)
@@ -0,0 +1,39 @@
+/*
+ * CreateElementsNodesAndMaterialsSurfaceSlopeCompute.c:
+ */
+
+#undef __FUNCT__ 
+#define __FUNCT__ "CreateElementsNodesAndMaterialsSurfaceSlopeCompute"
+
+#include "../../DataSet/DataSet.h"
+#include "../../toolkits/toolkits.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+#include "../../objects/objects.h"
+#include "../../shared/shared.h"
+#include "../../MeshPartitionx/MeshPartitionx.h"
+#include "../Model.h"
+
+
+void	CreateElementsNodesAndMaterialsSurfaceSlopeCompute(DataSet** pelements,DataSet** pnodes, DataSet** pmaterials, Model* model,ConstDataHandle model_handle){
+
+
+	/*DataSets: */
+	DataSet*    elements  = NULL;
+	DataSet*    nodes = NULL;
+	DataSet*    materials = NULL;
+	
+	/*First create the elements, nodes and material properties: */
+	elements  = new DataSet(ElementsEnum());
+	nodes     = new DataSet(NodesEnum());
+	materials = new DataSet(MaterialsEnum());
+
+	/*Now, is the flag ishutter on? otherwise, do nothing: */
+	if (!model->ishutter)goto cleanup_and_return;
+
+	cleanup_and_return:
+
+	/*Assign output pointer: */
+	*pelements=elements;
+	*pnodes=nodes;
+	*pmaterials=materials;
+}
Index: /issm/trunk/src/c/ModelProcessorx/SurfaceSlopeCompute/CreateLoadsSurfaceSlopeCompute.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/SurfaceSlopeCompute/CreateLoadsSurfaceSlopeCompute.cpp	(revision 300)
+++ /issm/trunk/src/c/ModelProcessorx/SurfaceSlopeCompute/CreateLoadsSurfaceSlopeCompute.cpp	(revision 300)
@@ -0,0 +1,33 @@
+/*! \file CreateLoadsSurfaceSlopeCompute.c:
+ */
+
+#undef __FUNCT__ 
+#define __FUNCT__ "CreateLoadsSurfaceSlopeCompute"
+
+#include "../../DataSet/DataSet.h"
+#include "../../toolkits/toolkits.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+#include "../../objects/objects.h"
+#include "../../shared/shared.h"
+#include "../../include/macros.h"
+#include "../Model.h"
+
+
+void	CreateLoadsSurfaceSlopeCompute(DataSet** ploads, Model* model,ConstDataHandle model_handle){
+
+	DataSet*    loads    = NULL;
+
+	/*Create loads: */
+	loads   = new DataSet(LoadsEnum());
+
+	/*Now, is the flag ishutter on? otherwise, do nothing: */
+	if (!model->ishutter)goto cleanup_and_return;
+
+	cleanup_and_return:
+	
+	/*Assign output pointer: */
+	*ploads=loads;
+
+}
+
+
