Index: /issm/trunk-jpl/src/c/analyses/stressbalance_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 16460)
+++ /issm/trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 16461)
@@ -88,10 +88,5 @@
 	if(save_results){
 		if(VerboseSolution()) _printf0_("   saving results\n");
-		InputToResultx(femmodel,VxEnum);
-		InputToResultx(femmodel,VyEnum);
-		InputToResultx(femmodel,VelEnum);
-		InputToResultx(femmodel,PressureEnum);
-		if(meshtype==Mesh3DEnum) InputToResultx(femmodel,VzEnum);
-		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
+		femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
 	}
 
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 16460)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 16461)
@@ -63,4 +63,6 @@
 		virtual void   PatchFill(int* pcount, Patch* patch)=0;
 		virtual void   ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results)=0;
+		virtual void   ResultInterpolation(int* pinterpolation,int output_enum)=0;
+		virtual void   ResultToVector(Vector<IssmPDouble>* vector,int output_enum)=0;
 		virtual void   DeleteResults(void)=0;
 		virtual void   Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finite_element)=0;
Index: /issm/trunk-jpl/src/c/classes/Elements/Elements.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Elements.cpp	(revision 16460)
+++ /issm/trunk-jpl/src/c/classes/Elements/Elements.cpp	(revision 16461)
@@ -302,5 +302,5 @@
 
 	local_nelem=this->Size();
-	ISSM_MPI_Allreduce ( (void*)&local_nelem,(void*)&numberofelements,1,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
+	ISSM_MPI_Allreduce((void*)&local_nelem,(void*)&numberofelements,1,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
 
 	return numberofelements;
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16460)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16461)
@@ -3032,4 +3032,79 @@
 		}
 	}
+
+}
+/*}}}*/
+/*FUNCTION Penta::ResultInterpolation{{{*/
+void Penta::ResultInterpolation(int* pinterpolation,int output_enum){
+
+	Input* input=this->inputs->GetInput(output_enum);
+
+	/*If this input is not already in Inputs, maybe it needs to be computed?*/
+	if(!input){
+		switch(output_enum){
+			case ViscousHeatingEnum:
+				this->ViscousHeatingCreateInput();
+				input=this->inputs->GetInput(output_enum);
+				break;
+			case StressTensorxxEnum: 
+				this->ComputeStressTensor();
+				input=this->inputs->GetInput(output_enum);
+				break;
+			case StressTensorxyEnum: 
+				this->ComputeStressTensor();
+				input=this->inputs->GetInput(output_enum);
+				break;
+			case StressTensorxzEnum: 
+				this->ComputeStressTensor();
+				input=this->inputs->GetInput(output_enum);
+				break;
+			case StressTensoryyEnum: 
+				this->ComputeStressTensor();
+				input=this->inputs->GetInput(output_enum);
+				break;
+			case StressTensoryzEnum: 
+				this->ComputeStressTensor();
+				input=this->inputs->GetInput(output_enum);
+				break;
+			case StressTensorzzEnum: 
+				this->ComputeStressTensor();
+				input=this->inputs->GetInput(output_enum);
+				break;
+			default:
+				_error_("input "<<EnumToStringx(output_enum)<<" not found in element");
+		}
+	}
+
+	/*Assign output pointer*/
+	*pinterpolation = input->GetResultInterpolation();
+
+}
+/*}}}*/
+/*FUNCTION Penta::ResultToVector{{{*/
+void Penta::ResultToVector(Vector<IssmPDouble>* vector,int output_enum){
+
+	Input* input=this->inputs->GetInput(output_enum);
+	if(!input) _error_("input "<<EnumToStringx(output_enum)<<" not found in element");
+
+	switch(input->GetResultInterpolation()){
+		case P0Enum:
+			_error_("not implemented...");
+			break;
+		case P1Enum:
+
+			IssmDouble   values[NUMVERTICES];
+			IssmPDouble pvalues[NUMVERTICES]; 
+			int          sidlist[NUMVERTICES];
+
+			GetVertexSidList(&sidlist[0]);
+			GetInputListOnVertices(&values[0],output_enum);
+			for(int i=0;i<NUMVERTICES;i++) pvalues[i] = reCast<IssmPDouble>(values[i]);
+
+			vector->SetValues(NUMVERTICES,sidlist,values,INS_VAL);
+			break;
+		default:
+			_error_("interpolation "<<EnumToStringx(input->GetResultInterpolation())<<" not supported yet");
+	}
+
 
 }
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16460)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16461)
@@ -101,4 +101,6 @@
 		void   RequestedOutput(int output_enum,int step,IssmDouble time);
 		void   ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results);
