Index: /issm/trunk-jpl/src/c/CMakeLists.txt
===================================================================
--- /issm/trunk-jpl/src/c/CMakeLists.txt	(revision 16533)
+++ /issm/trunk-jpl/src/c/CMakeLists.txt	(revision 16534)
@@ -167,5 +167,4 @@
 					./toolkits/ToolkitOptions.cpp
 					./modules/ModelProcessorx/ModelProcessorx.cpp
-					./modules/ModelProcessorx/DistributeNumDofs.cpp
 					./modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
 					./modules/ModelProcessorx/NodesPartitioning.cpp
Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 16533)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 16534)
@@ -242,5 +242,4 @@
 					./modules/ModelProcessorx/ModelProcessorx.h\
 					./modules/ModelProcessorx/ModelProcessorx.cpp\
-					./modules/ModelProcessorx/DistributeNumDofs.cpp\
 					./modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp\
 					./modules/ModelProcessorx/NodesPartitioning.cpp\
@@ -338,4 +337,7 @@
 					./main/EnvironmentInit.cpp\
 					./main/EnvironmentFinalize.cpp\
+					./analyses/EnumToAnalysis.h\
+					./analyses/EnumToAnalysis.cpp\
+					./analyses/Analysis.h\
 					./solutionsequences/solutionsequence_linear.cpp\
 					./solutionsequences/solutionsequence_nonlinear.cpp\
@@ -394,4 +396,14 @@
 								./modules/ModelProcessorx/ExtrudeFromTop/CreateConstraintsExtrudeFromTop.cpp\
 								./modules/ModelProcessorx/ExtrudeFromTop/CreateLoadsExtrudeFromTop.cpp\
+								./analyses/ExtrudeFromBaseAnalysis.h\
+								./analyses/ExtrudeFromBaseAnalysis.cpp\
+								./analyses/ExtrudeFromTopAnalysis.h\
+								./analyses/ExtrudeFromTopAnalysis.cpp\
+								./analyses/MasstransportAnalysis.h\
+								./analyses/MasstransportAnalysis.cpp\
+								./analyses/FreeSurfaceBaseAnalysis.h\
+								./analyses/FreeSurfaceBaseAnalysis.cpp\
+								./analyses/FreeSurfaceTopAnalysis.h\
+								./analyses/FreeSurfaceTopAnalysis.cpp\
 								./cores/masstransport_core.cpp\
 								./cores/extrudefrombase_core.cpp\
@@ -414,4 +426,10 @@
 					   ./modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.h\
 					   ./modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp\
+						./analyses/ThermalAnalysis.h\
+						./analyses/ThermalAnalysis.cpp\
+						./analyses/EnthalpyAnalysis.h\
+						./analyses/EnthalpyAnalysis.cpp\
+						./analyses/MeltingAnalysis.h\
+						./analyses/MeltingAnalysis.cpp\
 					   ./cores/thermal_core.cpp\
 					   ./solutionsequences/solutionsequence_thermal_nonlinear.cpp
@@ -467,4 +485,8 @@
 					  ./cores/adjointbalancethickness_core.cpp\
 					  ./cores/AdjointCorePointerFromSolutionEnum.cpp\
+					  ./analyses/AdjointBalancethicknessAnalysis.h\
+					  ./analyses/AdjointBalancethicknessAnalysis.cpp\
+					  ./analyses/AdjointHorizAnalysis.h\
+					  ./analyses/AdjointHorizAnalysis.cpp\
 					  ./solutionsequences/solutionsequence_adjoint_linear.cpp
 
@@ -486,4 +508,10 @@
 							./modules/ModelProcessorx/HydrologyDCEfficient/CreateLoadsHydrologyDCEfficient.cpp \
 							./modules/ModelProcessorx/HydrologyDCEfficient/CreateParametersHydrologyDCEfficient.cpp \
+							./analyses/HydrologyDCEfficientAnalysis.h\
+							./analyses/HydrologyDCEfficientAnalysis.cpp\
+							./analyses/HydrologyDCInefficientAnalysis.h\
+							./analyses/HydrologyDCInefficientAnalysis.cpp\
+							./analyses/HydrologyShreveAnalysis.h\
+							./analyses/HydrologyShreveAnalysis.cpp\
 							./cores/hydrology_core.cpp\
 							./solutionsequences/solutionsequence_hydro_nonlinear.cpp
@@ -503,4 +531,10 @@
 					      ./modules/ModelProcessorx/StressbalanceSIA/CreateConstraintsStressbalanceSIA.cpp \
 							./modules/ModelProcessorx/StressbalanceSIA/CreateLoadsStressbalanceSIA.cpp \
