Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 17099)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 17100)
@@ -153,5 +153,5 @@
 	return shelf;
 }/*}}}*/
-void Element::ResultInterpolation(int* pinterpolation,int output_enum){/*{{{*/
+void Element::ResultInterpolation(int* pinterpolation,int* pnodesperelement,int output_enum){/*{{{*/
 
 	Input* input=this->inputs->GetInput(output_enum);
@@ -194,5 +194,6 @@
 
 	/*Assign output pointer*/
-	*pinterpolation = input->GetResultInterpolation();
+	*pinterpolation   = input->GetResultInterpolation();
+	*pnodesperelement = input->GetResultNumberOfNodes();
 }/*}}}*/
 void Element::ResultToVector(Vector<IssmDouble>* vector,int output_enum){/*{{{*/
@@ -242,4 +243,12 @@
 	}
 } /*}}}*/
+void Element::ResultToPatch(IssmDouble* values,int nodesperelement,int output_enum){/*{{{*/
+
+	Input* input=this->inputs->GetInput(output_enum);
+	if(!input) _error_("input "<<EnumToStringx(output_enum)<<" not found in element");
+
+	input->ResultToPatch(values,nodesperelement,this->Sid());
+
+} /*}}}*/
 IssmDouble Element::TMeltingPoint(IssmDouble pressure){/*{{{*/
 	_assert_(matpar);
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 17099)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 17100)
@@ -65,6 +65,7 @@
 		void       GetVerticesConnectivityList(int* connectivitylist);
 		bool       IsFloating(); 
-		void       ResultInterpolation(int* pinterpolation,int output_enum);
+		void       ResultInterpolation(int* pinterpolation,int*nodesperelement,int output_enum);
 		void       ResultToVector(Vector<IssmDouble>* vector,int output_enum);
+		void       ResultToPatch(IssmDouble* values,int nodesperelement,int output_enum);
 		void       StrainRateSSA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
 		void       StrainRateHO(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 17099)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 17100)
@@ -22,5 +22,4 @@
 #include "../modules/ConfigureObjectsx/ConfigureObjectsx.h"
 #include "../modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.h"
-#include "../modules/OutputResultsx/OutputResultsx.h"
 #include "../modules/GetVectorFromInputsx/GetVectorFromInputsx.h"
 #include "../modules/InputUpdateFromVectorx/InputUpdateFromVectorx.h"
@@ -471,5 +470,5 @@
 
 	/*Intermediaries*/
-	bool        isvec;
+	bool        isvec,results_on_nodes;
 	int         step,output_enum;
 	IssmDouble  time;
@@ -484,4 +483,5 @@
 	parameters->FindParam(&step,StepEnum);
 	parameters->FindParam(&time,TimeEnum);
+	parameters->FindParam(&results_on_nodes,SettingsResultsOnNodesEnum);
 
 	/*Go through all requested output*/
@@ -541,29 +541,52 @@
 
 					/*Vector layout*/
-					int interpolation,size;
+					int interpolation,nodesperelement,size;
 
 					/*Get interpolation (and compute input if necessary)*/
 					for(int j=0;j<elements->Size();j++){
 						Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(j));
-						element->ResultInterpolation(&interpolation,output_enum);
+						element->ResultInterpolation(&interpolation,&nodesperelement,output_enum);
 					}
 
-					/*Allocate vector depending on interpolation*/
-					switch(interpolation){
-						case P0Enum: size = this->elements->NumberOfElements(); break;
-						case P1Enum: size = this->vertices->NumberOfVertices(); break;
-						default:     _error_("Interpolation "<<EnumToStringx(interpolation)<<" not supported yet");
+					if(results_on_nodes){
+
+						/*Allocate matrices*/
+						int         nbe       = this->elements->NumberOfElements();
+						IssmDouble* values    = xNew<IssmDouble>(nbe*nodesperelement);
+						IssmDouble* allvalues = xNew<IssmDouble>(nbe*nodesperelement);
+
+						/*Fill-in matrix*/
+						for(int j=0;j<elements->Size();j++){
+							Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(j));
+							element->ResultToPatch(values,nodesperelement,output_enum);
+						}
+
+						/*Gather from all cpus*/
+						MPI_Allreduce((void*)values,(void*)allvalues,nbe*nodesperelement,MPI_DOUBLE,MPI_SUM,MPI_COMM_WORLD);
+						xDelete<IssmDouble>(values);
+
+						if(save_results)results->AddResult(new GenericExternalResult<IssmDouble*>(results->Size()+1,output_enum,allvalues,nbe,nodesperelement,step,time));
 
 					}
