Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 22408)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 22409)
@@ -276,5 +276,5 @@
 				/*Deal with regional output: {{{*/
 
-				/*masscon variables: */
+				/*regional output variables: */
 				int          numout;
 				char**       reg_name_s               = NULL;
@@ -292,5 +292,5 @@
 				for(j=0;j<numout;j++){
 
-					/*Create a masscon object: */
+					/*Create a regional output object: */
 					output_definitions->AddObject(new Regionaloutput(reg_name_s[j],StringToEnumx(reg_definitionstring_s[j]),reg_outputnamestring_s[j],reg_mask_s[j],reg_mask_M_s[j]));
 
@@ -313,7 +313,79 @@
 				xDelete<char*>(reg_outputnamestring_s);
 				xDelete<char*>(reg_definitionstring_s);
-			}
 			/*}}}*/
-			else _error_("output definition enum " << output_definition_enums[i] << " not supported yet!");
+			}
+			else if (output_definition_enums[i]==NumberedcostfunctionEnum){
+				/*Deal with numbered cost function: {{{*/
+
+				/*Intermediary*/
+				int    numout;
+				char **ncf_name_s             = NULL;
+				char **ncf_definitionstring_s = NULL;
+				int    cost_function ,domaintype;
+				int    num_cost_functions;
+				char **cost_functions         = NULL;
+				int    num_costfunc;
+				char **cm_responses           = NULL;
+
+				/*Process cost functions and convert from string to enums*/
+				iomodel->FindConstant(&num_cost_functions,"md.numberedcostfunction.num_cost_functions");
+				iomodel->FindConstant(&cost_functions,&num_cost_functions,"md.numberedcostfunction.cost_functions");
+				if(num_cost_functions<1) _error_("No cost functions found");
+				int* cost_function_enums=xNew<int>(num_cost_functions);
+				for(int i=0;i<num_cost_functions;++i){
+					cost_function_enums[i]=StringToEnumx(cost_functions[i]);
+				}
+
+				iomodel->FetchData(1,"md.numberedcostfunction.cost_functions_coefficients");
+
+				iomodel->FetchMultipleData(&ncf_name_s,&numout,"md.numberedcostfunction.name");
+				iomodel->FetchMultipleData(&ncf_definitionstring_s,&numout,"md.numberedcostfunction.definitionstring");
+				if(numout>1) _error_("not implemented yet, check code here");
+
+				/*Fetch Observations */
+				iomodel->FindConstant(&domaintype,"md.mesh.domain_type");
+				for(int i=0;i<num_cost_functions;i++){
+					cost_function=cost_function_enums[i];
+					if(     cost_function==ThicknessAbsMisfitEnum) iomodel->FetchDataToInput(elements,"md.numberedcostfunction.thickness_obs",InversionThicknessObsEnum);
+					else if(cost_function==SurfaceAbsMisfitEnum)   iomodel->FetchDataToInput(elements,"md.numberedcostfunction.surface_obs",InversionSurfaceObsEnum);
+					else if(cost_function==SurfaceAbsVelMisfitEnum
+							|| cost_function==SurfaceRelVelMisfitEnum
+							|| cost_function==SurfaceLogVelMisfitEnum
+							|| cost_function==SurfaceLogVxVyMisfitEnum
+							|| cost_function==SurfaceAverageVelMisfitEnum){
+						iomodel->FetchDataToInput(elements,"md.numberedcostfunction.vx_obs",InversionVxObsEnum);
+						if(domaintype!=Domain2DverticalEnum) iomodel->FetchDataToInput(elements,"md.numberedcostfunction.vy_obs",InversionVyObsEnum);
+					}
+
+				}
+
+				for(j=0;j<numout;j++){
+
+					output_definitions->AddObject(new Numberedcostfunction(ncf_name_s[j],StringToEnumx(ncf_definitionstring_s[j]),num_costfunc,cost_function_enums));
+
+				}
+
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.num_cost_functions",InversionNumCostFunctionsEnum));
+				
+				iomodel->FindConstant(&cm_responses,&num_costfunc,"md.inversion.cost_functions");
+				//if(num_costfunc<1) error ("no cost functions found");
+				int* costfunc_enums=xNew<int>(num_costfunc);
+				for(int i=0;i<num_costfunc;i++){
+						costfunc_enums[i]=StringToEnumx(cm_responses[i]);
+						xDelete<char>(cm_responses[i]);
+					}
+				xDelete<char*>(cm_responses);
+				
+				parameters->AddObject(new IntVecParam(InversionCostFunctionsEnum,costfunc_enums,num_costfunc));
+				xDelete<int>(costfunc_enums);
+
+				/*Free data: */
+				iomodel->DeleteData(1,"md.inversion.cost_functions_coefficients");
+				xDelete<int>(cost_function_enums);
+				for(int i=0;i<num_cost_functions;i++) xDelete<char>(cost_functions[i]);
+				xDelete<char*>(cost_functions);
+			}
+			/*}}}*/
+		else _error_("output definition enum " << EnumToStringx(output_definition_enums[i]) << " not supported yet!");
 		}
 	}
@@ -323,3 +395,4 @@
 	delete output_definitions;
 	xDelete<int>(output_definition_enums);
+
 }
