Index: /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h
===================================================================
--- /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h	(revision 9680)
+++ /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h	(revision 9681)
@@ -98,4 +98,24 @@
 	TransientRequestedOutputsEnum,
 	TransientNumRequestedOutputsEnum,
+	InversionIscontrolEnum,
+	InversionControlParametersEnum,
+	InversionCostFunctionsEnum,
+	InversionCostFunctionEnum,
+	InversionCostFunctionsCoefficientsEnum,
+	InversionNstepsEnum,
+	InversionMaxiterPerStepEnum,
+	InversionGradientScalingEnum,
+	InversionGradientOnlyEnum,
+	InversionCostFunctionThresholdEnum,
+	InversionMaxParametersEnum,
+	InversionMinParametersEnum,
+	InversionStepThresholdEnum,
+	InversionNumControlParametersEnum,
+	InversionNumCostFunctionsEnum,
+	InversionVxObsEnum,
+	InversionVyObsEnum,
+	InversionVzObsEnum,
+	InversionVelObsEnum,
+	InversionThicknessObsEnum,
 	DiagnosticSpcvxEnum,
 	DiagnosticSpcvyEnum,
@@ -143,5 +163,4 @@
 	AdjointHorizAnalysisEnum,
 	AdjointBalancethicknessAnalysisEnum,
-	ControlAnalysisEnum,
 	//thermal
 	ThermalSolutionEnum,
@@ -267,8 +286,5 @@
 	BedSlopeYEnum,
 	BoundaryEnum,
-	CmResponseEnum,
-	CmResponsesEnum,
 	ConstantEnum,
-	ControlTypeEnum,
 	ConvergedEnum,
 	ElementonbedEnum,
@@ -309,20 +325,15 @@
 	ThicknessEnum,
 	ThicknessCoeffEnum,
-	ThicknessObsEnum,
 	TypeEnum,
 	VelEnum,
-	VelObsEnum,
 	VxAverageEnum,
 	VxEnum,
-	VxObsEnum,
 	VxPicardEnum,
 	QmuVxEnum,
 	VyAverageEnum,
 	VyEnum,
-	VyObsEnum,
 	VyPicardEnum,
 	QmuVyEnum,
 	VzEnum,
-	VzObsEnum,
 	VzPicardEnum,
 	VzMacAyealEnum,
@@ -330,5 +341,4 @@
 	VzStokesEnum,
 	QmuVzEnum,
-	WeightsEnum,
 	/*}}}*/
 	/*Element types{{{1*/
@@ -388,8 +398,4 @@
 	ColinearEnum,
 	SeparateEnum,
-	CmGradientEnum,
-	CmJumpEnum,
-	CmMaxEnum,
-	CmMinEnum,
 	AdjointEnum,
 	GradientEnum,
@@ -401,5 +407,4 @@
 	ControlSteadyEnum,
 	DimEnum,
-	EpsCmEnum,
 	NumberOfElementsEnum,
 	NumberOfVerticesEnum,
@@ -454,5 +459,4 @@
 	/*Temporary*/
 	NumberOfElements2DEnum,
-	NumControlTypeEnum,
 	YEnum,
 	NumberOfNodes2DEnum,
@@ -462,12 +466,7 @@
 	Elements2DEnum,
 	XEnum,
-	NumCmResponsesEnum,
 	ElementconnectivityEnum,
 	NumlayersEnum,
 	LowerelementsEnum,
-	NstepsEnum,
-	MaxiterEnum,
-	TolxEnum,
-	OptscalEnum,
 	OutputfilenameEnum,
 	WaterfractionEnum,
Index: /issm/trunk/src/c/EnumDefinitions/EnumToModelField.cpp
===================================================================
--- /issm/trunk/src/c/EnumDefinitions/EnumToModelField.cpp	(revision 9680)
+++ /issm/trunk/src/c/EnumDefinitions/EnumToModelField.cpp	(revision 9681)
@@ -19,7 +19,7 @@
 		case BalancethicknessThickeningRateEnum: return "dhdt";
 		case VxEnum : return "vx";
-		case VxObsEnum : return "vx_obs";
+		case InversionVxObsEnum : return "vx_obs";
 		case VyEnum : return "vy";
-		case VyObsEnum : return "vy_obs";
+		case InversionVyObsEnum : return "vy_obs";
 		case BasalforcingsMeltingRateEnum : return "basal_melting_rate";
       case SurfaceforcingsAccumulationRateEnum : return "surface_accumulation_rate";
Index: /issm/trunk/src/c/modules/CostFunctionx/CostFunctionx.cpp
===================================================================
--- /issm/trunk/src/c/modules/CostFunctionx/CostFunctionx.cpp	(revision 9680)
+++ /issm/trunk/src/c/modules/CostFunctionx/CostFunctionx.cpp	(revision 9681)
@@ -24,5 +24,5 @@
 	
 	/*Recover parameters*/
-	parameters->FindParam(&num_responses,NumCmResponsesEnum);
+	parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
 	parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
 
Index: /issm/trunk/src/c/modules/Dakotax/SpawnCoreParallel.cpp
===================================================================
--- /issm/trunk/src/c/modules/Dakotax/SpawnCoreParallel.cpp	(revision 9680)
+++ /issm/trunk/src/c/modules/Dakotax/SpawnCoreParallel.cpp	(revision 9681)
@@ -57,5 +57,5 @@
 	femmodel->parameters->FindParam(&responses_descriptors,&numresponsedescriptors,QmuResponsedescriptorsEnum);
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
-	femmodel->parameters->FindParam(&control_analysis,ControlAnalysisEnum);
+	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
 
 	/* only cpu 0, running dakota is providing us with variables and variables_descriptors and numresponses: broadcast onto other cpus: */
Index: /issm/trunk/src/c/modules/EnumToStringx/EnumToStringx.cpp
===================================================================
--- /issm/trunk/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 9680)
+++ /issm/trunk/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 9681)
@@ -102,4 +102,24 @@
 		case TransientRequestedOutputsEnum : return "TransientRequestedOutputs";
 		case TransientNumRequestedOutputsEnum : return "TransientNumRequestedOutputs";
+		case InversionIscontrolEnum : return "InversionIscontrol";
+		case InversionControlParametersEnum : return "InversionControlParameters";
+		case InversionCostFunctionsEnum : return "InversionCostFunctions";
+		case InversionCostFunctionEnum : return "InversionCostFunction";
+		case InversionCostFunctionsCoefficientsEnum : return "InversionCostFunctionsCoefficients";
+		case InversionNstepsEnum : return "InversionNsteps";
+		case InversionMaxiterPerStepEnum : return "InversionMaxiterPerStep";
+		case InversionGradientScalingEnum : return "InversionGradientScaling";
+		case InversionGradientOnlyEnum : return "InversionGradientOnly";
+		case InversionCostFunctionThresholdEnum : return "InversionCostFunctionThreshold";
+		case InversionMaxParametersEnum : return "InversionMaxParameters";
+		case InversionMinParametersEnum : return "InversionMinParameters";
+		case InversionStepThresholdEnum : return "InversionStepThreshold";
+		case InversionNumControlParametersEnum : return "InversionNumControlParameters";
+		case InversionNumCostFunctionsEnum : return "InversionNumCostFunctions";
+		case InversionVxObsEnum : return "InversionVxObs";
+		case InversionVyObsEnum : return "InversionVyObs";
+		case InversionVzObsEnum : return "InversionVzObs";
+		case InversionVelObsEnum : return "InversionVelObs";
+		case InversionThicknessObsEnum : return "InversionThicknessObs";
 		case DiagnosticSpcvxEnum : return "DiagnosticSpcvx";
 		case DiagnosticSpcvyEnum : return "DiagnosticSpcvy";
@@ -139,5 +159,4 @@
 		case AdjointHorizAnalysisEnum : return "AdjointHorizAnalysis";
 		case AdjointBalancethicknessAnalysisEnum : return "AdjointBalancethicknessAnalysis";
-		case ControlAnalysisEnum : return "ControlAnalysis";
 		case ThermalSolutionEnum : return "ThermalSolution";
 		case ThermalAnalysisEnum : return "ThermalAnalysis";
@@ -234,8 +253,5 @@
 		case BedSlopeYEnum : return "BedSlopeY";
 		case BoundaryEnum : return "Boundary";
-		case CmResponseEnum : return "CmResponse";
-		case CmResponsesEnum : return "CmResponses";
 		case ConstantEnum : return "Constant";
-		case ControlTypeEnum : return "ControlType";
 		case ConvergedEnum : return "Converged";
 		case ElementonbedEnum : return "Elementonbed";
@@ -276,20 +292,15 @@
 		case ThicknessEnum : return "Thickness";
 		case ThicknessCoeffEnum : return "ThicknessCoeff";
-		case ThicknessObsEnum : return "ThicknessObs";
 		case TypeEnum : return "Type";
 		case VelEnum : return "Vel";
-		case VelObsEnum : return "VelObs";
 		case VxAverageEnum : return "VxAverage";
 		case VxEnum : return "Vx";
-		case VxObsEnum : return "VxObs";
 		case VxPicardEnum : return "VxPicard";
 		case QmuVxEnum : return "QmuVx";
 		case VyAverageEnum : return "VyAverage";
 		case VyEnum : return "Vy";
-		case VyObsEnum : return "VyObs";
 		case VyPicardEnum : return "VyPicard";
 		case QmuVyEnum : return "QmuVy";
 		case VzEnum : return "Vz";
-		case VzObsEnum : return "VzObs";
 		case VzPicardEnum : return "VzPicard";
 		case VzMacAyealEnum : return "VzMacAyeal";
@@ -297,5 +308,4 @@
 		case VzStokesEnum : return "VzStokes";
 		case QmuVzEnum : return "QmuVz";
-		case WeightsEnum : return "Weights";
 		case P0Enum : return "P0";
 		case P1Enum : return "P1";
@@ -340,8 +350,4 @@
 		case ColinearEnum : return "Colinear";
 		case SeparateEnum : return "Separate";
-		case CmGradientEnum : return "CmGradient";
-		case CmJumpEnum : return "CmJump";
-		case CmMaxEnum : return "CmMax";
-		case CmMinEnum : return "CmMin";
 		case AdjointEnum : return "Adjoint";
 		case GradientEnum : return "Gradient";
@@ -353,5 +359,4 @@
 		case ControlSteadyEnum : return "ControlSteady";
 		case DimEnum : return "Dim";
-		case EpsCmEnum : return "EpsCm";
 		case NumberOfElementsEnum : return "NumberOfElements";
 		case NumberOfVerticesEnum : return "NumberOfVertices";
@@ -398,5 +403,4 @@
 		case TransientInputEnum : return "TransientInput";
 		case NumberOfElements2DEnum : return "NumberOfElements2D";
-		case NumControlTypeEnum : return "NumControlType";
 		case YEnum : return "Y";
 		case NumberOfNodes2DEnum : return "NumberOfNodes2D";
@@ -406,12 +410,7 @@
 		case Elements2DEnum : return "Elements2D";
 		case XEnum : return "X";
-		case NumCmResponsesEnum : return "NumCmResponses";
 		case ElementconnectivityEnum : return "Elementconnectivity";
 		case NumlayersEnum : return "Numlayers";
 		case LowerelementsEnum : return "Lowerelements";
-		case NstepsEnum : return "Nsteps";
-		case MaxiterEnum : return "Maxiter";
-		case TolxEnum : return "Tolx";
-		case OptscalEnum : return "Optscal";
 		case OutputfilenameEnum : return "Outputfilename";
 		case WaterfractionEnum : return "Waterfraction";
Index: /issm/trunk/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 9680)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 9681)
@@ -30,15 +30,15 @@
 
 	/*retrieve some parameters: */
-	iomodel->Constant(&control_analysis,ControlAnalysisEnum);
-	parameters->AddObject(new BoolParam(ControlAnalysisEnum,control_analysis));
+	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+	parameters->AddObject(new BoolParam(InversionIscontrolEnum,control_analysis));
 
 	if(control_analysis){
 
 		/*How many controls and how many responses?*/
-		parameters->AddObject(iomodel->CopyConstantObject(NumControlTypeEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(NumCmResponsesEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(NstepsEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(EpsCmEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(CmGradientEnum));
+		parameters->AddObject(iomodel->CopyConstantObject(InversionNumControlParametersEnum));
+		parameters->AddObject(iomodel->CopyConstantObject(InversionNumCostFunctionsEnum));
+		parameters->AddObject(iomodel->CopyConstantObject(InversionNstepsEnum));
+		parameters->AddObject(iomodel->CopyConstantObject(InversionCostFunctionThresholdEnum));
+		parameters->AddObject(iomodel->CopyConstantObject(InversionGradientOnlyEnum));
 
 		/*What solution type?*/
@@ -51,15 +51,15 @@
 
 		/*Now, recover fit, optscal and maxiter as vectors: */
-		iomodel->FetchData(&control_type,NULL,&num_control_type,ControlTypeEnum);
-		iomodel->FetchData(&cm_responses,&nsteps,&num_cm_responses,CmResponsesEnum);
-		iomodel->FetchData(&cm_jump,&nsteps,NULL,CmJumpEnum);
-		iomodel->FetchData(&optscal,NULL,NULL,OptscalEnum);
-		iomodel->FetchData(&maxiter,NULL,NULL,MaxiterEnum);
+		iomodel->FetchData(&control_type,NULL,&num_control_type,InversionControlParametersEnum);
+		iomodel->FetchData(&cm_responses,&nsteps,&num_cm_responses,InversionCostFunctionsEnum);
+		iomodel->FetchData(&cm_jump,&nsteps,NULL,InversionStepThresholdEnum);
+		iomodel->FetchData(&optscal,NULL,NULL,InversionGradientScalingEnum);
+		iomodel->FetchData(&maxiter,NULL,NULL,InversionMaxiterPerStepEnum);
 
-		parameters->AddObject(new IntVecParam(ControlTypeEnum,control_type,num_control_type));
-		parameters->AddObject(new DoubleMatParam(OptscalEnum,optscal,nsteps,num_control_type));
-		parameters->AddObject(new DoubleMatParam(CmResponsesEnum,cm_responses,nsteps,num_cm_responses));
-		parameters->AddObject(new DoubleVecParam(CmJumpEnum,cm_jump,nsteps));
-		parameters->AddObject(new DoubleVecParam(MaxiterEnum,maxiter,nsteps));
+		parameters->AddObject(new IntVecParam(InversionControlParametersEnum,control_type,num_control_type));
+		parameters->AddObject(new DoubleMatParam(InversionGradientScalingEnum,optscal,nsteps,num_control_type));
+		parameters->AddObject(new DoubleMatParam(InversionCostFunctionsEnum,cm_responses,nsteps,num_cm_responses));
+		parameters->AddObject(new DoubleVecParam(InversionStepThresholdEnum,cm_jump,nsteps));
+		parameters->AddObject(new DoubleVecParam(InversionMaxiterPerStepEnum,maxiter,nsteps));
 
 		xfree((void**)&control_type);
Index: /issm/trunk/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 9680)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 9681)
@@ -28,6 +28,6 @@
 	/*Fetch parameters: */
 	iomodel->Constant(&numberofelements,NumberOfElementsEnum);
-	iomodel->Constant(&control_analysis,ControlAnalysisEnum);
-	iomodel->Constant(&num_control_type,NumControlTypeEnum);
+	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+	iomodel->Constant(&num_control_type,InversionNumControlParametersEnum);
 
 	/*Now, return if no control*/
@@ -36,11 +36,11 @@
 	/*Fetch data needed: */
 	iomodel->FetchData(1,ElementsEnum);
-	iomodel->FetchDataToInput(elements,VxObsEnum);
-	iomodel->FetchDataToInput(elements,VyObsEnum); 
-	iomodel->FetchDataToInput(elements,ThicknessObsEnum);
+	iomodel->FetchDataToInput(elements,InversionVxObsEnum);
+	iomodel->FetchDataToInput(elements,InversionVyObsEnum); 
+	iomodel->FetchDataToInput(elements,InversionThicknessObsEnum);
 
-	iomodel->FetchData(4,ControlTypeEnum,WeightsEnum,CmMinEnum,CmMaxEnum);
+	iomodel->FetchData(4,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
 	for(i=0;i<num_control_type;i++){
-		switch((int)iomodel->Data(ControlTypeEnum)[i]){
+		switch((int)iomodel->Data(InversionControlParametersEnum)[i]){
 			case BalancethicknessThickeningRateEnum: iomodel->FetchData(1,BalancethicknessThickeningRateEnum); break;
 			case VxEnum:   iomodel->FetchData(1,VxEnum); break;
@@ -48,5 +48,5 @@
 			case FrictionCoefficientEnum: iomodel->FetchData(1,FrictionCoefficientEnum); break;
 			case MaterialsRheologyBbarEnum:    iomodel->FetchData(1,MaterialsRheologyBEnum); break;
-			default: _error_("Control %s not implemented yet",EnumToStringx((int)iomodel->Data(ControlTypeEnum)[i]));
+			default: _error_("Control %s not implemented yet",EnumToStringx((int)iomodel->Data(InversionControlParametersEnum)[i]));
 		}
 	}
@@ -66,4 +66,4 @@
 	
 	/*Free data: */
-	iomodel->DeleteData(1+4+5,ElementsEnum,ControlTypeEnum,WeightsEnum,CmMinEnum,CmMaxEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum);
+	iomodel->DeleteData(1+4+5,ElementsEnum,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum);
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 9680)
+++ /issm/trunk/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 9681)
@@ -31,5 +31,5 @@
 	iomodel->Constant(&numberofelements,NumberOfElementsEnum);
 	iomodel->Constant(&numberofvertices,NumberOfVerticesEnum);
-	iomodel->Constant(&control_analysis,ControlAnalysisEnum);
+	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
 
 	/*Did we already create the elements? : */
@@ -47,5 +47,5 @@
 	iomodel->FetchData(4,ElementsEnum,ElementconnectivityEnum,MaterialsRheologyBEnum,MaterialsRheologyNEnum);
 	if(dim==3)          iomodel->FetchData(2,UpperelementsEnum,LowerelementsEnum);
-	if(control_analysis)iomodel->FetchData(3,ControlTypeEnum,CmMinEnum,CmMaxEnum);
+	if(control_analysis)iomodel->FetchData(3,InversionControlParametersEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
 	
 	/*Create elements and materials: */
@@ -64,5 +64,5 @@
 	/*Free data: */
 	iomodel->DeleteData(9,ElementsEnum,ElementconnectivityEnum,UpperelementsEnum,LowerelementsEnum,
-				MaterialsRheologyBEnum,MaterialsRheologyNEnum,ControlTypeEnum,CmMinEnum,CmMaxEnum);
+				MaterialsRheologyBEnum,MaterialsRheologyNEnum,InversionControlParametersEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
 
 	/*Add new constrant material property tgo materials, at the end: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 9680)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 9681)
@@ -28,5 +28,5 @@
 	iomodel->Constant(&dim,DimEnum);
 	iomodel->Constant(&numberofelements,NumberOfElementsEnum);
-	iomodel->Constant(&control_analysis,ControlAnalysisEnum);
+	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
 
@@ -59,6 +59,6 @@
 	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
 	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
-	iomodel->FetchDataToInput(elements,VxEnum,VxObsEnum,0);
-	iomodel->FetchDataToInput(elements,VyEnum,VyObsEnum,0);
+	iomodel->FetchDataToInput(elements,VxEnum,InversionVxObsEnum,0);
+	iomodel->FetchDataToInput(elements,VyEnum,InversionVyObsEnum,0);
 	iomodel->FetchDataToInput(elements,BathymetryEnum);
 
@@ -75,20 +75,20 @@
 
 	if(control_analysis){
-		iomodel->FetchDataToInput(elements,VxObsEnum);
-		iomodel->FetchDataToInput(elements,VyObsEnum);
+		iomodel->FetchDataToInput(elements,InversionVxObsEnum);
+		iomodel->FetchDataToInput(elements,InversionVyObsEnum);
 	}
 
 	/*Post-process: */
 	elements->InputDuplicate(VxEnum,VxPicardEnum);
-	elements->InputDuplicate(VxEnum,VxObsEnum);
+	elements->InputDuplicate(VxEnum,InversionVxObsEnum);
 	if(dakota_analysis)elements->InputDuplicate(VxEnum,QmuVxEnum);
 	
 	elements->InputDuplicate(VyEnum,VyPicardEnum);
-	elements->InputDuplicate(VyEnum,VyObsEnum);
+	elements->InputDuplicate(VyEnum,InversionVyObsEnum);
 	if(dakota_analysis)elements->InputDuplicate(VyEnum,QmuVyEnum);
 	
 	if(dim==3){
 		elements->InputDuplicate(VzEnum,VzPicardEnum);
-		elements->InputDuplicate(VzEnum,VzObsEnum);
+		elements->InputDuplicate(VzEnum,InversionVzObsEnum);
 		if(dakota_analysis)elements->InputDuplicate(VzEnum,QmuVzEnum);
 	}
Index: /issm/trunk/src/c/modules/StringToEnumx/StringToEnumx.cpp
===================================================================
--- /issm/trunk/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 9680)
+++ /issm/trunk/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 9681)
@@ -100,4 +100,24 @@
 	else if (strcmp(name,"TransientRequestedOutputs")==0) return TransientRequestedOutputsEnum;
 	else if (strcmp(name,"TransientNumRequestedOutputs")==0) return TransientNumRequestedOutputsEnum;
+	else if (strcmp(name,"InversionIscontrol")==0) return InversionIscontrolEnum;
+	else if (strcmp(name,"InversionControlParameters")==0) return InversionControlParametersEnum;
+	else if (strcmp(name,"InversionCostFunctions")==0) return InversionCostFunctionsEnum;
+	else if (strcmp(name,"InversionCostFunction")==0) return InversionCostFunctionEnum;
+	else if (strcmp(name,"InversionCostFunctionsCoefficients")==0) return InversionCostFunctionsCoefficientsEnum;
+	else if (strcmp(name,"InversionNsteps")==0) return InversionNstepsEnum;
+	else if (strcmp(name,"InversionMaxiterPerStep")==0) return InversionMaxiterPerStepEnum;
+	else if (strcmp(name,"InversionGradientScaling")==0) return InversionGradientScalingEnum;
+	else if (strcmp(name,"InversionGradientOnly")==0) return InversionGradientOnlyEnum;
+	else if (strcmp(name,"InversionCostFunctionThreshold")==0) return InversionCostFunctionThresholdEnum;
+	else if (strcmp(name,"InversionMaxParameters")==0) return InversionMaxParametersEnum;
+	else if (strcmp(name,"InversionMinParameters")==0) return InversionMinParametersEnum;
+	else if (strcmp(name,"InversionStepThreshold")==0) return InversionStepThresholdEnum;
+	else if (strcmp(name,"InversionNumControlParameters")==0) return InversionNumControlParametersEnum;
+	else if (strcmp(name,"InversionNumCostFunctions")==0) return InversionNumCostFunctionsEnum;
+	else if (strcmp(name,"InversionVxObs")==0) return InversionVxObsEnum;
+	else if (strcmp(name,"InversionVyObs")==0) return InversionVyObsEnum;
+	else if (strcmp(name,"InversionVzObs")==0) return InversionVzObsEnum;
+	else if (strcmp(name,"InversionVelObs")==0) return InversionVelObsEnum;
+	else if (strcmp(name,"InversionThicknessObs")==0) return InversionThicknessObsEnum;
 	else if (strcmp(name,"DiagnosticSpcvx")==0) return DiagnosticSpcvxEnum;
 	else if (strcmp(name,"DiagnosticSpcvy")==0) return DiagnosticSpcvyEnum;
@@ -137,5 +157,4 @@
 	else if (strcmp(name,"AdjointHorizAnalysis")==0) return AdjointHorizAnalysisEnum;
 	else if (strcmp(name,"AdjointBalancethicknessAnalysis")==0) return AdjointBalancethicknessAnalysisEnum;
-	else if (strcmp(name,"ControlAnalysis")==0) return ControlAnalysisEnum;
 	else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
 	else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
@@ -232,8 +251,5 @@
 	else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum;
 	else if (strcmp(name,"Boundary")==0) return BoundaryEnum;
-	else if (strcmp(name,"CmResponse")==0) return CmResponseEnum;
-	else if (strcmp(name,"CmResponses")==0) return CmResponsesEnum;
 	else if (strcmp(name,"Constant")==0) return ConstantEnum;
-	else if (strcmp(name,"ControlType")==0) return ControlTypeEnum;
 	else if (strcmp(name,"Converged")==0) return ConvergedEnum;
 	else if (strcmp(name,"Elementonbed")==0) return ElementonbedEnum;
@@ -274,20 +290,15 @@
 	else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
 	else if (strcmp(name,"ThicknessCoeff")==0) return ThicknessCoeffEnum;
-	else if (strcmp(name,"ThicknessObs")==0) return ThicknessObsEnum;
 	else if (strcmp(name,"Type")==0) return TypeEnum;
 	else if (strcmp(name,"Vel")==0) return VelEnum;
-	else if (strcmp(name,"VelObs")==0) return VelObsEnum;
 	else if (strcmp(name,"VxAverage")==0) return VxAverageEnum;
 	else if (strcmp(name,"Vx")==0) return VxEnum;
-	else if (strcmp(name,"VxObs")==0) return VxObsEnum;
 	else if (strcmp(name,"VxPicard")==0) return VxPicardEnum;
 	else if (strcmp(name,"QmuVx")==0) return QmuVxEnum;
 	else if (strcmp(name,"VyAverage")==0) return VyAverageEnum;
 	else if (strcmp(name,"Vy")==0) return VyEnum;
-	else if (strcmp(name,"VyObs")==0) return VyObsEnum;
 	else if (strcmp(name,"VyPicard")==0) return VyPicardEnum;
 	else if (strcmp(name,"QmuVy")==0) return QmuVyEnum;
 	else if (strcmp(name,"Vz")==0) return VzEnum;
-	else if (strcmp(name,"VzObs")==0) return VzObsEnum;
 	else if (strcmp(name,"VzPicard")==0) return VzPicardEnum;
 	else if (strcmp(name,"VzMacAyeal")==0) return VzMacAyealEnum;
@@ -295,5 +306,4 @@
 	else if (strcmp(name,"VzStokes")==0) return VzStokesEnum;
 	else if (strcmp(name,"QmuVz")==0) return QmuVzEnum;
-	else if (strcmp(name,"Weights")==0) return WeightsEnum;
 	else if (strcmp(name,"P0")==0) return P0Enum;
 	else if (strcmp(name,"P1")==0) return P1Enum;
@@ -338,8 +348,4 @@
 	else if (strcmp(name,"Colinear")==0) return ColinearEnum;
 	else if (strcmp(name,"Separate")==0) return SeparateEnum;
-	else if (strcmp(name,"CmGradient")==0) return CmGradientEnum;
-	else if (strcmp(name,"CmJump")==0) return CmJumpEnum;
-	else if (strcmp(name,"CmMax")==0) return CmMaxEnum;
-	else if (strcmp(name,"CmMin")==0) return CmMinEnum;
 	else if (strcmp(name,"Adjoint")==0) return AdjointEnum;
 	else if (strcmp(name,"Gradient")==0) return GradientEnum;
@@ -351,5 +357,4 @@
 	else if (strcmp(name,"ControlSteady")==0) return ControlSteadyEnum;
 	else if (strcmp(name,"Dim")==0) return DimEnum;
-	else if (strcmp(name,"EpsCm")==0) return EpsCmEnum;
 	else if (strcmp(name,"NumberOfElements")==0) return NumberOfElementsEnum;
 	else if (strcmp(name,"NumberOfVertices")==0) return NumberOfVerticesEnum;
@@ -396,5 +401,4 @@
 	else if (strcmp(name,"TransientInput")==0) return TransientInputEnum;
 	else if (strcmp(name,"NumberOfElements2D")==0) return NumberOfElements2DEnum;
-	else if (strcmp(name,"NumControlType")==0) return NumControlTypeEnum;
 	else if (strcmp(name,"Y")==0) return YEnum;
 	else if (strcmp(name,"NumberOfNodes2D")==0) return NumberOfNodes2DEnum;
@@ -404,12 +408,7 @@
 	else if (strcmp(name,"Elements2D")==0) return Elements2DEnum;
 	else if (strcmp(name,"X")==0) return XEnum;
-	else if (strcmp(name,"NumCmResponses")==0) return NumCmResponsesEnum;
 	else if (strcmp(name,"Elementconnectivity")==0) return ElementconnectivityEnum;
 	else if (strcmp(name,"Numlayers")==0) return NumlayersEnum;
 	else if (strcmp(name,"Lowerelements")==0) return LowerelementsEnum;
-	else if (strcmp(name,"Nsteps")==0) return NstepsEnum;
-	else if (strcmp(name,"Maxiter")==0) return MaxiterEnum;
-	else if (strcmp(name,"Tolx")==0) return TolxEnum;
-	else if (strcmp(name,"Optscal")==0) return OptscalEnum;
 	else if (strcmp(name,"Outputfilename")==0) return OutputfilenameEnum;
 	else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum;
Index: /issm/trunk/src/c/objects/Elements/Penta.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 9680)
+++ /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 9681)
@@ -4456,5 +4456,5 @@
 	int        *responses = NULL;
 	int         num_responses,resp;