+		void   ResultInterpolation(int* pinterpolation,int output_enum);
+		void   ResultToVector(Vector<IssmPDouble>* vector,int output_enum);
 		void   PatchFill(int* pcount, Patch* patch);
 		void   PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes);
Index: /issm/trunk-jpl/src/c/classes/Elements/Seg.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16460)
+++ /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16461)
@@ -119,4 +119,6 @@
 		void        PatchFill(int* pcount, Patch* patch){_error_("not implemented yet");};
 		void        PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes){_error_("not implemented yet");};
+		void        ResultInterpolation(int* pinterpolation,int output_enum){_error_("not implemented");};
+		void        ResultToVector(Vector<IssmPDouble>* vector,int output_enum){_error_("not implemented");};
 		void        ResetCoordinateSystem(void){_error_("not implemented yet");};
 		void	      SmbGradients(){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16460)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16461)
@@ -2591,4 +2591,75 @@
 	xDelete<int>(indices);
 	delete gauss;
+}
+/*}}}*/
+/*FUNCTION Tria::ResultInterpolation{{{*/
+void Tria::ResultInterpolation(int* pinterpolation,int output_enum){
+
+	Input* input=this->inputs->GetInput(output_enum);
+
+	/*If this input is not already in Inputs, maybe it needs to be computed?*/
+	if(!input){
+		switch(output_enum){
+			case StressTensorxxEnum: 
+				this->ComputeStressTensor();
+				input=this->inputs->GetInput(output_enum);
+				break;
+			case StressTensorxyEnum: 
+				this->ComputeStressTensor();
+				input=this->inputs->GetInput(output_enum);
+				break;
+			case StressTensorxzEnum: 
+				this->ComputeStressTensor();
+				input=this->inputs->GetInput(output_enum);
+				break;
+			case StressTensoryyEnum: 
+				this->ComputeStressTensor();
+				input=this->inputs->GetInput(output_enum);
+				break;
+			case StressTensoryzEnum: 
+				this->ComputeStressTensor();
+				input=this->inputs->GetInput(output_enum);
+				break;
+			case StressTensorzzEnum: 
+				this->ComputeStressTensor();
+				input=this->inputs->GetInput(output_enum);
+				break;
+			default:
+				_error_("input "<<EnumToStringx(output_enum)<<" not found in element");
+		}
+	}
+
+	/*Assign output pointer*/
+	*pinterpolation = input->GetResultInterpolation();
+
+}
+/*}}}*/
+/*FUNCTION Tria::ResultToVector{{{*/
+void Tria::ResultToVector(Vector<IssmPDouble>* vector,int output_enum){
+
+	Input* input=this->inputs->GetInput(output_enum);
+	if(!input) _error_("input "<<EnumToStringx(output_enum)<<" not found in element");
+
+	switch(input->GetResultInterpolation()){
+		case P0Enum:
+			_error_("not implemented...");
+			break;
+		case P1Enum:
+
+			IssmDouble   values[NUMVERTICES];
+			IssmPDouble pvalues[NUMVERTICES]; 
+			int          sidlist[NUMVERTICES];
+
+			GetVertexSidList(&sidlist[0]);
+			GetInputListOnVertices(&values[0],output_enum);
+			for(int i=0;i<NUMVERTICES;i++) pvalues[i] = reCast<IssmPDouble>(values[i]);
+
+			vector->SetValues(NUMVERTICES,sidlist,values,INS_VAL);
+			break;
+		default:
+			_error_("interpolation "<<EnumToStringx(input->GetResultInterpolation())<<" not supported yet");
+	}
+
+
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16460)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16461)
@@ -108,4 +108,6 @@
 		void        RequestedOutput(int output_enum,int step,IssmDouble time);
 		void        ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results);