-					Vector<IssmDouble> *vector_result = new Vector<IssmDouble>(size);
-
-					/*Fill in vector*/
-					for(int j=0;j<elements->Size();j++){
-						Element* element=(Element*)elements->GetObjectByOffset(j);
-						element->ResultToVector(vector_result,output_enum);
+					else{
+
+						/*Allocate vector depending on interpolation*/
+						switch(interpolation){
+							case P0Enum: size = this->elements->NumberOfElements(); break;
+							case P1Enum: size = this->vertices->NumberOfVertices(); break;
+							default:     _error_("Interpolation "<<EnumToStringx(interpolation)<<" not supported yet");
+
+						}
+						Vector<IssmDouble> *vector_result = new Vector<IssmDouble>(size);
+
+						/*Fill in vector*/
+						for(int j=0;j<elements->Size();j++){
+							Element* element=(Element*)elements->GetObjectByOffset(j);
+							element->ResultToVector(vector_result,output_enum);
+						}
+						vector_result->Assemble();
+
+						if(save_results)results->AddResult(new GenericExternalResult<Vector<IssmDouble>*>(results->Size()+1,output_enum,vector_result,step,time));
 					}
-					vector_result->Assemble();
-
-					if (save_results)results->AddResult(new GenericExternalResult<Vector<IssmDouble>*>(results->Size()+1,output_enum,vector_result,step,time));
 					isvec = true;
 					break;
Index: /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 17099)
+++ /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 17100)
@@ -36,4 +36,6 @@
 		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
 		int  GetResultInterpolation(void){return P0Enum;};
+		int  GetResultNumberOfNodes(void){return 1;};
+		void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");};
 		void Configure(Parameters* parameters);
 		void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 17099)
+++ /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 17100)
@@ -146,4 +146,11 @@
 }
 /*}}}*/
+/*FUNCTION ControlInput::GetResultNumberOfNodes{{{*/
+int  ControlInput::GetResultNumberOfNodes(void){
+
+	return values->GetResultNumberOfNodes();
+
+}
+/*}}}*/
 /*FUNCTION ControlInput::GetGradient{{{*/
 void ControlInput::GetGradient(Vector<IssmDouble>* gradient_vec,int* doflist){
Index: /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 17099)
+++ /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 17100)
@@ -77,4 +77,6 @@
 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
 		int  GetResultInterpolation(void);
+		int  GetResultNumberOfNodes(void);
+		void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");};
 		void GetGradient(Vector<IssmDouble>* gradient_vec,int* doflist);
 		void ScaleGradient(IssmDouble scale);
Index: /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 17099)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 17100)
@@ -72,4 +72,6 @@
 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist){_error_("not implemented yet");};
 		int GetResultInterpolation(void){_error_("not implemented yet");};
+		int GetResultNumberOfNodes(void){_error_("not implemented yet");};
+		void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");};
 		void GetGradient(Vector<IssmDouble>* gradient_vec,int* doflist){_error_("not implemented yet");};
 		void ScaleGradient(IssmDouble scale){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 17099)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 17100)
@@ -39,4 +39,6 @@
 		Input* PointwiseMax(Input* inputB);
 		int  GetResultInterpolation(void){return P0Enum;};
+		int  GetResultNumberOfNodes(void){return 1;};
+		void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");};
 		void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
 		void Configure(Parameters* parameters);
Index: /issm/trunk-jpl/src/c/classes/Inputs/Input.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/Input.h	(revision 17099)
+++ /issm/trunk-jpl/src/c/classes/Inputs/Input.h	(revision 17100)
@@ -46,5 +46,5 @@
 		virtual IssmDouble Max(void)=0;
 		virtual IssmDouble Min(void)=0;