+							./analyses/StressbalanceAnalysis.h\
+							./analyses/StressbalanceAnalysis.cpp\
+							./analyses/StressbalanceSIAAnalysis.h\
+							./analyses/StressbalanceSIAAnalysis.cpp\
+							./analyses/StressbalanceVerticalAnalysis.h\
+							./analyses/StressbalanceVerticalAnalysis.cpp\
 							./cores/stressbalance_core.cpp\
 							./solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp
@@ -515,4 +549,14 @@
 						 ./modules/ModelProcessorx/Balancevelocity/CreateConstraintsBalancevelocity.cpp\
 						 ./modules/ModelProcessorx/Balancevelocity/CreateLoadsBalancevelocity.cpp\
+						 ./analyses/BalancevelocityAnalysis.h\
+						 ./analyses/BalancevelocityAnalysis.cpp\
+						 ./analyses/SmoothedSurfaceSlopeXAnalysis.h\
+						 ./analyses/SmoothedSurfaceSlopeXAnalysis.cpp\
+						 ./analyses/SmoothedSurfaceSlopeYAnalysis.h\
+						 ./analyses/SmoothedSurfaceSlopeYAnalysis.cpp\
+						 ./analyses/BalancethicknessAnalysis.h\
+						 ./analyses/BalancethicknessAnalysis.cpp\
+						 ./analyses/BalancethicknessSoftAnalysis.h\
+						 ./analyses/BalancethicknessSoftAnalysis.cpp\
 						 ./cores/balancethickness_core.cpp \
 						 ./cores/balancevelocity_core.cpp \
@@ -528,4 +572,6 @@
 					  ./modules/ModelProcessorx/L2ProjectionTop/CreateConstraintsL2ProjectionTop.cpp\
 					  ./modules/ModelProcessorx/L2ProjectionTop/CreateLoadsL2ProjectionTop.cpp\
+					  ./analyses/L2ProjectionBaseAnalysis.h\
+					  ./analyses/L2ProjectionBaseAnalysis.cpp\
 					  ./cores/surfaceslope_core.cpp\
 					  ./cores/bedslope_core.cpp
@@ -536,8 +582,12 @@
 					  ./modules/ModelProcessorx/MeshDeformation/CreateConstraintsMeshDeformation.cpp\
 					  ./modules/ModelProcessorx/MeshDeformation/CreateLoadsMeshDeformation.cpp\
+					  ./analyses/MeshdeformationAnalysis.h\
+					  ./analyses/MeshdeformationAnalysis.cpp\
 					  ./cores/meshdeformation_core.cpp
 #}}}
 #Gia sources  {{{
 gia_sources =  ./cores/gia_core.cpp\
+					./analyses/GiaAnalysis.h\
+					./analyses/GiaAnalysis.cpp\
 					./modules/ModelProcessorx/Gia/UpdateElementsGia.cpp\
 					./modules/ModelProcessorx/Gia/CreateNodesGia.cpp \
@@ -558,10 +608,12 @@
 #Damage sources  {{{
 damage_sources =  ./cores/damage_core.cpp\
-					./modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp\
-					./modules/ModelProcessorx/Damage/CreateNodesDamage.cpp \
-					./modules/ModelProcessorx/Damage/CreateConstraintsDamage.cpp\
-					./modules/ModelProcessorx/Damage/CreateParametersDamage.cpp\
-					./modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp\
-					./solutionsequences/solutionsequence_damage_nonlinear.cpp
+						./analyses/DamageEvolutionAnalysis.h\
+						./analyses/DamageEvolutionAnalysis.cpp\
+						./modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp\
+						./modules/ModelProcessorx/Damage/CreateNodesDamage.cpp \
+						./modules/ModelProcessorx/Damage/CreateConstraintsDamage.cpp\
+						./modules/ModelProcessorx/Damage/CreateParametersDamage.cpp\
+						./modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp\
+						./solutionsequences/solutionsequence_damage_nonlinear.cpp
 
 #}}}