+		void        ResultInterpolation(int* pinterpolation,int output_enum);
+		void        ResultToVector(Vector<IssmPDouble>* vector,int output_enum);
 		void        PatchFill(int* pcount, Patch* patch);
 		void        PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes);
Index: /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 16460)
+++ /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 16461)
@@ -350,3 +350,81 @@
 } /*}}}*/
 
+/*Specifics instantiations for Vector*/
+template <> inline GenericExternalResult<Vector<IssmPDouble>*>::GenericExternalResult(int in_id, int in_enum_type,Vector<IssmPDouble>* in_values, int in_M,int in_N,int in_step,IssmDouble in_time){/*{{{*/
+	_error_("instanciation not correct");
+}
+/*}}}*/
+template <> inline GenericExternalResult<Vector<IssmPDouble>*>::GenericExternalResult(int in_id, int in_enum_type,Vector<IssmPDouble>* in_value,int in_step, IssmDouble in_time){ /*{{{*/
+	id=in_id;
+	enum_type=in_enum_type;
+	M=0;
+	N=0;
+
+	step=in_step;
+	time=in_time;
+
+	value = in_value;
+} /*}}}*/
+template <> inline GenericExternalResult<Vector<IssmPDouble>*>::~GenericExternalResult(){ /*{{{*/
+	delete value;
+} /*}}}*/
+template <> inline void GenericExternalResult<Vector<IssmPDouble>*>::Echo(void){ /*{{{*/
+
+	_printf_("GenericExternalResult<IssmPDouble*>:\n");
+	this->GenericEcho();
+	this->value->Echo();
+
+} /*}}}*/
+template <> inline void GenericExternalResult<Vector<IssmPDouble>*>::DeepEcho(void){ /*{{{*/
+
+	this->Echo();
+
+} /*}}}*/
+template <> inline Object* GenericExternalResult<Vector<IssmPDouble>*>::copy(void){ /*{{{*/
+	return new GenericExternalResult<Vector<IssmPDouble>*>(this->id,this->enum_type,this->value,this->step,this->time);
+} /*}}}*/
+template <> inline void GenericExternalResult<Vector<IssmPDouble>*>::WriteData(FILE* fid,bool io_gather){ /*{{{*/
+
+	char *name   = NULL;
+	int   length,rows,cols=1;
+
+	if(!io_gather){
+		_error_("not supported yet");
+	}
+
+	/*Serialize vector*/
+	IssmPDouble* serialvalues = this->value->ToMPISerial();
+	this->value->GetSize(&rows);
+
+	if(IssmComm::GetRank()==0){
+		/*First write enum: */
+		EnumToStringx(&name,this->enum_type);
+		length=(strlen(name)+1)*sizeof(char);
+		fwrite(&length,sizeof(int),1,fid);
+		fwrite(name,length,1,fid);
+		xDelete<char>(name);
+
+		/*Now write time and step: */
+		IssmPDouble passiveDouble=reCast<IssmPDouble>(time);
+		fwrite(&passiveDouble,sizeof(IssmPDouble),1,fid);
+		fwrite(&step,sizeof(int),1,fid);
+
+		/*writing a IssmDouble array, type is 3:*/
+		int type=3;
+		fwrite(&type,sizeof(int),1,fid);
+		fwrite(&rows,sizeof(int),1,fid);
+		fwrite(&cols,sizeof(int),1,fid);
+		fwrite(serialvalues,cols*rows*sizeof(IssmPDouble),1,fid);
+	}
+
+	/*Clean up*/
+	xDelete<IssmPDouble>(serialvalues);
+
+}
+/*}}}*/
+template <> inline int GenericExternalResult<Vector<IssmPDouble>*>::ObjectEnum(void){ /*{{{*/
+	return NoneEnum;
+	/*???? FIXME*/
+} /*}}}*/
+
 #endif  /* _EXTERNAL_RESULTOBJECT_H */