-		virtual void Set(IssmDouble setvalue)=0;
+		virtual void   Set(IssmDouble setvalue)=0;
 		virtual void   Scale(IssmDouble scale_factor)=0;
 		virtual void   AXPY(Input* xinput,IssmDouble scalar)=0;
@@ -59,5 +59,7 @@
 		virtual Input* PointwiseMax(Input* inputmax)=0;
 		virtual Input* PointwiseMin(Input* inputmin)=0;
-		virtual int GetResultInterpolation(void)=0;
+		virtual int  GetResultInterpolation(void)=0;
+		virtual int  GetResultNumberOfNodes(void)=0;
+		virtual void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");};
 };
 #endif
Index: /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 17099)
+++ /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 17100)
@@ -40,4 +40,6 @@
 		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
 		int  GetResultInterpolation(void){return P0Enum;};
+		int  GetResultNumberOfNodes(void){return 1;};
+		void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");};
 		void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
 		void Configure(Parameters* parameters);
Index: /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 17099)
+++ /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 17100)
@@ -135,4 +135,11 @@
 }
 /*}}}*/
+/*FUNCTION PentaInput::GetResultNumberOfNodes{{{*/
+int  PentaInput::GetResultNumberOfNodes(void){
+
+	return this->NumberofNodes();;
+
+}
+/*}}}*/
 
 /*Object functions*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 17099)
+++ /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 17100)
@@ -40,4 +40,6 @@
 		Input* PointwiseMax(Input* inputB);
 		int  GetResultInterpolation(void);
+		int  GetResultNumberOfNodes(void);
+		void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");};
 		void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
 		void Configure(Parameters* parameters);
Index: /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 17099)
+++ /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 17100)
@@ -40,4 +40,6 @@
 		Input* PointwiseMax(Input* inputB){_error_("not supported yet");};
 		int  GetResultInterpolation(void){_error_("not implemented");};
+		int  GetResultNumberOfNodes(void){_error_("not implemented");};
+		void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");};
 		void   AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
 		void   Configure(Parameters* parameters);
Index: /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 17099)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 17100)
@@ -352,4 +352,20 @@
 }
 /*}}}*/
+/*FUNCTION TransientInput::GetResultNumberOfNodes{{{*/
+int TransientInput::GetResultNumberOfNodes(void){
+
+	IssmDouble time;
+	int        output;
+
+	parameters->FindParam(&time,TimeEnum);
+	Input* input=GetTimeInput(time);
+	output = input->GetResultNumberOfNodes();
+
+	/*Clean up and return*/
+	delete input;
+	return output;
+
+}
+/*}}}*/
 /*FUNCTION TransientInput::Extrude{{{*/
 void TransientInput::Extrude(void){
Index: /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 17099)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 17100)
@@ -46,4 +46,6 @@
 		Input* PointwiseMax(Input* forcingB){_error_("not implemented yet");};
 		int  GetResultInterpolation(void);
+		int  GetResultNumberOfNodes(void);
+		void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");};
 		void Configure(Parameters* parameters);
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 17099)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 17100)
@@ -122,4 +122,29 @@
 }
 /*}}}*/