Index: /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./AdjointBalancethicknessAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processor*/
+int AdjointBalancethicknessAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file AdjointBalancethicknessAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _AdjointBalancethicknessAnalysis_
+#define _AdjointBalancethicknessAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class AdjointBalancethicknessAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./AdjointHorizAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int AdjointHorizAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file AdjointHorizAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _AdjointHorizAnalysis_
+#define _AdjointHorizAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class AdjointHorizAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/Analysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/Analysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/Analysis.h	(revision 16534)
@@ -0,0 +1,15 @@
+/*!\file:  Analysis.h
+ * \brief abstract class for Analysis objects
+ */ 
+
+#ifndef _ANALYSIS_H_
+#define _ANALYSIS_H_
+
+class Analysis{
+
+	public: 
+
+		virtual         ~Analysis(){};
+		virtual int DofsPerNode(int** doflist,int meshtype,int approximation)=0;
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./BalancethicknessAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int BalancethicknessAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file BalancethicknessAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _BalancethicknessAnalysis_
+#define _BalancethicknessAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class BalancethicknessAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./BalancethicknessSoftAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int BalancethicknessSoftAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file BalancethicknessSoftAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _BalancethicknessSoftAnalysis_
+#define _BalancethicknessSoftAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class BalancethicknessSoftAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./BalancevelocityAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int BalancevelocityAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file BalancevelocityAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _BalancevelocityAnalysis_
+#define _BalancevelocityAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class BalancevelocityAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./DamageEvolutionAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int DamageEvolutionAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file DamageEvolutionAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _DamageEvolutionAnalysis_
+#define _DamageEvolutionAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class DamageEvolutionAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./EnthalpyAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int EnthalpyAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file EnthalpyAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _EnthalpyAnalysis_
+#define _EnthalpyAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class EnthalpyAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp	(revision 16534)
@@ -0,0 +1,47 @@
+/*
+* \file EnumToAnalysis.cpp
+* \brief: output class depending on enum
+*
+*   WARNING: DO NOT MODIFY THIS FILE
+*            this file has been automatically generated by Synchronize.sh
+*            Please read README for more information
+*/
+
+#include "./analyses.h"
+#include "../shared/shared.h"
+
+Analysis* EnumToAnalysis(int analysis_enum){
+
+	switch(analysis_enum){
+		case AdjointBalancethicknessAnalysisEnum : return new AdjointBalancethicknessAnalysis();
+		case AdjointHorizAnalysisEnum : return new AdjointHorizAnalysis();
+		case BalancethicknessAnalysisEnum : return new BalancethicknessAnalysis();
+		case BalancethicknessSoftAnalysisEnum : return new BalancethicknessSoftAnalysis();
+		case BalancevelocityAnalysisEnum : return new BalancevelocityAnalysis();
+		case L2ProjectionBaseAnalysisEnum : return new L2ProjectionBaseAnalysis();
+		case DamageEvolutionAnalysisEnum : return new DamageEvolutionAnalysis();
+		case StressbalanceAnalysisEnum : return new StressbalanceAnalysis();
+		case StressbalanceSIAAnalysisEnum : return new StressbalanceSIAAnalysis();
+		case StressbalanceVerticalAnalysisEnum : return new StressbalanceVerticalAnalysis();
+		case EnthalpyAnalysisEnum : return new EnthalpyAnalysis();
+		case HydrologyShreveAnalysisEnum : return new HydrologyShreveAnalysis();
+		case HydrologyDCInefficientAnalysisEnum : return new HydrologyDCInefficientAnalysis();
+		case HydrologyDCEfficientAnalysisEnum : return new HydrologyDCEfficientAnalysis();
+		case MeltingAnalysisEnum : return new MeltingAnalysis();
+		case MasstransportAnalysisEnum : return new MasstransportAnalysis();
+		case FreeSurfaceBaseAnalysisEnum : return new FreeSurfaceBaseAnalysis();
+		case FreeSurfaceTopAnalysisEnum : return new FreeSurfaceTopAnalysis();
+		case ExtrudeFromBaseAnalysisEnum : return new ExtrudeFromBaseAnalysis();
+		case ExtrudeFromTopAnalysisEnum : return new ExtrudeFromTopAnalysis();
+		case ThermalAnalysisEnum : return new ThermalAnalysis();
+		#ifdef _HAVE_GIA_
+		case GiaAnalysisEnum : return new GiaAnalysis();
+		#endif
+		#ifdef _HAVE_MESHDEFORMATION_
+		case MeshdeformationAnalysisEnum : return new MeshdeformationAnalysis();
+		#endif
+		case SmoothedSurfaceSlopeXAnalysisEnum: return new SmoothedSurfaceSlopeXAnalysis();
+		case SmoothedSurfaceSlopeYAnalysisEnum: return new SmoothedSurfaceSlopeYAnalysis();
+		default : _error_("enum provided not supported ("<<EnumToStringx(analysis_enum)<<")");
+	}
+}
Index: /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.h	(revision 16534)
@@ -0,0 +1,8 @@
+#ifndef _ENUMTOANALYSIS_
+#define _ENUMTOANALYSIS_
+
+class Analysis;
+
+Analysis* EnumToAnalysis(int analysis_enum);
+
+#endif
Index: /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./ExtrudeFromBaseAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int ExtrudeFromBaseAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file ExtrudeFromBaseAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _ExtrudeFromBaseAnalysis_
+#define _ExtrudeFromBaseAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class ExtrudeFromBaseAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./ExtrudeFromTopAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int ExtrudeFromTopAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file ExtrudeFromTopAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _ExtrudeFromTopAnalysis_
+#define _ExtrudeFromTopAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class ExtrudeFromTopAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./FreeSurfaceBaseAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int FreeSurfaceBaseAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file FreeSurfaceBaseAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _FreeSurfaceBaseAnalysis_
+#define _FreeSurfaceBaseAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class FreeSurfaceBaseAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./FreeSurfaceTopAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int FreeSurfaceTopAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file FreeSurfaceTopAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _FreeSurfaceTopAnalysis_
+#define _FreeSurfaceTopAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class FreeSurfaceTopAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/GiaAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/GiaAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/GiaAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./GiaAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int GiaAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/GiaAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/GiaAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/GiaAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file GiaAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _GiaAnalysis_
+#define _GiaAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class GiaAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./HydrologyDCEfficientAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int HydrologyDCEfficientAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file HydrologyDCEfficientAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _HydrologyDCEfficientAnalysis_
+#define _HydrologyDCEfficientAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class HydrologyDCEfficientAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./HydrologyDCInefficientAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int HydrologyDCInefficientAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file HydrologyDCInefficientAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _HydrologyDCInefficientAnalysis_
+#define _HydrologyDCInefficientAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class HydrologyDCInefficientAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./HydrologyShreveAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int HydrologyShreveAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file HydrologyShreveAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _HydrologyShreveAnalysis_
+#define _HydrologyShreveAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class HydrologyShreveAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./L2ProjectionBaseAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int L2ProjectionBaseAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file L2ProjectionBaseAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _L2ProjectionBaseAnalysis_
+#define _L2ProjectionBaseAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class L2ProjectionBaseAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./MasstransportAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int MasstransportAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file MasstransportAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _MasstransportAnalysis_
+#define _MasstransportAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class MasstransportAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./MeltingAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int MeltingAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file MeltingAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _MeltingAnalysis_
+#define _MeltingAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class MeltingAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/MeshdeformationAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MeshdeformationAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/MeshdeformationAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./MeshdeformationAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int MeshdeformationAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/MeshdeformationAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MeshdeformationAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/MeshdeformationAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file MeshdeformationAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _MeshdeformationAnalysis_
+#define _MeshdeformationAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class MeshdeformationAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./SmoothedSurfaceSlopeXAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int SmoothedSurfaceSlopeXAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file SmoothedSurfaceSlopeXAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _SmoothedSurfaceSlopeXAnalysis_
+#define _SmoothedSurfaceSlopeXAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class SmoothedSurfaceSlopeXAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./SmoothedSurfaceSlopeYAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int SmoothedSurfaceSlopeYAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file SmoothedSurfaceSlopeYAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _SmoothedSurfaceSlopeYAnalysis_
+#define _SmoothedSurfaceSlopeYAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class SmoothedSurfaceSlopeYAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 16534)
@@ -0,0 +1,67 @@
+#include "./StressbalanceAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int StressbalanceAnalysis::DofsPerNode(int** pdoftype,int meshtype,int approximation){/*{{{*/
+
+	/*output*/
+	int *doftype = NULL;
+	int  numdofs;
+
+	switch(approximation){
+		case SSAApproximationEnum:  numdofs =2; break;
+		case L1L2ApproximationEnum: numdofs =2; break;
+		case HOApproximationEnum:   numdofs =2; break;
+		case SIAApproximationEnum:  numdofs =2; break;
+		case FSvelocityEnum:
+			 switch(meshtype){
+				 case Mesh3DEnum:         numdofs=3; break;
+				 case Mesh2DverticalEnum: numdofs=2; break;
+				 default: _error_("mesh type not supported yet");
+			}
+			break;
+		case FSpressureEnum: numdofs=1; break;
+		case NoneApproximationEnum:
+			 switch(meshtype){
+				 case Mesh3DEnum:         numdofs=4; break;
+				 case Mesh2DverticalEnum: numdofs=3; break;
+				 default: _error_("mesh type not supported yet");
+			}
+			break;
+		case SSAHOApproximationEnum:
+			numdofs=4;
+			doftype=xNew<int>(numdofs);
+			doftype[0]=SSAApproximationEnum;
+			doftype[1]=SSAApproximationEnum;
+			doftype[2]=HOApproximationEnum;
+			doftype[3]=HOApproximationEnum;
+			break;
+		case HOFSApproximationEnum:
+			numdofs=5;
+			doftype=xNew<int>(numdofs);
+			doftype[0]=HOApproximationEnum;
+			doftype[1]=HOApproximationEnum;
+			doftype[2]=FSvelocityEnum;
+			doftype[3]=FSvelocityEnum;
+			doftype[4]=FSvelocityEnum;
+			break;
+		case SSAFSApproximationEnum:
+			numdofs=5;
+			doftype=xNew<int>(numdofs);
+			doftype[0]=SSAApproximationEnum;
+			doftype[1]=SSAApproximationEnum;
+			doftype[2]=FSvelocityEnum;
+			doftype[3]=FSvelocityEnum;
+			doftype[4]=FSvelocityEnum;
+			break;
+		default:
+			_error_("Approximation " << EnumToStringx(approximation) << " not implemented yet");
+	}
+
+	/*Assign output pointer and return*/
+	*pdoftype = doftype;
+	return numdofs;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file StressbalanceAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _StressbalanceAnalysis_
+#define _StressbalanceAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class StressbalanceAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./StressbalanceSIAAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int StressbalanceSIAAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	return 2;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file StressbalanceSIAAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _StressbalanceSIAAnalysis_
+#define _StressbalanceSIAAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class StressbalanceSIAAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./StressbalanceVerticalAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int StressbalanceVerticalAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file StressbalanceVerticalAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _StressbalanceVerticalAnalysis_
+#define _StressbalanceVerticalAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class StressbalanceVerticalAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 16534)
@@ -0,0 +1,10 @@
+#include "./ThermalAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+int ThermalAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.h	(revision 16534)
@@ -0,0 +1,16 @@
+/*! \file ThermalAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _THERMALANALYSIS_
+#define _THERMALANALYSIS_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class ThermalAnalysis: public Analysis{
+
+	public:
+		int DofsPerNode(int** doflist,int meshtype,int approximation);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/analyses.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/analyses.h	(revision 16534)
+++ /issm/trunk-jpl/src/c/analyses/analyses.h	(revision 16534)
@@ -0,0 +1,37 @@
+/*
+ * analyses.h: 
+ */
+
+#ifndef _ANALYSES_H_
+#define _ANALYSES_H_
+
+#include "./Analysis.h"
+
+#include "./AdjointBalancethicknessAnalysis.h"
+#include "./AdjointHorizAnalysis.h"
+#include "./BalancethicknessAnalysis.h"
+#include "./BalancethicknessSoftAnalysis.h"
+#include "./BalancevelocityAnalysis.h"
+#include "./DamageEvolutionAnalysis.h"
+#include "./EnthalpyAnalysis.h"
+#include "./ExtrudeFromBaseAnalysis.h"
+#include "./ExtrudeFromTopAnalysis.h"
+#include "./FreeSurfaceBaseAnalysis.h"
+#include "./FreeSurfaceTopAnalysis.h"
+#include "./GiaAnalysis.h"
+#include "./HydrologyDCEfficientAnalysis.h"
+#include "./HydrologyDCInefficientAnalysis.h"
+#include "./HydrologyShreveAnalysis.h"
+#include "./MasstransportAnalysis.h"
+#include "./MeltingAnalysis.h"
+#include "./MeshdeformationAnalysis.h"
+#include "./SmoothedSurfaceSlopeXAnalysis.h"
+#include "./SmoothedSurfaceSlopeYAnalysis.h"
+#include "./StressbalanceAnalysis.h"
+#include "./StressbalanceSIAAnalysis.h"
+#include "./StressbalanceVerticalAnalysis.h"
+#include "./L2ProjectionBaseAnalysis.h"
+#include "./ThermalAnalysis.h"
+
+#include "EnumToAnalysis.h"
+#endif
Index: /issm/trunk-jpl/src/c/classes/Node.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Node.cpp	(revision 16533)
+++ /issm/trunk-jpl/src/c/classes/Node.cpp	(revision 16534)
@@ -13,4 +13,5 @@
 #include "shared/shared.h"
 #include "modules/ModelProcessorx/ModelProcessorx.h"
+#include "../analyses/analyses.h"
 /*}}}*/
 
@@ -21,9 +22,10 @@
 }
 /*}}}*/