Index: /issm/trunk-jpl/src/c/classes/ExternalResults/Results.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/ExternalResults/Results.cpp	(revision 16460)
+++ /issm/trunk-jpl/src/c/classes/ExternalResults/Results.cpp	(revision 16461)
@@ -37,7 +37,6 @@
 void Results::Write(Parameters* parameters){
 
-	int         i;
-	FILE       *fid          = NULL;
-	bool        io_gather=true;
+	FILE       *fid  = NULL;
+	bool        io_gather;
 
 	/*Recover file descriptor: */
@@ -45,8 +44,6 @@
 	parameters->FindParam(&io_gather,SettingsIoGatherEnum);
 
-	for(i=0;i<this->Size();i++){
+	for(int i=0;i<this->Size();i++){
 		ExternalResult* result=dynamic_cast<ExternalResult*>(this->GetObjectByOffset(i));
-
-		/*write result to disk: */
 		result->WriteData(fid,io_gather);
 	}
@@ -54,5 +51,5 @@
 }
 /*}}}*/
-/*FUNCTION Results::Write{{{*/
+/*FUNCTION Results::AddResult(ElementResult* in_result){{{*/
 int Results::AddResult(ElementResult* in_result){
 
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 16460)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 16461)
@@ -480,9 +480,8 @@
 void FemModel::RequestedOutputsx(char** requested_outputs, int numoutputs){/*{{{*/
 
-	char*    output_string;
-	int      step;
-	IssmDouble   time;
-	IssmDouble   output_value;
-	Element *element      = NULL;
+	char       *output_string;
+	int         step;
+	IssmDouble  time;
+	IssmDouble  output_value;
 
 	/*Get time and step*/
@@ -519,5 +518,5 @@
 				/*create this output in the element inputs, and then transfer to results:*/
 				for(int j=0;j<elements->Size();j++){
-					element=(Element*)elements->GetObjectByOffset(j);
+					Element* element=(Element*)elements->GetObjectByOffset(j);
 					element->RequestedOutput(StringToEnumx(output_string),step,time);
 				}
@@ -525,4 +524,117 @@
 		}
 	}