+/*FUNCTION TriaInput::GetResultNumberOfNodes{{{*/
+int  TriaInput::GetResultNumberOfNodes(void){
+
+	return this->NumberofNodes();
+
+}
+/*}}}*/
+/*FUNCTION TriaInput::ResultToPatch{{{*/
+void TriaInput::ResultToPatch(IssmDouble* values,int nodesperelement,int sid){
+
+	int numnodes = this->NumberofNodes();
+
+	/*Some checks*/
+	_assert_(values);
+	_assert_(numnodes==nodesperelement);
+
+	/*Fill in arrays*/
+	for(int i=0;i<numnodes;i++){
+		values[sid*numnodes + i] = this->values[i];
+	}
+
+
+
+}
+/*}}}*/
 
 /*Object functions*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 17099)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 17100)
@@ -40,4 +40,6 @@
 		Input* PointwiseMax(Input* inputB);
 		int    GetResultInterpolation(void);
+		int    GetResultNumberOfNodes(void);
+		void   ResultToPatch(IssmDouble* values,int nodesperelement,int sid);
 		void   AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
 		void   Configure(Parameters* parameters);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 17099)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 17100)
@@ -60,4 +60,5 @@
 	parameters->AddObject(iomodel->CopyConstantObject(MeshNumberofelementsEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(MeshNumberofverticesEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(SettingsResultsOnNodesEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(SettingsIoGatherEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(GroundinglineMigrationEnum));
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 17099)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 17100)
@@ -233,4 +233,5 @@
 	RiftsNumriftsEnum,
 	RiftsRiftstructEnum,
+	SettingsResultsOnNodesEnum,
 	SettingsIoGatherEnum,
 	SettingsLowmemEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 17099)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 17100)
@@ -241,4 +241,5 @@
 		case RiftsNumriftsEnum : return "RiftsNumrifts";
 		case RiftsRiftstructEnum : return "RiftsRiftstruct";
+		case SettingsResultsOnNodesEnum : return "SettingsResultsOnNodes";
 		case SettingsIoGatherEnum : return "SettingsIoGather";
 		case SettingsLowmemEnum : return "SettingsLowmem";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 17099)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 17100)
@@ -244,4 +244,5 @@
 	      else if (strcmp(name,"RiftsNumrifts")==0) return RiftsNumriftsEnum;
 	      else if (strcmp(name,"RiftsRiftstruct")==0) return RiftsRiftstructEnum;
+	      else if (strcmp(name,"SettingsResultsOnNodes")==0) return SettingsResultsOnNodesEnum;
 	      else if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum;
 	      else if (strcmp(name,"SettingsLowmem")==0) return SettingsLowmemEnum;
@@ -259,9 +260,9 @@
 	      else if (strcmp(name,"Surface")==0) return SurfaceEnum;
 	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
-	      else if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum;
          else stage=3;
    }
    if(stage==3){
-	      if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum;
+	      if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum;
+	      else if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum;
 	      else if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum;
 	      else if (strcmp(name,"ThermalPenaltyLock")==0) return ThermalPenaltyLockEnum;
@@ -382,9 +383,9 @@
 	      else if (strcmp(name,"BoolInput")==0) return BoolInputEnum;
 	      else if (strcmp(name,"BoolParam")==0) return BoolParamEnum;
-	      else if (strcmp(name,"Contour")==0) return ContourEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"ControlInput")==0) return ControlInputEnum;
+	      if (strcmp(name,"Contour")==0) return ContourEnum;
+	      else if (strcmp(name,"ControlInput")==0) return ControlInputEnum;
 	      else if (strcmp(name,"DatasetInput")==0) return DatasetInputEnum;
 	      else if (strcmp(name,"DoubleInput")==0) return DoubleInputEnum;
@@ -505,9 +506,9 @@
 	      else if (strcmp(name,"ThicknessAbsGradient")==0) return ThicknessAbsGradientEnum;
 	      else if (strcmp(name,"ThicknessAlongGradient")==0) return ThicknessAlongGradientEnum;
-	      else if (strcmp(name,"ThicknessAcrossGradient")==0) return ThicknessAcrossGradientEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"IntMatParam")==0) return IntMatParamEnum;
+	      if (strcmp(name,"ThicknessAcrossGradient")==0) return ThicknessAcrossGradientEnum;
+	      else if (strcmp(name,"IntMatParam")==0) return IntMatParamEnum;
 	      else if (strcmp(name,"RheologyBbarAbsGradient")==0) return RheologyBbarAbsGradientEnum;
 	      else if (strcmp(name,"DragCoefficientAbsGradient")==0) return DragCoefficientAbsGradientEnum;
@@ -628,9 +629,9 @@
 	      else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
 	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
-	      else if (strcmp(name,"XY")==0) return XYEnum;
          else stage=6;
    }
    if(stage==6){
-	      if (strcmp(name,"XYZ")==0) return XYZEnum;
+	      if (strcmp(name,"XY")==0) return XYEnum;
+	      else if (strcmp(name,"XYZ")==0) return XYZEnum;
 	      else if (strcmp(name,"Dense")==0) return DenseEnum;
 	      else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
Index: /issm/trunk-jpl/src/m/classes/settings.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/settings.m	(revision 17099)
+++ /issm/trunk-jpl/src/m/classes/settings.m	(revision 17100)
@@ -6,4 +6,5 @@
 classdef settings
 	properties (SetAccess=public) 
+		results_on_nodes    = 0;
 		io_gather           = 0;
 		lowmem              = 0;
@@ -49,4 +50,5 @@
 		function md = checkconsistency(obj,md,solution,analyses) % {{{
 
+			md = checkfield(md,'fieldname','settings.results_on_nodes','numel',[1],'values',[0 1]);
 			md = checkfield(md,'fieldname','settings.io_gather','numel',[1],'values',[0 1]);
 			md = checkfield(md,'fieldname','settings.lowmem','numel',[1],'values',[0 1]);
@@ -58,4 +60,5 @@
 			disp(sprintf('   general settings parameters:'));
 
+			fielddisplay(obj,'results_on_nodes','results are output for all the nodes of each element');
 			fielddisplay(obj,'io_gather','I/O gathering strategy for result outputs (default 1)');
 			fielddisplay(obj,'lowmem','is the memory limited ? (0 or 1)');
@@ -70,4 +73,5 @@
 		end % }}}
 		function marshall(obj,md,fid) % {{{
+			WriteData(fid,'object',obj,'fieldname','results_on_nodes','format','Boolean');
 			WriteData(fid,'object',obj,'fieldname','io_gather','format','Boolean');
 			WriteData(fid,'object',obj,'fieldname','lowmem','format','Boolean');
Index: /issm/trunk-jpl/src/m/classes/settings.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/settings.py	(revision 17099)
+++ /issm/trunk-jpl/src/m/classes/settings.py	(revision 17100)
@@ -13,4 +13,5 @@
 
 	def __init__(self): # {{{
+		self.results_on_nodes    = 0
 		self.io_gather           = 0
 		self.lowmem              = 0
@@ -25,4 +26,5 @@
 		string="   general settings parameters:"
 
+		string="%s\n%s"%(string,fielddisplay(self,"results_on_nodes","results are output for all the nodes of each element"))
 		string="%s\n%s"%(string,fielddisplay(self,"io_gather","I/O gathering strategy for result outputs (default 1)"))
 		string="%s\n%s"%(string,fielddisplay(self,"lowmem","is the memory limited ? (0 or 1)"))
@@ -51,4 +53,5 @@
 	#}}}
 	def checkconsistency(self,md,solution,analyses):    # {{{
+		md = checkfield(md,'fieldname','settings.results_on_nodes','numel',[1],'values',[0,1])
 		md = checkfield(md,'fieldname','settings.io_gather','numel',[1],'values',[0,1])
 		md = checkfield(md,'fieldname','settings.lowmem','numel',[1],'values',[0,1])
@@ -59,4 +62,5 @@
 	# }}}
 	def marshall(self,md,fid):    # {{{
+		WriteData(fid,'object',self,'fieldname','results_on_nodes','format','Boolean')
 		WriteData(fid,'object',self,'fieldname','io_gather','format','Boolean')
 		WriteData(fid,'object',self,'fieldname','lowmem','format','Boolean')
Index: /issm/trunk-jpl/src/m/enum/EnumDefinitions.py
===================================================================
--- /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 17099)
+++ /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 17100)
@@ -233,4 +233,5 @@
 def RiftsNumriftsEnum(): return StringToEnum("RiftsNumrifts")[0]
 def RiftsRiftstructEnum(): return StringToEnum("RiftsRiftstruct")[0]
+def SettingsResultsOnNodesEnum(): return StringToEnum("SettingsResultsOnNodes")[0]
 def SettingsIoGatherEnum(): return StringToEnum("SettingsIoGather")[0]
 def SettingsLowmemEnum(): return StringToEnum("SettingsLowmem")[0]
Index: /issm/trunk-jpl/src/m/enum/SettingsResultsOnNodesEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SettingsResultsOnNodesEnum.m	(revision 17100)
+++ /issm/trunk-jpl/src/m/enum/SettingsResultsOnNodesEnum.m	(revision 17100)
@@ -0,0 +1,11 @@
+function macro=SettingsResultsOnNodesEnum()
+%SETTINGSRESULTSONNODESENUM - Enum of SettingsResultsOnNodes
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SettingsResultsOnNodesEnum()
+
+macro=StringToEnum('SettingsResultsOnNodes');