-/*FUNCTION Node::Node(int node_id,int node_sid,int node_lid,int io_index, IoModel* iomodel,int analysis_type,int approximation) {{{*/
-Node::Node(int node_id,int node_sid,int node_lid,int io_index, IoModel* iomodel,int analysis_type,int in_approximation){
+/*FUNCTION Node::Node(int node_id,int node_sid,int node_lid,int io_index, IoModel* iomodel,int analysis_enum,int approximation) {{{*/
+Node::Node(int node_id,int node_sid,int node_lid,int io_index, IoModel* iomodel,int analysis_enum,int in_approximation){
 
 	/*Intermediary*/
 	int k,l;
+	int *doftypes = NULL;
 
 	/*id: */
@@ -31,5 +33,5 @@
 	this->sid           = node_sid;
 	this->lid           = node_lid;
-	this->analysis_type = analysis_type;
+	this->analysis_enum = analysis_enum;
 
 	/*Initialize coord_system: Identity matrix by default*/
@@ -39,7 +41,12 @@
 	/*indexing:*/
 	this->indexingupdate = true;
-	DistributeNumDofs(&this->indexing,analysis_type,in_approximation,iomodel->meshtype); //number of dofs per node
-
-	if(analysis_type==StressbalanceAnalysisEnum)
+
+	Analysis* analysis = EnumToAnalysis(analysis_enum);
+	int numdofs        = analysis->DofsPerNode(&doftypes,iomodel->meshtype,in_approximation);
+	indexing.Init(numdofs,doftypes);
+	xDelete<int>(doftypes);
+	delete analysis;
+
+	if(analysis_enum==StressbalanceAnalysisEnum)
 	 this->approximation=in_approximation;
 	else
@@ -48,5 +55,5 @@
 	/*Stressbalance Horiz*/
 	#ifdef _HAVE_STRESSBALANCE_
-	if(analysis_type==StressbalanceAnalysisEnum){
+	if(analysis_enum==StressbalanceAnalysisEnum){
 
 		/*Coordinate system provided, convert to coord_system matrix*/
@@ -85,12 +92,12 @@
 	/*2d solutions in 3d, we need to constrain all the nodes that are not on base*/
 	if(
-				analysis_type==FreeSurfaceBaseAnalysisEnum || 
-				analysis_type==MasstransportAnalysisEnum || 
-				analysis_type==MeltingAnalysisEnum || 
-				analysis_type==L2ProjectionBaseAnalysisEnum || 
-				analysis_type==BalancethicknessAnalysisEnum ||
-				analysis_type==HydrologyDCInefficientAnalysisEnum ||
-				analysis_type==DamageEvolutionAnalysisEnum || 
-				analysis_type==HydrologyDCEfficientAnalysisEnum
+				analysis_enum==FreeSurfaceBaseAnalysisEnum || 
+				analysis_enum==MasstransportAnalysisEnum || 
+				analysis_enum==MeltingAnalysisEnum || 
+				analysis_enum==L2ProjectionBaseAnalysisEnum || 
+				analysis_enum==BalancethicknessAnalysisEnum ||
+				analysis_enum==HydrologyDCInefficientAnalysisEnum ||
+				analysis_enum==DamageEvolutionAnalysisEnum || 
+				analysis_enum==HydrologyDCEfficientAnalysisEnum
 				){
 		if(iomodel->meshtype==Mesh3DEnum || iomodel->meshtype==Mesh2DverticalEnum){
@@ -103,6 +110,6 @@
 	}
 	if(
-				analysis_type==FreeSurfaceTopAnalysisEnum ||
-				analysis_type==L2ProjectionTopAnalysisEnum
+				analysis_enum==FreeSurfaceTopAnalysisEnum ||
+				analysis_enum==L2ProjectionTopAnalysisEnum
 				){
 		if(iomodel->meshtype==Mesh3DEnum || iomodel->meshtype==Mesh2DverticalEnum){
@@ -130,5 +137,5 @@
 	_printf_("   id : " << id << "\n");
 	_printf_("   sid: " << sid << "\n");
-	_printf_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
+	_printf_("   analysis_enum: " << EnumToStringx(analysis_enum) << "\n");
 	_printf_("   approximation: " << EnumToStringx(approximation) << "\n");
 	_printf_("   indexingupdate: " << indexingupdate << "\n");
@@ -143,5 +150,5 @@
 	_printf_("   id: " << id << "\n");
 	_printf_("   sid: " << sid << "\n");
-	_printf_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
+	_printf_("   analysis_enum: " << EnumToStringx(analysis_enum) << "\n");
 	_printf_("   approximation: " << EnumToStringx(approximation) << "\n");
 	_printf_("   indexingupdate: " << indexingupdate << "\n");
@@ -367,6 +374,6 @@
 #endif
 /*FUNCTION Node::InAnalysis{{{*/
-bool Node::InAnalysis(int in_analysis_type){
-	if (in_analysis_type==this->analysis_type) return true;
+bool Node::InAnalysis(int in_analysis_enum){
+	if (in_analysis_enum==this->analysis_enum) return true;
 	else return false;
 }
Index: /issm/trunk-jpl/src/c/classes/Node.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Node.h	(revision 16533)
+++ /issm/trunk-jpl/src/c/classes/Node.h	(revision 16534)
@@ -36,10 +36,10 @@
 		bool         indexingupdate;
 		DofIndexing  indexing;
-		int          analysis_type;
+		int          analysis_enum;
 		IssmDouble   coord_system[3][3];
 
 		/*Node constructors, destructors*/
 		Node();
-		Node(int node_id,int node_sid,int node_lid,int io_index, IoModel* iomodel,int analysis_type,int approximation_in);
+		Node(int node_id,int node_sid,int node_lid,int io_index, IoModel* iomodel,int analysis_enum,int approximation_in);
 		~Node();
 
@@ -59,5 +59,5 @@
 		void  GetCoordinateSystem(IssmDouble* coord_system_out);
 #endif
-		bool  InAnalysis(int analysis_type);
+		bool  InAnalysis(int analysis_enum);
 		int   GetApproximation();
 		int   GetNumberOfDofs(int approximation_enum,int setenum);
Index: /issm/trunk-jpl/src/c/cores/cores.h
===================================================================
--- /issm/trunk-jpl/src/c/cores/cores.h	(revision 16533)
+++ /issm/trunk-jpl/src/c/cores/cores.h	(revision 16534)
@@ -3,6 +3,6 @@
  */
 
-#ifndef _ANALYSES_H_
-#define _ANALYSES_H_
+#ifndef _CORES_H_
+#define _CORES_H_
 
 /*forward declarations: */
Index: sm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 16533)
+++ 	(revision )
@@ -1,160 +1,0 @@
-/*!\file:  DistributeNumDofs.cpp
- * \brief: figure out the maximum number of dofs per node.
- */ 
-
-#include "../../shared/shared.h"
-#include "../../classes/classes.h"
-
-void DistributeNumDofs(DofIndexing* index,int analysis_type,int node_type,int mesh_type){
-
-	/*For now, we distribute by analysis_type, later, we will distribute using the analysis_type,
-	 * but also the node_type: */
-
-	int  numdofs = -1;   //default numdofs
-	int *doftype = NULL;
-
-	/*ok, according to analysis type: */
-	switch(analysis_type){
-		case StressbalanceAnalysisEnum:
-			switch(node_type){
-				case SSAApproximationEnum:
-					numdofs=2;
-					break;
-				case L1L2ApproximationEnum:
-					numdofs=2;
-					break;
-				case HOApproximationEnum:
-					numdofs=2;
-					break;
-				case SIAApproximationEnum:
-					numdofs=2;
-					break;
-				case FSvelocityEnum:
-					if(mesh_type==Mesh3DEnum){
-						numdofs=3;
-					}
-					else if(mesh_type==Mesh2DverticalEnum){
-						numdofs=2;
-					}
-					else{
-						_error_("mesh type not supported yet");
-					}
-					break;
-				case FSpressureEnum:
-					numdofs=1;
-					break;
-				case NoneApproximationEnum:
-					if(mesh_type==Mesh3DEnum){
-						numdofs=4;
-					}
-					else if(mesh_type==Mesh2DverticalEnum){
-						numdofs=3;
-					}
-					else{
-						_error_("mesh type not supported yet");
-					}
-					break;
-				case SSAHOApproximationEnum:
-					numdofs=4;
-					doftype=xNew<int>(numdofs);
-					doftype[0]=SSAApproximationEnum;
-					doftype[1]=SSAApproximationEnum;
-					doftype[2]=HOApproximationEnum;
-					doftype[3]=HOApproximationEnum;
-					break;
-				case HOFSApproximationEnum:
-					numdofs=5;
-					doftype=xNew<int>(numdofs);
-					doftype[0]=HOApproximationEnum;
-					doftype[1]=HOApproximationEnum;
-					doftype[2]=FSvelocityEnum;
-					doftype[3]=FSvelocityEnum;
-					doftype[4]=FSvelocityEnum;
-					break;
-				case SSAFSApproximationEnum:
-					numdofs=5;
-					doftype=xNew<int>(numdofs);
-					doftype[0]=SSAApproximationEnum;
-					doftype[1]=SSAApproximationEnum;
-					doftype[2]=FSvelocityEnum;
-					doftype[3]=FSvelocityEnum;
-					doftype[4]=FSvelocityEnum;
-					break;
-				default:
-					_error_("Approximationtype " << node_type << " (" << EnumToStringx(node_type) << ") not implemented yet for StressbalanceHoriz");
-
-			}
-			break;
-		case StressbalanceVerticalAnalysisEnum:
-			numdofs=1;
-			break;
-		case StressbalanceSIAAnalysisEnum:
-			numdofs=2;
-			break;
-		case L2ProjectionBaseAnalysisEnum:
-			numdofs=1;
-			break;
-		case L2ProjectionTopAnalysisEnum:
-			numdofs=1;
-			break;
-		case ThermalAnalysisEnum:
-			numdofs=1;
-			break;
-		case EnthalpyAnalysisEnum:
-			numdofs=1;
-			break;
-		case HydrologyDCInefficientAnalysisEnum:
-			numdofs=1;
-			break;
-		case HydrologyDCEfficientAnalysisEnum:
-			numdofs=1;
-			break;
-		case HydrologyShreveAnalysisEnum:
-			numdofs=1;
-			break;
-		case MeltingAnalysisEnum:
-			numdofs=1;
-			break;
-		case MasstransportAnalysisEnum:
-			numdofs=1;
-			break;
-		case FreeSurfaceTopAnalysisEnum:
-			numdofs=1;
-			break;
-		case FreeSurfaceBaseAnalysisEnum:
-			numdofs=1;
-			break;
-		case ExtrudeFromBaseAnalysisEnum:
-			numdofs=1;
-			break;
-		case ExtrudeFromTopAnalysisEnum:
-			numdofs=1;
-			break;
-		case GiaAnalysisEnum:
-			numdofs=1;
-			break;
-		case DamageEvolutionAnalysisEnum:
-			numdofs=1;
-			break;
-		case BalancethicknessAnalysisEnum:
-			numdofs=1;
-			break;
-		case BalancevelocityAnalysisEnum:
-			numdofs=1;
-			break;
-		case SmoothedSurfaceSlopeXAnalysisEnum:
-			numdofs=1;
-			break;
-		case SmoothedSurfaceSlopeYAnalysisEnum:
-			numdofs=1;
-			break;
-		default:
-			_error_("analysis type: " << analysis_type << " (" << EnumToStringx(analysis_type) << ") not implemented yet");
-	}
-
-	/*Now initialize the index*/
-	index->Init(numdofs,doftype);
-
-	/*Clean up*/
-	 xDelete<int>(doftype);
-}
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16533)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16534)
@@ -170,6 +170,3 @@
 void UpdateCounters(IoModel* iomodel,Nodes** pnodes,Loads** ploads, Constraints** pconstraints);
 
-/*Distribution of dofs: */
-void DistributeNumDofs(DofIndexing* index,int analysis_type,int node_type,int mesh_type);
-
 #endif
Index: /issm/trunk-jpl/src/c/shared/Enum/Synchronize.sh
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Synchronize.sh	(revision 16533)
+++ /issm/trunk-jpl/src/c/shared/Enum/Synchronize.sh	(revision 16534)
@@ -104,4 +104,36 @@
 END
 #}}}
+##Build EnumToAnalysis.cpp {{{
+##Header
+#cat <<END > $ISSM_DIR/src/c/analyses/EnumToAnalysis.cpp
+#/*
+#* \file EnumToAnalysis.cpp
+#* \brief: output class depending on enum
+#*
+#*   WARNING: DO NOT MODIFY THIS FILE
+#*            this file has been automatically generated by Synchronize.sh
+#*            Please read README for more information
+#*/
+#
+##include "./analyses.h"
+##include "../shared/shared.h"
+#
+#Analysis* EnumToAnalysis(int analysis_enum){
+#
+#	switch(analysis_enum){
+#END
+##core
+#cat temp | grep [a-z]Analysis | \
+#	grep -v DefaultAnalysis | grep -v FlaimAnalysis | grep -v SurfaceSlopeAnalysis | grep -v BedSlopeAnalysis | \
+#	awk '{print "\t\t#ifdef _HAVE_"toupper(substr($1,1,length($1)-12))"_\n\t\t" "case " $1" : return new " substr($1,1,length($1)-4) "();\n\t\t#endif"}' \
+#		>> $ISSM_DIR/src/c/analyses/EnumToAnalysis.cpp
+#
+##Footer
+#cat <<END >> $ISSM_DIR/src/c/analyses/EnumToAnalysis.cpp
+#default : _error_("enum provided not supported ("<<EnumToStringx(analysis_enum)<<")");
+#	}
+#}
+#END
+##}}}
 #Build EnumDefinitions.py{{{
 cat <<END > $ISSM_DIR/src/m/enum/EnumDefinitions.py