+}
+/*}}}*/
+void FemModel::RequestedOutputsx(Results **presults,char** requested_outputs, int numoutputs){/*{{{*/
+
+	/*Intermediaries*/
+	bool        isvec;
+	int         step,output_enum;
+	IssmDouble  time;
+	IssmDouble  double_result;
+	char       *output_string = NULL;
+
+	/*recover results*/
+	Results* results = *presults;
+	if(!results) results = new Results();
+
+	/*Get time and step*/
+	parameters->FindParam(&step,StepEnum);
+	parameters->FindParam(&time,TimeEnum);
+
+	/*Go through all requested output*/
+	for(int i=0;i<numoutputs;i++){
+
+		output_string = requested_outputs[i];
+		output_enum   = StringToEnumx(output_string,false);
+		isvec         = false;
+
+		/*If string is not an enum, it is defined in output definitions*/
+		if(output_enum<0){
+			double_result = OutputDefinitionsResponsex(this,output_string);
+		}
+		else{
+			switch(output_enum){
+
+				#ifdef _HAVE_RESPONSES_
+				/*Scalar output*/
+				case IceVolumeEnum:                this->IceVolumex(&double_result);                break;
+				case IceVolumeAboveFloatationEnum: this->IceVolumeAboveFloatationx(&double_result); break;
+				case MinVelEnum:                   this->MinVelx(&double_result);                   break;
+				case MaxVelEnum:                   this->MaxVelx(&double_result);                   break;
+				case MinVxEnum:                    this->MinVxx(&double_result);                    break;
+				case MaxVxEnum:                    this->MaxVxx(&double_result);                    break;
+				case MaxAbsVxEnum:                 this->MaxAbsVxx(&double_result);                 break;
+				case MinVyEnum:                    this->MinVyx(&double_result);                    break;
+				case MaxVyEnum:                    this->MaxVyx(&double_result);                    break;
+				case MaxAbsVyEnum:                 this->MaxAbsVyx(&double_result);                 break;
+				case MinVzEnum:                    this->MinVzx(&double_result);                    break;
+				case MaxVzEnum:                    this->MaxVzx(&double_result);                    break;
+				case MaxAbsVzEnum:                 this->MaxAbsVzx(&double_result);                 break;
+				case MassFluxEnum:                 this->MassFluxx(&double_result);                 break;
+				case TotalSmbEnum:                 this->TotalSmbx(&double_result);                 break;
+
+			   /*Scalar control output*/
+				#ifdef _HAVE_CONTROL_
+				case SurfaceAbsVelMisfitEnum:       SurfaceAbsVelMisfitx(&double_result,elements,nodes,vertices,loads,materials,parameters);        break;
+				case SurfaceRelVelMisfitEnum:       SurfaceRelVelMisfitx(&double_result,elements,nodes,vertices,loads,materials,parameters);        break;
+				case SurfaceLogVelMisfitEnum:       SurfaceLogVelMisfitx(&double_result,elements,nodes,vertices,loads,materials,parameters);        break;
+				case SurfaceLogVxVyMisfitEnum:      SurfaceLogVxVyMisfitx(&double_result,elements,nodes,vertices,loads,materials,parameters);       break;
+				case SurfaceAverageVelMisfitEnum:   SurfaceAverageVelMisfitx(&double_result,this);                                                  break;
+				case ThicknessAbsMisfitEnum:        ThicknessAbsMisfitx(&double_result,elements,nodes,vertices,loads,materials,parameters);         break;
+				case ThicknessAbsGradientEnum:      this->ThicknessAbsGradientx(&double_result);                                                    break;
+				case ThicknessAlongGradientEnum:    ThicknessAlongGradientx(&double_result,elements,nodes,vertices,loads,materials,parameters);     break;
+				case ThicknessAcrossGradientEnum:   ThicknessAcrossGradientx(&double_result,elements,nodes,vertices,loads,materials,parameters);    break;
+				case RheologyBbarAbsGradientEnum:   RheologyBbarAbsGradientx(&double_result,elements,nodes,vertices,loads,materials,parameters);    break;
+				case DragCoefficientAbsGradientEnum:DragCoefficientAbsGradientx(&double_result,elements,nodes,vertices,loads,materials,parameters); break;
+				case BalancethicknessMisfitEnum:    BalancethicknessMisfitx(&double_result);                                                        break;
+				#endif
+
+			   /*Vector */
+				default:
+
+					/*Vector layout*/
+					int interpolation,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);
+					}
+
+					/*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<IssmPDouble> *vector_result = new Vector<IssmDouble>(this->vertices->NumberOfVertices());
+
+					/*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();
+
+					results->AddObject(new GenericExternalResult<Vector<IssmPDouble>*>(results->Size()+1,output_enum,vector_result,step,time));
+					isvec = true;
+					break;
+
+				#else
+				default: _error_("ISSM was not compiled with responses capabilities, exiting!");
+				#endif
+			}
+		}
+
+		/*Add result to Results*/
+		if(!isvec){
+			results->AddObject(new GenericExternalResult<IssmPDouble>(results->Size()+1,output_string,reCast<IssmPDouble>(double_result),step,time));
+		}
+	}
+
+	/*Assign pointer and clean up*/
+	*presults = results;
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/FemModel.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 16460)
+++ /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 16461)
@@ -82,4 +82,5 @@
 		void DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses);
 		#endif