-	this->parameters->FindParam(&num_responses,NumCmResponsesEnum);
+	this->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
 	this->parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
 
@@ -4780,6 +4780,6 @@
 
 	/*retrieve some parameters: */
-	this->parameters->FindParam(&num_controls,NumControlTypeEnum);
-	this->parameters->FindParam(&control_type,NULL,ControlTypeEnum);
+	this->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
+	this->parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
 
 	for(int i=0;i<num_controls;i++){
@@ -5154,7 +5154,7 @@
 	/*Fetch parameters: */
 	iomodel->Constant(&yts,ConstantsYtsEnum);
-	iomodel->Constant(&control_analysis,ControlAnalysisEnum);
-	iomodel->Constant(&num_control_type,NumControlTypeEnum);
-	iomodel->Constant(&num_cm_responses,NumCmResponsesEnum);
+	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+	iomodel->Constant(&num_control_type,InversionNumControlParametersEnum);
+	iomodel->Constant(&num_cm_responses,InversionNumCostFunctionsEnum);
 
 	/*Checks if debuging*/
@@ -5169,12 +5169,12 @@
 
 	/*Control Inputs*/
-	if (control_analysis && iomodel->Data(ControlTypeEnum)){
+	if (control_analysis && iomodel->Data(InversionControlParametersEnum)){
 		for(i=0;i<num_control_type;i++){
-			switch((int)iomodel->Data(ControlTypeEnum)[i]){
+			switch((int)iomodel->Data(InversionControlParametersEnum)[i]){
 				case BalancethicknessThickeningRateEnum:
 					if (iomodel->Data(BalancethicknessThickeningRateEnum)){
 						for(j=0;j<6;j++)nodeinputs[j]=iomodel->Data(BalancethicknessThickeningRateEnum)[penta_vertex_ids[j]-1]/yts;
-						for(j=0;j<6;j++)cmmininputs[j]=iomodel->Data(CmMinEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
-						for(j=0;j<6;j++)cmmaxinputs[j]=iomodel->Data(CmMaxEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+						for(j=0;j<6;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+						for(j=0;j<6;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
 						this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,PentaVertexInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
@@ -5183,6 +5183,6 @@
 					if (iomodel->Data(VxEnum)){
 						for(j=0;j<6;j++)nodeinputs[j]=iomodel->Data(VxEnum)[penta_vertex_ids[j]-1]/yts;
-						for(j=0;j<6;j++)cmmininputs[j]=iomodel->Data(CmMinEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
-						for(j=0;j<6;j++)cmmaxinputs[j]=iomodel->Data(CmMaxEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+						for(j=0;j<6;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+						for(j=0;j<6;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
 						this->inputs->AddInput(new ControlInput(VxEnum,PentaVertexInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
@@ -5191,6 +5191,6 @@
 					if (iomodel->Data(VyEnum)){
 						for(j=0;j<6;j++)nodeinputs[j]=iomodel->Data(VyEnum)[penta_vertex_ids[j]-1]/yts;
-						for(j=0;j<6;j++)cmmininputs[j]=iomodel->Data(CmMinEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
-						for(j=0;j<6;j++)cmmaxinputs[j]=iomodel->Data(CmMaxEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+						for(j=0;j<6;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+						for(j=0;j<6;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
 						this->inputs->AddInput(new ControlInput(VyEnum,PentaVertexInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
@@ -5199,6 +5199,6 @@
 					if (iomodel->Data(FrictionCoefficientEnum)){
 						for(j=0;j<6;j++)nodeinputs[j]=iomodel->Data(FrictionCoefficientEnum)[penta_vertex_ids[j]-1];
-						for(j=0;j<6;j++)cmmininputs[j]=iomodel->Data(CmMinEnum)[(penta_vertex_ids[j]-1)*num_control_type+i];
-						for(j=0;j<6;j++)cmmaxinputs[j]=iomodel->Data(CmMaxEnum)[(penta_vertex_ids[j]-1)*num_control_type+i];
+						for(j=0;j<6;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i];
+						for(j=0;j<6;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i];
 						this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,PentaVertexInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
@@ -5207,5 +5207,5 @@
 					/*Matice will take care of it*/ break;
 				default:
-					_error_("Control %s not implemented yet",EnumToStringx((int)iomodel->Data(ControlTypeEnum)[i]));
+					_error_("Control %s not implemented yet",EnumToStringx((int)iomodel->Data(InversionControlParametersEnum)[i]));
 			}
 		}
@@ -5244,11 +5244,11 @@
 
 	/*DatasetInputs*/
-	if (control_analysis && iomodel->Data(WeightsEnum)) {
+	if (control_analysis && iomodel->Data(InversionCostFunctionsCoefficientsEnum)) {
 
 		/*Create inputs and add to DataSetInput*/
-		DatasetInput* datasetinput=new DatasetInput(WeightsEnum);
+		DatasetInput* datasetinput=new DatasetInput(InversionCostFunctionsCoefficientsEnum);
 		for(i=0;i<num_cm_responses;i++){
-			for(j=0;j<6;j++)nodeinputs[j]=iomodel->Data(WeightsEnum)[(penta_vertex_ids[j]-1)*num_cm_responses+i];
-			datasetinput->inputs->AddObject(new PentaVertexInput(WeightsEnum,nodeinputs));
+			for(j=0;j<6;j++)nodeinputs[j]=iomodel->Data(InversionCostFunctionsCoefficientsEnum)[(penta_vertex_ids[j]-1)*num_cm_responses+i];
+			datasetinput->inputs->AddObject(new PentaVertexInput(InversionCostFunctionsCoefficientsEnum,nodeinputs));
 		}
 
@@ -6595,7 +6595,7 @@
 				name==VyEnum ||
 				name==VzEnum ||
-				name==VxObsEnum ||
-				name==VyObsEnum ||
-				name==VzObsEnum ||
+				name==InversionVxObsEnum ||
+				name==InversionVyObsEnum ||
+				name==InversionVzObsEnum ||
 				name==TemperatureEnum ||
 				name==FrictionCoefficientEnum ||
@@ -7552,5 +7552,5 @@
 			/*default vx,vy and vz: either observation or 0 */
 			if(!iomodel->Data(VxEnum)){
-				if (iomodel->Data(VxObsEnum)) for(i=0;i<6;i++)nodeinputs[i]=iomodel->Data(VxObsEnum)[penta_vertex_ids[i]-1]/yts;
+				if (iomodel->Data(InversionVxObsEnum)) for(i=0;i<6;i++)nodeinputs[i]=iomodel->Data(InversionVxObsEnum)[penta_vertex_ids[i]-1]/yts;
 				else                 for(i=0;i<6;i++)nodeinputs[i]=0;
 				this->inputs->AddInput(new PentaVertexInput(VxEnum,nodeinputs));
@@ -7559,5 +7559,5 @@
 			}
 			if(!iomodel->Data(VyEnum)){
-				if (iomodel->Data(VyObsEnum)) for(i=0;i<6;i++)nodeinputs[i]=iomodel->Data(VyObsEnum)[penta_vertex_ids[i]-1]/yts;
+				if (iomodel->Data(InversionVyObsEnum)) for(i=0;i<6;i++)nodeinputs[i]=iomodel->Data(InversionVyObsEnum)[penta_vertex_ids[i]-1]/yts;
 				else                 for(i=0;i<6;i++)nodeinputs[i]=0;
 				this->inputs->AddInput(new PentaVertexInput(VyEnum,nodeinputs));
@@ -7566,5 +7566,5 @@
 			}
 			if(!iomodel->Data(VzEnum)){
-				if (iomodel->Data(VzObsEnum)) for(i=0;i<6;i++)nodeinputs[i]=iomodel->Data(VzObsEnum)[penta_vertex_ids[i]-1]/yts;
+				if (iomodel->Data(InversionVzObsEnum)) for(i=0;i<6;i++)nodeinputs[i]=iomodel->Data(InversionVzObsEnum)[penta_vertex_ids[i]-1]/yts;
 				else                 for(i=0;i<6;i++)nodeinputs[i]=0;
 				this->inputs->AddInput(new PentaVertexInput(VzEnum,nodeinputs));
Index: /issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 9680)
+++ /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 9681)
@@ -1456,9 +1456,9 @@
 	/*Retrieve all inputs and parameters*/
 	GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
-	this->parameters->FindParam(&num_responses,NumCmResponsesEnum);
+	this->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
 	this->parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
 	Input* thickness_input    = inputs->GetInput(ThicknessEnum);   _assert_(thickness_input);
-	Input* thicknessobs_input = inputs->GetInput(ThicknessObsEnum);_assert_(thicknessobs_input);
-	Input* weights_input      = inputs->GetInput(WeightsEnum);     _assert_(weights_input);
+	Input* thicknessobs_input = inputs->GetInput(InversionThicknessObsEnum);_assert_(thicknessobs_input);
+	Input* weights_input      = inputs->GetInput(InversionCostFunctionsCoefficientsEnum);     _assert_(weights_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -1524,11 +1524,11 @@
 	/*Retrieve all inputs and parameters*/
 	GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
-	this->parameters->FindParam(&num_responses,NumCmResponsesEnum);
+	this->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
 	this->parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
-	Input* weights_input=inputs->GetInput(WeightsEnum);   _assert_(weights_input);
+	Input* weights_input=inputs->GetInput(InversionCostFunctionsCoefficientsEnum);   _assert_(weights_input);
 	Input* vx_input     =inputs->GetInput(VxEnum);        _assert_(vx_input);
 	Input* vy_input     =inputs->GetInput(VyEnum);        _assert_(vy_input);
-	Input* vxobs_input  =inputs->GetInput(VxObsEnum);     _assert_(vxobs_input);
-	Input* vyobs_input  =inputs->GetInput(VyObsEnum);     _assert_(vyobs_input);
+	Input* vxobs_input  =inputs->GetInput(InversionVxObsEnum);     _assert_(vxobs_input);
+	Input* vyobs_input  =inputs->GetInput(InversionVyObsEnum);     _assert_(vyobs_input);
 
 	/*Get Surface if required by one response*/
@@ -1700,11 +1700,11 @@
 	/*Retrieve all inputs and parameters*/
 	GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
-	this->parameters->FindParam(&num_responses,NumCmResponsesEnum);
+	this->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
 	this->parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
-	Input* weights_input = inputs->GetInput(WeightsEnum);   _assert_(weights_input);
+	Input* weights_input = inputs->GetInput(InversionCostFunctionsCoefficientsEnum);   _assert_(weights_input);
 	Input* vx_input      = inputs->GetInput(VxEnum);        _assert_(vx_input);
 	Input* vy_input      = inputs->GetInput(VyEnum);        _assert_(vy_input);
-	Input* vxobs_input   = inputs->GetInput(VxObsEnum);     _assert_(vxobs_input);
-	Input* vyobs_input   = inputs->GetInput(VyObsEnum);     _assert_(vyobs_input);
+	Input* vxobs_input   = inputs->GetInput(InversionVxObsEnum);     _assert_(vxobs_input);
+	Input* vyobs_input   = inputs->GetInput(InversionVyObsEnum);     _assert_(vyobs_input);
 
 	/*Get Surface if required by one response*/
@@ -2271,5 +2271,5 @@
 	/*Retrieve all inputs we will be needing: */
 	GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
-	Input* weights_input=inputs->GetInput(WeightsEnum);         _assert_(weights_input);
+	Input* weights_input=inputs->GetInput(InversionCostFunctionsCoefficientsEnum);         _assert_(weights_input);
 	Input* drag_input   =inputs->GetInput(FrictionCoefficientEnum); _assert_(drag_input);
 
@@ -2712,5 +2712,5 @@
 	int        *responses = NULL;
 	int         num_responses,resp;
-	this->parameters->FindParam(&num_responses,NumCmResponsesEnum);
+	this->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
 	this->parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
 
@@ -2756,5 +2756,5 @@
 	GetDofList1(&doflist1[0]);
 	Input* rheologyb_input=matice->inputs->GetInput(MaterialsRheologyBbarEnum); _assert_(rheologyb_input);
-	Input* weights_input=inputs->GetInput(WeightsEnum);                _assert_(weights_input);
+	Input* weights_input=inputs->GetInput(InversionCostFunctionsCoefficientsEnum);                _assert_(weights_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -2941,5 +2941,5 @@
 	GetDofList1(&doflist1[0]);
 	Input* dragcoefficient_input=inputs->GetInput(FrictionCoefficientEnum); _assert_(dragcoefficient_input);
-	Input* weights_input=inputs->GetInput(WeightsEnum);                 _assert_(weights_input);
+	Input* weights_input=inputs->GetInput(InversionCostFunctionsCoefficientsEnum);                 _assert_(weights_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -3106,6 +3106,6 @@
 
 	/*retrieve some parameters: */
-	this->parameters->FindParam(&num_controls,NumControlTypeEnum);
-	this->parameters->FindParam(&control_type,NULL,ControlTypeEnum);
+	this->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
+	this->parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
 
 	for(int i=0;i<num_controls;i++){
@@ -3271,8 +3271,8 @@
    
 	/*Get parameters: */
-	iomodel->Constant(&control_analysis,ControlAnalysisEnum);
-	iomodel->Constant(&num_control_type,NumControlTypeEnum);
+	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+	iomodel->Constant(&num_control_type,InversionNumControlParametersEnum);
 	iomodel->Constant(&yts,ConstantsYtsEnum); 
-	iomodel->Constant(&num_cm_responses,NumCmResponsesEnum);
+	iomodel->Constant(&num_cm_responses,InversionNumCostFunctionsEnum);
 
 	/*Recover vertices ids needed to initialize inputs*/
@@ -3282,12 +3282,12 @@
 
 	/*Control Inputs*/
-	if (control_analysis && iomodel->Data(ControlTypeEnum)){
+	if (control_analysis && iomodel->Data(InversionControlParametersEnum)){
 		for(i=0;i<num_control_type;i++){
-			switch((int)iomodel->Data(ControlTypeEnum)[i]){
+			switch((int)iomodel->Data(InversionControlParametersEnum)[i]){
 				case BalancethicknessThickeningRateEnum:
 					if (iomodel->Data(BalancethicknessThickeningRateEnum)){
 						for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data(BalancethicknessThickeningRateEnum)[tria_vertex_ids[j]-1]/yts;
-						for(j=0;j<3;j++)cmmininputs[j]=iomodel->Data(CmMinEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
-						for(j=0;j<3;j++)cmmaxinputs[j]=iomodel->Data(CmMaxEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
+						for(j=0;j<3;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
+						for(j=0;j<3;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
 						this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,TriaVertexInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
@@ -3296,6 +3296,6 @@
 					if (iomodel->Data(VxEnum)){
 						for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data(VxEnum)[tria_vertex_ids[j]-1]/yts;
-						for(j=0;j<3;j++)cmmininputs[j]=iomodel->Data(CmMinEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
-						for(j=0;j<3;j++)cmmaxinputs[j]=iomodel->Data(CmMaxEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
+						for(j=0;j<3;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
+						for(j=0;j<3;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
 						this->inputs->AddInput(new ControlInput(VxEnum,TriaVertexInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
@@ -3304,6 +3304,6 @@
 					if (iomodel->Data(VyEnum)){
 						for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data(VyEnum)[tria_vertex_ids[j]-1]/yts;
-						for(j=0;j<3;j++)cmmininputs[j]=iomodel->Data(CmMinEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
-						for(j=0;j<3;j++)cmmaxinputs[j]=iomodel->Data(CmMaxEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
+						for(j=0;j<3;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
+						for(j=0;j<3;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
 						this->inputs->AddInput(new ControlInput(VyEnum,TriaVertexInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
@@ -3312,6 +3312,6 @@
 					if (iomodel->Data(FrictionCoefficientEnum)){
 						for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data(FrictionCoefficientEnum)[tria_vertex_ids[j]-1];
-						for(j=0;j<3;j++)cmmininputs[j]=iomodel->Data(CmMinEnum)[(tria_vertex_ids[j]-1)*num_control_type+i];
-						for(j=0;j<3;j++)cmmaxinputs[j]=iomodel->Data(CmMaxEnum)[(tria_vertex_ids[j]-1)*num_control_type+i];
+						for(j=0;j<3;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i];
+						for(j=0;j<3;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i];
 						this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,TriaVertexInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
@@ -3320,5 +3320,5 @@
 					/*Matice will take care of it*/ break;
 				default:
-					_error_("Control %s not implemented yet",EnumToStringx((int)iomodel->Data(ControlTypeEnum)[i]));
+					_error_("Control %s not implemented yet",EnumToStringx((int)iomodel->Data(InversionControlParametersEnum)[i]));
 			}
 		}
@@ -3326,11 +3326,11 @@
 
 	/*DatasetInputs*/
-	if (control_analysis && iomodel->Data(WeightsEnum)){
+	if (control_analysis && iomodel->Data(InversionCostFunctionsCoefficientsEnum)){
 
 		/*Create inputs and add to DataSetInput*/
-		DatasetInput* datasetinput=new DatasetInput(WeightsEnum);
+		DatasetInput* datasetinput=new DatasetInput(InversionCostFunctionsCoefficientsEnum);
 		for(i=0;i<num_cm_responses;i++){
-			for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data(WeightsEnum)[(tria_vertex_ids[j]-1)*num_cm_responses+i];
-			datasetinput->inputs->AddObject(new TriaVertexInput(WeightsEnum,nodeinputs));
+			for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data(InversionCostFunctionsCoefficientsEnum)[(tria_vertex_ids[j]-1)*num_cm_responses+i];
+			datasetinput->inputs->AddObject(new TriaVertexInput(InversionCostFunctionsCoefficientsEnum,nodeinputs));
 		}
 
@@ -3986,6 +3986,6 @@
 				name==VxEnum ||
 				name==VyEnum ||
-				name==VxObsEnum ||
-				name==VyObsEnum ||
+				name==InversionVxObsEnum ||
+				name==InversionVyObsEnum ||
 				name==FrictionCoefficientEnum ||
 				name==GradientEnum ||
@@ -4499,5 +4499,5 @@
 	/*Retrieve all inputs we will be needing: */
 	GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
-	Input* weights_input  =inputs->GetInput(WeightsEnum);              _assert_(weights_input);
+	Input* weights_input  =inputs->GetInput(InversionCostFunctionsCoefficientsEnum);              _assert_(weights_input);
 	Input* rheologyb_input=matice->inputs->GetInput(MaterialsRheologyBbarEnum); _assert_(rheologyb_input);
 
@@ -4717,9 +4717,9 @@
 
 	/*Retrieve all inputs we will be needing: */
-	Input* weights_input=inputs->GetInput(WeightsEnum);   _assert_(weights_input);
+	Input* weights_input=inputs->GetInput(InversionCostFunctionsCoefficientsEnum);   _assert_(weights_input);
 	Input* vx_input     =inputs->GetInput(VxEnum);        _assert_(vx_input);
 	Input* vy_input     =inputs->GetInput(VyEnum);        _assert_(vy_input);
-	Input* vxobs_input  =inputs->GetInput(VxObsEnum);     _assert_(vxobs_input);
-	Input* vyobs_input  =inputs->GetInput(VyObsEnum);     _assert_(vyobs_input);
+	Input* vxobs_input  =inputs->GetInput(InversionVxObsEnum);     _assert_(vxobs_input);
+	Input* vyobs_input  =inputs->GetInput(InversionVyObsEnum);     _assert_(vyobs_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -4808,9 +4808,9 @@
 	/*Retrieve all inputs we will be needing: */
 	inputs->GetParameterValue(&S,SurfaceAreaEnum);
-	Input* weights_input=inputs->GetInput(WeightsEnum);   _assert_(weights_input);
+	Input* weights_input=inputs->GetInput(InversionCostFunctionsCoefficientsEnum);   _assert_(weights_input);
 	Input* vx_input     =inputs->GetInput(VxEnum);        _assert_(vx_input);
 	Input* vy_input     =inputs->GetInput(VyEnum);        _assert_(vy_input);
-	Input* vxobs_input  =inputs->GetInput(VxObsEnum);     _assert_(vxobs_input);
-	Input* vyobs_input  =inputs->GetInput(VyObsEnum);     _assert_(vyobs_input);
+	Input* vxobs_input  =inputs->GetInput(InversionVxObsEnum);     _assert_(vxobs_input);
+	Input* vyobs_input  =inputs->GetInput(InversionVyObsEnum);     _assert_(vyobs_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -4871,9 +4871,9 @@
 
 	/*Retrieve all inputs we will be needing: */
-	Input* weights_input=inputs->GetInput(WeightsEnum);   _assert_(weights_input);
+	Input* weights_input=inputs->GetInput(InversionCostFunctionsCoefficientsEnum);   _assert_(weights_input);
 	Input* vx_input     =inputs->GetInput(VxEnum);        _assert_(vx_input);
 	Input* vy_input     =inputs->GetInput(VyEnum);        _assert_(vy_input);
-	Input* vxobs_input  =inputs->GetInput(VxObsEnum);     _assert_(vxobs_input);
-	Input* vyobs_input  =inputs->GetInput(VyObsEnum);     _assert_(vyobs_input);
+	Input* vxobs_input  =inputs->GetInput(InversionVxObsEnum);     _assert_(vxobs_input);
+	Input* vyobs_input  =inputs->GetInput(InversionVyObsEnum);     _assert_(vyobs_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -4936,9 +4936,9 @@
 
 	/*Retrieve all inputs we will be needing: */
-	Input* weights_input=inputs->GetInput(WeightsEnum);   _assert_(weights_input);
+	Input* weights_input=inputs->GetInput(InversionCostFunctionsCoefficientsEnum);   _assert_(weights_input);
 	Input* vx_input     =inputs->GetInput(VxEnum);        _assert_(vx_input);
 	Input* vy_input     =inputs->GetInput(VyEnum);        _assert_(vy_input);
-	Input* vxobs_input  =inputs->GetInput(VxObsEnum);     _assert_(vxobs_input);
-	Input* vyobs_input  =inputs->GetInput(VyObsEnum);     _assert_(vyobs_input);
+	Input* vxobs_input  =inputs->GetInput(InversionVxObsEnum);     _assert_(vxobs_input);
+	Input* vyobs_input  =inputs->GetInput(InversionVyObsEnum);     _assert_(vyobs_input);
 	
 	/* Start  looping on the number of gaussian points: */
@@ -5025,9 +5025,9 @@
 
 	/*Retrieve all inputs we will be needing: */
-	Input* weights_input=inputs->GetInput(WeightsEnum);   _assert_(weights_input);
+	Input* weights_input=inputs->GetInput(InversionCostFunctionsCoefficientsEnum);   _assert_(weights_input);
 	Input* vx_input     =inputs->GetInput(VxEnum);        _assert_(vx_input);
 	Input* vy_input     =inputs->GetInput(VyEnum);        _assert_(vy_input);
-	Input* vxobs_input  =inputs->GetInput(VxObsEnum);     _assert_(vxobs_input);
-	Input* vyobs_input  =inputs->GetInput(VyObsEnum);     _assert_(vyobs_input);
+	Input* vxobs_input  =inputs->GetInput(InversionVxObsEnum);     _assert_(vxobs_input);
+	Input* vyobs_input  =inputs->GetInput(InversionVyObsEnum);     _assert_(vyobs_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -5087,5 +5087,5 @@
 	/*Retrieve all inputs we will be needing: */
 	GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
-	Input* weights_input  =inputs->GetInput(WeightsEnum);   _assert_(weights_input);
+	Input* weights_input  =inputs->GetInput(InversionCostFunctionsCoefficientsEnum);   _assert_(weights_input);
 	Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);
 
@@ -5130,6 +5130,6 @@
 	GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
 	Input* thickness_input   =inputs->GetInput(ThicknessEnum);   _assert_(thickness_input);
-	Input* thicknessobs_input=inputs->GetInput(ThicknessObsEnum);_assert_(thicknessobs_input);
-	Input* weights_input     =inputs->GetInput(WeightsEnum);     _assert_(weights_input);
+	Input* thicknessobs_input=inputs->GetInput(InversionThicknessObsEnum);_assert_(thicknessobs_input);
+	Input* weights_input     =inputs->GetInput(InversionCostFunctionsCoefficientsEnum);     _assert_(weights_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -5265,5 +5265,5 @@
 			/*default vx,vy and vz: either observation or 0 */
 			if(!iomodel->Data(VxEnum)){
-				if (iomodel->Data(VxObsEnum)) for(i=0;i<3;i++)nodeinputs[i]=iomodel->Data(VxObsEnum)[tria_vertex_ids[i]-1]/yts;
+				if (iomodel->Data(InversionVxObsEnum)) for(i=0;i<3;i++)nodeinputs[i]=iomodel->Data(InversionVxObsEnum)[tria_vertex_ids[i]-1]/yts;
 				else                 for(i=0;i<3;i++)nodeinputs[i]=0;
 				this->inputs->AddInput(new TriaVertexInput(VxEnum,nodeinputs));
@@ -5272,5 +5272,5 @@
 			}
 			if(!iomodel->Data(VyEnum)){
-				if (iomodel->Data(VyObsEnum)) for(i=0;i<3;i++)nodeinputs[i]=iomodel->Data(VyObsEnum)[tria_vertex_ids[i]-1]/yts;
+				if (iomodel->Data(InversionVyObsEnum)) for(i=0;i<3;i++)nodeinputs[i]=iomodel->Data(InversionVyObsEnum)[tria_vertex_ids[i]-1]/yts;
 				else                 for(i=0;i<3;i++)nodeinputs[i]=0;
 				this->inputs->AddInput(new TriaVertexInput(VyEnum,nodeinputs));
@@ -5279,5 +5279,5 @@
 			}
 			if(!iomodel->Data(VzEnum)){
-				if (iomodel->Data(VzObsEnum)) for(i=0;i<3;i++)nodeinputs[i]=iomodel->Data(VzObsEnum)[tria_vertex_ids[i]-1]/yts;
+				if (iomodel->Data(InversionVzObsEnum)) for(i=0;i<3;i++)nodeinputs[i]=iomodel->Data(InversionVzObsEnum)[tria_vertex_ids[i]-1]/yts;
 				else                 for(i=0;i<3;i++)nodeinputs[i]=0;
 				this->inputs->AddInput(new TriaVertexInput(VzEnum,nodeinputs));
Index: /issm/trunk/src/c/objects/Materials/Matice.cpp
===================================================================
--- /issm/trunk/src/c/objects/Materials/Matice.cpp	(revision 9680)
+++ /issm/trunk/src/c/objects/Materials/Matice.cpp	(revision 9681)
@@ -661,6 +661,6 @@
 	/*Fetch parameters: */
 	iomodel->Constant(&dim,DimEnum);
-	iomodel->Constant(&control_analysis,ControlAnalysisEnum);
-	iomodel->Constant(&num_control_type,NumControlTypeEnum);
+	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+	iomodel->Constant(&num_control_type,InversionNumControlParametersEnum);
 
 	/*if 2d*/
@@ -686,13 +686,13 @@
 
 		/*Control Inputs*/
-		if (control_analysis && iomodel->Data(ControlTypeEnum)){
+		if (control_analysis && iomodel->Data(InversionControlParametersEnum)){
 			for(i=0;i<num_control_type;i++){
-				switch((int)iomodel->Data(ControlTypeEnum)[i]){
+				switch((int)iomodel->Data(InversionControlParametersEnum)[i]){
 					case MaterialsRheologyBbarEnum:
 						if (iomodel->Data(MaterialsRheologyBEnum)){
-							_assert_(iomodel->Data(MaterialsRheologyBEnum));_assert_(iomodel->Data(CmMinEnum)); _assert_(iomodel->Data(CmMaxEnum)); 
+							_assert_(iomodel->Data(MaterialsRheologyBEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
 							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyBEnum)[int(iomodel->Data(ElementsEnum)[num_vertices*index+j]-1)];
-							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(CmMinEnum)[int(iomodel->Data(ElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
-							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(CmMaxEnum)[int(iomodel->Data(ElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
+							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[int(iomodel->Data(ElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
+							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[int(iomodel->Data(ElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
 							this->inputs->AddInput(new ControlInput(MaterialsRheologyBbarEnum,TriaVertexInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 						}
@@ -725,13 +725,13 @@
 
 		/*Control Inputs*/
-		if (control_analysis && iomodel->Data(ControlTypeEnum)){
+		if (control_analysis && iomodel->Data(InversionControlParametersEnum)){
 			for(i=0;i<num_control_type;i++){
-				switch((int)iomodel->Data(ControlTypeEnum)[i]){
+				switch((int)iomodel->Data(InversionControlParametersEnum)[i]){
 					case MaterialsRheologyBbarEnum:
 						if (iomodel->Data(MaterialsRheologyBEnum)){
-							_assert_(iomodel->Data(MaterialsRheologyBEnum));_assert_(iomodel->Data(CmMinEnum)); _assert_(iomodel->Data(CmMaxEnum)); 
+							_assert_(iomodel->Data(MaterialsRheologyBEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
 							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyBEnum)[int(iomodel->Data(ElementsEnum)[num_vertices*index+j]-1)];
-							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(CmMinEnum)[int(iomodel->Data(ElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
-							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(CmMaxEnum)[int(iomodel->Data(ElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
+							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[int(iomodel->Data(ElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
+							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[int(iomodel->Data(ElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
 							this->inputs->AddInput(new ControlInput(MaterialsRheologyBEnum,PentaVertexInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 						}
Index: /issm/trunk/src/c/shared/Numerics/UnitConversion.cpp
===================================================================
--- /issm/trunk/src/c/shared/Numerics/UnitConversion.cpp	(revision 9680)
+++ /issm/trunk/src/c/shared/Numerics/UnitConversion.cpp	(revision 9681)
@@ -51,11 +51,11 @@
 		case TimeEnum:        scale=1.0/yts;break; //yr
 		case VxEnum:          scale=yts;break; //m/yr
-		case VxObsEnum:       scale=yts;break; //m/yr
+		case InversionVxObsEnum:       scale=yts;break; //m/yr
 		case VyEnum:          scale=yts;break; //m/yr
-		case VyObsEnum:       scale=yts;break; //m/yr
+		case InversionVyObsEnum:       scale=yts;break; //m/yr
 		case VzEnum:          scale=yts;break; //m/yr
-		case VzObsEnum:       scale=yts;break; //m/yr
+		case InversionVzObsEnum:       scale=yts;break; //m/yr
 		case VelEnum:         scale=yts;break; //m/yr
-		case VelObsEnum:      scale=yts;break; //m/yr
+		case InversionVelObsEnum:      scale=yts;break; //m/yr
 		case BalancethicknessThickeningRateEnum:  scale=yts;break; //m/yr
 		case BasalforcingsMeltingRateEnum:        scale=yts;break; //m/yr
Index: /issm/trunk/src/c/solutions/CorePointerFromSolutionEnum.cpp
===================================================================
--- /issm/trunk/src/c/solutions/CorePointerFromSolutionEnum.cpp	(revision 9680)
+++ /issm/trunk/src/c/solutions/CorePointerFromSolutionEnum.cpp	(revision 9681)
@@ -28,5 +28,5 @@
 
 	/*retrieve some parameters: */
-	parameters->FindParam(&control_analysis,ControlAnalysisEnum);
+	parameters->FindParam(&control_analysis,InversionIscontrolEnum);
 	parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
 
Index: /issm/trunk/src/c/solutions/adjointbalancethickness_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/adjointbalancethickness_core.cpp	(revision 9680)
+++ /issm/trunk/src/c/solutions/adjointbalancethickness_core.cpp	(revision 9681)
@@ -19,5 +19,5 @@
 
 	/*retrieve parameters:*/
-	femmodel->parameters->FindParam(&control_analysis,ControlAnalysisEnum);
+	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
 
Index: /issm/trunk/src/c/solutions/adjointdiagnostic_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/adjointdiagnostic_core.cpp	(revision 9680)
+++ /issm/trunk/src/c/solutions/adjointdiagnostic_core.cpp	(revision 9681)
@@ -22,5 +22,5 @@
 	/*retrieve parameters:*/
 	femmodel->parameters->FindParam(&isstokes,FlowequationIsstokesEnum);
-	femmodel->parameters->FindParam(&control_analysis,ControlAnalysisEnum);
+	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
 
Index: /issm/trunk/src/c/solutions/balancethickness_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/balancethickness_core.cpp	(revision 9680)
+++ /issm/trunk/src/c/solutions/balancethickness_core.cpp	(revision 9681)
@@ -24,5 +24,5 @@
 	/*recover parameters: */
 	femmodel->parameters->FindParam(&dim,DimEnum);
-	femmodel->parameters->FindParam(&control_analysis,ControlAnalysisEnum);
+	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
 
Index: /issm/trunk/src/c/solutions/bedslope_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/bedslope_core.cpp	(revision 9680)
+++ /issm/trunk/src/c/solutions/bedslope_core.cpp	(revision 9681)
@@ -21,5 +21,5 @@
 	/*Recover some parameters: */
 	femmodel->parameters->FindParam(&dim,DimEnum);
-	femmodel->parameters->FindParam(&control_analysis,ControlAnalysisEnum);
+	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
 
Index: /issm/trunk/src/c/solutions/control_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/control_core.cpp	(revision 9680)
+++ /issm/trunk/src/c/solutions/control_core.cpp	(revision 9681)
@@ -45,13 +45,13 @@
 
 	/*Recover parameters used throughout the solution*/
-	femmodel->parameters->FindParam(&num_controls,NumControlTypeEnum);
-	femmodel->parameters->FindParam(&num_responses,NumCmResponsesEnum);
-	femmodel->parameters->FindParam(&control_type,NULL,ControlTypeEnum);
-	femmodel->parameters->FindParam(&responses,NULL,NULL,CmResponsesEnum);
-	femmodel->parameters->FindParam(&nsteps,NstepsEnum);
-	femmodel->parameters->FindParam(&maxiter,NULL,MaxiterEnum);
-	femmodel->parameters->FindParam(&cm_jump,NULL,CmJumpEnum);
-	femmodel->parameters->FindParam(&eps_cm,EpsCmEnum);
-	femmodel->parameters->FindParam(&cm_gradient,CmGradientEnum);
+	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
+	femmodel->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+	femmodel->parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
+	femmodel->parameters->FindParam(&responses,NULL,NULL,InversionCostFunctionsEnum);
+	femmodel->parameters->FindParam(&nsteps,InversionNstepsEnum);
+	femmodel->parameters->FindParam(&maxiter,NULL,InversionMaxiterPerStepEnum);
+	femmodel->parameters->FindParam(&cm_jump,NULL,InversionStepThresholdEnum);
+	femmodel->parameters->FindParam(&eps_cm,InversionCostFunctionThresholdEnum);
+	femmodel->parameters->FindParam(&cm_gradient,InversionGradientOnlyEnum);
 	femmodel->parameters->FindParam(&dim,DimEnum);
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
@@ -114,5 +114,5 @@
 
 	_printf_(VerboseControl(),"%s\n","   preparing final solution");
-	femmodel->parameters->SetParam(false,ControlAnalysisEnum); //needed to turn control result output in solutioncore
+	femmodel->parameters->SetParam(false,InversionIscontrolEnum); //needed to turn control result output in solutioncore
 	solutioncore(femmodel);
 
@@ -121,5 +121,5 @@
 		for(i=0;i<num_controls;i++) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,control_type[i]);
 		femmodel->results->AddObject(new DoubleVecExternalResult(femmodel->results->Size()+1,JEnum,J,nsteps,1,0));
-		//femmodel->results->AddObject(new StringExternalResult(femmodel->results->Size()+1,ControlTypeEnum,EnumToStringx(control_type),1,0));
+		//femmodel->results->AddObject(new StringExternalResult(femmodel->results->Size()+1,InversionControlParametersEnum,EnumToStringx(control_type),1,0));
 	}
 
@@ -134,4 +134,4 @@
 	
 	/*control_core might be used in Qmu, so leave everything similar to where it started: */
-	femmodel->parameters->SetParam(true,ControlAnalysisEnum);
+	femmodel->parameters->SetParam(true,InversionIscontrolEnum);
 }
Index: /issm/trunk/src/c/solutions/controlrestart.cpp
===================================================================
--- /issm/trunk/src/c/solutions/controlrestart.cpp	(revision 9680)
+++ /issm/trunk/src/c/solutions/controlrestart.cpp	(revision 9681)
@@ -15,7 +15,7 @@
 
 	/*retrieve output file name: */
-	femmodel->parameters->FindParam(&num_controls,NumControlTypeEnum);
-	femmodel->parameters->FindParam(&control_type,NULL,ControlTypeEnum);
-	femmodel->parameters->FindParam(&nsteps,NstepsEnum);
+	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
+	femmodel->parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
+	femmodel->parameters->FindParam(&nsteps,InversionNstepsEnum);
 	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
 
@@ -26,5 +26,5 @@
 		for(int i=0;i<num_controls;i++) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,control_type[i]);
 		femmodel->results->AddObject(new DoubleVecExternalResult(femmodel->results->Size()+1,JEnum,J,nsteps,1,0));
-		//femmodel->results->AddObject(new StringExternalResult(femmodel->results->Size()+1,ControlTypeEnum,EnumToStringx(control_type),1,0));
+		//femmodel->results->AddObject(new StringExternalResult(femmodel->results->Size()+1,InversionControlParametersEnum,EnumToStringx(control_type),1,0));
 
 		/*write to disk: */
Index: /issm/trunk/src/c/solutions/controltao_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/controltao_core.cpp	(revision 9680)
+++ /issm/trunk/src/c/solutions/controltao_core.cpp	(revision 9681)
@@ -106,5 +106,5 @@
 	/*End Temp*/
 
-	InputUpdateFromConstantx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,SurfaceAbsVelMisfitEnum,CmResponseEnum);
+	InputUpdateFromConstantx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,SurfaceAbsVelMisfitEnum,InversionCostFunctionEnum);
 	InputUpdateFromVectorx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,X,MaterialsRheologyBbarEnum,VertexEnum);
 	adjointdiagnostic_core(user->femmodel);
Index: /issm/trunk/src/c/solutions/diagnostic_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/diagnostic_core.cpp	(revision 9680)
+++ /issm/trunk/src/c/solutions/diagnostic_core.cpp	(revision 9681)
@@ -33,5 +33,5 @@
 	femmodel->parameters->FindParam(&isstokes,FlowequationIsstokesEnum);
 	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
-	femmodel->parameters->FindParam(&control_analysis,ControlAnalysisEnum);
+	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
 	femmodel->parameters->FindParam(&numoutputs,DiagnosticNumRequestedOutputsEnum);
Index: /issm/trunk/src/c/solutions/enthalpy_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/enthalpy_core.cpp	(revision 9680)
+++ /issm/trunk/src/c/solutions/enthalpy_core.cpp	(revision 9681)
@@ -28,5 +28,5 @@
 	femmodel->parameters->FindParam(&final_time,TimesteppingFinalTimeEnum);
 	femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
-	femmodel->parameters->FindParam(&control_analysis,ControlAnalysisEnum);
+	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
 
Index: /issm/trunk/src/c/solutions/gradient_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/gradient_core.cpp	(revision 9680)
+++ /issm/trunk/src/c/solutions/gradient_core.cpp	(revision 9681)
@@ -29,7 +29,7 @@
 	/*retrieve parameters:*/
 	femmodel->parameters->FindParam(&control_steady,ControlSteadyEnum);
-	femmodel->parameters->FindParam(&num_controls,NumControlTypeEnum);
-	femmodel->parameters->FindParam(&control_type,NULL,ControlTypeEnum);
-	femmodel->parameters->FindParam(&optscal_list,NULL,NULL,OptscalEnum);
+	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
+	femmodel->parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
+	femmodel->parameters->FindParam(&optscal_list,NULL,NULL,InversionGradientScalingEnum);
 
 	/*Compute and norm gradient of all controls*/
Index: /issm/trunk/src/c/solutions/hydrology_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/hydrology_core.cpp	(revision 9680)
+++ /issm/trunk/src/c/solutions/hydrology_core.cpp	(revision 9681)
@@ -26,5 +26,5 @@
 	femmodel->parameters->FindParam(&final_time,TimesteppingFinalTimeEnum);
 	femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
-	femmodel->parameters->FindParam(&control_analysis,ControlAnalysisEnum);
+	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
 
Index: /issm/trunk/src/c/solutions/issm.cpp
===================================================================
--- /issm/trunk/src/c/solutions/issm.cpp	(revision 9680)
+++ /issm/trunk/src/c/solutions/issm.cpp	(revision 9681)
@@ -88,5 +88,5 @@
 	femmodel->parameters->FindParam(&waitonlock,WaitonlockEnum);
 	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
-	femmodel->parameters->FindParam(&control_analysis,ControlAnalysisEnum);
+	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
 
 	MPI_Barrier(MPI_COMM_WORLD); finish_init=MPI_Wtime();
Index: /issm/trunk/src/c/solutions/prognostic_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/prognostic_core.cpp	(revision 9680)
+++ /issm/trunk/src/c/solutions/prognostic_core.cpp	(revision 9681)
@@ -21,5 +21,5 @@
 	
 	/*recover parameters: */
-	femmodel->parameters->FindParam(&control_analysis,ControlAnalysisEnum);
+	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
 
Index: /issm/trunk/src/c/solutions/steadystate_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/steadystate_core.cpp	(revision 9680)
+++ /issm/trunk/src/c/solutions/steadystate_core.cpp	(revision 9681)
@@ -27,5 +27,5 @@
 	/* recover parameters:*/
 	femmodel->parameters->FindParam(&dim,DimEnum);
-	femmodel->parameters->FindParam(&control_analysis,ControlAnalysisEnum);
+	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
 	femmodel->parameters->FindParam(&maxiter,SteadystateMaxiterEnum);
Index: /issm/trunk/src/c/solutions/surfaceslope_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/surfaceslope_core.cpp	(revision 9680)
+++ /issm/trunk/src/c/solutions/surfaceslope_core.cpp	(revision 9681)
@@ -21,5 +21,5 @@
 	/*Recover some parameters: */
 	femmodel->parameters->FindParam(&dim,DimEnum);
-	femmodel->parameters->FindParam(&control_analysis,ControlAnalysisEnum);
+	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
 
Index: /issm/trunk/src/c/solutions/thermal_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/thermal_core.cpp	(revision 9680)
+++ /issm/trunk/src/c/solutions/thermal_core.cpp	(revision 9681)
@@ -29,5 +29,5 @@
 	femmodel->parameters->FindParam(&final_time,TimesteppingFinalTimeEnum);
 	femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
-	femmodel->parameters->FindParam(&control_analysis,ControlAnalysisEnum);
+	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
 	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
Index: /issm/trunk/src/c/solutions/transient_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/transient_core.cpp	(revision 9680)
+++ /issm/trunk/src/c/solutions/transient_core.cpp	(revision 9681)
@@ -34,5 +34,5 @@
 	femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
 	femmodel->parameters->FindParam(&yts,ConstantsYtsEnum);
-	femmodel->parameters->FindParam(&control_analysis,ControlAnalysisEnum);
+	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
 	femmodel->parameters->FindParam(&output_frequency,OutputFrequencyEnum);
Index: /issm/trunk/src/m/classes/inversion.m
===================================================================
--- /issm/trunk/src/m/classes/inversion.m	(revision 9681)
+++ /issm/trunk/src/m/classes/inversion.m	(revision 9681)
@@ -0,0 +1,116 @@
+%CONSTANTS class definition
+%
+%   Usage:
+%      inversion=inversion();
+
+classdef inversion
+	properties (SetAccess=public) 
+		iscontrol                   = modelfield('default',0,'marshall',true,'format','Boolean');
+		control_parameters          = modelfield('default',NaN,'marshall',true,'preprocess','marshallcontroltype','format','DoubleMat','mattype',3);
+		cost_functions_coefficients = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
+		nsteps                      = modelfield('default',0,'marshall',true,'format','Integer');
+		maxiter_per_step            = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',3);
+		cost_functions              = modelfield('default',NaN,'marshall',true,'preprocess','marshallcmresponses','format','DoubleMat','mattype',3);
+		gradient_scaling            = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',3);
+		cost_function_threshold     = modelfield('default',0,'marshall',true,'format','Double');
+		min_parameters              = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',3);
+		max_parameters              = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',3);
+		step_threshold              = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',3);
+		gradient_only               = modelfield('default',0,'marshall',true,'format','Boolean');
+		num_control_parameters      = modelfield('default',0,'marshall',true,'format','Integer');
+		num_cost_functions          = modelfield('default',0,'marshall',true,'format','Integer');
+		vx_obs                      = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
+		vy_obs                      = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
+		vz_obs                      = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
+		vel_obs                     = modelfield('default',NaN,'marshall',false);
+		thickness_obs               = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
+	end
+	methods
+		function obj = inversion(varargin) % {{{
+			switch nargin
+				case 0
+					obj=setdefaultparameters(obj);
+				case 1
+					in=varargin{1};
+					if (isa(in,'numeric') & in==0),
+						% requesting templates do nothing
+					else
+						error('constructor not supported');
+					end 
+				otherwise
+					error('constructor not supported');
+			end
+		end % }}}
+		function obj = setdefaultparameters(obj) % {{{
+
+			%first, use the defaults provided by the properties definition above. 
+			fieldnames=fields(obj);
+			for i=1:length(fieldnames),
+				fieldname=fieldnames{i};
+				obj.(fieldname)=obj.(fieldname).default;
+			end
+
+			 %parameter to be inferred by control methods (only
+			 %drag and B are supported yet)
+			 obj.control_parameters={'FrictionCoefficient'};
+
+			 %number of steps in the control methods
+			 obj.nsteps=20;
+
+			 %maximum number of iteration in the optimization algorithm for
+			 %each step
+			 obj.maxiter_per_step=20*ones(obj.nsteps,1);
+
+			 %the inversed parameter is updated as follows:
+			 %new_par=old_par + gradient_scaling(n)*C*gradient with C in [0 1];
+			 %usually the gradient_scaling must be of the order of magnitude of the 
+			 %inversed parameter (10^8 for B, 50 for drag) and can be decreased
+			 %after the first iterations
+			 obj.gradient_scaling=50*ones(obj.nsteps,1);
+
+			 %several responses can be used:
+			 obj.cost_functions=101*ones(obj.nsteps,1);
+
+			 %step_threshold is used to speed up control method. When
+			 %misfit(1)/misfit(0) < obj.step_threshold, we go directly to
+			 %the next step
+			 obj.step_threshold=.7*ones(obj.nsteps,1); %30 per cent decrement.
+
+			 %stop control solution at the gradient computation and return it? 
+			 obj.gradient_only=0;
+
+			 %cost_function_threshold is a criteria to stop the control methods.
+			 %if J[n]-J[n-1]/J[n] < criteria, the control run stops
+			 %NaN if not applied
+			 obj.cost_function_threshold=NaN; %not activated
+
+		end % }}}
+		function disp(obj) % {{{
+			fielddisplay(obj,'iscontrol','is inversion activated?');
+			fielddisplay(obj,'control_parameters','parameter where inverse control is carried out; ex: {''DragCoefficient''}, or {''RheologyBbar''}');
+			fielddisplay(obj,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each node');
+			fielddisplay(obj,'nsteps','number of optimization searches');
+			fielddisplay(obj,'cost_function_threshold','misfit convergence criterion. Default is 1%, NaN if not applied');
+			fielddisplay(obj,'gradient_scaling','scaling factor on gradient direction during optimization, for each optimization step');
+			fielddisplay(obj,'cost_functions','indicate the type of response for each optimization steps');
+			fielddisplay(obj,'maxiter_per_step','maximum iterations during each optimization step');
+			fielddisplay(obj,'step_threshold','decrease threshold for misfit, default is 30%');
+			fielddisplay(obj,'min_parameters','absolute minimum acceptable value of the inversed parameter');
+			fielddisplay(obj,'max_parameters','absolute maximum acceptable value of the inversed parameter');
+			fielddisplay(obj,'gradient_only','stop control method solution at gradient');
+			fielddisplay(obj,'vx_obs','observed velocity x component [m/a]');
+			fielddisplay(obj,'vy_obs','observed velocity y component [m/a]');
+			fielddisplay(obj,'vel_obs','observed velocity magnitude [m/a]');
+			disp('Available responses:');
+			disp('   101: SurfaceAbsVelMisfit');
+			disp('   102: SurfaceRelVelMisfit');
+			disp('   103: SurfaceLogVelMisfit');
+			disp('   104: SurfaceLogVxVyMisfit');
+			disp('   105: SurfaceAverageVelMisfit');
+			disp('   201: ThicknessAbsMisfit');
+			disp('   501: DragCoefficientAbsGradient');
+			disp('   502: RheologyBbarAbsGradient');
+			disp('   503: ThicknessAbsGradient');
+		end % }}}
+	end
+end
Index: /issm/trunk/src/m/classes/model/model.m
===================================================================
--- /issm/trunk/src/m/classes/model/model.m	(revision 9680)
+++ /issm/trunk/src/m/classes/model/model.m	(revision 9681)
@@ -8,31 +8,32 @@
 		 % {{{1
 		 %Careful here: no other class should be used as default value this is a bug of matlab
-		 cluster   = modelfield('default',0,'marshall',false);
-		 verbose   = modelfield('default',0,'marshall',true,'preprocess','marshallverbose','format','Integer');
-		 results   = modelfield('default',0,'marshall',false);
-		 solver    = modelfield('default',0,'marshall',false);
-		 debug     = modelfield('default',0,'marshall',false);
-		 constants = modelfield('default',0,'marshall',true);
-		 flaim     = modelfield('default',0,'marshall',false);
-		 surfaceforcings = modelfield('default',0,'marshall',true);
-		 basalforcings   = modelfield('default',0,'marshall',true);
-		 friction  = modelfield('default',0,'marshall',true);
-		 private   = modelfield('default',0,'marshall',false);
-		 rifts     = modelfield('default',0,'marshall',true);
-		 hydrology = modelfield('default',0,'marshall',true);
-		 settings  = modelfield('default',0,'marshall',true);
-		 radaroverlay = modelfield('default',0,'marshall',false);
-		 thermal   = modelfield('default',0,'marshall',true);
-		 miscellaneous = modelfield('default',0,'marshall',true);
-		 timestepping = modelfield('default',0,'marshall',true);
-		 groundingline = modelfield('default',0,'marshall',true);
-		 prognostic = modelfield('default',0,'marshall',true);
-		 materials = modelfield('default',0,'marshall',true);
-		 mask = modelfield('default',0,'marshall',true);
-		 qmu = modelfield('default',0,'marshall',true);
+		 cluster          = modelfield('default',0,'marshall',false);
+		 verbose          = modelfield('default',0,'marshall',true,'preprocess','marshallverbose','format','Integer');
+		 results          = modelfield('default',0,'marshall',false);
+		 solver           = modelfield('default',0,'marshall',false);
+		 debug            = modelfield('default',0,'marshall',false);
+		 constants        = modelfield('default',0,'marshall',true);
+		 flaim            = modelfield('default',0,'marshall',false);
+		 surfaceforcings  = modelfield('default',0,'marshall',true);
+		 basalforcings    = modelfield('default',0,'marshall',true);
+		 friction         = modelfield('default',0,'marshall',true);
+		 private          = modelfield('default',0,'marshall',false);
+		 rifts            = modelfield('default',0,'marshall',true);
+		 hydrology        = modelfield('default',0,'marshall',true);
+		 settings         = modelfield('default',0,'marshall',true);
+		 radaroverlay     = modelfield('default',0,'marshall',false);
+		 thermal          = modelfield('default',0,'marshall',true);
+		 miscellaneous    = modelfield('default',0,'marshall',true);
+		 timestepping     = modelfield('default',0,'marshall',true);
+		 groundingline    = modelfield('default',0,'marshall',true);
+		 prognostic       = modelfield('default',0,'marshall',true);
+		 materials        = modelfield('default',0,'marshall',true);
+		 mask             = modelfield('default',0,'marshall',true);
+		 qmu              = modelfield('default',0,'marshall',true);
 		 balancethickness = modelfield('default',0,'marshall',true);
-		 flowequation = modelfield('default',0,'marshall',true);
-		 steadystate = modelfield('default',0,'marshall',true);
-		 transient = modelfield('default',0,'marshall',true);
+		 flowequation     = modelfield('default',0,'marshall',true);
+		 steadystate      = modelfield('default',0,'marshall',true);
+		 inversion        = modelfield('default',0,'marshall',true);
+		 transient        = modelfield('default',0,'marshall',true);
 		 diagnostic = modelfield('default',0,'marshall',true);
 
@@ -97,29 +98,7 @@
 		 nodeonboundary = modelfield('default',NaN,'marshall',false);
 
-		 %Observations 
-		 vx_obs                    = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
-		 vy_obs                    = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
-		 vel_obs                   = modelfield('default',NaN,'marshall',false);
-
-		 thickness_obs             = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
-
 		 %Statics parameters
 		 connectivity             = modelfield('default',0,'marshall',true,'format','Integer');
 
-		 %Control
-		 control_analysis = modelfield('default',0,'marshall',true,'format','Boolean');
-		 control_type     = modelfield('default',NaN,'marshall',true,'preprocess','marshallcontroltype','format','DoubleMat','mattype',3);
-		 weights          = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
-		 nsteps           = modelfield('default',0,'marshall',true,'format','Integer');
-		 maxiter          = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',3);
-		 cm_responses     = modelfield('default',NaN,'marshall',true,'preprocess','marshallcmresponses','format','DoubleMat','mattype',3);
-		 optscal          = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',3);
-		 eps_cm           = modelfield('default',0,'marshall',true,'format','Double');
-		 cm_min           = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',3);
-		 cm_max           = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',3);
-		 cm_jump          = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',3);
-		 cm_gradient      = modelfield('default',0,'marshall',true,'format','Boolean');
-		 num_control_type               = modelfield('default',0,'marshall',true,'format','Integer');
-		 num_cm_responses               = modelfield('default',0,'marshall',true,'format','Integer');
 
 		 %Results fields
@@ -254,5 +233,4 @@
 			 disp(sprintf('   Parameters:'));
 			 disp(sprintf('%s%s%s','      Boundary conditions: type ''',inputname(1),'.bc'' to display'));
-			 disp(sprintf('%s%s%s','      Observations: type ''',inputname(1),'.obs'' to display'));
 			 disp(sprintf('%s%s%s','      Materials: type ''',inputname(1),'.mat'' to display'));
 			 disp(sprintf('%s%s%s','      Parameters: type ''',inputname(1),'.par'' to display'));
@@ -302,4 +280,5 @@
 			 if isfield(structmd,'basal_melting_rate_correction'), md.basalforcings.melting_rate_correction=structmd.basal_melting_rate_correction; end
 			 if isfield(structmd,'geothermalflux'), md.basalforcings.geothermalflux=structmd.geothermalflux; end
+			 if isfield(structmd,'drag'), md.friction.coefficient=structmd.drag; end
 			 if isfield(structmd,'drag_coefficient'), md.friction.coefficient=structmd.drag_coefficient; end
 			 if isfield(structmd,'drag_p'), md.friction.p=structmd.drag_p; end
@@ -357,9 +336,19 @@
 			 if isfield(structmd,'elements_type'), md.flowequation.element_equation=structmd.elements_type; end
 			 if isfield(structmd,'vertices_type'), md.flowequation.vertex_equation=structmd.vertices_type; end
-			 if isfield(structmd,'eps_rel'), md.flowequation.reltol=structmd.eps_rel; end
-			 if isfield(structmd,'max_steadystate_iterations'), md.flowequation.maxiter=structmd.max_steadystate_iterations; end
+			 if isfield(structmd,'eps_rel'), md.steadystate.reltol=structmd.eps_rel; end
+			 if isfield(structmd,'max_steadystate_iterations'), md.steadystate.maxiter=structmd.max_steadystate_iterations; end
 			 if isfield(structmd,'isdiagnostic'), md.transient.isdiagnostic=structmd.isdiagnostic; end
 			 if isfield(structmd,'isprognostic'), md.transient.isprognostic=structmd.isprognostic; end
 			 if isfield(structmd,'isthermal'), md.transient.isthermal=structmd.isthermal; end
+			 if isfield(structmd,'control_analysis'), md.inversion.iscontrol=structmd.control_analysis; end
+			 if isfield(structmd,'weights'), md.inversion.cost_functions_coefficients=structmd.weights; end
+			 if isfield(structmd,'nsteps'), md.inversion.nsteps=structmd.nsteps; end
+			 if isfield(structmd,'maxiter_per_step'), md.inversion.maxiter_per_step=structmd.maxiter_per_step; end
+			 if isfield(structmd,'cm_min'), md.inversion.min_parameters=structmd.cm_min; end
+			 if isfield(structmd,'cm_max'), md.inversion.max_parameters=structmd.cm_max; end
+			 if isfield(structmd,'vx_obs'), md.inversion.vx_obs=structmd.vx_obs; end
+			 if isfield(structmd,'vy_obs'), md.inversion.vy_obs=structmd.vy_obs; end
+			 if isfield(structmd,'vel_obs'), md.inversion.vel_obs=structmd.vel_obs; end
+			 if isfield(structmd,'thickness_obs'), md.inversion.thickness_obs=structmd.thickness_obs; end
 
 			 %Field changes
@@ -412,19 +401,19 @@
 				 if (structmd.groundingline_migration==274), md.groundingline.migration='SoftMigration'; end
 			 end
-			 if isnumeric(md.control_type),
-				 if (structmd.control_type==143), md.control_type={'FrictionCoefficient'}; end
-				 if (structmd.control_type==190), md.control_type={'RheologyBbar'}; end
-				 if (structmd.control_type==147), md.control_type={'Dhdt'}; end
-			 end
-			 if ismember(structmd.cm_responses(end,end),[165:170 383 388 389]),
-				 pos=find(structmd.cm_responses==166); md.control_type(pos)=101;
-				 pos=find(structmd.cm_responses==167); md.control_type(pos)=102;
-				 pos=find(structmd.cm_responses==168); md.control_type(pos)=103;
-				 pos=find(structmd.cm_responses==169); md.control_type(pos)=104;
-				 pos=find(structmd.cm_responses==170); md.control_type(pos)=105;
-				 pos=find(structmd.cm_responses==165); md.control_type(pos)=201;
-				 pos=find(structmd.cm_responses==389); md.control_type(pos)=501;
-				 pos=find(structmd.cm_responses==388); md.control_type(pos)=502;
-				 pos=find(structmd.cm_responses==382); md.control_type(pos)=503;
+			 if isfield(structmd,'control_type') & isnumeric(structmd.control_type),
+				 if (structmd.control_type==143), md.inversion.control_parameters={'FrictionCoefficient'}; end
+				 if (structmd.control_type==190), md.inversion.control_parameters={'RheologyBbar'}; end
+				 if (structmd.control_type==147), md.inversion.control_parameters={'Thickeningrate'}; end
+			 end
+			 if isfield(structmd,'cost_functions') & ismember(structmd.cm_responses(end,end),[165:170 383 388 389]),
+				 pos=find(structmd.cm_responses==166); md.inversion.cost_functions(pos)=101;
+				 pos=find(structmd.cm_responses==167); md.inversion.cost_functions(pos)=102;
+				 pos=find(structmd.cm_responses==168); md.inversion.cost_functions(pos)=103;
+				 pos=find(structmd.cm_responses==169); md.inversion.cost_functions(pos)=104;
+				 pos=find(structmd.cm_responses==170); md.inversion.cost_functions(pos)=105;
+				 pos=find(structmd.cm_responses==165); md.inversion.cost_functions(pos)=201;
+				 pos=find(structmd.cm_responses==389); md.inversion.cost_functions(pos)=501;
+				 pos=find(structmd.cm_responses==388); md.inversion.cost_functions(pos)=502;
+				 pos=find(structmd.cm_responses==382); md.inversion.cost_functions(pos)=503;
 			 end
 
@@ -461,31 +450,32 @@
 
 			 %initialize subclasses
-			 md.cluster=none;
-			 md.solver=solver;
-			 md.solver=addoptions(md.solver,DiagnosticVertAnalysisEnum,mumpsoptions);
-			 md.results=struct();
-			 md.debug=debug;
-			 md.constants=constants;
-			 md.flaim=flaim;
-			 md.surfaceforcings=surfaceforcings;
-			 md.basalforcings=basalforcings;
-			 md.friction=friction;
-			 md.private=private;
-			 md.rifts=rifts;
-			 md.hydrology=hydrology;
-			 md.settings=settings;
-			 md.radaroverlay=radaroverlay;
-			 md.thermal=thermal;
-			 md.miscellaneous=miscellaneous;
-			 md.timestepping=timestepping;
-			 md.groundingline=groundingline;
-			 md.prognostic=prognostic;
-			 md.materials=materials;
-			 md.mask=mask;
-			 md.qmu=qmu;
-			 md.balancethickness=balancethickness;
-			 md.flowequation=flowequation;
-			 md.steadystate=steadystate;
-			 md.transient=transient;
+			 md.cluster          = none;
+			 md.solver           = solver;
+			 md.solver           = addoptions(md.solver,DiagnosticVertAnalysisEnum,mumpsoptions);
+			 md.results          = struct();
+			 md.debug            = debug;
+			 md.constants        = constants;
+			 md.flaim            = flaim;
+			 md.surfaceforcings  = surfaceforcings;
+			 md.basalforcings    = basalforcings;
+			 md.friction         = friction;
+			 md.private          = private;
+			 md.rifts            = rifts;
+			 md.hydrology        = hydrology;
+			 md.settings         = settings;
+			 md.radaroverlay     = radaroverlay;
+			 md.thermal          = thermal;
+			 md.miscellaneous    = miscellaneous;
+			 md.timestepping     = timestepping;
+			 md.groundingline    = groundingline;
+			 md.prognostic       = prognostic;
+			 md.materials        = materials;
+			 md.mask             = mask;
+			 md.qmu              = qmu;
+			 md.balancethickness = balancethickness;
+			 md.flowequation     = flowequation;
+			 md.steadystate      = steadystate;
+			 md.inversion        = inversion;
+			 md.transient        = transient;
 			 md.diagnostic=diagnostic;
 
@@ -508,46 +498,6 @@
 			 md.minh=1;
 
-			 %Control
-
-			 %parameter to be inferred by control methods (only
-			 %drag and B are supported yet)
-			 md.control_type={'FrictionCoefficient'};
-
-			 %number of steps in the control methods
-			 md.nsteps=20;
-
-			 %maximum number of iteration in the optimization algorithm for
-			 %each step
-			 md.maxiter=20*ones(md.nsteps,1);
-
-			 %the inversed parameter is updated as follows:
-			 %new_par=old_par + optscal(n)*C*gradient with C in [0 1];
-			 %usually the optscal must be of the order of magnitude of the 
-			 %inversed parameter (10^8 for B, 50 for drag) and can be decreased
-			 %after the first iterations
-			 md.optscal=50*ones(md.nsteps,1);
-
-			 %several responses can be used:
-			 md.cm_responses=101*ones(md.nsteps,1);
-
-			 %cm_jump is used to speed up control method. When
-			 %misfit(1)/misfit(0) < md.cm_jump, we go directly to
-			 %the next step
-			 md.cm_jump=.7*ones(md.nsteps,1); %30 per cent decrement.
-
-			 %stop control solution at the gradient computation and return it? 
-			 md.cm_gradient=0;
-
-			 %eps_cm is a criteria to stop the control methods.
-			 %if J[n]-J[n-1]/J[n] < criteria, the control run stops
-			 %NaN if not applied
-			 md.eps_cm=NaN; %not activated
-
 			 %How often to save results, default is 1 so save every step
 			 md.output_frequency=1;
-
-			 %Parallelisation parameters
-
-			 %cluster set as none for serial
 
 			 %this option can be activated to load automatically the results
@@ -556,5 +506,4 @@
 			 %0 to desactivate
 			 md.waitonlock=Inf;
-
 		 end
 		 %}}}
@@ -568,6 +517,4 @@
 				 if(strcmp(index1.subs,'par')), displayparameters(md);return; end
 				 if(strcmp(index1.subs,'res')), displayresults(md);return; end
-				 if(strcmp(index1.subs,'obs')), displayobservations(md);return; end
-				 if(strcmp(index1.subs,'control')), displaycontrol(md);return; end
 				 if(strcmp(index1.subs,'parallel')), displayparallel(md);return; end
 			 end
Index: /issm/trunk/src/m/classes/verbose.m
===================================================================
--- /issm/trunk/src/m/classes/verbose.m	(revision 9680)
+++ /issm/trunk/src/m/classes/verbose.m	(revision 9681)
@@ -43,10 +43,11 @@
 					if strcmpi(binary,'all'),
 						binary=2^11-1; %all ones
+						verbose=BinaryToVerbose(verbose,binary);
+						verbose.solver=false; %Do not use by default
 					else
 						binary=bin2dec(binary);
+						verbose=BinaryToVerbose(verbose,binary);
 					end
 				end 
-				verbose=BinaryToVerbose(verbose,binary);
-
 			else
 
Index: sm/trunk/src/m/enum/CmGradientEnum.m
===================================================================
--- /issm/trunk/src/m/enum/CmGradientEnum.m	(revision 9680)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=CmGradientEnum()
-%CMGRADIENTENUM - Enum of CmGradient
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=CmGradientEnum()
-
-macro=StringToEnum('CmGradient');
Index: sm/trunk/src/m/enum/CmJumpEnum.m
===================================================================
--- /issm/trunk/src/m/enum/CmJumpEnum.m	(revision 9680)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=CmJumpEnum()
-%CMJUMPENUM - Enum of CmJump
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=CmJumpEnum()
-
-macro=StringToEnum('CmJump');
Index: sm/trunk/src/m/enum/CmMaxEnum.m
===================================================================
--- /issm/trunk/src/m/enum/CmMaxEnum.m	(revision 9680)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=CmMaxEnum()
-%CMMAXENUM - Enum of CmMax
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=CmMaxEnum()
-
-macro=StringToEnum('CmMax');
Index: sm/trunk/src/m/enum/CmMinEnum.m
===================================================================
--- /issm/trunk/src/m/enum/CmMinEnum.m	(revision 9680)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=CmMinEnum()
-%CMMINENUM - Enum of CmMin
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=CmMinEnum()
-
-macro=StringToEnum('CmMin');
Index: sm/trunk/src/m/enum/CmResponseEnum.m
===================================================================
--- /issm/trunk/src/m/enum/CmResponseEnum.m	(revision 9680)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=CmResponseEnum()
-%CMRESPONSEENUM - Enum of CmResponse
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=CmResponseEnum()
-
-macro=StringToEnum('CmResponse');
Index: sm/trunk/src/m/enum/CmResponsesEnum.m
===================================================================
--- /issm/trunk/src/m/enum/CmResponsesEnum.m	(revision 9680)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=CmResponsesEnum()
-%CMRESPONSESENUM - Enum of CmResponses
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=CmResponsesEnum()
-
-macro=StringToEnum('CmResponses');
Index: sm/trunk/src/m/enum/ControlAnalysisEnum.m
===================================================================
--- /issm/trunk/src/m/enum/ControlAnalysisEnum.m	(revision 9680)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=ControlAnalysisEnum()
-%CONTROLANALYSISENUM - Enum of ControlAnalysis
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=ControlAnalysisEnum()
-
-macro=StringToEnum('ControlAnalysis');
Index: sm/trunk/src/m/enum/ControlTypeEnum.m
===================================================================
--- /issm/trunk/src/m/enum/ControlTypeEnum.m	(revision 9680)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=ControlTypeEnum()
-%CONTROLTYPEENUM - Enum of ControlType
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=ControlTypeEnum()
-
-macro=StringToEnum('ControlType');
Index: /issm/trunk/src/m/enum/EnumToModelField.m
===================================================================
--- /issm/trunk/src/m/enum/EnumToModelField.m	(revision 9680)
+++ /issm/trunk/src/m/enum/EnumToModelField.m	(revision 9681)
@@ -17,7 +17,7 @@
 		case BalancethicknessThickeningRateEnum: string='dhdt'; return
 		case VxEnum(), string='vx'; return
-		case VxObsEnum(), string='vx_obs'; return
+		case InversionVxObsEnum(), string='vx_obs'; return
 		case VyEnum(), string='vy'; return
-		case VyObsEnum(), string='vy_obs'; return
+		case InversionVyObsEnum(), string='vy_obs'; return
 		case BasalforcingsMeltingRateEnum(), string='basal_melting_rate'; return
       case SurfaceforcingsAccumulationRateEnum(), string='surface_accumulation_rate'; return
Index: sm/trunk/src/m/enum/EpsCmEnum.m
===================================================================
--- /issm/trunk/src/m/enum/EpsCmEnum.m	(revision 9680)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=EpsCmEnum()
-%EPSCMENUM - Enum of EpsCm
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=EpsCmEnum()
-
-macro=StringToEnum('EpsCm');
Index: /issm/trunk/src/m/enum/InversionControlParametersEnum.m
===================================================================
--- /issm/trunk/src/m/enum/InversionControlParametersEnum.m	(revision 9681)
+++ /issm/trunk/src/m/enum/InversionControlParametersEnum.m	(revision 9681)
@@ -0,0 +1,11 @@
+function macro=InversionControlParametersEnum()
+%INVERSIONCONTROLPARAMETERSENUM - Enum of InversionControlParameters
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=InversionControlParametersEnum()
+
+macro=StringToEnum('InversionControlParameters');
Index: /issm/trunk/src/m/enum/InversionCostFunctionEnum.m
===================================================================
--- /issm/trunk/src/m/enum/InversionCostFunctionEnum.m	(revision 9681)
+++ /issm/trunk/src/m/enum/InversionCostFunctionEnum.m	(revision 9681)
@@ -0,0 +1,11 @@
+function macro=InversionCostFunctionEnum()
+%INVERSIONCOSTFUNCTIONENUM - Enum of InversionCostFunction
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=InversionCostFunctionEnum()
+
+macro=StringToEnum('InversionCostFunction');
Index: /issm/trunk/src/m/enum/InversionCostFunctionThresholdEnum.m
===================================================================
--- /issm/trunk/src/m/enum/InversionCostFunctionThresholdEnum.m	(revision 9681)
+++ /issm/trunk/src/m/enum/InversionCostFunctionThresholdEnum.m	(revision 9681)
@@ -0,0 +1,11 @@
+function macro=InversionCostFunctionThresholdEnum()
+%INVERSIONCOSTFUNCTIONTHRESHOLDENUM - Enum of InversionCostFunctionThreshold
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=InversionCostFunctionThresholdEnum()
+
+macro=StringToEnum('InversionCostFunctionThreshold');
Index: /issm/trunk/src/m/enum/InversionCostFunctionsCoefficientsEnum.m
===================================================================
--- /issm/trunk/src/m/enum/InversionCostFunctionsCoefficientsEnum.m	(revision 9681)
+++ /issm/trunk/src/m/enum/InversionCostFunctionsCoefficientsEnum.m	(revision 9681)
@@ -0,0 +1,11 @@
+function macro=InversionCostFunctionsCoefficientsEnum()
+%INVERSIONCOSTFUNCTIONSCOEFFICIENTSENUM - Enum of InversionCostFunctionsCoefficients
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=InversionCostFunctionsCoefficientsEnum()
+
+macro=StringToEnum('InversionCostFunctionsCoefficients');
Index: /issm/trunk/src/m/enum/InversionCostFunctionsEnum.m
===================================================================
--- /issm/trunk/src/m/enum/InversionCostFunctionsEnum.m	(revision 9681)
+++ /issm/trunk/src/m/enum/InversionCostFunctionsEnum.m	(revision 9681)
@@ -0,0 +1,11 @@
+function macro=InversionCostFunctionsEnum()
+%INVERSIONCOSTFUNCTIONSENUM - Enum of InversionCostFunctions
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=InversionCostFunctionsEnum()
+
+macro=StringToEnum('InversionCostFunctions');
Index: /issm/trunk/src/m/enum/InversionGradientOnlyEnum.m
===================================================================
--- /issm/trunk/src/m/enum/InversionGradientOnlyEnum.m	(revision 9681)
+++ /issm/trunk/src/m/enum/InversionGradientOnlyEnum.m	(revision 9681)
@@ -0,0 +1,11 @@
+function macro=InversionGradientOnlyEnum()
+%INVERSIONGRADIENTONLYENUM - Enum of InversionGradientOnly
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=InversionGradientOnlyEnum()
+
+macro=StringToEnum('InversionGradientOnly');
Index: /issm/trunk/src/m/enum/InversionGradientScalingEnum.m
===================================================================
--- /issm/trunk/src/m/enum/InversionGradientScalingEnum.m	(revision 9681)
+++ /issm/trunk/src/m/enum/InversionGradientScalingEnum.m	(revision 9681)
@@ -0,0 +1,11 @@
+function macro=InversionGradientScalingEnum()
+%INVERSIONGRADIENTSCALINGENUM - Enum of InversionGradientScaling
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=InversionGradientScalingEnum()
+
+macro=StringToEnum('InversionGradientScaling');
Index: /issm/trunk/src/m/enum/InversionIscontrolEnum.m
===================================================================
--- /issm/trunk/src/m/enum/InversionIscontrolEnum.m	(revision 9681)
+++ /issm/trunk/src/m/enum/InversionIscontrolEnum.m	(revision 9681)
@@ -0,0 +1,11 @@
+function macro=InversionIscontrolEnum()
+%INVERSIONISCONTROLENUM - Enum of InversionIscontrol
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=InversionIscontrolEnum()
+
+macro=StringToEnum('InversionIscontrol');
Index: /issm/trunk/src/m/enum/InversionMaxParametersEnum.m
===================================================================
--- /issm/trunk/src/m/enum/InversionMaxParametersEnum.m	(revision 9681)
+++ /issm/trunk/src/m/enum/InversionMaxParametersEnum.m	(revision 9681)
@@ -0,0 +1,11 @@
+function macro=InversionMaxParametersEnum()
+%INVERSIONMAXPARAMETERSENUM - Enum of InversionMaxParameters
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=InversionMaxParametersEnum()
+
+macro=StringToEnum('InversionMaxParameters');
Index: /issm/trunk/src/m/enum/InversionMaxiterPerStepEnum.m
===================================================================
--- /issm/trunk/src/m/enum/InversionMaxiterPerStepEnum.m	(revision 9681)
+++ /issm/trunk/src/m/enum/InversionMaxiterPerStepEnum.m	(revision 9681)
@@ -0,0 +1,11 @@
+function macro=InversionMaxiterPerStepEnum()
+%INVERSIONMAXITERPERSTEPENUM - Enum of InversionMaxiterPerStep
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=InversionMaxiterPerStepEnum()
+
+macro=StringToEnum('InversionMaxiterPerStep');
Index: /issm/trunk/src/m/enum/InversionMinParametersEnum.m
===================================================================
--- /issm/trunk/src/m/enum/InversionMinParametersEnum.m	(revision 9681)
+++ /issm/trunk/src/m/enum/InversionMinParametersEnum.m	(revision 9681)
@@ -0,0 +1,11 @@
+function macro=InversionMinParametersEnum()
+%INVERSIONMINPARAMETERSENUM - Enum of InversionMinParameters
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=InversionMinParametersEnum()
+
+macro=StringToEnum('InversionMinParameters');
Index: /issm/trunk/src/m/enum/InversionNstepsEnum.m
===================================================================
--- /issm/trunk/src/m/enum/InversionNstepsEnum.m	(revision 9681)
+++ /issm/trunk/src/m/enum/InversionNstepsEnum.m	(revision 9681)
@@ -0,0 +1,11 @@
+function macro=InversionNstepsEnum()
+%INVERSIONNSTEPSENUM - Enum of InversionNsteps
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=InversionNstepsEnum()
+
+macro=StringToEnum('InversionNsteps');
Index: /issm/trunk/src/m/enum/InversionNumControlParametersEnum.m
===================================================================
--- /issm/trunk/src/m/enum/InversionNumControlParametersEnum.m	(revision 9681)
+++ /issm/trunk/src/m/enum/InversionNumControlParametersEnum.m	(revision 9681)
@@ -0,0 +1,11 @@
+function macro=InversionNumControlParametersEnum()
+%INVERSIONNUMCONTROLPARAMETERSENUM - Enum of InversionNumControlParameters
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=InversionNumControlParametersEnum()
+
+macro=StringToEnum('InversionNumControlParameters');
Index: /issm/trunk/src/m/enum/InversionNumCostFunctionsEnum.m
===================================================================
--- /issm/trunk/src/m/enum/InversionNumCostFunctionsEnum.m	(revision 9681)
+++ /issm/trunk/src/m/enum/InversionNumCostFunctionsEnum.m	(revision 9681)
@@ -0,0 +1,11 @@
+function macro=InversionNumCostFunctionsEnum()
+%INVERSIONNUMCOSTFUNCTIONSENUM - Enum of InversionNumCostFunctions
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=InversionNumCostFunctionsEnum()
+
+macro=StringToEnum('InversionNumCostFunctions');
Index: /issm/trunk/src/m/enum/InversionStepThresholdEnum.m
===================================================================
--- /issm/trunk/src/m/enum/InversionStepThresholdEnum.m	(revision 9681)
+++ /issm/trunk/src/m/enum/InversionStepThresholdEnum.m	(revision 9681)
@@ -0,0 +1,11 @@
+function macro=InversionStepThresholdEnum()
+%INVERSIONSTEPTHRESHOLDENUM - Enum of InversionStepThreshold
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=InversionStepThresholdEnum()
+
+macro=StringToEnum('InversionStepThreshold');
Index: /issm/trunk/src/m/enum/InversionThicknessObsEnum.m
===================================================================
--- /issm/trunk/src/m/enum/InversionThicknessObsEnum.m	(revision 9681)
+++ /issm/trunk/src/m/enum/InversionThicknessObsEnum.m	(revision 9681)
@@ -0,0 +1,11 @@
+function macro=InversionThicknessObsEnum()
+%INVERSIONTHICKNESSOBSENUM - Enum of InversionThicknessObs
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=InversionThicknessObsEnum()
+
+macro=StringToEnum('InversionThicknessObs');
Index: /issm/trunk/src/m/enum/InversionVelObsEnum.m
===================================================================
--- /issm/trunk/src/m/enum/InversionVelObsEnum.m	(revision 9681)
+++ /issm/trunk/src/m/enum/InversionVelObsEnum.m	(revision 9681)
@@ -0,0 +1,11 @@
+function macro=InversionVelObsEnum()
+%INVERSIONVELOBSENUM - Enum of InversionVelObs
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=InversionVelObsEnum()
+
+macro=StringToEnum('InversionVelObs');
Index: /issm/trunk/src/m/enum/InversionVxObsEnum.m
===================================================================
--- /issm/trunk/src/m/enum/InversionVxObsEnum.m	(revision 9681)
+++ /issm/trunk/src/m/enum/InversionVxObsEnum.m	(revision 9681)
@@ -0,0 +1,11 @@
+function macro=InversionVxObsEnum()
+%INVERSIONVXOBSENUM - Enum of InversionVxObs
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=InversionVxObsEnum()
+
+macro=StringToEnum('InversionVxObs');
Index: /issm/trunk/src/m/enum/InversionVyObsEnum.m
===================================================================
--- /issm/trunk/src/m/enum/InversionVyObsEnum.m	(revision 9681)
+++ /issm/trunk/src/m/enum/InversionVyObsEnum.m	(revision 9681)
@@ -0,0 +1,11 @@
+function macro=InversionVyObsEnum()
+%INVERSIONVYOBSENUM - Enum of InversionVyObs
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=InversionVyObsEnum()
+
+macro=StringToEnum('InversionVyObs');
Index: /issm/trunk/src/m/enum/InversionVzObsEnum.m
===================================================================
--- /issm/trunk/src/m/enum/InversionVzObsEnum.m	(revision 9681)
+++ /issm/trunk/src/m/enum/InversionVzObsEnum.m	(revision 9681)
@@ -0,0 +1,11 @@
+function macro=InversionVzObsEnum()
+%INVERSIONVZOBSENUM - Enum of InversionVzObs
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=InversionVzObsEnum()
+
+macro=StringToEnum('InversionVzObs');
Index: sm/trunk/src/m/enum/MaxiterEnum.m
===================================================================
--- /issm/trunk/src/m/enum/MaxiterEnum.m	(revision 9680)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=MaxiterEnum()
-%MAXITERENUM - Enum of Maxiter
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=MaxiterEnum()
-
-macro=StringToEnum('Maxiter');
Index: sm/trunk/src/m/enum/NstepsEnum.m
===================================================================
--- /issm/trunk/src/m/enum/NstepsEnum.m	(revision 9680)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=NstepsEnum()
-%NSTEPSENUM - Enum of Nsteps
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=NstepsEnum()
-
-macro=StringToEnum('Nsteps');
Index: sm/trunk/src/m/enum/NumCmResponsesEnum.m
===================================================================
--- /issm/trunk/src/m/enum/NumCmResponsesEnum.m	(revision 9680)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=NumCmResponsesEnum()
-%NUMCMRESPONSESENUM - Enum of NumCmResponses
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=NumCmResponsesEnum()
-
-macro=StringToEnum('NumCmResponses');
Index: sm/trunk/src/m/enum/NumControlTypeEnum.m
===================================================================
--- /issm/trunk/src/m/enum/NumControlTypeEnum.m	(revision 9680)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=NumControlTypeEnum()
-%NUMCONTROLTYPEENUM - Enum of NumControlType
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=NumControlTypeEnum()
-
-macro=StringToEnum('NumControlType');
Index: sm/trunk/src/m/enum/OptscalEnum.m
===================================================================
--- /issm/trunk/src/m/enum/OptscalEnum.m	(revision 9680)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=OptscalEnum()
-%OPTSCALENUM - Enum of Optscal
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=OptscalEnum()
-
-macro=StringToEnum('Optscal');
Index: sm/trunk/src/m/enum/ThicknessObsEnum.m
===================================================================
--- /issm/trunk/src/m/enum/ThicknessObsEnum.m	(revision 9680)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=ThicknessObsEnum()
-%THICKNESSOBSENUM - Enum of ThicknessObs
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=ThicknessObsEnum()
-
-macro=StringToEnum('ThicknessObs');
Index: sm/trunk/src/m/enum/TolxEnum.m
===================================================================
--- /issm/trunk/src/m/enum/TolxEnum.m	(revision 9680)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=TolxEnum()
-%TOLXENUM - Enum of Tolx
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=TolxEnum()
-
-macro=StringToEnum('Tolx');
Index: sm/trunk/src/m/enum/VelObsEnum.m
===================================================================
--- /issm/trunk/src/m/enum/VelObsEnum.m	(revision 9680)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=VelObsEnum()
-%VELOBSENUM - Enum of VelObs
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=VelObsEnum()
-
-macro=StringToEnum('VelObs');
Index: sm/trunk/src/m/enum/VxObsEnum.m
===================================================================
--- /issm/trunk/src/m/enum/VxObsEnum.m	(revision 9680)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=VxObsEnum()
-%VXOBSENUM - Enum of VxObs
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=VxObsEnum()
-
-macro=StringToEnum('VxObs');
Index: sm/trunk/src/m/enum/VyObsEnum.m
===================================================================
--- /issm/trunk/src/m/enum/VyObsEnum.m	(revision 9680)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=VyObsEnum()
-%VYOBSENUM - Enum of VyObs
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=VyObsEnum()
-
-macro=StringToEnum('VyObs');
Index: sm/trunk/src/m/enum/VzObsEnum.m
===================================================================
--- /issm/trunk/src/m/enum/VzObsEnum.m	(revision 9680)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=VzObsEnum()
-%VZOBSENUM - Enum of VzObs
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=VzObsEnum()
-
-macro=StringToEnum('VzObs');
Index: sm/trunk/src/m/enum/WeightsEnum.m
===================================================================
--- /issm/trunk/src/m/enum/WeightsEnum.m	(revision 9680)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=WeightsEnum()
-%WEIGHTSENUM - Enum of Weights
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=WeightsEnum()
-
-macro=StringToEnum('Weights');
Index: /issm/trunk/src/m/model/BasinConstrain.m
===================================================================
--- /issm/trunk/src/m/model/BasinConstrain.m	(revision 9680)
+++ /issm/trunk/src/m/model/BasinConstrain.m	(revision 9681)
@@ -48,6 +48,6 @@
 
 %all elements outside the constraint domain are equivalent to water. all nodes outside are spc'd.
-md.diagnostic.spcvx(vertexnotondomain)=md.vx_obs(vertexnotondomain);
-md.diagnostic.spcvy(vertexnotondomain)=md.vy_obs(vertexnotondomain);
+md.diagnostic.spcvx(vertexnotondomain)=md.inversion.vx_obs(vertexnotondomain);
+md.diagnostic.spcvy(vertexnotondomain)=md.inversion.vy_obs(vertexnotondomain);
 md.mask.elementonwater(elementnotondomain)=1;
 
@@ -56,6 +56,6 @@
 numpos=unique(md.elements(pos,:));
 nodes=setdiff(1:1:md.numberofnodes,numpos);
-md.diagnostic.spcvx(nodes)=md.vx_obs(nodes);
-md.diagnostic.spcvy(nodes)=md.vy_obs(nodes);
+md.diagnostic.spcvx(nodes)=md.inversion.vx_obs(nodes);
+md.diagnostic.spcvy(nodes)=md.inversion.vy_obs(nodes);
 
 %make sure icefronts that are completely spc'd are taken out:
Index: /issm/trunk/src/m/model/BasinConstrainShelf.m
===================================================================
--- /issm/trunk/src/m/model/BasinConstrainShelf.m	(revision 9680)
+++ /issm/trunk/src/m/model/BasinConstrainShelf.m	(revision 9681)
@@ -48,6 +48,6 @@
 
 %all elements outside the constraint domain are equivalent to water. all nodes outside are spc'd.
-md.diagnostic.spcvx(vertexnotondomain)=md.vx_obs(vertexnotondomain);
-md.diagnostic.spcvy(vertexnotondomain)=md.vy_obs(vertexnotondomain);
+md.diagnostic.spcvx(vertexnotondomain)=md.inversion.vx_obs(vertexnotondomain);
+md.diagnostic.spcvy(vertexnotondomain)=md.inversion.vy_obs(vertexnotondomain);
 md.mask.elementonwater(elementnotondomain)=1;
 
@@ -56,18 +56,17 @@
 numpos=unique(md.elements(pos,:));
 nodes=setdiff(1:1:md.numberofnodes,numpos);
-md.diagnostic.spcvx(nodes)=md.vx_obs(nodes);
-md.diagnostic.spcvy(nodes)=md.vy_obs(nodes);
-
+md.diagnostic.spcvx(nodes)=md.inversion.vx_obs(nodes);
+md.diagnostic.spcvy(nodes)=md.inversion.vy_obs(nodes);
 
 %make sure any node with NaN velocity is spc'd:
 %we spc to the smoothed value, so that control methods don't go berserk trying to figure out what reaction force to apply for the spc to stand.
-pos=find(isnan(md.vel_obs_raw));
-md.diagnostic.spcvx(pos)=md.vx_obs(pos); 
-md.diagnostic.spcvy(pos)=md.vy_obs(pos); 
+pos=find(isnan(md.inversion.vel_obs_raw));
+md.diagnostic.spcvx(pos)=md.inversion.vx_obs(pos); 
+md.diagnostic.spcvy(pos)=md.inversion.vy_obs(pos); 
 
 %iceshelves: any vertex on floating ice is spc'd
 pos=find(md.mask.vertexongroundedice);
-md.diagnostic.spcvx(pos)=md.vx_obs(pos); 
-md.diagnostic.spcvy(pos)=md.vy_obs(pos); 
+md.diagnostic.spcvx(pos)=md.inversion.vx_obs(pos); 
+md.diagnostic.spcvy(pos)=md.inversion.vy_obs(pos); 
 
 %make sure icefronts that are completely spc'd are taken out:
Index: /issm/trunk/src/m/model/bamg.m
===================================================================
--- /issm/trunk/src/m/model/bamg.m	(revision 9680)
+++ /issm/trunk/src/m/model/bamg.m	(revision 9681)
@@ -46,5 +46,5 @@
 %   Examples:
 %      md=bamg(md,'domain','DomainOutline.exp','hmax',3000);
-%      md=bamg(md,'field',[md.vel_obs md.thickness],'hmax',20000,'hmin',1000);
+%      md=bamg(md,'field',[md.inversion.vel_obs md.thickness],'hmax',20000,'hmin',1000);
 %      md=bamg(md,'metric',A,'hmin',1000,'hmax',20000,'gradation',3,'anisomax',1);
 
Index: /issm/trunk/src/m/model/collapse.m
===================================================================
--- /issm/trunk/src/m/model/collapse.m	(revision 9680)
+++ /issm/trunk/src/m/model/collapse.m	(revision 9681)
@@ -26,7 +26,7 @@
 
 %observations
-if ~isnan(md.vx_obs), md.vx_obs=project2d(md,md.vx_obs,md.numlayers); end;
-if ~isnan(md.vy_obs), md.vy_obs=project2d(md,md.vy_obs,md.numlayers); end;
-if ~isnan(md.vel_obs), md.vel_obs=project2d(md,md.vel_obs,md.numlayers); end;
+if ~isnan(md.inversion.vx_obs), md.inversion.vx_obs=project2d(md,md.inversion.vx_obs,md.numlayers); end;
+if ~isnan(md.inversion.vy_obs), md.inversion.vy_obs=project2d(md,md.inversion.vy_obs,md.numlayers); end;
+if ~isnan(md.inversion.vel_obs), md.inversion.vel_obs=project2d(md,md.inversion.vel_obs,md.numlayers); end;
 if ~isnan(md.surfaceforcings.mass_balance),
 	md.surfaceforcings.mass_balance=project2d(md,md.surfaceforcings.mass_balance,md.numlayers); 
Index: sm/trunk/src/m/model/display/displaycontrol.m
===================================================================
--- /issm/trunk/src/m/model/display/displaycontrol.m	(revision 9680)
+++ 	(revision )
@@ -1,37 +1,0 @@
-function displaycontrol(md)
-%DISPLAYCONTROL - display control parameters
-%
-%   To avoid clobbering display.m with every field from model md, 
-%   we create this routine that displays control parameters from model md, 
-%   only if requested.
-%
-%   Usage:
-%      displaycontrol(md)
-
-disp(sprintf('   Control solution parameters:\n'));
-if md.control_analysis,
-	fielddisplay(md,'control_type','parameter where inverse control is carried out; ex: {''DragCoefficient''}, or {''RheologyBbar''}');
-	fielddisplay(md,'weights','weights applied to the misfit of each node');
-	fielddisplay(md,'nsteps','number of optimization searches');
-	fielddisplay(md,'eps_cm','misfit convergence criterion. Default is 1%, NaN if not applied');
-	fielddisplay(md,'optscal','scaling factor on gradient direction during optimization, for each optimization step');
-	fielddisplay(md,'cm_responses','indicate the type of response for each optimization steps');
-	fielddisplay(md,'maxiter','maximum iterations during each optimization step');
-	fielddisplay(md,'cm_jump','decrease threshold for misfit, default is 30%');
-	fielddisplay(md,'cm_min','absolute minimum acceptable value of the inversed parameter');
-	fielddisplay(md,'cm_max','absolute maximum acceptable value of the inversed parameter');
-	fielddisplay(md,'cm_gradient','stop control method solution at gradient');
-	fielddisplay(md,'plot','visualization of the results of each iteration yes -> 1 no -> 0. Default is 1');
-	disp('Available responses:');
-	disp('   101: SurfaceAbsVelMisfit');
-	disp('   102: SurfaceRelVelMisfit');
-	disp('   103: SurfaceLogVelMisfit');
-	disp('   104: SurfaceLogVxVyMisfit');
-	disp('   105: SurfaceAverageVelMisfit');
-	disp('   201: ThicknessAbsMisfit');
-	disp('   501: DragCoefficientAbsGradient');
-	disp('   502: RheologyBbarAbsGradient');
-	disp('   503: ThicknessAbsGradient');
-else
-	disp(sprintf('         %s','no scheduled control. activate by doing md.control_analysis=1'));
-end
Index: sm/trunk/src/m/model/display/displayobservations.m
===================================================================
--- /issm/trunk/src/m/model/display/displayobservations.m	(revision 9680)
+++ 	(revision )
@@ -1,20 +1,0 @@
-function displayobservations(md)
-%DISPLAYOBSERVATIONS - display observations information
-%
-%   To avoid clobbering display.m with every field from model md, 
-%   we create this routine that displays observations information from model md, 
-%   only if requested.
-%
-%   Usage:
-%      displayobservations(md)
-
-disp(sprintf('   Observations:\n'));
-
-fielddisplay(md,'vx_obs','observed velocity x component [m/a]');
-fielddisplay(md,'vy_obs','observed velocity y component [m/a]');
-fielddisplay(md,'vel_obs','observed velocity magnitude [m/a]');
-fielddisplay(md,'vx_obs_raw','raw observedvelocity x component [m/a]');
-fielddisplay(md,'vy_obs_raw','raw observed velocity y component [m/a]');
-fielddisplay(md,'vel_obs_raw','raw observed magnitude [m/a]');
-fielddisplay(md,'dhdt','surface dhdt rate [m/a]');
-fielddisplay(md,'observed_temperature','observed temperature [K]');
Index: /issm/trunk/src/m/model/extrude.m
===================================================================
--- /issm/trunk/src/m/model/extrude.m	(revision 9680)
+++ /issm/trunk/src/m/model/extrude.m	(revision 9681)
@@ -131,7 +131,7 @@
 
 %observations
-md.vx_obs=project3d(md,'vector',md.vx_obs,'type','node');
-md.vy_obs=project3d(md,'vector',md.vy_obs,'type','node');
-md.vel_obs=project3d(md,'vector',md.vel_obs,'type','node');
+md.inversion.vx_obs=project3d(md,'vector',md.inversion.vx_obs,'type','node');
+md.inversion.vy_obs=project3d(md,'vector',md.inversion.vy_obs,'type','node');
+md.inversion.vel_obs=project3d(md,'vector',md.inversion.vel_obs,'type','node');
 md.surfaceforcings.mass_balance=project3d(md,'vector',md.surfaceforcings.mass_balance,'type','node');
 md.surfaceforcings.accumulation_rate=project3d(md,'vector',md.surfaceforcings.accumulation_rate,'type','node');
@@ -209,5 +209,5 @@
 md.mask.elementonwater=project3d(md,'vector',md.mask.elementonwater,'type','element');
 md.mask.vertexonwater=project3d(md,'vector',md.mask.vertexonwater,'type','node');
-if ~isnan(md.weights),md.weights=project3d(md,'vector',md.weights,'type','node');end;
+if ~isnan(md.inversion.cost_functions_coefficients),md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end;
 
 %Put lithostatic pressure is there is an existing pressure
Index: /issm/trunk/src/m/model/graddetection.m
===================================================================
--- /issm/trunk/src/m/model/graddetection.m	(revision 9680)
+++ /issm/trunk/src/m/model/graddetection.m	(revision 9681)
@@ -14,5 +14,5 @@
 
 %plug optimized parameter in model. 
-md2.(EnumToModelField(md2.results.DiagnosticAnalysis.control_type))=parameter1;
+md2.(EnumToModelField(md2.results.DiagnosticAnalysis.inversion.control_parameters))=parameter1;
 
 %put nsteps to 1: 
Index: /issm/trunk/src/m/model/ismodelselfconsistent.m
===================================================================
--- /issm/trunk/src/m/model/ismodelselfconsistent.m	(revision 9680)
+++ /issm/trunk/src/m/model/ismodelselfconsistent.m	(revision 9681)
@@ -83,5 +83,5 @@
 %NO NAN {{{1
 fields={'numberofelements','numberofnodes','x','y','z','friction.coefficient','friction.p','friction.q',...
-	'materials.rho_ice','materials.rho_water','materials.rheology_B','mask.elementonfloatingice','surface','thickness','bed','constants.g','settings.lowmem','nsteps','maxiter',...
+	'materials.rho_ice','materials.rho_water','materials.rheology_B','mask.elementonfloatingice','surface','thickness','bed','constants.g','settings.lowmem','inversion.nsteps','inversion.maxiter_per_step',...
 	'diagnostic.restol','diagnostic.maxiter','materials.rheology_n','nodeonbed','nodeonsurface','elementonbed','elementonsurface','elementconnectivity'};
 checknan(md,fields);
@@ -90,10 +90,11 @@
 fields={'numberofelements','numberofnodes','elements','friction.coefficient','friction.p','friction.q',...
 	'materials.rho_ice','materials.rho_water','materials.rheology_B','mask.elementonfloatingice','thickness','constants.g','diagnostic.restol','diagnostic.maxiter','diagnostic.reltol',...
-	'diagnostic.abstol','nsteps','maxiter','settings.lowmem','materials.rheology_n','nodeonbed','nodeonsurface','elementonbed','elementonsurface'};
+	'diagnostic.abstol','inversion.nsteps','inversion.maxiter_per_step',...
+	'settings.lowmem','materials.rheology_n','nodeonbed','nodeonsurface','elementonbed','elementonsurface'};
 checkgreater(md,fields,0);
 %}}}
 %FIELDS > 0 {{{1
 fields={'numberofelements','numberofnodes','elements','friction.p',...
-	'materials.rho_ice','materials.rho_water','materials.rheology_B','thickness','constants.g','diagnostic.maxiter','diagnostic.restol','diagnostic.reltol','diagnostic.abstol','maxiter'};
+	'materials.rho_ice','materials.rho_water','materials.rheology_B','thickness','constants.g','diagnostic.maxiter','diagnostic.restol','diagnostic.reltol','diagnostic.abstol','inversion.maxiter_per_step'};
 checkgreaterstrict(md,fields,0);
 %}}}
@@ -201,31 +202,31 @@
 %}}}
 %CONTROL{{{1
-if md.control_analysis,
+if md.inversion.iscontrol,
 
 	%CONTROL TYPE
-	num_controls=numel(md.control_type);
-	num_costfunc=size(md.cm_responses,2);
-	if ~iscell(md.control_type)
-		message(['model not consistent: model ' md.miscellaneous.name ' control_type field should be a cell of strings']);
-	end
-	if ~ismember(md.control_type,{'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'Vx' 'Vy'});
-		message(['model not consistent: model ' md.miscellaneous.name ' control_type field should be ''BalancethicknessThickeningRate'' ''FrictionCoefficient'' ''MaterialsRheologyBbar'' ''Vx'' ''Vy''']);
+	num_controls=numel(md.inversion.control_parameters);
+	num_costfunc=size(md.inversion.cost_functions,2);
+	if ~iscell(md.inversion.control_parameters)
+		message(['model not consistent: model ' md.miscellaneous.name ' inversion.control_parameters field should be a cell of strings']);
+	end
+	if ~ismember(md.inversion.control_parameters,{'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'Vx' 'Vy'});
+		message(['model not consistent: model ' md.miscellaneous.name ' inversion.control_parameters field should be ''BalancethicknessThickeningRate'' ''FrictionCoefficient'' ''MaterialsRheologyBbar'' ''Vx'' ''Vy''']);
 	end
 
 	%LENGTH CONTROL FIELDS
-	fields={'maxiter','cm_jump'};
-	checksize(md,fields,[md.nsteps 1]);
-	fields={'cm_responses'};
-	checksize(md,fields,[md.nsteps num_costfunc]);
-	fields={'optscal'};
-	checksize(md,fields,[md.nsteps num_controls]);
-	fields={'cm_min','cm_max'};
+	fields={'inversion.maxiter_per_step','inversion.step_threshold'};
+	checksize(md,fields,[md.inversion.nsteps 1]);
+	fields={'inversion.cost_functions'};
+	checksize(md,fields,[md.inversion.nsteps num_costfunc]);
+	fields={'inversion.gradient_scaling'};
+	checksize(md,fields,[md.inversion.nsteps num_controls]);
+	fields={'inversion.min_parameters','inversion.max_parameters'};
 	checksize(md,fields,[md.numberofnodes num_controls]);
 
 	%RESPONSES
-	checkvalues(md,{'cm_responses'},[101:105 201 501:503]);
+	checkvalues(md,{'inversion.cost_functions'},[101:105 201 501:503]);
 
 	%WEIGHTS
-	fields={'weights'};
+	fields={'inversion.cost_functions_coefficients'};
 	checksize(md,fields,[md.numberofnodes num_costfunc]);
 	checkgreater(md,fields,0);
@@ -233,9 +234,9 @@
 	%OBSERVED VELOCITIES
 	if md.private.solution==BalancethicknessSolutionEnum
-		fields={'thickness_obs'};
+		fields={'inversion.thickness_obs'};
 		checksize(md,fields,[md.numberofnodes 1]);
 		checknan(md,fields);
 	else
-		fields={'vx_obs','vy_obs'};
+		fields={'inversion.vx_obs','inversion.vy_obs'};
 		checksize(md,fields,[md.numberofnodes 1]);
 		checknan(md,fields);
@@ -623,5 +624,5 @@
 					disp('!!! WARNING: cm_min must now be of size [md.numberofnodes x 1]. Update your parameter file as follows:');
 					disp('!!! ');
-					disp('!!! md.cm_min=md.cm_min*ones(md.numberofnodes,1);');
+					disp('!!! md.inversion.min_parameters=md.inversion.min_parameters*ones(md.numberofnodes,1);');
 					disp('!!! ');
 				end
@@ -631,5 +632,5 @@
 					disp('!!! WARNING: cm_max must now be of size [md.numberofnodes x 1]. Update your parameter file as follows:');
 					disp('!!! ');
-					disp('!!! md.cm_max=md.cm_max*ones(md.numberofnodes,1);');
+					disp('!!! md.inversion.max_parameters=md.inversion.max_parameters*ones(md.numberofnodes,1);');
 					disp('!!! ');
 				end
Index: sm/trunk/src/m/model/isresultconsistent.m
===================================================================
--- /issm/trunk/src/m/model/isresultconsistent.m	(revision 9680)
+++ 	(revision )
@@ -1,249 +1,0 @@
-function bool=isresultconsistent(md,solution_type)
-%ISRESULTCONSISTENT: check that results are consistent
-%
-%   This routine is called after a computation and check
-%   that the values t the penalties are consitent
-%
-%   Usage:
-%      bool=IsModelSelfConsistent(model,solution_type)
-
-%tolerance we use in litmus tests for the consistency of the model
-tolerance=10^-2;
-
-%some checks
-if (nargin~=2 | nargout~=1)
-	help isresultconsistent
-	error(' ');
-end
-
-%initialize output as 1 -> success
-bool=1;
-
-%do not check results if qmu analysis
-if md.qmu.isdakota,
-	return
-end
-
-%DIAGNOSTIC
-if solution_type==DiagnosticSolutionEnum() & md.control_analysis==0,
-
-	if (md.dim==3)
-		fields1={'results.DiagnosticAnalysis.vx','results.DiagnosticAnalysis.vy','results.DiagnosticAnalysis.vz','results.DiagnosticAnalysis.vel'};
-		fields2={'results.DiagnosticAnalysis.vel'};
-	else
-		fields1={'results.DiagnosticAnalysis.vx','results.DiagnosticAnalysis.vy','results.DiagnosticAnalysis.vel'};
-		fields2={'results.DiagnosticAnalysis.vel'};
-	end
-
-	%check size
-	if ~testsize(md,fields1,md.numberofnodes),
-		bool=0; return
-	end
-
-	%no NAN
-	if ~testnan(md,fields1),
-		bool=0; return
-	end
-
-	%check value is real
-	if ~testreal(md,fields1),
-		bool=0; return
-	end
-
-	%check value>=0
-	if ~testpositive(md,fields2),
-		bool=0; return
-	end
-
-end
-
-%CONTROL
-if solution_type==DiagnosticSolutionEnum() & md.control_analysis==1,
-
-	if ~md.cm_gradient,
-		fields1={'results.DiagnosticAnalysis.vx','results.DiagnosticAnalysis.vy','results.DiagnosticAnalysis.vel','results.DiagnosticAnalysis.parameter'};
-		fields2={'results.DiagnosticAnalysis.vel','results.DiagnosticAnalysis.J'};
-
-		%check size
-		if ~testsize(md,fields1,md.numberofnodes),
-			bool=0; return
-		end
-
-		%no NAN
-		if ~testnan(md,fields1),
-			bool=0; return
-		end
-
-		%check value is real
-		if ~testreal(md,fields1),
-			bool=0; return
-		end
-
-		%check value>=0
-		if ~testpositive(md,fields2),
-			bool=0; return
-		end
-
-		%check inversed parameter
-		if ~isnan(md.cm_max),
-			if any(md.results.DiagnosticAnalysis.parameter>md.cm_max)
-				disp(['''control'' result not consistent: inverse parameter is greater than ' num2str(md.cm_max)]);
-				bool=0; return; 
-			end
-		end
-		if ~isnan(md.cm_min),
-			if any(md.results.DiagnosticAnalysis.parameter<md.cm_min)
-				disp(['''control'' result not consistent: inverse parameter is smaller than ' num2str(md.cm_min)]);
-				bool=0; return; 
-			end
-		end
-	else
-		fields={'results.DiagnosticAnalysis.gradient'};
-		%check size
-		if ~testsize(md,fields,md.numberofnodes),
-			bool=0; return
-		end
-
-		%no NAN
-		if ~testnan(md,fields),
-			bool=0; return
-		end
-
-		%check value is real
-		if ~testreal(md,fields),
-			bool=0; return
-		end
-	end
-end
-
-%THERMAL
-if solution_type==ThermalSolutionEnum(),
-
-	for iter=1:length(md.results.ThermalAnalysis)
-
-		fields1={['results.ThermalAnalysis(' num2str(iter) ').temperature'],['results.ThermalAnalysis(' num2str(iter) ').melting']};
-		fields2={['results.ThermalAnalysis(' num2str(iter) ').temperature']};
-
-		%check size
-		if ~testsize(md,fields1,md.numberofnodes),
-			bool=0; return
-		end
-
-		%no NAN
-		if ~testnan(md,fields1,md.numberofnodes),
-			bool=0; return
-		end
-
-		%check value is real
-		if ~testreal(md,fields1,md.numberofnodes),
-			bool=0; return
-		end
-
-		%check value>=0
-		if ~testpositive(md,fields2,md.numberofnodes),
-			bool=0; return
-		end
-
-		%check melting (<=0 via penalties)
-		if any(abs(md.results.ThermalAnalysis(iter).melting(md.numberofnodes2d+1:end))>tolerance)
-			disp(['''thermal'' result not consistent: increase thermal.penalty_factor (negative melting)']);
-			bool=0; return; 
-		end
-	end
-
-end
-
-if (solution_type==TransientSolutionEnum()),
-
-	for iter=1:length(md.results.TransientAnalysis)
-
-		if (md.dim==3),
-			fields1={['results.TransientAnalysis(' num2str(iter) ').vx'],['results.TransientAnalysis(' num2str(iter) ').vy'],...
-				['results.TransientAnalysis(' num2str(iter) ').vz'],['results.TransientAnalysis(' num2str(iter) ').vel'],...
-				['results.TransientAnalysis(' num2str(iter) ').bed'],['results.TransientAnalysis(' num2str(iter) ').surface'],...
-				['results.TransientAnalysis(' num2str(iter) ').thickness'],...
-				['results.TransientAnalysis(' num2str(iter) ').temperature'],['results.TransientAnalysis(' num2str(iter) ').melting']};
-			fields2={['results.TransientAnalysis(' num2str(iter) ').vel'],['results.TransientAnalysis(' num2str(iter) ').thickness'],...
-				['results.TransientAnalysis(' num2str(iter) ').temperature']};
-		else
-			fields1={['results.TransientAnalysis(' num2str(iter) ').vx'],['results.TransientAnalysis(' num2str(iter) ').vy'],...
-				['results.TransientAnalysis(' num2str(iter) ').vel'],...
-				['results.TransientAnalysis(' num2str(iter) ').bed'],['results.TransientAnalysis(' num2str(iter) ').surface'],...
-				['results.TransientAnalysis(' num2str(iter) ').thickness']};
-			fields2={['results.TransientAnalysis(' num2str(iter) ').vel'],['results.TransientAnalysis(' num2str(iter) ').thickness']};
-		end
-
-		%check size
-		if ~testsize(md,fields1,md.numberofnodes),
-			bool=0; return
-		end
-
-		%no NAN
-		if ~testnan(md,fields1,md.numberofnodes),
-			bool=0; return
-		end
-
-		%check value is real
-		if ~testreal(md,fields1,md.numberofnodes),
-			bool=0; return
-		end
-
-		%check value>=0
-		if ~testpositive(md,fields2,md.numberofnodes),
-			bool=0; return
-		end
-
-		%check melting (<=0 via penalties)
-		if (md.dim==3),
-			if any(abs(md.results.TransientAnalysis(iter).melting(md.numberofnodes2d+1:end))>tolerance)
-				disp(['''thermal'' result not consistent: increase therma.penalty_factor (negative melting)']);
-				bool=0; return; 
-			end
-		end
-	end
-end
-end % end function
-
-function bool=testsize(md,fields,fieldsize)
-	%TESTSIZE - test size of a field
-	bool=1;
-	for i=1:length(fields),
-		if length(eval(['md.' fields{i}]))~=fieldsize
-			disp(['results not consistent: field ' fields{i} ' size should be ' num2str(md.numberofnodes)]);
-			bool=0; return;
-		end
-	end
-end
-
-function bool=testnan(md,fields,nanfield)
-	%TESTNAN - test nan values of a field
-	bool=1;
-	for i=1:length(fields),
-		if any(isnan(eval(['md.' fields{i}]))),
-			disp(['results not consistent: NaN values in field ' fields{i}]);
-			bool=0; return;
-		end
-	end
-end
-
-function bool=testreal(md,fields,realfield)
-	%TESTREAL - test real values of a field
-	bool=1;
-	for i=1:length(fields),
-		if any(eval(['~isreal(md.' fields{i} ')'])),
-			disp(['results not consistent: complex values in field ' fields{i}]);
-			bool=0; return;
-		end
-	end
-end
-
-function bool=testpositive(md,fields,positivefield)
-	%TESTPOSITIVE - test positive values of a field
-	bool=1;
-	for i=1:length(fields),
-		if any(eval(['md.' fields{i} '<0'])),
-			disp(['results not consistent: negative values in field ' fields{i}]);
-			bool=0; return;
-		end
-	end
-end
Index: /issm/trunk/src/m/model/mechanicalproperties.m
===================================================================
--- /issm/trunk/src/m/model/mechanicalproperties.m	(revision 9680)
+++ /issm/trunk/src/m/model/mechanicalproperties.m	(revision 9681)
@@ -11,5 +11,5 @@
 %   Example:
 %      md=mechanicalproperties(md,md.vx,md.vy);
-%      md=mechanicalproperties(md,md.vx_obs,md.vy_obs);
+%      md=mechanicalproperties(md,md.inversion.vx_obs,md.inversion.vy_obs);
 
 %some checks
Index: /issm/trunk/src/m/model/mesh/meshyams.m
===================================================================
--- /issm/trunk/src/m/model/mesh/meshyams.m	(revision 9680)
+++ /issm/trunk/src/m/model/mesh/meshyams.m	(revision 9681)
@@ -127,11 +127,11 @@
 end
 if strcmpi(Names.interp,'node'),
-	md.vx_obs=InterpFromGridToMesh(Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vxname),md.x,md.y,0);
-	md.vy_obs=InterpFromGridToMesh(Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vyname),md.x,md.y,0);
+	md.inversion.vx_obs=InterpFromGridToMesh(Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vxname),md.x,md.y,0);
+	md.inversion.vy_obs=InterpFromGridToMesh(Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vyname),md.x,md.y,0);
 else
-	md.vx_obs=InterpFromMeshToMesh2d(Vel.(Names.indexname),Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vxname),md.x,md.y,0);
-	md.vy_obs=InterpFromMeshToMesh2d(Vel.(Names.indexname),Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vyname),md.x,md.y,0);
+	md.inversion.vx_obs=InterpFromMeshToMesh2d(Vel.(Names.indexname),Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vxname),md.x,md.y,0);
+	md.inversion.vy_obs=InterpFromMeshToMesh2d(Vel.(Names.indexname),Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vyname),md.x,md.y,0);
 end
-md.vel_obs=sqrt(md.vx_obs.^2+md.vy_obs.^2);
+md.inversion.vel_obs=sqrt(md.inversion.vx_obs.^2+md.inversion.vy_obs.^2);
 
 %deal with rifts 
Index: /issm/trunk/src/m/model/misfit.m
===================================================================
--- /issm/trunk/src/m/model/misfit.m	(revision 9680)
+++ /issm/trunk/src/m/model/misfit.m	(revision 9681)
@@ -15,6 +15,6 @@
 	vx=md.vx;
 	vy=md.vy;
-	vx_obs=md.vx_obs;
-	vy_obs=md.vy_obs;
+	vx_obs=md.inversion.vx_obs;
+	vy_obs=md.inversion.vy_obs;
 else
 	elements=md.elements2d;
@@ -23,6 +23,6 @@
 	vx=project2d(md,md.vx,md.numlayers);
 	vy=project2d(md,md.vy,md.numlayers);
-	vx_obs=project2d(md,md.vx_obs,md.numlayers);
-	vy_obs=project2d(md,md.vy_obs,md.numlayers);
+	vx_obs=project2d(md,md.inversion.vx_obs,md.numlayers);
+	vy_obs=project2d(md,md.inversion.vy_obs,md.numlayers);
 end
 
Index: /issm/trunk/src/m/model/parametercontroloptimization.m
===================================================================
--- /issm/trunk/src/m/model/parametercontroloptimization.m	(revision 9680)
+++ /issm/trunk/src/m/model/parametercontroloptimization.m	(revision 9681)
@@ -30,8 +30,8 @@
 md2.eps_cm=NaN;
 md2.nsteps=getfieldvalue(options,'nsteps',5);
-md2.control_type=getfieldvalue(options,'md2.control_type',{'FrictionCoefficient'});
+md2.inversion.control_parameters=getfieldvalue(options,'md2.inversion.control_parameters',{'FrictionCoefficient'});
 md2.maxiter=10*ones(md2.nsteps,1);
 md2.cm_jump=0.99*ones(md2.nsteps,1);
-md2.control_analysis=1;
+md2.inversion.iscontrol=1;
 md2.weights=ones(md2.numberofnodes,1);
 
@@ -67,4 +67,4 @@
 %load final parameters onto initial model
 md.fit    =fit_final;
-md.cm_max =cmmax_final;
-md.optscal=optscal_final;
+md.inversion.max_parameters =cmmax_final;
+md.inversion.gradient_scaling=optscal_final;
Index: /issm/trunk/src/m/model/parameterization/parametercontrolB.m
===================================================================
--- /issm/trunk/src/m/model/parameterization/parametercontrolB.m	(revision 9680)
+++ /issm/trunk/src/m/model/parameterization/parametercontrolB.m	(revision 9681)
@@ -21,12 +21,12 @@
 
 %control type
-md.control_type={'RheologyBbar'};
+md.inversion.control_parameters={'RheologyBbar'};
 
 %weights
 weights=getfieldvalue(options,'weights',ones(md.numberofnodes,1));
 if (length(weights)~=md.numberofnodes)
-	md.weights=ones(md.numberofnodes,1);
+	md.inversion.cost_functions_coefficients=ones(md.numberofnodes,1);
 else
-	md.weights=weights;
+	md.inversion.cost_functions_coefficients=weights;
 end
 
@@ -34,7 +34,7 @@
 nsteps=getfieldvalue(options,'nsteps',100);
 if (length(nsteps)~=1 | nsteps<=0 | floor(nsteps)~=nsteps)
-	md.nsteps=100;
+	md.inversion.nsteps=100;
 else
-	md.nsteps=nsteps;
+	md.inversion.nsteps=nsteps;
 end
 
@@ -43,9 +43,9 @@
 cm_min=getfieldvalue(options,'cm_min',paterson(273.15+5)*ones(md.numberofnodes,1));
 if (length(cm_min)==1)
-	md.cm_min=cm_min*ones(md.numberofnodes,1);
+	md.inversion.min_parameters=cm_min*ones(md.numberofnodes,1);
 elseif (length(cm_min)==md.numberofnodes)
-	md.cm_min=cm_min;
+	md.inversion.min_parameters=cm_min;
 else
-	md.cm_min=cm_min;
+	md.inversion.min_parameters=cm_min;
 end
 
@@ -53,9 +53,9 @@
 cm_max=getfieldvalue(options,'cm_max',paterson(273.15-70)*ones(md.numberofnodes,1));
 if (length(cm_max)==1)
-	md.cm_max=cm_max*ones(md.numberofnodes,1);
+	md.inversion.max_parameters=cm_max*ones(md.numberofnodes,1);
 elseif (length(cm_max)==md.numberofnodes)
-	md.cm_max=cm_max;
+	md.inversion.max_parameters=cm_max;
 else
-	md.cm_max=cm_max;
+	md.inversion.max_parameters=cm_max;
 end
 
@@ -63,25 +63,25 @@
 eps_cm=getfieldvalue(options,'eps_cm',NaN);
 if (length(eps_cm)~=1 | eps_cm<0 )
-	md.eps_cm=NaN;
+	md.inversion.cost_function_threshold=NaN;
 else
-	md.eps_cm=eps_cm;
+	md.inversion.cost_function_threshold=eps_cm;
 end
 
 %maxiter
-maxiter=getfieldvalue(options,'maxiter',10*ones(md.nsteps,1));
+maxiter=getfieldvalue(options,'maxiter',10*ones(md.inversion.nsteps,1));
 if (any(maxiter<0) | any(floor(maxiter)~=maxiter))
-	md.maxiter=10*ones(md.nsteps,1);
+	md.inversion.maxiter_per_step=10*ones(md.inversion.nsteps,1);
 else
-	md.maxiter=repmat(maxiter(:),md.nsteps,1);
-	md.maxiter(md.nsteps+1:end)=[];
+	md.inversion.maxiter_per_step=repmat(maxiter(:),md.inversion.nsteps,1);
+	md.inversion.maxiter_per_step(md.inversion.nsteps+1:end)=[];
 end
 
 %cm_jump
-cm_jump=getfieldvalue(options,'cm_jump',0.9*ones(md.nsteps,1));
+cm_jump=getfieldvalue(options,'cm_jump',0.9*ones(md.inversion.nsteps,1));
 if ~isreal(cm_jump)
-	md.cm_jump=0.9*ones(md.nsteps,1);
+	md.inversion.step_threshold=0.9*ones(md.inversion.nsteps,1);
 else
-	md.cm_jump=repmat(cm_jump(:),md.nsteps,1);
-	md.cm_jump(md.nsteps+1:end)=[];
+	md.inversion.step_threshold=repmat(cm_jump(:),md.inversion.nsteps,1);
+	md.inversion.step_threshold(md.inversion.nsteps+1:end)=[];
 end
 
@@ -91,17 +91,17 @@
 	cm_responses=getfieldvalue(options,'cm_responses');
 	if ~any(~ismember(cm_responses,[ 101:105])),
-		md.cm_responses=repmat(cm_responses(:),md.nsteps,1);
-		md.cm_responses(md.nsteps+1:end)=[];
+		md.inversion.cost_functions=repmat(cm_responses(:),md.inversion.nsteps,1);
+		md.inversion.cost_functions(md.inversion.nsteps+1:end)=[];
 		found=1;
 	end
 end
 if ~found
-	third=ceil(md.nsteps/3);
-	md.cm_responses=[...
+	third=ceil(md.inversion.nsteps/3);
+	md.inversion.cost_functions=[...
 		103*ones(third,1);...
 		101*ones(third,1);...
 		repmat([101;101;103;101],third,1)...
 		];
-	md.cm_responses(md.nsteps+1:end)=[];
+	md.inversion.cost_functions(md.inversion.nsteps+1:end)=[];
 end
 
@@ -111,12 +111,12 @@
 	optscal=getfieldvalue(options,'optscal');
 	if ~any(optscal<0),
-		md.optscal=repmat(optscal(:),md.nsteps,1);
-		md.optscal(md.nsteps+1:end)=[];
+		md.inversion.gradient_scaling=repmat(optscal(:),md.inversion.nsteps,1);
+		md.inversion.gradient_scaling(md.inversion.nsteps+1:end)=[];
 		found=1;
 	end
 end
 if ~found
-	third=ceil(md.nsteps/3);
-	md.optscal=[2*10^8*ones(3,1);10^8*ones(third-3,1);10^7*ones(2*third,1);];
-	md.optscal(md.nsteps+1:end)=[];
+	third=ceil(md.inversion.nsteps/3);
+	md.inversion.gradient_scaling=[2*10^8*ones(3,1);10^8*ones(third-3,1);10^7*ones(2*third,1);];
+	md.inversion.gradient_scaling(md.inversion.nsteps+1:end)=[];
 end
Index: /issm/trunk/src/m/model/parameterization/parametercontroldrag.m
===================================================================
--- /issm/trunk/src/m/model/parameterization/parametercontroldrag.m	(revision 9680)
+++ /issm/trunk/src/m/model/parameterization/parametercontroldrag.m	(revision 9681)
@@ -21,12 +21,12 @@
 
 %control type
-md.control_type={'FrictionCoefficient'};
+md.inversion.control_parameters={'FrictionCoefficient'};
 
 %weights
 weights=getfieldvalue(options,'weights',ones(md.numberofnodes,1));
 if (length(weights)~=md.numberofnodes)
-	md.weights=ones(md.numberofnodes,1);
+	md.inversion.cost_functions_coefficients=ones(md.numberofnodes,1);
 else
-	md.weights=weights;
+	md.inversion.cost_functions_coefficients=weights;
 end
 
@@ -34,7 +34,7 @@
 nsteps=getfieldvalue(options,'nsteps',100);
 if (length(nsteps)~=1 | nsteps<=0 | floor(nsteps)~=nsteps)
-	md.nsteps=100;
+	md.inversion.nsteps=100;
 else
-	md.nsteps=nsteps;
+	md.inversion.nsteps=nsteps;
 end
 
@@ -42,9 +42,9 @@
 cm_min=getfieldvalue(options,'cm_min',1*ones(md.numberofnodes,1));
 if (length(cm_min)==1)
-	md.cm_min=cm_min*ones(md.numberofnodes,1);
+	md.inversion.min_parameters=cm_min*ones(md.numberofnodes,1);
 elseif (length(cm_min)==md.numberofnodes)
-	md.cm_min=cm_min;
+	md.inversion.min_parameters=cm_min;
 else
-	md.cm_min=cm_min;
+	md.inversion.min_parameters=cm_min;
 end
 
@@ -52,9 +52,9 @@
 cm_max=getfieldvalue(options,'cm_max',250*ones(md.numberofnodes,1));
 if (length(cm_max)==1)
-	md.cm_max=cm_max*ones(md.numberofnodes,1);
+	md.inversion.max_parameters=cm_max*ones(md.numberofnodes,1);
 elseif (length(cm_max)==md.numberofnodes)
-	md.cm_max=cm_max;
+	md.inversion.max_parameters=cm_max;
 else
-	md.cm_max=cm_max;
+	md.inversion.max_parameters=cm_max;
 end
 
@@ -62,25 +62,25 @@
 eps_cm=getfieldvalue(options,'eps_cm',NaN);
 if (length(eps_cm)~=1 | eps_cm<0 )
-	md.eps_cm=NaN;
+	md.inversion.cost_function_threshold=NaN;
 else
-	md.eps_cm=eps_cm;
+	md.inversion.cost_function_threshold=eps_cm;
 end
 
 %maxiter
-maxiter=getfieldvalue(options,'maxiter',10*ones(md.nsteps,1));
+maxiter=getfieldvalue(options,'maxiter',10*ones(md.inversion.nsteps,1));
 if (any(maxiter<0) | any(floor(maxiter)~=maxiter))
-	md.maxiter=10*ones(md.nsteps,1);
+	md.inversion.maxiter_per_step=10*ones(md.inversion.nsteps,1);
 else
-	md.maxiter=repmat(maxiter(:),md.nsteps,1);
-	md.maxiter(md.nsteps+1:end)=[];
+	md.inversion.maxiter_per_step=repmat(maxiter(:),md.inversion.nsteps,1);
+	md.inversion.maxiter_per_step(md.inversion.nsteps+1:end)=[];
 end
 
 %cm_jump
-cm_jump=getfieldvalue(options,'cm_jump',0.8*ones(md.nsteps,1));
+cm_jump=getfieldvalue(options,'cm_jump',0.8*ones(md.inversion.nsteps,1));
 if ~isreal(cm_jump)
-	md.cm_jump=0.8*ones(md.nsteps,1);
+	md.inversion.step_threshold=0.8*ones(md.inversion.nsteps,1);
 else
-	md.cm_jump=repmat(cm_jump(:),md.nsteps,1);
-	md.cm_jump(md.nsteps+1:end)=[];
+	md.inversion.step_threshold=repmat(cm_jump(:),md.inversion.nsteps,1);
+	md.inversion.step_threshold(md.inversion.nsteps+1:end)=[];
 end
 
@@ -90,17 +90,17 @@
 	cm_responses=getfieldvalue(options,'cm_responses');
 	if ~any(~ismember(cm_responses,[101 105])).
-		md.cm_responses=repmat(cm_responses(:),md.nsteps,1);
-		md.cm_responses(md.nsteps+1:end)=[];
+		md.inversion.cost_functions=repmat(cm_responses(:),md.inversion.nsteps,1);
+		md.inversion.cost_functions(md.inversion.nsteps+1:end)=[];
 		found=1;
 	end
 end
 if ~found
-	third=ceil(md.nsteps/3);
-	md.cm_responses=[...
+	third=ceil(md.inversion.nsteps/3);
+	md.inversion.cost_functions=[...
 		103*ones(third,1);...
 		101*ones(third,1);...
 		repmat([101;101;103;101],third,1)...
 		];
-	md.cm_responses(md.nsteps+1:end)=[];
+	md.inversion.cost_functions(md.inversion.nsteps+1:end)=[];
 end
 
@@ -110,12 +110,12 @@
 	optscal=getfieldvalue(options,'optscal');
 	if ~any(optscal<0),
-		md.optscal=repmat(optscal(:),md.nsteps,1);
-		md.optscal(md.nsteps+1:end)=[];
+		md.inversion.gradient_scaling=repmat(optscal(:),md.inversion.nsteps,1);
+		md.inversion.gradient_scaling(md.inversion.nsteps+1:end)=[];
 		found=1;
 	end
 end
 if ~found
-	third=ceil(md.nsteps/3);
-	md.optscal=[50*ones(3,1);15*ones(third-3,1);10*ones(third,1);repmat([10;10;20;10],third,1)];
-	md.optscal(md.nsteps+1:end)=[];
+	third=ceil(md.inversion.nsteps/3);
+	md.inversion.gradient_scaling=[50*ones(3,1);15*ones(third-3,1);10*ones(third,1);repmat([10;10;20;10],third,1)];
+	md.inversion.gradient_scaling(md.inversion.nsteps+1:end)=[];
 end
Index: /issm/trunk/src/m/model/presolve.m
===================================================================
--- /issm/trunk/src/m/model/presolve.m	(revision 9680)
+++ /issm/trunk/src/m/model/presolve.m	(revision 9681)
@@ -13,4 +13,4 @@
 
 %Control methods
-md.num_control_type=numel(md.control_type);
-md.num_cm_responses=size(md.cm_responses,2);
+md.inversion.num_control_parameters=numel(md.inversion.control_parameters);
+md.inversion.num_cost_functions=size(md.inversion.cost_functions,2);
Index: /issm/trunk/src/m/model/tres.m
===================================================================
--- /issm/trunk/src/m/model/tres.m	(revision 9680)
+++ /issm/trunk/src/m/model/tres.m	(revision 9681)
@@ -39,8 +39,8 @@
 		end
 	end
-	if md.control_analysis==1,
-		for control_type=md.control_type
+	if md.inversion.iscontrol==1,
+		for inversion.control_parameters=md.inversion.control_parameters
 			%Will need to be updated... good luck ;)
-			md.(EnumToModelField(control_type))=PatchToVec(md.results.DiagnosticSolution.(EnumToString(control_type)));
+			md.(EnumToModelField(inversion.control_parameters))=PatchToVec(md.results.DiagnosticSolution.(EnumToString(inversion.control_parameters)));
 		end
 	end
@@ -87,7 +87,7 @@
 	md.basalforcings.melting_rate=PatchToVec(md.results.SteadystateSolution.BasalforcingsMeltingRate);
 
-	if md.control_analysis==1,
-		for control_type=md.control_type
-			md.(EnumToModelField(control_type))=PatchToVec(md.results.SteadystateSolution.(EnumToString(control_type)));
+	if md.inversion.iscontrol==1,
+		for inversion.control_parameters=md.inversion.control_parameters
+			md.(EnumToModelField(inversion.control_parameters))=PatchToVec(md.results.SteadystateSolution.(EnumToString(inversion.control_parameters)));
 		end
 	end
Index: /issm/trunk/src/m/solutions/SpawnCore.m
===================================================================
--- /issm/trunk/src/m/solutions/SpawnCore.m	(revision 9680)
+++ /issm/trunk/src/m/solutions/SpawnCore.m	(revision 9681)
@@ -9,5 +9,5 @@
 responsedescriptors=femmodel.parameters.Responsedescriptors; 
 solution_type=femmodel.parameters.SolutionType;
-control_analysis=femmodel.parameters.ControlAnalysis;
+control_analysis=femmodel.parameters.InversionIscontrol;
 
 issmprintf(VerboseQmu(),'%s%i',['   qmu iteration:'],counter);
Index: /issm/trunk/src/m/solutions/adjointbalancethickness_core.m
===================================================================
--- /issm/trunk/src/m/solutions/adjointbalancethickness_core.m	(revision 9680)
+++ /issm/trunk/src/m/solutions/adjointbalancethickness_core.m	(revision 9681)
@@ -6,5 +6,5 @@
 
 	%recover parameters common to all solutions
-	control_analysis=femmodel.parameters.ControlAnalysis;
+	control_analysis=femmodel.parameters.InversionIscontrol;
 	solution_type=femmodel.parameters.SolutionType;
 
Index: /issm/trunk/src/m/solutions/adjointdiagnostic_core.m
===================================================================
--- /issm/trunk/src/m/solutions/adjointdiagnostic_core.m	(revision 9680)
+++ /issm/trunk/src/m/solutions/adjointdiagnostic_core.m	(revision 9681)
@@ -8,5 +8,5 @@
 	isstokes=femmodel.parameters.FlowequationIsstokes;
 	dim=femmodel.parameters.Dim;
-	control_analysis=femmodel.parameters.ControlAnalysis;
+	control_analysis=femmodel.parameters.InversionIscontrol;
 	solution_type=femmodel.parameters.SolutionType;
 	conserve_loads=true;
Index: /issm/trunk/src/m/solutions/balancethickness_core.m
===================================================================
--- /issm/trunk/src/m/solutions/balancethickness_core.m	(revision 9680)
+++ /issm/trunk/src/m/solutions/balancethickness_core.m	(revision 9681)
@@ -7,5 +7,5 @@
 	%recover parameters common to all solutions
 	dim=femmodel.parameters.Dim;
-	control_analysis=femmodel.parameters.ControlAnalysis;
+	control_analysis=femmodel.parameters.InversionIscontrol;
 	solution_type=femmodel.parameters.SolutionType;
 
Index: /issm/trunk/src/m/solutions/bedslope_core.m
===================================================================
--- /issm/trunk/src/m/solutions/bedslope_core.m	(revision 9680)
+++ /issm/trunk/src/m/solutions/bedslope_core.m	(revision 9681)
@@ -8,5 +8,5 @@
 	%Recover some parameters:
 	dim=femmodel.parameters.Dim;
-	control_analysis=femmodel.parameters.ControlAnalysis;
+	control_analysis=femmodel.parameters.InversionIscontrol;
 	solution_type=femmodel.parameters.SolutionType;
 
Index: /issm/trunk/src/m/solutions/control_core.m
===================================================================
--- /issm/trunk/src/m/solutions/control_core.m	(revision 9680)
+++ /issm/trunk/src/m/solutions/control_core.m	(revision 9681)
@@ -7,19 +7,19 @@
 
 	%recover parameters common to all solutions
-	num_controls=femmodel.parameters.NumControlType;
-	num_responses=femmodel.parameters.NumCmResponses;
-	responses=femmodel.parameters.CmResponses;
-	control_type=femmodel.parameters.ControlType;
+	num_controls=femmodel.parameters.InversionNumControlParameters;
+	num_responses=femmodel.parameters.InversionNumCostFunctions;
+	responses=femmodel.parameters.InversionCostFunctions;
+	control_type=femmodel.parameters.InversionControlParameters;
 	solution_type=femmodel.parameters.SolutionType;
-	nsteps=femmodel.parameters.Nsteps;
-	maxiter=femmodel.parameters.Maxiter;
-	cm_jump=femmodel.parameters.CmJump;
-	eps_cm=femmodel.parameters.EpsCm;
-	cm_gradient=femmodel.parameters.CmGradient;
+	nsteps=femmodel.parameters.InversionNsteps;
+	maxiter=femmodel.parameters.InversionMaxiterPerStep;
+	step_threshold=femmodel.parameters.InversionStepThreshold;
+	eps_cm=femmodel.parameters.InversionCostFunctionThreshold;
+	gradient_only=femmodel.parameters.InversionGradientOnly;
 	dim=femmodel.parameters.Dim;
 	isstokes=femmodel.parameters.FlowequationIsstokes;
 
 	%Initialise options with maxiter
-	options.MaxIter=femmodel.parameters.Maxiter;
+	options.MaxIter=femmodel.parameters.InversionMaxiterPerStep;
 
 	%Initialize misfits with a vector of zeros
@@ -39,5 +39,5 @@
 	for n=1:nsteps,
 
-		issmprintf(VerboseControl(),['control method step ' num2str(n) '/' num2str(femmodel.parameters.Nsteps)]);
+		issmprintf(VerboseControl(),['control method step ' num2str(n) '/' num2str(femmodel.parameters.InversionNsteps)]);
 		femmodel.parameters.StepResponses=responses(n,:);
 
@@ -53,5 +53,5 @@
 
 		%Return gradient if asked
-		if cm_gradient,
+		if gradient_only,
 			femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,GradientEnum);
 			return;
@@ -75,5 +75,5 @@
 	%generate output
 	issmprintf(VerboseControl,'   preparing final velocity solution');
-	femmodel.parameters.ControlAnalysis=0;
+	femmodel.parameters.InversionIscontrol=0;
 	eval(['femmodel=' solutioncore '(femmodel);']);
 
@@ -83,5 +83,5 @@
 	end
 	femmodel.results=AddExternalResult(femmodel.results,JEnum,J);
-	%femmodel.results=AddExternalResult(femmodel.results,ControlTypeEnum,control_type);
+	%femmodel.results=AddExternalResult(femmodel.results,InversionControlParametersEnum,control_type);
 
 end %end function
Index: /issm/trunk/src/m/solutions/diagnostic_core.m
===================================================================
--- /issm/trunk/src/m/solutions/diagnostic_core.m	(revision 9680)
+++ /issm/trunk/src/m/solutions/diagnostic_core.m	(revision 9681)
@@ -16,5 +16,5 @@
 	isstokes=femmodel.parameters.FlowequationIsstokes;
 	dakota_analysis=femmodel.parameters.QmuIsdakota;
-	control_analysis=femmodel.parameters.ControlAnalysis;
+	control_analysis=femmodel.parameters.InversionIscontrol;
 	solution_type=femmodel.parameters.SolutionType;
 
Index: /issm/trunk/src/m/solutions/enthalpy_core.m
===================================================================
--- /issm/trunk/src/m/solutions/enthalpy_core.m	(revision 9680)
+++ /issm/trunk/src/m/solutions/enthalpy_core.m	(revision 9681)
@@ -9,5 +9,5 @@
 	ndt=femmodel.parameters.TimesteppingFinalTime;
 	dt=femmodel.parameters.TimesteppingTimeStep;
-	control_analysis=femmodel.parameters.ControlAnalysis;
+	control_analysis=femmodel.parameters.InversionIscontrol;
 	solution_type=femmodel.parameters.SolutionType;
 
Index: /issm/trunk/src/m/solutions/gradient_core.m
===================================================================
--- /issm/trunk/src/m/solutions/gradient_core.m	(revision 9680)
+++ /issm/trunk/src/m/solutions/gradient_core.m	(revision 9681)
@@ -21,8 +21,8 @@
 
 	%recover parameters common to all solutions
-	num_controls=femmodel.parameters.NumControlType;
-	control_type=femmodel.parameters.ControlType;
+	num_controls=femmodel.parameters.InversionNumControlParameters;
+	control_type=femmodel.parameters.InversionControlParameters;
 	control_steady=femmodel.parameters.ControlSteady;
-	optscal_list=femmodel.parameters.Optscal;
+	gradient_scaling_list=femmodel.parameters.InversionGradientScaling;
 
 	for i=1:num_controls,
@@ -48,5 +48,5 @@
 		 if(norm_grad<=0),     error(['||∂J/∂α||∞ = 0   gradient norm of J with respect to ' EnumToString(control_type(i))  ' is zero']); end
 		 if(isnan(norm_grad)), error(['||∂J/∂α||∞ = NaN gradient norm of J with respect to ' EnumToString(control_type(i))  ' is NaN' ]); end
-		 if(i==1 | (optscal_list(step,i)/norm_grad)<optscal) optscal=optscal_list(step,i)/norm_grad; end
+		 if(i==1 | (gradient_scaling_list(step,i)/norm_grad)<gradient_scaling) gradient_scaling=gradient_scaling_list(step,i)/norm_grad; end
 
 		%plug back into inputs:
@@ -56,4 +56,4 @@
 	%Scale all gradients
 	for i=1:num_controls,
-		[femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters]=ControlInputScaleGradient(femmodel.elements,femmodel.nodes, femmodel.vertices,femmodel.loads, femmodel.materials,  femmodel.parameters,control_type(i),optscal);
+		[femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters]=ControlInputScaleGradient(femmodel.elements,femmodel.nodes, femmodel.vertices,femmodel.loads, femmodel.materials,  femmodel.parameters,control_type(i),gradient_scaling);
 	end
Index: /issm/trunk/src/m/solutions/issm.m
===================================================================
--- /issm/trunk/src/m/solutions/issm.m	(revision 9680)
+++ /issm/trunk/src/m/solutions/issm.m	(revision 9681)
@@ -23,5 +23,5 @@
 	%retrieve parameters
 	dakota_analysis=femmodel.parameters.QmuIsdakota;
-	control_analysis=femmodel.parameters.ControlAnalysis;
+	control_analysis=femmodel.parameters.InversionIscontrol;
 
 	%compute solution
Index: /issm/trunk/src/m/solutions/prognostic_core.m
===================================================================
--- /issm/trunk/src/m/solutions/prognostic_core.m	(revision 9680)
+++ /issm/trunk/src/m/solutions/prognostic_core.m	(revision 9681)
@@ -6,5 +6,5 @@
 
 	%recover parameters common to all solutions
-	control_analysis=femmodel.parameters.ControlAnalysis;
+	control_analysis=femmodel.parameters.InversionIscontrol;
 	solution_type=femmodel.parameters.SolutionType;
 
Index: /issm/trunk/src/m/solutions/steadystate_core.m
===================================================================
--- /issm/trunk/src/m/solutions/steadystate_core.m	(revision 9680)
+++ /issm/trunk/src/m/solutions/steadystate_core.m	(revision 9681)
@@ -8,5 +8,5 @@
 	%recover parameters common to all solutions
 	dim=femmodel.parameters.Dim;
-	control_analysis=femmodel.parameters.ControlAnalysis;
+	control_analysis=femmodel.parameters.InversionIscontrol;
 	solution_type=femmodel.parameters.SolutionType;
 
Index: /issm/trunk/src/m/solutions/surfaceslope_core.m
===================================================================
--- /issm/trunk/src/m/solutions/surfaceslope_core.m	(revision 9680)
+++ /issm/trunk/src/m/solutions/surfaceslope_core.m	(revision 9681)
@@ -8,5 +8,5 @@
 	%Recover some parameters:
 	dim=femmodel.parameters.Dim;
-	control_analysis=femmodel.parameters.ControlAnalysis;
+	control_analysis=femmodel.parameters.InversionIscontrol;
 	solution_type=femmodel.parameters.SolutionType;
 
Index: /issm/trunk/src/m/solutions/thermal_core.m
===================================================================
--- /issm/trunk/src/m/solutions/thermal_core.m	(revision 9680)
+++ /issm/trunk/src/m/solutions/thermal_core.m	(revision 9681)
@@ -9,5 +9,5 @@
 	ndt=femmodel.parameters.TimesteppingFinalTime;
 	dt=femmodel.parameters.TimesteppingTimeStep;
-	control_analysis=femmodel.parameters.ControlAnalysis;
+	control_analysis=femmodel.parameters.InversionIscontrol;
 	solution_type=femmodel.parameters.SolutionType;
 
Index: /issm/trunk/src/m/solutions/transient_core.m
===================================================================
--- /issm/trunk/src/m/solutions/transient_core.m	(revision 9680)
+++ /issm/trunk/src/m/solutions/transient_core.m	(revision 9681)
@@ -10,5 +10,5 @@
 	dt=femmodel.parameters.TimesteppingTimeStep;
 	yts=femmodel.parameters.ConstantsYts;
-	control_analysis=femmodel.parameters.ControlAnalysis;
+	control_analysis=femmodel.parameters.InversionIscontrol;
 	solution_type=femmodel.parameters.SolutionType;
 	output_frequency=femmodel.parameters.OutputFrequency;
Index: /issm/trunk/src/m/utils/BC/SetIceSheetBC.m
===================================================================
--- /issm/trunk/src/m/utils/BC/SetIceSheetBC.m	(revision 9680)
+++ /issm/trunk/src/m/utils/BC/SetIceSheetBC.m	(revision 9681)
@@ -18,8 +18,8 @@
 
 %Dirichlet Values
-if (length(md.vx_obs)==md.numberofnodes & length(md.vy_obs)==md.numberofnodes)
+if (length(md.inversion.vx_obs)==md.numberofnodes & length(md.inversion.vy_obs)==md.numberofnodes)
 	disp('      boundary conditions for diagnostic model: spc set as observed velocities');
-	md.diagnostic.spcvx(pos)=md.vx_obs(pos);
-	md.diagnostic.spcvy(pos)=md.vy_obs(pos);
+	md.diagnostic.spcvx(pos)=md.inversion.vx_obs(pos);
+	md.diagnostic.spcvy(pos)=md.inversion.vy_obs(pos);
 else
 	disp('      boundary conditions for diagnostic model: spc set as zero');
Index: /issm/trunk/src/m/utils/BC/SetIceShelfBC.m
===================================================================
--- /issm/trunk/src/m/utils/BC/SetIceShelfBC.m	(revision 9680)
+++ /issm/trunk/src/m/utils/BC/SetIceShelfBC.m	(revision 9681)
@@ -37,8 +37,8 @@
 
 %Dirichlet Values
-if (length(md.vx_obs)==md.numberofnodes & length(md.vy_obs)==md.numberofnodes)
+if (length(md.inversion.vx_obs)==md.numberofnodes & length(md.inversion.vy_obs)==md.numberofnodes)
 	disp('      boundary conditions for diagnostic model: spc set as observed velocities');
-	md.diagnostic.spcvx(pos)=md.vx_obs(pos);
-	md.diagnostic.spcvy(pos)=md.vy_obs(pos);
+	md.diagnostic.spcvx(pos)=md.inversion.vx_obs(pos);
+	md.diagnostic.spcvy(pos)=md.inversion.vy_obs(pos);
 else
 	disp('      boundary conditions for diagnostic model: spc set as zero');
Index: /issm/trunk/src/m/utils/BC/SetMarineIceSheetBC.m
===================================================================
--- /issm/trunk/src/m/utils/BC/SetMarineIceSheetBC.m	(revision 9680)
+++ /issm/trunk/src/m/utils/BC/SetMarineIceSheetBC.m	(revision 9681)
@@ -44,8 +44,8 @@
 
 %Dirichlet Values
-if (length(md.vx_obs)==md.numberofnodes & length(md.vy_obs)==md.numberofnodes)
+if (length(md.inversion.vx_obs)==md.numberofnodes & length(md.inversion.vy_obs)==md.numberofnodes)
 	disp('      boundary conditions for diagnostic model: spc set as observed velocities');
-	md.diagnostic.spcvx(pos)=md.vx_obs(pos);
-	md.diagnostic.spcvy(pos)=md.vy_obs(pos);
+	md.diagnostic.spcvx(pos)=md.inversion.vx_obs(pos);
+	md.diagnostic.spcvy(pos)=md.inversion.vy_obs(pos);
 else
 	disp('      boundary conditions for diagnostic model: spc set as zero');
Index: /issm/trunk/src/m/utils/Exp/clicktoflowline.m
===================================================================
--- /issm/trunk/src/m/utils/Exp/clicktoflowline.m	(revision 9680)
+++ /issm/trunk/src/m/utils/Exp/clicktoflowline.m	(revision 9681)
@@ -4,5 +4,5 @@
 % Usage: clicktoflowline(index,x,y,u,v,x0,y0,filename)
 %
-% Ex: clicktoflowline(md.elements,md.x,md.y,md.vx_obs,md.vy_obs,'flowline1.exp')
+% Ex: clicktoflowline(md.elements,md.x,md.y,md.inversion.vx_obs,md.inversion.vy_obs,'flowline1.exp')
 
 
Index: /issm/trunk/src/m/utils/Interp/plugvelocities.m
===================================================================
--- /issm/trunk/src/m/utils/Interp/plugvelocities.m	(revision 9680)
+++ /issm/trunk/src/m/utils/Interp/plugvelocities.m	(revision 9681)
@@ -29,13 +29,13 @@
 %Interpolation
 if strcmpi(Names.interp,'node'),
-	md.vx_obs=InterpFromGridToMesh(Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vxname),md.x,md.y,default_value);
-	md.vy_obs=InterpFromGridToMesh(Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vyname),md.x,md.y,default_value);
+	md.inversion.vx_obs=InterpFromGridToMesh(Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vxname),md.x,md.y,default_value);
+	md.inversion.vy_obs=InterpFromGridToMesh(Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vyname),md.x,md.y,default_value);
 else
-	md.vx_obs=InterpFromMeshToMesh2d(Vel.(Names.indexname),Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vxname),md.x,md.y,default_value);
-	md.vy_obs=InterpFromMeshToMesh2d(Vel.(Names.indexname),Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vyname),md.x,md.y,default_value);
+	md.inversion.vx_obs=InterpFromMeshToMesh2d(Vel.(Names.indexname),Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vxname),md.x,md.y,default_value);
+	md.inversion.vy_obs=InterpFromMeshToMesh2d(Vel.(Names.indexname),Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vyname),md.x,md.y,default_value);
 end
 
-md.vel_obs=sqrt(md.vx_obs.^2+md.vy_obs.^2);
-md.vx=md.vx_obs;
-md.vy=md.vy_obs;
-md.vel=md.vel_obs;
+md.inversion.vel_obs=sqrt(md.inversion.vx_obs.^2+md.inversion.vy_obs.^2);
+md.vx=md.inversion.vx_obs;
+md.vy=md.inversion.vy_obs;
+md.vel=md.inversion.vel_obs;
Index: /issm/trunk/src/m/utils/Mesh/BamgCall.m
===================================================================
--- /issm/trunk/src/m/utils/Mesh/BamgCall.m	(revision 9680)
+++ /issm/trunk/src/m/utils/Mesh/BamgCall.m	(revision 9681)
@@ -13,5 +13,5 @@
 %
 %   Example:
-%      md=BamgCall(md,md.vel_obs,1500,10^8,1.3,0.9);
+%      md=BamgCall(md,md.inversion.vel_obs,1500,10^8,1.3,0.9);
 
 %2d geometric parameter (do not change)
Index: /issm/trunk/src/m/utils/Mesh/ComputeHessian.m
===================================================================
--- /issm/trunk/src/m/utils/Mesh/ComputeHessian.m	(revision 9680)
+++ /issm/trunk/src/m/utils/Mesh/ComputeHessian.m	(revision 9681)
@@ -10,5 +10,5 @@
 %
 %   Example:
-%      hessian=ComputeHessian(md.elements,md.x,md.y,md.vel_obs,'node')
+%      hessian=ComputeHessian(md.elements,md.x,md.y,md.inversion.vel_obs,'node')
 
 %some variables
Index: /issm/trunk/src/m/utils/Mesh/MeshQuality.m
===================================================================
--- /issm/trunk/src/m/utils/Mesh/MeshQuality.m	(revision 9680)
+++ /issm/trunk/src/m/utils/Mesh/MeshQuality.m	(revision 9681)
@@ -14,5 +14,5 @@
 
 %Compute Hessian
-hessian=ComputeHessian(index,x,y,md.vel_obs,'node');
+hessian=ComputeHessian(index,x,y,md.inversion.vel_obs,'node');
 
 %Compute metric
Index: /issm/trunk/src/m/utils/Mesh/YamsCall.m
===================================================================
--- /issm/trunk/src/m/utils/Mesh/YamsCall.m	(revision 9680)
+++ /issm/trunk/src/m/utils/Mesh/YamsCall.m	(revision 9681)
@@ -13,5 +13,5 @@
 %
 %   Example:
-%      md=YamsCall(md,md.vel_obs,1500,10^8,1.3,0.9);
+%      md=YamsCall(md,md.inversion.vel_obs,1500,10^8,1.3,0.9);
 
 %2d geometric parameter (do not change)
Index: /issm/trunk/src/mex/ControlOptimization/ControlOptimization.cpp
===================================================================
--- /issm/trunk/src/mex/ControlOptimization/ControlOptimization.cpp	(revision 9680)
+++ /issm/trunk/src/mex/ControlOptimization/ControlOptimization.cpp	(revision 9681)
@@ -20,5 +20,5 @@
 	/*arguments to objectivefunctionC: */
 	int      n_value;
-	double*  cm_jump=NULL;
+	double*  threshold=NULL;
 
 	/*Boot module: */
@@ -32,8 +32,8 @@
 	FetchMatlabData(&xmin,XMIN);
 	FetchMatlabData(&xmax,XMAX);
-	FetchMatlabData(&maxiter,NULL,NULL,mxGetField(OPTIONS,0,"MaxIter"));
 
 	/*Parameters: */
-	FetchMatlabData(&cm_jump,NULL,NULL,mxGetField(PARAMETERS,0,"CmJump"));
+	FetchMatlabData(&maxiter,NULL,NULL,mxGetField(OPTIONS,0,"MaxIter"));
+	FetchMatlabData(&threshold,NULL,NULL,mxGetField(PARAMETERS,0,"InversionStepThreshold"));
 	FetchMatlabData(&n_value,STEP);
 
@@ -44,5 +44,5 @@
 	optpars.xmax=xmax;
 	optpars.maxiter=(int)maxiter[n_value-1];
-	optpars.cm_jump=cm_jump[n_value-1];
+	optpars.cm_jump=threshold[n_value-1];
 
 	BrentSearch(&search_scalar,&J,&optpars,&OptFunc,&optargs);
@@ -54,5 +54,5 @@
 	/*Free ressources: */
 	xfree((void**)&function_name);
-	xfree((void**)&cm_jump);
+	xfree((void**)&threshold);
 	xfree((void**)&maxiter);
 
Index: /issm/trunk/template
===================================================================
--- /issm/trunk/template	(revision 9680)
+++ /issm/trunk/template	(revision 9681)
@@ -61,29 +61,4 @@
 	waterfraction
 }}}
-inversion{{{ 
-	private: 
-		num_control_type -> num_control_parameters
-		num_cm_responses -> rename num_cost_functions
-
-	control_analysis ->rename iscontrol
-	control_type -> rename control_parameters?
-	cm_responses -> rename cost_functions
-	cm_gradient -> rename gradient_only
-	weights -> rename cost_functions_coefficients
-
-	cm_min -> min_parameters
-	cm_max -> max_parameters
-
-	nsteps
-	maxiter -> rename maxiter_per_step
-	optscal -> gradient_scaling
-	cm_jump -> step_threshold
-	eps_cm  -> misfit_threshold
-
-	vx_obs
-	vy_obs
-	vel_obs
-	thickness_obs
-}}}
 
 %To be completed
Index: /issm/trunk/test/NightlyRun/test1205.m
===================================================================
--- /issm/trunk/test/NightlyRun/test1205.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test1205.m	(revision 9681)
@@ -15,5 +15,5 @@
 vx_obs=constant/2*md.x.*(md.thickness).^-1;
 vy_obs=constant/2*md.y.*(md.thickness).^-1;
-vel_obs=(sqrt((md.vx_obs).^2+(md.vy_obs).^2));
+vel_obs=(sqrt((md.inversion.vx_obs).^2+(md.inversion.vy_obs).^2));
 
 %We extrude the model to have a 3d model
Index: /issm/trunk/test/NightlyRun/test1206.m
===================================================================
--- /issm/trunk/test/NightlyRun/test1206.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test1206.m	(revision 9681)
@@ -15,5 +15,5 @@
 vx_obs=constant/2*md.x.*(md.thickness).^-1;
 vy_obs=constant/2*md.y.*(md.thickness).^-1;
-vel_obs=(sqrt((md.vx_obs).^2+(md.vy_obs).^2));
+vel_obs=(sqrt((md.inversion.vx_obs).^2+(md.inversion.vy_obs).^2));
 
 %We extrude the model to have a 3d model
Index: /issm/trunk/test/NightlyRun/test1207.m
===================================================================
--- /issm/trunk/test/NightlyRun/test1207.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test1207.m	(revision 9681)
@@ -15,5 +15,5 @@
 vx_obs=constant/2*md.x.*(md.thickness).^-1;
 vy_obs=constant/2*md.y.*(md.thickness).^-1;
-vel_obs=(sqrt((md.vx_obs).^2+(md.vy_obs).^2));
+vel_obs=(sqrt((md.inversion.vx_obs).^2+(md.inversion.vy_obs).^2));
 
 %We extrude the model to have a 3d model
Index: /issm/trunk/test/NightlyRun/test1401.m
===================================================================
--- /issm/trunk/test/NightlyRun/test1401.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test1401.m	(revision 9681)
@@ -11,5 +11,5 @@
 %mesh adaptation loop YAMS
 md=squaremesh(md,L,L,nx,ny);
-md.vel_obs=exp(-(sqrt((md.x+0.1).^2+(md.y+0.1).^2)-0.75).^2*10^6)+((md.x+0.1).^2+(md.y+0.1).^2)/2;
+md.inversion.vel_obs=exp(-(sqrt((md.x+0.1).^2+(md.y+0.1).^2)-0.75).^2*10^6)+((md.x+0.1).^2+(md.y+0.1).^2)/2;
 plotmodel(md,'data','vel_obs','data','vel_obs','nlines',1,'ncols',2,'title','','figposition',[500 500 1000 500],'axis#all','equal','xlim#all',[0 1],'ylim#all',[0 1],'edgecolor#1','w'); pause(0.5);
 if printingflag, 
@@ -19,6 +19,6 @@
 end
 
-md=YamsCall(md,md.vel_obs,0.001,0.3,1.3,10^-4);
-md.vel_obs=exp(-(sqrt((md.x+0.1).^2+(md.y+0.1).^2)-0.75).^2*10^6)+((md.x+0.1).^2+(md.y+0.1).^2)/2;
+md=YamsCall(md,md.inversion.vel_obs,0.001,0.3,1.3,10^-4);
+md.inversion.vel_obs=exp(-(sqrt((md.x+0.1).^2+(md.y+0.1).^2)-0.75).^2*10^6)+((md.x+0.1).^2+(md.y+0.1).^2)/2;
 plotmodel(md,'data','vel_obs','data','vel_obs','nlines',1,'ncols',2,'title','','figposition',[500 500 1000 500],'axis#all','equal','xlim#all',[0 1],'ylim#all',[0 1],'edgecolor#1','w'); pause(0.5);
 if printingflag, 
@@ -28,6 +28,6 @@
 end
 
-md=YamsCall(md,md.vel_obs,0.001,0.3,2.5,0.008);
-md.vel_obs=exp(-(sqrt((md.x+0.1).^2+(md.y+0.1).^2)-0.75).^2*10^6)+((md.x+0.1).^2+(md.y+0.1).^2)/2;
+md=YamsCall(md,md.inversion.vel_obs,0.001,0.3,2.5,0.008);
+md.inversion.vel_obs=exp(-(sqrt((md.x+0.1).^2+(md.y+0.1).^2)-0.75).^2*10^6)+((md.x+0.1).^2+(md.y+0.1).^2)/2;
 plotmodel(md,'data','vel_obs','data','vel_obs','nlines',1,'ncols',2,'title','','figposition',[500 500 1000 500],'axis#all','equal','xlim#all',[0 1],'ylim#all',[0 1],'edgecolor#1','w'); pause(0.5);
 if printingflag, 
@@ -41,5 +41,5 @@
 %mesh adaptation loop BAMG
 md=squaremesh(md,L,L,nx,ny);
-md.vel_obs=exp(-(sqrt((md.x+0.1).^2+(md.y+0.1).^2)-0.75).^2*10^6)+((md.x+0.1).^2+(md.y+0.1).^2)/2;
+md.inversion.vel_obs=exp(-(sqrt((md.x+0.1).^2+(md.y+0.1).^2)-0.75).^2*10^6)+((md.x+0.1).^2+(md.y+0.1).^2)/2;
 plotmodel(md,'data','vel_obs','data','vel_obs','nlines',1,'ncols',2,'title','','figposition',[500 500 1000 500],'axis#all','equal','xlim#all',[0 1],'ylim#all',[0 1],'edgecolor#1','w'); pause(0.5);
 if printingflag, 
@@ -50,6 +50,6 @@
 
 md.bamg=NaN;
-md=bamg(md,'field',md.vel_obs,'hmin',0.001,'hmax',0.3,'gradation',1.3,'err',10^-4);
-md.vel_obs=exp(-(sqrt((md.x+0.1).^2+(md.y+0.1).^2)-0.75).^2*10^6)+((md.x+0.1).^2+(md.y+0.1).^2)/2;
+md=bamg(md,'field',md.inversion.vel_obs,'hmin',0.001,'hmax',0.3,'gradation',1.3,'err',10^-4);
+md.inversion.vel_obs=exp(-(sqrt((md.x+0.1).^2+(md.y+0.1).^2)-0.75).^2*10^6)+((md.x+0.1).^2+(md.y+0.1).^2)/2;
 plotmodel(md,'data','vel_obs','data','vel_obs','nlines',1,'ncols',2,'title','','figposition',[500 500 1000 500],'axis#all','equal','xlim#all',[0 1],'ylim#all',[0 1],'edgecolor#1','w'); pause(0.5);
 if printingflag, 
@@ -60,6 +60,6 @@
 
 md.bamg=NaN;
-md=bamg(md,'field',md.vel_obs,'hmin',0.001,'hmax',0.3,'gradation',2.5,'err',0.008);
-md.vel_obs=exp(-(sqrt((md.x+0.1).^2+(md.y+0.1).^2)-0.75).^2*10^6)+((md.x+0.1).^2+(md.y+0.1).^2)/2;
+md=bamg(md,'field',md.inversion.vel_obs,'hmin',0.001,'hmax',0.3,'gradation',2.5,'err',0.008);
+md.inversion.vel_obs=exp(-(sqrt((md.x+0.1).^2+(md.y+0.1).^2)-0.75).^2*10^6)+((md.x+0.1).^2+(md.y+0.1).^2)/2;
 plotmodel(md,'data','vel_obs','data','vel_obs','nlines',1,'ncols',2,'title','','figposition',[500 500 1000 500],'axis#all','equal','xlim#all',[0 1],'ylim#all',[0 1],'edgecolor#1','w'); pause(0.5);
 if printingflag, 
Index: /issm/trunk/test/NightlyRun/test1402.m
===================================================================
--- /issm/trunk/test/NightlyRun/test1402.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test1402.m	(revision 9681)
@@ -11,5 +11,5 @@
 md=squaremesh(md,L,L,nx,ny);
 u=4*md.x-2; v=4*md.y-2;
-md.vel_obs=tanh(30*(u.^2+v.^2-0.25)) ...
+md.inversion.vel_obs=tanh(30*(u.^2+v.^2-0.25)) ...
 	+tanh(30*((u-0.75).^2+(v-0.75).^2-0.25)) +tanh(30*((u-0.75).^2+(v+0.75).^2-0.25)) ...
 	+tanh(30*((u+0.75).^2+(v-0.75).^2-0.25)) +tanh(30*((u+0.75).^2+(v+0.75).^2-0.25)) ;
@@ -21,7 +21,7 @@
 end
 
-md=YamsCall(md,md.vel_obs,0.005,0.3,2.3,10^-2);
+md=YamsCall(md,md.inversion.vel_obs,0.005,0.3,2.3,10^-2);
 u=4*md.x-2; v=4*md.y-2;
-md.vel_obs=tanh(30*(u.^2+v.^2-0.25)) ...
+md.inversion.vel_obs=tanh(30*(u.^2+v.^2-0.25)) ...
 	+tanh(30*((u-0.75).^2+(v-0.75).^2-0.25)) +tanh(30*((u-0.75).^2+(v+0.75).^2-0.25)) ...
 	+tanh(30*((u+0.75).^2+(v-0.75).^2-0.25)) +tanh(30*((u+0.75).^2+(v+0.75).^2-0.25)) ;
@@ -33,7 +33,7 @@
 end
 
-md=YamsCall(md,md.vel_obs,0.005,0.3,3,0.005);
+md=YamsCall(md,md.inversion.vel_obs,0.005,0.3,3,0.005);
 u=4*md.x-2; v=4*md.y-2;
-md.vel_obs=tanh(30*(u.^2+v.^2-0.25)) ...
+md.inversion.vel_obs=tanh(30*(u.^2+v.^2-0.25)) ...
 	+tanh(30*((u-0.75).^2+(v-0.75).^2-0.25)) +tanh(30*((u-0.75).^2+(v+0.75).^2-0.25)) ...
 	+tanh(30*((u+0.75).^2+(v-0.75).^2-0.25)) +tanh(30*((u+0.75).^2+(v+0.75).^2-0.25)) ;
@@ -50,5 +50,5 @@
 md=squaremesh(md,L,L,nx,ny);
 u=4*md.x-2; v=4*md.y-2;
-md.vel_obs=tanh(30*(u.^2+v.^2-0.25)) ...
+md.inversion.vel_obs=tanh(30*(u.^2+v.^2-0.25)) ...
 	+tanh(30*((u-0.75).^2+(v-0.75).^2-0.25)) +tanh(30*((u-0.75).^2+(v+0.75).^2-0.25)) ...
 	+tanh(30*((u+0.75).^2+(v-0.75).^2-0.25)) +tanh(30*((u+0.75).^2+(v+0.75).^2-0.25)) ;
@@ -61,7 +61,7 @@
 
 md.bamg=NaN;
-md=bamg(md,'field',md.vel_obs,'hmin',0.005,'hmax',0.3,'gradation',2.3,'err',10^-2);
+md=bamg(md,'field',md.inversion.vel_obs,'hmin',0.005,'hmax',0.3,'gradation',2.3,'err',10^-2);
 u=4*md.x-2; v=4*md.y-2;
-md.vel_obs=tanh(30*(u.^2+v.^2-0.25)) ...
+md.inversion.vel_obs=tanh(30*(u.^2+v.^2-0.25)) ...
 	+tanh(30*((u-0.75).^2+(v-0.75).^2-0.25)) +tanh(30*((u-0.75).^2+(v+0.75).^2-0.25)) ...
 	+tanh(30*((u+0.75).^2+(v-0.75).^2-0.25)) +tanh(30*((u+0.75).^2+(v+0.75).^2-0.25)) ;
@@ -74,7 +74,7 @@
 
 md.bamg=NaN;
-md=bamg(md,'field',md.vel_obs,'hmin',0.005,'hmax',0.3,'gradation',3,'err',0.005);
+md=bamg(md,'field',md.inversion.vel_obs,'hmin',0.005,'hmax',0.3,'gradation',3,'err',0.005);
 u=4*md.x-2; v=4*md.y-2;
-md.vel_obs=tanh(30*(u.^2+v.^2-0.25)) ...
+md.inversion.vel_obs=tanh(30*(u.^2+v.^2-0.25)) ...
 	+tanh(30*((u-0.75).^2+(v-0.75).^2-0.25)) +tanh(30*((u-0.75).^2+(v+0.75).^2-0.25)) ...
 	+tanh(30*((u+0.75).^2+(v-0.75).^2-0.25)) +tanh(30*((u+0.75).^2+(v+0.75).^2-0.25)) ;
@@ -87,7 +87,7 @@
 
 md.bamg=NaN;
-md=bamg(md,'field',md.vel_obs,'hmin',0.005,'hmax',0.3,'gradation',1.5,'err',0.003,'anisomax',1);
+md=bamg(md,'field',md.inversion.vel_obs,'hmin',0.005,'hmax',0.3,'gradation',1.5,'err',0.003,'anisomax',1);
 u=4*md.x-2; v=4*md.y-2;
-md.vel_obs=tanh(30*(u.^2+v.^2-0.25)) ...
+md.inversion.vel_obs=tanh(30*(u.^2+v.^2-0.25)) ...
 	+tanh(30*((u-0.75).^2+(v-0.75).^2-0.25)) +tanh(30*((u-0.75).^2+(v+0.75).^2-0.25)) ...
 	+tanh(30*((u+0.75).^2+(v-0.75).^2-0.25)) +tanh(30*((u+0.75).^2+(v+0.75).^2-0.25)) ;
Index: /issm/trunk/test/NightlyRun/test223.m
===================================================================
--- /issm/trunk/test/NightlyRun/test223.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test223.m	(revision 9681)
@@ -5,17 +5,18 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'MaterialsRheologyBbar'};
-md.cm_min=10^6*ones(md.numberofnodes,1);
-md.cm_max=2*10^9*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=101*ones(md.nsteps,1);
-md.weights=ones(md.numberofnodes,1);
-md.optscal=10^7*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.3*ones(md.nsteps,1);
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'MaterialsRheologyBbar'};
+md.inversion.min_parameters=10^6*ones(md.numberofnodes,1);
+md.inversion.max_parameters=2*10^9*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=101*ones(md.inversion.nsteps,1);
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,1);
+md.inversion.gradient_scaling=10^7*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=none;
+md.verbose=verbose('all');
 md=solve(md,DiagnosticSolutionEnum);
 
Index: /issm/trunk/test/NightlyRun/test224.m
===================================================================
--- /issm/trunk/test/NightlyRun/test224.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test224.m	(revision 9681)
@@ -5,15 +5,15 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'MaterialsRheologyBbar'};
-md.cm_min=10^6*ones(md.numberofnodes,1);
-md.cm_max=2*10^9*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=101*ones(md.nsteps,1);
-md.weights=ones(md.numberofnodes,1);
-md.optscal=10^7*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.3*ones(md.nsteps,1);
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'MaterialsRheologyBbar'};
+md.inversion.min_parameters=10^6*ones(md.numberofnodes,1);
+md.inversion.max_parameters=2*10^9*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=101*ones(md.inversion.nsteps,1);
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,1);
+md.inversion.gradient_scaling=10^7*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=generic('name',oshostname(),'np',3);
Index: /issm/trunk/test/NightlyRun/test225.m
===================================================================
--- /issm/trunk/test/NightlyRun/test225.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test225.m	(revision 9681)
@@ -6,15 +6,15 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'MaterialsRheologyBbar'};
-md.cm_min=10^6*ones(md.numberofnodes,1);
-md.cm_max=2*10^9*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=101*ones(md.nsteps,1);
-md.weights=ones(md.numberofnodes,1);
-md.optscal=10^7*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.3*ones(md.nsteps,1);
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'MaterialsRheologyBbar'};
+md.inversion.min_parameters=10^6*ones(md.numberofnodes,1);
+md.inversion.max_parameters=2*10^9*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=101*ones(md.inversion.nsteps,1);
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,1);
+md.inversion.gradient_scaling=10^7*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=none;
Index: /issm/trunk/test/NightlyRun/test226.m
===================================================================
--- /issm/trunk/test/NightlyRun/test226.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test226.m	(revision 9681)
@@ -6,15 +6,15 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'MaterialsRheologyBbar'};
-md.cm_min=10^6*ones(md.numberofnodes,1);
-md.cm_max=2*10^9*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=101*ones(md.nsteps,1);
-md.weights=ones(md.numberofnodes,1);
-md.optscal=10^7*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.3*ones(md.nsteps,1);
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'MaterialsRheologyBbar'};
+md.inversion.min_parameters=10^6*ones(md.numberofnodes,1);
+md.inversion.max_parameters=2*10^9*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=101*ones(md.inversion.nsteps,1);
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,1);
+md.inversion.gradient_scaling=10^7*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=generic('name',oshostname(),'np',3);
Index: /issm/trunk/test/NightlyRun/test227.m
===================================================================
--- /issm/trunk/test/NightlyRun/test227.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test227.m	(revision 9681)
@@ -6,15 +6,15 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'MaterialsRheologyBbar'};
-md.cm_min=10^6*ones(md.numberofnodes,1);
-md.cm_max=2*10^9*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=101*ones(md.nsteps,1);
-md.weights=ones(md.numberofnodes,1);
-md.optscal=10^7*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.3*ones(md.nsteps,1);
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'MaterialsRheologyBbar'};
+md.inversion.min_parameters=10^6*ones(md.numberofnodes,1);
+md.inversion.max_parameters=2*10^9*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=101*ones(md.inversion.nsteps,1);
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,1);
+md.inversion.gradient_scaling=10^7*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=none;
Index: /issm/trunk/test/NightlyRun/test228.m
===================================================================
--- /issm/trunk/test/NightlyRun/test228.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test228.m	(revision 9681)
@@ -6,15 +6,15 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'MaterialsRheologyBbar'};
-md.cm_min=10^6*ones(md.numberofnodes,1);
-md.cm_max=2*10^9*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=101*ones(md.nsteps,1);
-md.weights=ones(md.numberofnodes,1);
-md.optscal=10^7*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.3*ones(md.nsteps,1);
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'MaterialsRheologyBbar'};
+md.inversion.min_parameters=10^6*ones(md.numberofnodes,1);
+md.inversion.max_parameters=2*10^9*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=101*ones(md.inversion.nsteps,1);
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,1);
+md.inversion.gradient_scaling=10^7*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=generic('name',oshostname(),'np',3);
Index: /issm/trunk/test/NightlyRun/test229.m
===================================================================
--- /issm/trunk/test/NightlyRun/test229.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test229.m	(revision 9681)
@@ -6,15 +6,15 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'MaterialsRheologyBbar'};
-md.cm_min=10^6*ones(md.numberofnodes,1);
-md.cm_max=2*10^9*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=101*ones(md.nsteps,1);
-md.weights=ones(md.numberofnodes,1);
-md.optscal=10^7*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.3*ones(md.nsteps,1);
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'MaterialsRheologyBbar'};
+md.inversion.min_parameters=10^6*ones(md.numberofnodes,1);
+md.inversion.max_parameters=2*10^9*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=101*ones(md.inversion.nsteps,1);
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,1);
+md.inversion.gradient_scaling=10^7*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=none;
Index: /issm/trunk/test/NightlyRun/test230.m
===================================================================
--- /issm/trunk/test/NightlyRun/test230.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test230.m	(revision 9681)
@@ -6,15 +6,15 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'MaterialsRheologyBbar'};
-md.cm_min=10^6*ones(md.numberofnodes,1);
-md.cm_max=2*10^9*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=101*ones(md.nsteps,1);
-md.weights=ones(md.numberofnodes,1);
-md.optscal=10^7*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.3*ones(md.nsteps,1);
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'MaterialsRheologyBbar'};
+md.inversion.min_parameters=10^6*ones(md.numberofnodes,1);
+md.inversion.max_parameters=2*10^9*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=101*ones(md.inversion.nsteps,1);
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,1);
+md.inversion.gradient_scaling=10^7*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=generic('name',oshostname(),'np',3);
Index: /issm/trunk/test/NightlyRun/test337.m
===================================================================
--- /issm/trunk/test/NightlyRun/test337.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test337.m	(revision 9681)
@@ -5,15 +5,15 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'FrictionCoefficient'};
-md.cm_min=1*ones(md.numberofnodes,1);
-md.cm_max=200*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=[103*ones(md.nsteps,1)  501*ones(md.nsteps,1)];
-md.weights=ones(md.numberofnodes,2); md.weights(:,2)=0*2*10^-7;
-md.optscal=3*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.3*ones(md.nsteps,1);
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'FrictionCoefficient'};
+md.inversion.min_parameters=1*ones(md.numberofnodes,1);
+md.inversion.max_parameters=200*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,2); md.inversion.cost_functions_coefficients(:,2)=0*2*10^-7;
+md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=none;
Index: /issm/trunk/test/NightlyRun/test338.m
===================================================================
--- /issm/trunk/test/NightlyRun/test338.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test338.m	(revision 9681)
@@ -5,15 +5,15 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'FrictionCoefficient'};
-md.cm_min=1*ones(md.numberofnodes,1);
-md.cm_max=200*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=[103*ones(md.nsteps,1)  501*ones(md.nsteps,1)];
-md.weights=ones(md.numberofnodes,2); md.weights(:,2)=2*10^-7;
-md.optscal=3*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.3*ones(md.nsteps,1);
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'FrictionCoefficient'};
+md.inversion.min_parameters=1*ones(md.numberofnodes,1);
+md.inversion.max_parameters=200*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=generic('name',oshostname(),'np',3);
Index: /issm/trunk/test/NightlyRun/test339.m
===================================================================
--- /issm/trunk/test/NightlyRun/test339.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test339.m	(revision 9681)
@@ -6,15 +6,15 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'FrictionCoefficient'};
-md.cm_min=1*ones(md.numberofnodes,1);
-md.cm_max=200*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=[103*ones(md.nsteps,1)  501*ones(md.nsteps,1)];
-md.weights=ones(md.numberofnodes,2); md.weights(:,2)=2*10^-7;
-md.optscal=3*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.3*ones(md.nsteps,1);
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'FrictionCoefficient'};
+md.inversion.min_parameters=1*ones(md.numberofnodes,1);
+md.inversion.max_parameters=200*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=none;
Index: /issm/trunk/test/NightlyRun/test340.m
===================================================================
--- /issm/trunk/test/NightlyRun/test340.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test340.m	(revision 9681)
@@ -6,15 +6,15 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'FrictionCoefficient'};
-md.cm_min=1*ones(md.numberofnodes,1);
-md.cm_max=200*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=[103*ones(md.nsteps,1)  501*ones(md.nsteps,1)];
-md.weights=ones(md.numberofnodes,2); md.weights(:,2)=2*10^-7;
-md.optscal=3*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.3*ones(md.nsteps,1);
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'FrictionCoefficient'};
+md.inversion.min_parameters=1*ones(md.numberofnodes,1);
+md.inversion.max_parameters=200*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=generic('name',oshostname(),'np',3);
Index: /issm/trunk/test/NightlyRun/test341.m
===================================================================
--- /issm/trunk/test/NightlyRun/test341.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test341.m	(revision 9681)
@@ -6,15 +6,15 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'FrictionCoefficient'};
-md.cm_min=1*ones(md.numberofnodes,1);
-md.cm_max=200*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=[102*ones(md.nsteps,1)  501*ones(md.nsteps,1)];
-md.weights=ones(md.numberofnodes,2); md.weights(:,2)=2*10^-7;
-md.optscal=3*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.3*ones(md.nsteps,1);
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'FrictionCoefficient'};
+md.inversion.min_parameters=1*ones(md.numberofnodes,1);
+md.inversion.max_parameters=200*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=[102*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=none;
Index: /issm/trunk/test/NightlyRun/test342.m
===================================================================
--- /issm/trunk/test/NightlyRun/test342.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test342.m	(revision 9681)
@@ -6,15 +6,15 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'FrictionCoefficient'};
-md.cm_min=1*ones(md.numberofnodes,1);
-md.cm_max=200*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=[102*ones(md.nsteps,1)  501*ones(md.nsteps,1)];
-md.weights=ones(md.numberofnodes,2); md.weights(:,2)=2*10^-7;
-md.optscal=3*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.3*ones(md.nsteps,1);
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'FrictionCoefficient'};
+md.inversion.min_parameters=1*ones(md.numberofnodes,1);
+md.inversion.max_parameters=200*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=[102*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=generic('name',oshostname(),'np',3);
Index: /issm/trunk/test/NightlyRun/test343.m
===================================================================
--- /issm/trunk/test/NightlyRun/test343.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test343.m	(revision 9681)
@@ -6,15 +6,15 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'FrictionCoefficient'};
-md.cm_min=1*ones(md.numberofnodes,1);
-md.cm_max=200*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=[104*ones(md.nsteps,1)  501*ones(md.nsteps,1)];
-md.weights=ones(md.numberofnodes,2); md.weights(:,2)=2*10^-7;
-md.optscal=3*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.3*ones(md.nsteps,1);
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'FrictionCoefficient'};
+md.inversion.min_parameters=1*ones(md.numberofnodes,1);
+md.inversion.max_parameters=200*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=[104*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=none;
Index: /issm/trunk/test/NightlyRun/test344.m
===================================================================
--- /issm/trunk/test/NightlyRun/test344.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test344.m	(revision 9681)
@@ -6,15 +6,15 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'FrictionCoefficient'};
-md.cm_min=1*ones(md.numberofnodes,1);
-md.cm_max=200*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=[104*ones(md.nsteps,1)  501*ones(md.nsteps,1)];
-md.weights=ones(md.numberofnodes,2); md.weights(:,2)=2*10^-7;
-md.optscal=3*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.3*ones(md.nsteps,1);
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'FrictionCoefficient'};
+md.inversion.min_parameters=1*ones(md.numberofnodes,1);
+md.inversion.max_parameters=200*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=[104*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=generic('name',oshostname(),'np',3);
Index: /issm/trunk/test/NightlyRun/test429.m
===================================================================
--- /issm/trunk/test/NightlyRun/test429.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test429.m	(revision 9681)
@@ -6,16 +6,16 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'FrictionCoefficient'};
-md.cm_min=1*ones(md.numberofnodes,1);
-md.cm_max=200*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=[103*ones(md.nsteps,1)  501*ones(md.nsteps,1)];
-md.weights=ones(md.numberofnodes,2); md.weights(:,2)=2*10^-7;
-md.optscal=3*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.3*ones(md.nsteps,1);
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'FrictionCoefficient'};
+md.inversion.min_parameters=1*ones(md.numberofnodes,1);
+md.inversion.max_parameters=200*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
 md.timestepping.time_step=0;
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=none;
Index: /issm/trunk/test/NightlyRun/test430.m
===================================================================
--- /issm/trunk/test/NightlyRun/test430.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test430.m	(revision 9681)
@@ -6,16 +6,16 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'FrictionCoefficient'};
-md.cm_min=1*ones(md.numberofnodes,1);
-md.cm_max=200*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=[103*ones(md.nsteps,1)  501*ones(md.nsteps,1)];
-md.weights=ones(md.numberofnodes,2); md.weights(:,2)=2*10^-7;
-md.optscal=3*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.3*ones(md.nsteps,1);
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'FrictionCoefficient'};
+md.inversion.min_parameters=1*ones(md.numberofnodes,1);
+md.inversion.max_parameters=200*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
 md.timestepping.time_step=0;
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=generic('name',oshostname(),'np',3);
Index: /issm/trunk/test/NightlyRun/test431.m
===================================================================
--- /issm/trunk/test/NightlyRun/test431.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test431.m	(revision 9681)
@@ -6,16 +6,16 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'FrictionCoefficient'};
-md.cm_min=1*ones(md.numberofnodes,1);
-md.cm_max=200*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=[102*ones(md.nsteps,1)  501*ones(md.nsteps,1)];
-md.weights=ones(md.numberofnodes,2); md.weights(:,2)=2*10^-7;
-md.optscal=3*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.3*ones(md.nsteps,1);
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'FrictionCoefficient'};
+md.inversion.min_parameters=1*ones(md.numberofnodes,1);
+md.inversion.max_parameters=200*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=[102*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
 md.timestepping.time_step=0;
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=none;
Index: /issm/trunk/test/NightlyRun/test432.m
===================================================================
--- /issm/trunk/test/NightlyRun/test432.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test432.m	(revision 9681)
@@ -6,16 +6,16 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'FrictionCoefficient'};
-md.cm_min=1*ones(md.numberofnodes,1);
-md.cm_max=200*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=[102*ones(md.nsteps,1)  501*ones(md.nsteps,1)];
-md.weights=ones(md.numberofnodes,2); md.weights(:,2)=2*10^-7;
-md.optscal=3*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.3*ones(md.nsteps,1);
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'FrictionCoefficient'};
+md.inversion.min_parameters=1*ones(md.numberofnodes,1);
+md.inversion.max_parameters=200*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=[102*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
 md.timestepping.time_step=0;
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=generic('name',oshostname(),'np',3);
Index: /issm/trunk/test/NightlyRun/test521.m
===================================================================
--- /issm/trunk/test/NightlyRun/test521.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test521.m	(revision 9681)
@@ -11,15 +11,15 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'MaterialsRheologyBbar'};
-md.cm_min=10^6*ones(md.numberofnodes,1);
-md.cm_max=2*10^9*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=101*ones(md.nsteps,1);
-md.weights=ones(md.numberofnodes,1);
-md.optscal=10^8*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.99*ones(md.nsteps,1);
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'MaterialsRheologyBbar'};
+md.inversion.min_parameters=10^6*ones(md.numberofnodes,1);
+md.inversion.max_parameters=2*10^9*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=101*ones(md.inversion.nsteps,1);
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,1);
+md.inversion.gradient_scaling=10^8*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=none;
Index: /issm/trunk/test/NightlyRun/test522.m
===================================================================
--- /issm/trunk/test/NightlyRun/test522.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test522.m	(revision 9681)
@@ -11,15 +11,15 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'MaterialsRheologyBbar'};
-md.cm_min=10^6*ones(md.numberofnodes,1);
-md.cm_max=2*10^9*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=101*ones(md.nsteps,1);
-md.weights=ones(md.numberofnodes,1);
-md.optscal=10^8*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.99*ones(md.nsteps,1);
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'MaterialsRheologyBbar'};
+md.inversion.min_parameters=10^6*ones(md.numberofnodes,1);
+md.inversion.max_parameters=2*10^9*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=101*ones(md.inversion.nsteps,1);
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,1);
+md.inversion.gradient_scaling=10^8*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=generic('name',oshostname(),'np',3);
Index: /issm/trunk/test/NightlyRun/test523.m
===================================================================
--- /issm/trunk/test/NightlyRun/test523.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test523.m	(revision 9681)
@@ -6,15 +6,15 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'FrictionCoefficient'};
-md.cm_min=1*ones(md.numberofnodes,1);
-md.cm_max=200*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=[103*ones(md.nsteps,1)  501*ones(md.nsteps,1)];
-md.weights=ones(md.numberofnodes,2); md.weights(:,2)=2*10^-7;
-md.optscal=3*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.99*ones(md.nsteps,1);
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'FrictionCoefficient'};
+md.inversion.min_parameters=1*ones(md.numberofnodes,1);
+md.inversion.max_parameters=200*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=none;
Index: /issm/trunk/test/NightlyRun/test524.m
===================================================================
--- /issm/trunk/test/NightlyRun/test524.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test524.m	(revision 9681)
@@ -6,15 +6,15 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'FrictionCoefficient'};
-md.cm_min=1*ones(md.numberofnodes,1);
-md.cm_max=200*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=[103*ones(md.nsteps,1)  501*ones(md.nsteps,1)];
-md.weights=ones(md.numberofnodes,2); md.weights(:,2)=2*10^-7;
-md.optscal=3*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.99*ones(md.nsteps,1);
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'FrictionCoefficient'};
+md.inversion.min_parameters=1*ones(md.numberofnodes,1);
+md.inversion.max_parameters=200*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 
 md.cluster=generic('name',oshostname(),'np',3);
Index: /issm/trunk/test/NightlyRun/test525.m
===================================================================
--- /issm/trunk/test/NightlyRun/test525.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test525.m	(revision 9681)
@@ -6,15 +6,15 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'FrictionCoefficient'};
-md.cm_min=1*ones(md.numberofnodes,1);
-md.cm_max=200*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=[103*ones(md.nsteps,1)  501*ones(md.nsteps,1)];
-md.weights=ones(md.numberofnodes,2); md.weights(:,2)=2*10^-7;
-md.optscal=3*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.99*ones(md.nsteps,1);
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'FrictionCoefficient'};
+md.inversion.min_parameters=1*ones(md.numberofnodes,1);
+md.inversion.max_parameters=200*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 md.timestepping.time_step=0;
 
Index: /issm/trunk/test/NightlyRun/test526.m
===================================================================
--- /issm/trunk/test/NightlyRun/test526.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test526.m	(revision 9681)
@@ -6,15 +6,15 @@
 
 %control parameters
-md.control_analysis=1;
-md.control_type={'FrictionCoefficient'};
-md.cm_min=1*ones(md.numberofnodes,1);
-md.cm_max=200*ones(md.numberofnodes,1);
-md.nsteps=2;
-md.cm_responses=[103*ones(md.nsteps,1)  501*ones(md.nsteps,1)];
-md.weights=ones(md.numberofnodes,2); md.weights(:,2)=2*10^-7;
-md.optscal=3*ones(md.nsteps,1);
-md.maxiter=2*ones(md.nsteps,1);
-md.cm_jump=0.99*ones(md.nsteps,1);
-md.vx_obs=md.vx; md.vy_obs=md.vy;
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'FrictionCoefficient'};
+md.inversion.min_parameters=1*ones(md.numberofnodes,1);
+md.inversion.max_parameters=200*ones(md.numberofnodes,1);
+md.inversion.nsteps=2;
+md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
+md.inversion.vx_obs=md.vx; md.inversion.vy_obs=md.vy;
 md.timestepping.time_step=0;
 
Index: /issm/trunk/test/NightlyRun/test527.m
===================================================================
--- /issm/trunk/test/NightlyRun/test527.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test527.m	(revision 9681)
@@ -14,5 +14,5 @@
 
 %refine existing mesh 1
-hessian=ComputeHessian(md.elements,md.x,md.y,md.vy_obs,'node');
+hessian=ComputeHessian(md.elements,md.x,md.y,md.inversion.vy_obs,'node');
 metric=ComputeMetric(hessian,2/9,1,1000,25*10^3,[]);
 md.miscellaneous.dummy=metric;
@@ -34,10 +34,10 @@
 
 %refine existing mesh 4
-md2=bamg(md,'field',md.vy_obs,'hmin',1000,'hmax',20000,'gradation',3,'geometricalmetric',1,'Hessiantype',0,'err',1);
+md2=bamg(md,'field',md.inversion.vy_obs,'hmin',1000,'hmax',20000,'gradation',3,'geometricalmetric',1,'Hessiantype',0,'err',1);
 x6=md2.x;
 y6=md2.y;
 
 %refine existing mesh 5
-md2=bamg(md,'field',[md.vy_obs md.thickness],'hmin',1000,'hmax',20000,'gradation',3,'geometricalmetric',1,'Hessiantype',1,'err',[10 100]); 
+md2=bamg(md,'field',[md.inversion.vy_obs md.thickness],'hmin',1000,'hmax',20000,'gradation',3,'geometricalmetric',1,'Hessiantype',1,'err',[10 100]); 
 x7=md2.x;
 y7=md2.y;
Index: /issm/trunk/test/NightlyRun/test621.m
===================================================================
--- /issm/trunk/test/NightlyRun/test621.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test621.m	(revision 9681)
@@ -5,16 +5,16 @@
 
 %control parameters
-md.nsteps=2;
+md.inversion.nsteps=2;
 md.prognostic.stabilization=1;
-md.control_analysis=1;
-md.control_type={'BalancethicknessThickeningRate'};
-md.thickness_obs=md.thickness;
-md.cm_min=-50*ones(md.numberofnodes,1);
-md.cm_max=50*ones(md.numberofnodes,1);
-md.cm_responses=201*ones(md.nsteps,1);
-md.weights=ones(md.numberofnodes,1);
-md.optscal=10/md.constants.yts*ones(md.nsteps,1);
-md.maxiter=4*ones(md.nsteps,1);
-md.cm_jump=0.99*ones(md.nsteps,1);
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'BalancethicknessThickeningRate'};
+md.inversion.thickness_obs=md.thickness;
+md.inversion.min_parameters=-50*ones(md.numberofnodes,1);
+md.inversion.max_parameters=50*ones(md.numberofnodes,1);
+md.inversion.cost_functions=201*ones(md.inversion.nsteps,1);
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,1);
+md.inversion.gradient_scaling=10/md.constants.yts*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=4*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
 
 md.cluster=none;
Index: /issm/trunk/test/NightlyRun/test622.m
===================================================================
--- /issm/trunk/test/NightlyRun/test622.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test622.m	(revision 9681)
@@ -5,16 +5,16 @@
 
 %control parameters
-md.nsteps=2;
+md.inversion.nsteps=2;
 md.prognostic.stabilization=1;
-md.control_analysis=1;
-md.control_type={'BalancethicknessThickeningRate'};
-md.thickness_obs=md.thickness;
-md.cm_min=-50*ones(md.numberofnodes,1);
-md.cm_max=50*ones(md.numberofnodes,1);
-md.cm_responses=201*ones(md.nsteps,1);
-md.weights=ones(md.numberofnodes,1);
-md.optscal=10/md.constants.yts*ones(md.nsteps,1);
-md.maxiter=4*ones(md.nsteps,1);
-md.cm_jump=0.99*ones(md.nsteps,1);
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'BalancethicknessThickeningRate'};
+md.inversion.thickness_obs=md.thickness;
+md.inversion.min_parameters=-50*ones(md.numberofnodes,1);
+md.inversion.max_parameters=50*ones(md.numberofnodes,1);
+md.inversion.cost_functions=201*ones(md.inversion.nsteps,1);
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,1);
+md.inversion.gradient_scaling=10/md.constants.yts*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=4*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
 
 md.cluster=generic('name',oshostname(),'np',3);
Index: /issm/trunk/test/NightlyRun/test623.m
===================================================================
--- /issm/trunk/test/NightlyRun/test623.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test623.m	(revision 9681)
@@ -6,16 +6,16 @@
 
 %control parameters
-md.nsteps=2;
+md.inversion.nsteps=2;
 md.prognostic.stabilization=3;
-md.control_analysis=1;
-md.control_type={'BalancethicknessThickeningRate'};
-md.thickness_obs=md.thickness;
-md.cm_min=-50*ones(md.numberofnodes,1);
-md.cm_max=50*ones(md.numberofnodes,1);
-md.cm_responses=201*ones(md.nsteps,1);
-md.weights=ones(md.numberofnodes,1);
-md.optscal=10/md.constants.yts*ones(md.nsteps,1);
-md.maxiter=4*ones(md.nsteps,1);
-md.cm_jump=0.99*ones(md.nsteps,1);
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'BalancethicknessThickeningRate'};
+md.inversion.thickness_obs=md.thickness;
+md.inversion.min_parameters=-50*ones(md.numberofnodes,1);
+md.inversion.max_parameters=50*ones(md.numberofnodes,1);
+md.inversion.cost_functions=201*ones(md.inversion.nsteps,1);
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,1);
+md.inversion.gradient_scaling=10/md.constants.yts*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=4*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
 
 md.cluster=none;
Index: /issm/trunk/test/NightlyRun/test624.m
===================================================================
--- /issm/trunk/test/NightlyRun/test624.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test624.m	(revision 9681)
@@ -6,16 +6,16 @@
 
 %control parameters
-md.nsteps=2;
+md.inversion.nsteps=2;
 md.prognostic.stabilization=3;
-md.control_analysis=1;
-md.control_type={'BalancethicknessThickeningRate'};
-md.thickness_obs=md.thickness;
-md.cm_min=-50*ones(md.numberofnodes,1);
-md.cm_max=50*ones(md.numberofnodes,1);
-md.cm_responses=201*ones(md.nsteps,1);
-md.weights=ones(md.numberofnodes,1);
-md.optscal=10/md.constants.yts*ones(md.nsteps,1);
-md.maxiter=4*ones(md.nsteps,1);
-md.cm_jump=0.99*ones(md.nsteps,1);
+md.inversion.iscontrol=1;
+md.inversion.control_parameters={'BalancethicknessThickeningRate'};
+md.inversion.thickness_obs=md.thickness;
+md.inversion.min_parameters=-50*ones(md.numberofnodes,1);
+md.inversion.max_parameters=50*ones(md.numberofnodes,1);
+md.inversion.cost_functions=201*ones(md.inversion.nsteps,1);
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,1);
+md.inversion.gradient_scaling=10/md.constants.yts*ones(md.inversion.nsteps,1);
+md.inversion.maxiter_per_step=4*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
 
 md.cluster=generic('name',oshostname(),'np',3);
Index: /issm/trunk/test/NightlyRun/test625.m
===================================================================
--- /issm/trunk/test/NightlyRun/test625.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test625.m	(revision 9681)
@@ -11,17 +11,17 @@
 
 %control parameters
-md.thickness_obs=md.thickness;
-md.control_analysis=1;
-md.thickness_obs=md.thickness;
-md.nsteps=2;
-md.control_type={'Vx' 'Vy'};
+md.inversion.thickness_obs=md.thickness;
+md.inversion.iscontrol=1;
+md.inversion.thickness_obs=md.thickness;
+md.inversion.nsteps=2;
+md.inversion.control_parameters={'Vx' 'Vy'};
 md.prognostic.stabilization=1;
-md.optscal=[10/md.constants.yts*ones(md.nsteps,1) 10/md.constants.yts*ones(md.nsteps,1)];
-md.cm_min=[-2000*ones(md.numberofnodes,1) -2000*ones(md.numberofnodes,1)];
-md.cm_max=[+2000*ones(md.numberofnodes,1) +2000*ones(md.numberofnodes,1)];
-md.cm_responses=201*ones(md.nsteps,1);
-md.weights=ones(md.numberofnodes,1);
-md.maxiter=4*ones(md.nsteps,1);
-md.cm_jump=0.99*ones(md.nsteps,1);
+md.inversion.gradient_scaling=[10/md.constants.yts*ones(md.inversion.nsteps,1) 10/md.constants.yts*ones(md.inversion.nsteps,1)];
+md.inversion.min_parameters=[-2000*ones(md.numberofnodes,1) -2000*ones(md.numberofnodes,1)];
+md.inversion.max_parameters=[+2000*ones(md.numberofnodes,1) +2000*ones(md.numberofnodes,1)];
+md.inversion.cost_functions=201*ones(md.inversion.nsteps,1);
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,1);
+md.inversion.maxiter_per_step=4*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
 
 md.cluster=none;
Index: /issm/trunk/test/NightlyRun/test626.m
===================================================================
--- /issm/trunk/test/NightlyRun/test626.m	(revision 9680)
+++ /issm/trunk/test/NightlyRun/test626.m	(revision 9681)
@@ -11,17 +11,17 @@
 
 %control parameters
-md.thickness_obs=md.thickness;
-md.control_analysis=1;
-md.thickness_obs=md.thickness;
-md.nsteps=2;
-md.control_type={'Vx' 'Vy'};
+md.inversion.thickness_obs=md.thickness;
+md.inversion.iscontrol=1;
+md.inversion.thickness_obs=md.thickness;
+md.inversion.nsteps=2;
+md.inversion.control_parameters={'Vx' 'Vy'};
 md.prognostic.stabilization=1;
-md.optscal=[10/md.constants.yts*ones(md.nsteps,1) 10/md.constants.yts*ones(md.nsteps,1)];
-md.cm_min=[-2000*ones(md.numberofnodes,1) -2000*ones(md.numberofnodes,1)];
-md.cm_max=[+2000*ones(md.numberofnodes,1) +2000*ones(md.numberofnodes,1)];
-md.cm_responses=201*ones(md.nsteps,1);
-md.weights=ones(md.numberofnodes,1);
-md.maxiter=4*ones(md.nsteps,1);
-md.cm_jump=0.99*ones(md.nsteps,1);
+md.inversion.gradient_scaling=[10/md.constants.yts*ones(md.inversion.nsteps,1) 10/md.constants.yts*ones(md.inversion.nsteps,1)];
+md.inversion.min_parameters=[-2000*ones(md.numberofnodes,1) -2000*ones(md.numberofnodes,1)];
+md.inversion.max_parameters=[+2000*ones(md.numberofnodes,1) +2000*ones(md.numberofnodes,1)];
+md.inversion.cost_functions=201*ones(md.inversion.nsteps,1);
+md.inversion.cost_functions_coefficients=ones(md.numberofnodes,1);
+md.inversion.maxiter_per_step=4*ones(md.inversion.nsteps,1);
+md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
 
 md.cluster=generic('name',oshostname(),'np',3);
Index: /issm/trunk/test/Par/Pig.par
===================================================================
--- /issm/trunk/test/Par/Pig.par	(revision 9680)
+++ /issm/trunk/test/Par/Pig.par	(revision 9681)
@@ -3,12 +3,12 @@
 %Geometry and observation
 load('../Data/Pig.data','-mat');
-md.vx_obs   =InterpFromMeshToMesh2d(index,x,y,vx_obs,md.x,md.y);
-md.vy_obs   =InterpFromMeshToMesh2d(index,x,y,vy_obs,md.x,md.y);
+md.inversion.vx_obs   =InterpFromMeshToMesh2d(index,x,y,vx_obs,md.x,md.y);
+md.inversion.vy_obs   =InterpFromMeshToMesh2d(index,x,y,vy_obs,md.x,md.y);
 md.surface  =InterpFromMeshToMesh2d(index,x,y,surface,md.x,md.y);
 md.thickness=InterpFromMeshToMesh2d(index,x,y,thickness,md.x,md.y);
 md.bed=md.surface-md.thickness;
 clear surface thickness vx_obs vy_obs x y index;
-md.vx=md.vx_obs;
-md.vy=md.vy_obs;
+md.vx=md.inversion.vx_obs;
+md.vy=md.inversion.vy_obs;
 md.vz=zeros(md.numberofnodes,1);
 md.pressure=zeros(md.numberofnodes,1);
Index: /issm/trunk/test/Par/RoundSheetEISMINT.par
===================================================================
--- /issm/trunk/test/Par/RoundSheetEISMINT.par	(revision 9680)
+++ /issm/trunk/test/Par/RoundSheetEISMINT.par	(revision 9681)
@@ -29,7 +29,7 @@
 disp('      creating velocities');
 constant=0.3;
-md.vx_obs=constant/2*md.x.*(md.thickness).^-1;
-md.vy_obs=constant/2*md.y.*(md.thickness).^-1;
-md.vel_obs=(sqrt((md.vx_obs).^2+(md.vy_obs).^2));
+md.inversion.vx_obs=constant/2*md.x.*(md.thickness).^-1;
+md.inversion.vy_obs=constant/2*md.y.*(md.thickness).^-1;
+md.inversion.vel_obs=(sqrt((md.inversion.vx_obs).^2+(md.inversion.vy_obs).^2));
 md.vx=zeros(md.numberofnodes,1);
 md.vy=zeros(md.numberofnodes,1);
Index: /issm/trunk/test/Par/RoundSheetStaticEISMINT.par
===================================================================
--- /issm/trunk/test/Par/RoundSheetStaticEISMINT.par	(revision 9680)
+++ /issm/trunk/test/Par/RoundSheetStaticEISMINT.par	(revision 9681)
@@ -34,7 +34,7 @@
 disp('      creating velocities');
 constant=0.3;
-md.vx_obs=constant/2*md.x.*(md.thickness).^-1;
-md.vy_obs=constant/2*md.y.*(md.thickness).^-1;
-md.vel_obs=(sqrt((md.vx_obs).^2+(md.vy_obs).^2));
+md.inversion.vx_obs=constant/2*md.x.*(md.thickness).^-1;
+md.inversion.vy_obs=constant/2*md.y.*(md.thickness).^-1;
+md.inversion.vel_obs=(sqrt((md.inversion.vx_obs).^2+(md.inversion.vy_obs).^2));
 md.vx=zeros(md.numberofnodes,1);
 md.vy=zeros(md.numberofnodes,1);