+		void RequestedOutputsx(Results **presults,char** requested_outputs, int numoutputs);
 		void RequestedOutputsx(char** requested_outputs, int numoutputs);
 		void RequestedDependentsx(void);
Index: /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 16460)
+++ /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 16461)
@@ -40,4 +40,5 @@
 		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
 		ElementResult* SpawnResult(int step, IssmDouble time);
+		int  GetResultInterpolation(void){return P0Enum;};
 		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.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 16460)
+++ /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 16461)
@@ -90,4 +90,5 @@
 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
 		ElementResult* SpawnGradient(int step, IssmDouble time);
+		int  GetResultInterpolation(void){_error_("not implemented 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 16460)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 16461)
@@ -86,4 +86,5 @@
 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist){_error_("not implemented yet");};
 		ElementResult* SpawnGradient(int step, IssmDouble time){_error_("not implemented yet");};
+		int GetResultInterpolation(void){_error_("not implemented 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 16460)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 16461)
@@ -39,4 +39,5 @@
 		Input* PointwiseMax(Input* inputB);
 		ElementResult* SpawnResult(int step, IssmDouble time);
+		int  GetResultInterpolation(void){return P0Enum;};
 		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 16460)
+++ /issm/trunk-jpl/src/c/classes/Inputs/Input.h	(revision 16461)
@@ -73,4 +73,5 @@
 		virtual Input* PointwiseMin(Input* inputmin)=0;
 		virtual ElementResult* SpawnResult(int step, IssmDouble time)=0;
+		virtual int GetResultInterpolation(void)=0;
 };
 #endif
Index: /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 16460)
+++ /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 16461)
@@ -40,4 +40,5 @@
 		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
 		ElementResult* SpawnResult(int step, IssmDouble time);
+		int  GetResultInterpolation(void){return P0Enum;};
 		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 16460)
+++ /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 16461)
@@ -137,4 +137,11 @@
 }
 /*}}}*/
+/*FUNCTION PentaInput::GetResultInterpolation{{{*/
+int  PentaInput::GetResultInterpolation(void){
+
+	return P1Enum;
+
+}
+/*}}}*/
 
 /*Object functions*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 16460)
+++ /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 16461)
@@ -40,4 +40,5 @@
 		Input* PointwiseMax(Input* inputB);
 		ElementResult* SpawnResult(int step, IssmDouble time);
+		int  GetResultInterpolation(void);
 		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 16460)
+++ /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 16461)
@@ -40,4 +40,5 @@
 		Input* PointwiseMax(Input* inputB){_error_("not supported yet");};
 		ElementResult* SpawnResult(int step, IssmDouble time){_error_("not supported yet");};
+		int  GetResultInterpolation(void){_error_("not implemented");};
 		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.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 16460)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 16461)
@@ -44,4 +44,5 @@
 		Input* PointwiseMax(Input* forcingB){_error_("not implemented yet");};
 		ElementResult* SpawnResult(int step, IssmDouble time);
+		int  GetResultInterpolation(void){_error_("not implemented");};
 		void Configure(Parameters* parameters);
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 16460)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 16461)
@@ -124,4 +124,11 @@
 }
 /*}}}*/
+/*FUNCTION TriaInput::GetResultInterpolation{{{*/
+int  TriaInput::GetResultInterpolation(void){
+
+	return P1Enum;
+
+}
+/*}}}*/
 
 /*Object functions*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 16460)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 16461)
@@ -40,4 +40,5 @@
 		Input* PointwiseMax(Input* inputB);
 		ElementResult* SpawnResult(int step, IssmDouble time);
+		int    GetResultInterpolation(void);
 		void   AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
 		void   Configure(Parameters* parameters);
