Index: /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp	(revision 20015)
+++ /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp	(revision 20016)
@@ -132,4 +132,9 @@
 					for(i=0;i<numnodes;i++) pe->values[i]+= - weight*(dH[0]*(-vy)+dH[1]*vx)*(dbasis[0*numnodes+i]*(-vy)+dbasis[1*numnodes+i]*vx)*Jdet*gauss->weight;
 					break;
+				case ThicknessPositiveEnum:
+					if(thickness<0){
+						for(i=0;i<numnodes;i++) pe->values[i]+= - weight*2*thickness*Jdet*gauss->weight*basis[i];
+					}
+					break;
 				default:
 					_error_("response " << EnumToStringx(responses[resp]) << " not supported yet");
@@ -181,4 +186,5 @@
 		case ThicknessAlongGradientEnum:  /*Nothing, \partial J/\partial k = 0*/ break;
 		case ThicknessAcrossGradientEnum: /*Nothing, \partial J/\partial k = 0*/ break;
+		case ThicknessPositiveEnum:       /*Nothing, \partial J/\partial k = 0*/ break;
 		default: _error_("response " << EnumToStringx(responses[resp]) << " not supported yet");
 	}
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 20015)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 20016)
@@ -1040,6 +1040,7 @@
 				case ThicknessAlongGradientEnum:    ThicknessAlongGradientx(&double_result,elements,nodes,vertices,loads,materials,parameters);     break;
 				case ThicknessAcrossGradientEnum:   ThicknessAcrossGradientx(&double_result,elements,nodes,vertices,loads,materials,parameters);    break;
+				case ThicknessPositiveEnum:         this->ThicknessPositivex(&double_result);                                                       break;
 				case RheologyBbarAbsGradientEnum:   RheologyBbarAbsGradientx(&double_result,elements,nodes,vertices,loads,materials,parameters);    break;
-				case RheologyBAbsGradientEnum:      RheologyBAbsGradientx(&double_result,elements,nodes,vertices,loads,materials,parameters);  break;
+				case RheologyBAbsGradientEnum:      RheologyBAbsGradientx(&double_result,elements,nodes,vertices,loads,materials,parameters);       break;
 				case DragCoefficientAbsGradientEnum:DragCoefficientAbsGradientx(&double_result,elements,nodes,vertices,loads,materials,parameters); break;
 				case BalancethicknessMisfitEnum:    BalancethicknessMisfitx(&double_result);                                                        break;
@@ -1954,4 +1955,62 @@
 }
 /*}}}*/
+void FemModel::ThicknessPositivex(IssmDouble* pJ){/*{{{*/
+
+	/*output: */
+	IssmDouble J=0.;
+	IssmDouble J_sum;
+
+	IssmDouble  thickness,weight;
+	IssmDouble  Jdet;
+	IssmDouble* xyz_list = NULL;
+	IssmDouble  H;
+
+	/*Compute Misfit: */
+	for(int i=0;i<elements->Size();i++){
+		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+
+		/*If on water, return 0: */
+		if(!element->IsIceInElement()) continue;
+
+		/* Get node coordinates*/
+		element->GetVerticesCoordinates(&xyz_list);
+
+		/*Retrieve all inputs we will be needing: */
+		Input* weights_input   =element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+		Input* thickness_input =element->GetInput(ThicknessEnum);                          _assert_(thickness_input);
+
+		/* Start  looping on the number of gaussian points: */
+		Gauss* gauss=element->NewGauss(2);
+		for(int ig=gauss->begin();ig<gauss->end();ig++){
+
+			gauss->GaussPoint(ig);
+
+			/* Get Jacobian determinant: */
+			element->JacobianDeterminant(&Jdet,xyz_list,gauss);
+
+			/*Get all parameters at gaussian point*/
+			weights_input->GetInputValue(&weight,gauss,ThicknessPositiveEnum);
+			thickness_input->GetInputValue(&H,gauss);
+
+			/*int min(H,0)^2 */
+			if(H<=0){
+				J+=weight*H*H*Jdet*gauss->weight;
+			}
+		}
+
+		/*clean up and Return: */
+		xDelete<IssmDouble>(xyz_list);
+		delete gauss;
+	}
+
+	/*Sum all J from all cpus of the cluster:*/
+	ISSM_MPI_Reduce (&J,&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+	ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+	J=J_sum;
+
+	/*Assign output pointers: */
+	*pJ=J;
+}
+/*}}}*/
 void FemModel::CostFunctionx(IssmDouble* pJ,IssmDouble** pJlist,int* pn){/*{{{*/
 
Index: /issm/trunk-jpl/src/c/classes/FemModel.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 20015)
+++ /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 20016)
@@ -108,4 +108,5 @@
 		void CostFunctionx(IssmDouble* pJ,IssmDouble** pJlist,int* pn);
 		void ThicknessAbsGradientx( IssmDouble* pJ);
+		void ThicknessPositivex(IssmDouble* pJ);
 		void SurfaceAbsMisfitx( IssmDouble* pJ);
 		#ifdef _HAVE_GIA_
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 20015)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 20016)
@@ -32,4 +32,5 @@
 	for(int i=0;i<num_cost_functions;i++){
 		cost_function= reCast<int,IssmDouble>(iomodel->Data(InversionCostFunctionsEnum)[i]);
+		iomodel->FetchDataToInput(elements,InversionThicknessObsEnum);
 		if(     cost_function==ThicknessAbsMisfitEnum) iomodel->FetchDataToInput(elements,InversionThicknessObsEnum);
 		else if(cost_function==SurfaceAbsMisfitEnum)   iomodel->FetchDataToInput(elements,InversionSurfaceObsEnum);
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 20015)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 20016)
@@ -695,4 +695,5 @@
 	ThicknessAlongGradientEnum,
 	ThicknessAcrossGradientEnum,
+	ThicknessPositiveEnum,
 	IntMatParamEnum,
 	RheologyBbarAbsGradientEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 20015)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 20016)
@@ -681,4 +681,5 @@
 		case ThicknessAlongGradientEnum : return "ThicknessAlongGradient";
 		case ThicknessAcrossGradientEnum : return "ThicknessAcrossGradient";
+		case ThicknessPositiveEnum : return "ThicknessPositive";
 		case IntMatParamEnum : return "IntMatParam";
 		case RheologyBbarAbsGradientEnum : return "RheologyBbarAbsGradient";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 20015)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 20016)
@@ -696,4 +696,5 @@
 	      else if (strcmp(name,"ThicknessAlongGradient")==0) return ThicknessAlongGradientEnum;
 	      else if (strcmp(name,"ThicknessAcrossGradient")==0) return ThicknessAcrossGradientEnum;
+	      else if (strcmp(name,"ThicknessPositive")==0) return ThicknessPositiveEnum;
 	      else if (strcmp(name,"IntMatParam")==0) return IntMatParamEnum;
 	      else if (strcmp(name,"RheologyBbarAbsGradient")==0) return RheologyBbarAbsGradientEnum;
@@ -751,9 +752,9 @@
 	      else if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
 	      else if (strcmp(name,"P2xP4")==0) return P2xP4Enum;
-	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
          else stage=7;
    }
    if(stage==7){
-	      if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
+	      if (strcmp(name,"P1P1")==0) return P1P1Enum;
+	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
 	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
@@ -874,9 +875,9 @@
 	      else if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum;
 	      else if (strcmp(name,"Outputdefinition99")==0) return Outputdefinition99Enum;
-	      else if (strcmp(name,"Outputdefinition100")==0) return Outputdefinition100Enum;
          else stage=8;
    }
    if(stage==8){
-	      if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum;
+	      if (strcmp(name,"Outputdefinition100")==0) return Outputdefinition100Enum;
+	      else if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum;
 	      else if (strcmp(name,"Massfluxatgate")==0) return MassfluxatgateEnum;
 	      else if (strcmp(name,"MassfluxatgateName")==0) return MassfluxatgateNameEnum;
@@ -997,9 +998,9 @@
 	      else if (strcmp(name,"LevelsetfunctionPicard")==0) return LevelsetfunctionPicardEnum;
 	      else if (strcmp(name,"SealevelriseSolution")==0) return SealevelriseSolutionEnum;
-	      else if (strcmp(name,"SealevelriseAnalysis")==0) return SealevelriseAnalysisEnum;
          else stage=9;
    }
    if(stage==9){
-	      if (strcmp(name,"SealevelriseS")==0) return SealevelriseSEnum;
+	      if (strcmp(name,"SealevelriseAnalysis")==0) return SealevelriseAnalysisEnum;
+	      else if (strcmp(name,"SealevelriseS")==0) return SealevelriseSEnum;
 	      else if (strcmp(name,"SealevelriseDeltathickness")==0) return SealevelriseDeltathicknessEnum;
 	      else if (strcmp(name,"SealevelriseMaxiter")==0) return SealevelriseMaxiterEnum;
Index: /issm/trunk-jpl/src/m/enum/EnumDefinitions.js
===================================================================
--- /issm/trunk-jpl/src/m/enum/EnumDefinitions.js	(revision 20015)
+++ /issm/trunk-jpl/src/m/enum/EnumDefinitions.js	(revision 20016)
@@ -666,314 +666,315 @@
 function ThicknessAlongGradientEnum(){ return 662;}
 function ThicknessAcrossGradientEnum(){ return 663;}
-function IntMatParamEnum(){ return 664;}
-function RheologyBbarAbsGradientEnum(){ return 665;}
-function RheologyBAbsGradientEnum(){ return 666;}
-function DragCoefficientAbsGradientEnum(){ return 667;}
-function TransientInputEnum(){ return 668;}
-function WaterfractionEnum(){ return 669;}
-function WatercolumnEnum(){ return 670;}
-function BasalFrictionEnum(){ return 671;}
-function ViscousHeatingEnum(){ return 672;}
-function HydrologyWaterVxEnum(){ return 673;}
-function HydrologyWaterVyEnum(){ return 674;}
-function DrivingStressXEnum(){ return 675;}
-function DrivingStressYEnum(){ return 676;}
-function SigmaNNEnum(){ return 677;}
-function StressTensorEnum(){ return 678;}
-function StressTensorxxEnum(){ return 679;}
-function StressTensorxyEnum(){ return 680;}
-function StressTensorxzEnum(){ return 681;}
-function StressTensoryyEnum(){ return 682;}
-function StressTensoryzEnum(){ return 683;}
-function StressTensorzzEnum(){ return 684;}
-function StressMaxPrincipalEnum(){ return 685;}
-function DeviatoricStressEnum(){ return 686;}
-function DeviatoricStressxxEnum(){ return 687;}
-function DeviatoricStressxyEnum(){ return 688;}
-function DeviatoricStressxzEnum(){ return 689;}
-function DeviatoricStressyyEnum(){ return 690;}
-function DeviatoricStressyzEnum(){ return 691;}
-function DeviatoricStresszzEnum(){ return 692;}
-function DeviatoricStresseffectiveEnum(){ return 693;}
-function StrainRateEnum(){ return 694;}
-function StrainRatexxEnum(){ return 695;}
-function StrainRatexyEnum(){ return 696;}
-function StrainRatexzEnum(){ return 697;}
-function StrainRateyyEnum(){ return 698;}
-function StrainRateyzEnum(){ return 699;}
-function StrainRatezzEnum(){ return 700;}
-function DivergenceEnum(){ return 701;}
-function MaxDivergenceEnum(){ return 702;}
-function GiaCrossSectionShapeEnum(){ return 703;}
-function GiadWdtEnum(){ return 704;}
-function GiaWEnum(){ return 705;}
-function P0Enum(){ return 706;}
-function P0ArrayEnum(){ return 707;}
-function P1Enum(){ return 708;}
-function P1DGEnum(){ return 709;}
-function P1bubbleEnum(){ return 710;}
-function P1bubblecondensedEnum(){ return 711;}
-function P2Enum(){ return 712;}
-function P2bubbleEnum(){ return 713;}
-function P2bubblecondensedEnum(){ return 714;}
-function P2xP1Enum(){ return 715;}
-function P1xP2Enum(){ return 716;}
-function P1xP3Enum(){ return 717;}
-function P2xP4Enum(){ return 718;}
-function P1P1Enum(){ return 719;}
-function P1P1GLSEnum(){ return 720;}
-function MINIEnum(){ return 721;}
-function MINIcondensedEnum(){ return 722;}
-function TaylorHoodEnum(){ return 723;}
-function LATaylorHoodEnum(){ return 724;}
-function XTaylorHoodEnum(){ return 725;}
-function OneLayerP4zEnum(){ return 726;}
-function CrouzeixRaviartEnum(){ return 727;}
-function LACrouzeixRaviartEnum(){ return 728;}
-function SaveResultsEnum(){ return 729;}
-function BoolExternalResultEnum(){ return 730;}
-function DoubleExternalResultEnum(){ return 731;}
-function DoubleMatExternalResultEnum(){ return 732;}
-function IntExternalResultEnum(){ return 733;}
-function JEnum(){ return 734;}
-function StringExternalResultEnum(){ return 735;}
-function StepEnum(){ return 736;}
-function TimeEnum(){ return 737;}
-function WaterColumnOldEnum(){ return 738;}
-function OutputdefinitionEnum(){ return 739;}
-function Outputdefinition1Enum(){ return 740;}
-function Outputdefinition2Enum(){ return 741;}
-function Outputdefinition3Enum(){ return 742;}
-function Outputdefinition4Enum(){ return 743;}
-function Outputdefinition5Enum(){ return 744;}
-function Outputdefinition6Enum(){ return 745;}
-function Outputdefinition7Enum(){ return 746;}
-function Outputdefinition8Enum(){ return 747;}
-function Outputdefinition9Enum(){ return 748;}
-function Outputdefinition10Enum(){ return 749;}
-function Outputdefinition11Enum(){ return 750;}
-function Outputdefinition12Enum(){ return 751;}
-function Outputdefinition13Enum(){ return 752;}
-function Outputdefinition14Enum(){ return 753;}
-function Outputdefinition15Enum(){ return 754;}
-function Outputdefinition16Enum(){ return 755;}
-function Outputdefinition17Enum(){ return 756;}
-function Outputdefinition18Enum(){ return 757;}
-function Outputdefinition19Enum(){ return 758;}
-function Outputdefinition20Enum(){ return 759;}
-function Outputdefinition21Enum(){ return 760;}
-function Outputdefinition22Enum(){ return 761;}
-function Outputdefinition23Enum(){ return 762;}
-function Outputdefinition24Enum(){ return 763;}
-function Outputdefinition25Enum(){ return 764;}
-function Outputdefinition26Enum(){ return 765;}
-function Outputdefinition27Enum(){ return 766;}
-function Outputdefinition28Enum(){ return 767;}
-function Outputdefinition29Enum(){ return 768;}
-function Outputdefinition30Enum(){ return 769;}
-function Outputdefinition31Enum(){ return 770;}
-function Outputdefinition32Enum(){ return 771;}
-function Outputdefinition33Enum(){ return 772;}
-function Outputdefinition34Enum(){ return 773;}
-function Outputdefinition35Enum(){ return 774;}
-function Outputdefinition36Enum(){ return 775;}
-function Outputdefinition37Enum(){ return 776;}
-function Outputdefinition38Enum(){ return 777;}
-function Outputdefinition39Enum(){ return 778;}
-function Outputdefinition40Enum(){ return 779;}
-function Outputdefinition41Enum(){ return 780;}
-function Outputdefinition42Enum(){ return 781;}
-function Outputdefinition43Enum(){ return 782;}
-function Outputdefinition44Enum(){ return 783;}
-function Outputdefinition45Enum(){ return 784;}
-function Outputdefinition46Enum(){ return 785;}
-function Outputdefinition47Enum(){ return 786;}
-function Outputdefinition48Enum(){ return 787;}
-function Outputdefinition49Enum(){ return 788;}
-function Outputdefinition50Enum(){ return 789;}
-function Outputdefinition51Enum(){ return 790;}
-function Outputdefinition52Enum(){ return 791;}
-function Outputdefinition53Enum(){ return 792;}
-function Outputdefinition54Enum(){ return 793;}
-function Outputdefinition55Enum(){ return 794;}
-function Outputdefinition56Enum(){ return 795;}
-function Outputdefinition57Enum(){ return 796;}
-function Outputdefinition58Enum(){ return 797;}
-function Outputdefinition59Enum(){ return 798;}
-function Outputdefinition60Enum(){ return 799;}
-function Outputdefinition61Enum(){ return 800;}
-function Outputdefinition62Enum(){ return 801;}
-function Outputdefinition63Enum(){ return 802;}
-function Outputdefinition64Enum(){ return 803;}
-function Outputdefinition65Enum(){ return 804;}
-function Outputdefinition66Enum(){ return 805;}
-function Outputdefinition67Enum(){ return 806;}
-function Outputdefinition68Enum(){ return 807;}
-function Outputdefinition69Enum(){ return 808;}
-function Outputdefinition70Enum(){ return 809;}
-function Outputdefinition71Enum(){ return 810;}
-function Outputdefinition72Enum(){ return 811;}
-function Outputdefinition73Enum(){ return 812;}
-function Outputdefinition74Enum(){ return 813;}
-function Outputdefinition75Enum(){ return 814;}
-function Outputdefinition76Enum(){ return 815;}
-function Outputdefinition77Enum(){ return 816;}
-function Outputdefinition78Enum(){ return 817;}
-function Outputdefinition79Enum(){ return 818;}
-function Outputdefinition80Enum(){ return 819;}
-function Outputdefinition81Enum(){ return 820;}
-function Outputdefinition82Enum(){ return 821;}
-function Outputdefinition83Enum(){ return 822;}
-function Outputdefinition84Enum(){ return 823;}
-function Outputdefinition85Enum(){ return 824;}
-function Outputdefinition86Enum(){ return 825;}
-function Outputdefinition87Enum(){ return 826;}
-function Outputdefinition88Enum(){ return 827;}
-function Outputdefinition89Enum(){ return 828;}
-function Outputdefinition90Enum(){ return 829;}
-function Outputdefinition91Enum(){ return 830;}
-function Outputdefinition92Enum(){ return 831;}
-function Outputdefinition93Enum(){ return 832;}
-function Outputdefinition94Enum(){ return 833;}
-function Outputdefinition95Enum(){ return 834;}
-function Outputdefinition96Enum(){ return 835;}
-function Outputdefinition97Enum(){ return 836;}
-function Outputdefinition98Enum(){ return 837;}
-function Outputdefinition99Enum(){ return 838;}
-function Outputdefinition100Enum(){ return 839;}
-function OutputdefinitionListEnum(){ return 840;}
-function MassfluxatgateEnum(){ return 841;}
-function MassfluxatgateNameEnum(){ return 842;}
-function MassfluxatgateDefinitionenumEnum(){ return 843;}
-function MassfluxatgateSegmentsEnum(){ return 844;}
-function MisfitNameEnum(){ return 845;}
-function MisfitDefinitionenumEnum(){ return 846;}
-function MisfitModelEnum(){ return 847;}
-function MisfitObservationEnum(){ return 848;}
+function ThicknessPositiveEnum(){ return 664;}
+function IntMatParamEnum(){ return 665;}
+function RheologyBbarAbsGradientEnum(){ return 666;}
+function RheologyBAbsGradientEnum(){ return 667;}
+function DragCoefficientAbsGradientEnum(){ return 668;}
+function TransientInputEnum(){ return 669;}
+function WaterfractionEnum(){ return 670;}
+function WatercolumnEnum(){ return 671;}
+function BasalFrictionEnum(){ return 672;}
+function ViscousHeatingEnum(){ return 673;}
+function HydrologyWaterVxEnum(){ return 674;}
+function HydrologyWaterVyEnum(){ return 675;}
+function DrivingStressXEnum(){ return 676;}
+function DrivingStressYEnum(){ return 677;}
+function SigmaNNEnum(){ return 678;}
+function StressTensorEnum(){ return 679;}
+function StressTensorxxEnum(){ return 680;}
+function StressTensorxyEnum(){ return 681;}
+function StressTensorxzEnum(){ return 682;}
+function StressTensoryyEnum(){ return 683;}
+function StressTensoryzEnum(){ return 684;}
+function StressTensorzzEnum(){ return 685;}
+function StressMaxPrincipalEnum(){ return 686;}
+function DeviatoricStressEnum(){ return 687;}
+function DeviatoricStressxxEnum(){ return 688;}
+function DeviatoricStressxyEnum(){ return 689;}
+function DeviatoricStressxzEnum(){ return 690;}
+function DeviatoricStressyyEnum(){ return 691;}
+function DeviatoricStressyzEnum(){ return 692;}
+function DeviatoricStresszzEnum(){ return 693;}
+function DeviatoricStresseffectiveEnum(){ return 694;}
+function StrainRateEnum(){ return 695;}
+function StrainRatexxEnum(){ return 696;}
+function StrainRatexyEnum(){ return 697;}
+function StrainRatexzEnum(){ return 698;}
+function StrainRateyyEnum(){ return 699;}
+function StrainRateyzEnum(){ return 700;}
+function StrainRatezzEnum(){ return 701;}
+function DivergenceEnum(){ return 702;}
+function MaxDivergenceEnum(){ return 703;}
+function GiaCrossSectionShapeEnum(){ return 704;}
+function GiadWdtEnum(){ return 705;}
+function GiaWEnum(){ return 706;}
+function P0Enum(){ return 707;}
+function P0ArrayEnum(){ return 708;}
+function P1Enum(){ return 709;}
+function P1DGEnum(){ return 710;}
+function P1bubbleEnum(){ return 711;}
+function P1bubblecondensedEnum(){ return 712;}
+function P2Enum(){ return 713;}
+function P2bubbleEnum(){ return 714;}
+function P2bubblecondensedEnum(){ return 715;}
+function P2xP1Enum(){ return 716;}
+function P1xP2Enum(){ return 717;}
+function P1xP3Enum(){ return 718;}
+function P2xP4Enum(){ return 719;}
+function P1P1Enum(){ return 720;}
+function P1P1GLSEnum(){ return 721;}
+function MINIEnum(){ return 722;}
+function MINIcondensedEnum(){ return 723;}
+function TaylorHoodEnum(){ return 724;}
+function LATaylorHoodEnum(){ return 725;}
+function XTaylorHoodEnum(){ return 726;}
+function OneLayerP4zEnum(){ return 727;}
+function CrouzeixRaviartEnum(){ return 728;}
+function LACrouzeixRaviartEnum(){ return 729;}
+function SaveResultsEnum(){ return 730;}
+function BoolExternalResultEnum(){ return 731;}
+function DoubleExternalResultEnum(){ return 732;}
+function DoubleMatExternalResultEnum(){ return 733;}
+function IntExternalResultEnum(){ return 734;}
+function JEnum(){ return 735;}
+function StringExternalResultEnum(){ return 736;}
+function StepEnum(){ return 737;}
+function TimeEnum(){ return 738;}
+function WaterColumnOldEnum(){ return 739;}
+function OutputdefinitionEnum(){ return 740;}
+function Outputdefinition1Enum(){ return 741;}
+function Outputdefinition2Enum(){ return 742;}
+function Outputdefinition3Enum(){ return 743;}
+function Outputdefinition4Enum(){ return 744;}
+function Outputdefinition5Enum(){ return 745;}
+function Outputdefinition6Enum(){ return 746;}
+function Outputdefinition7Enum(){ return 747;}
+function Outputdefinition8Enum(){ return 748;}
+function Outputdefinition9Enum(){ return 749;}
+function Outputdefinition10Enum(){ return 750;}
+function Outputdefinition11Enum(){ return 751;}
+function Outputdefinition12Enum(){ return 752;}
+function Outputdefinition13Enum(){ return 753;}
+function Outputdefinition14Enum(){ return 754;}
+function Outputdefinition15Enum(){ return 755;}
+function Outputdefinition16Enum(){ return 756;}
+function Outputdefinition17Enum(){ return 757;}
+function Outputdefinition18Enum(){ return 758;}
+function Outputdefinition19Enum(){ return 759;}
+function Outputdefinition20Enum(){ return 760;}
+function Outputdefinition21Enum(){ return 761;}
+function Outputdefinition22Enum(){ return 762;}
+function Outputdefinition23Enum(){ return 763;}
+function Outputdefinition24Enum(){ return 764;}
+function Outputdefinition25Enum(){ return 765;}
+function Outputdefinition26Enum(){ return 766;}
+function Outputdefinition27Enum(){ return 767;}
+function Outputdefinition28Enum(){ return 768;}
+function Outputdefinition29Enum(){ return 769;}
+function Outputdefinition30Enum(){ return 770;}
+function Outputdefinition31Enum(){ return 771;}
+function Outputdefinition32Enum(){ return 772;}
+function Outputdefinition33Enum(){ return 773;}
+function Outputdefinition34Enum(){ return 774;}
+function Outputdefinition35Enum(){ return 775;}
+function Outputdefinition36Enum(){ return 776;}
+function Outputdefinition37Enum(){ return 777;}
+function Outputdefinition38Enum(){ return 778;}
+function Outputdefinition39Enum(){ return 779;}
+function Outputdefinition40Enum(){ return 780;}
+function Outputdefinition41Enum(){ return 781;}
+function Outputdefinition42Enum(){ return 782;}
+function Outputdefinition43Enum(){ return 783;}
+function Outputdefinition44Enum(){ return 784;}
+function Outputdefinition45Enum(){ return 785;}
+function Outputdefinition46Enum(){ return 786;}
+function Outputdefinition47Enum(){ return 787;}
+function Outputdefinition48Enum(){ return 788;}
+function Outputdefinition49Enum(){ return 789;}
+function Outputdefinition50Enum(){ return 790;}
+function Outputdefinition51Enum(){ return 791;}
+function Outputdefinition52Enum(){ return 792;}
+function Outputdefinition53Enum(){ return 793;}
+function Outputdefinition54Enum(){ return 794;}
+function Outputdefinition55Enum(){ return 795;}
+function Outputdefinition56Enum(){ return 796;}
+function Outputdefinition57Enum(){ return 797;}
+function Outputdefinition58Enum(){ return 798;}
+function Outputdefinition59Enum(){ return 799;}
+function Outputdefinition60Enum(){ return 800;}
+function Outputdefinition61Enum(){ return 801;}
+function Outputdefinition62Enum(){ return 802;}
+function Outputdefinition63Enum(){ return 803;}
+function Outputdefinition64Enum(){ return 804;}
+function Outputdefinition65Enum(){ return 805;}
+function Outputdefinition66Enum(){ return 806;}
+function Outputdefinition67Enum(){ return 807;}
+function Outputdefinition68Enum(){ return 808;}
+function Outputdefinition69Enum(){ return 809;}
+function Outputdefinition70Enum(){ return 810;}
+function Outputdefinition71Enum(){ return 811;}
+function Outputdefinition72Enum(){ return 812;}
+function Outputdefinition73Enum(){ return 813;}
+function Outputdefinition74Enum(){ return 814;}
+function Outputdefinition75Enum(){ return 815;}
+function Outputdefinition76Enum(){ return 816;}
+function Outputdefinition77Enum(){ return 817;}
+function Outputdefinition78Enum(){ return 818;}
+function Outputdefinition79Enum(){ return 819;}
+function Outputdefinition80Enum(){ return 820;}
+function Outputdefinition81Enum(){ return 821;}
+function Outputdefinition82Enum(){ return 822;}
+function Outputdefinition83Enum(){ return 823;}
+function Outputdefinition84Enum(){ return 824;}
+function Outputdefinition85Enum(){ return 825;}
+function Outputdefinition86Enum(){ return 826;}
+function Outputdefinition87Enum(){ return 827;}
+function Outputdefinition88Enum(){ return 828;}
+function Outputdefinition89Enum(){ return 829;}
+function Outputdefinition90Enum(){ return 830;}
+function Outputdefinition91Enum(){ return 831;}
+function Outputdefinition92Enum(){ return 832;}
+function Outputdefinition93Enum(){ return 833;}
+function Outputdefinition94Enum(){ return 834;}
+function Outputdefinition95Enum(){ return 835;}
+function Outputdefinition96Enum(){ return 836;}
+function Outputdefinition97Enum(){ return 837;}
+function Outputdefinition98Enum(){ return 838;}
+function Outputdefinition99Enum(){ return 839;}
+function Outputdefinition100Enum(){ return 840;}
+function OutputdefinitionListEnum(){ return 841;}
+function MassfluxatgateEnum(){ return 842;}
+function MassfluxatgateNameEnum(){ return 843;}
+function MassfluxatgateDefinitionenumEnum(){ return 844;}
+function MassfluxatgateSegmentsEnum(){ return 845;}
+function MisfitNameEnum(){ return 846;}
+function MisfitDefinitionenumEnum(){ return 847;}
+function MisfitModelEnum(){ return 848;}
 function MisfitObservationEnum(){ return 849;}
-function MisfitLocalEnum(){ return 850;}
-function MisfitTimeinterpolationEnum(){ return 851;}
-function MisfitWeightsEnum(){ return 852;}
+function MisfitObservationEnum(){ return 850;}
+function MisfitLocalEnum(){ return 851;}
+function MisfitTimeinterpolationEnum(){ return 852;}
 function MisfitWeightsEnum(){ return 853;}
-function SurfaceObservationEnum(){ return 854;}
-function WeightsSurfaceObservationEnum(){ return 855;}
-function VxObsEnum(){ return 856;}
-function WeightsVxObsEnum(){ return 857;}
-function VyObsEnum(){ return 858;}
-function WeightsVyObsEnum(){ return 859;}
-function MinVelEnum(){ return 860;}
-function MaxVelEnum(){ return 861;}
-function MinVxEnum(){ return 862;}
-function MaxVxEnum(){ return 863;}
-function MaxAbsVxEnum(){ return 864;}
-function MinVyEnum(){ return 865;}
-function MaxVyEnum(){ return 866;}
-function MaxAbsVyEnum(){ return 867;}
-function MinVzEnum(){ return 868;}
-function MaxVzEnum(){ return 869;}
-function MaxAbsVzEnum(){ return 870;}
-function FloatingAreaEnum(){ return 871;}
-function GroundedAreaEnum(){ return 872;}
-function IceMassEnum(){ return 873;}
-function IceVolumeEnum(){ return 874;}
-function IceVolumeAboveFloatationEnum(){ return 875;}
-function TotalSmbEnum(){ return 876;}
-function AbsoluteEnum(){ return 877;}
-function IncrementalEnum(){ return 878;}
-function AugmentedLagrangianREnum(){ return 879;}
-function AugmentedLagrangianRhopEnum(){ return 880;}
-function AugmentedLagrangianRlambdaEnum(){ return 881;}
-function AugmentedLagrangianRholambdaEnum(){ return 882;}
-function AugmentedLagrangianThetaEnum(){ return 883;}
-function NoneEnum(){ return 884;}
-function AggressiveMigrationEnum(){ return 885;}
-function SoftMigrationEnum(){ return 886;}
-function SubelementMigrationEnum(){ return 887;}
-function SubelementMigration2Enum(){ return 888;}
-function ContactEnum(){ return 889;}
-function GroundingOnlyEnum(){ return 890;}
-function MaskGroundediceLevelsetEnum(){ return 891;}
-function GaussSegEnum(){ return 892;}
-function GaussTriaEnum(){ return 893;}
-function GaussTetraEnum(){ return 894;}
-function GaussPentaEnum(){ return 895;}
-function FSSolverEnum(){ return 896;}
-function AdjointEnum(){ return 897;}
-function ColinearEnum(){ return 898;}
-function ControlSteadyEnum(){ return 899;}
-function FsetEnum(){ return 900;}
-function Gradient1Enum(){ return 901;}
-function Gradient2Enum(){ return 902;}
-function Gradient3Enum(){ return 903;}
-function GradientEnum(){ return 904;}
-function GroundinglineMigrationEnum(){ return 905;}
-function GsetEnum(){ return 906;}
-function IndexEnum(){ return 907;}
-function IndexedEnum(){ return 908;}
-function IntersectEnum(){ return 909;}
-function NodalEnum(){ return 910;}
-function OldGradientEnum(){ return 911;}
-function OutputBufferPointerEnum(){ return 912;}
-function OutputBufferSizePointerEnum(){ return 913;}
-function OutputFilePointerEnum(){ return 914;}
-function ToolkitsFileNameEnum(){ return 915;}
-function RootPathEnum(){ return 916;}
-function OutputFileNameEnum(){ return 917;}
-function InputFileNameEnum(){ return 918;}
-function LockFileNameEnum(){ return 919;}
-function RestartFileNameEnum(){ return 920;}
-function ToolkitsOptionsAnalysesEnum(){ return 921;}
-function ToolkitsOptionsStringsEnum(){ return 922;}
-function QmuErrNameEnum(){ return 923;}
-function QmuInNameEnum(){ return 924;}
-function QmuOutNameEnum(){ return 925;}
-function RegularEnum(){ return 926;}
-function ScaledEnum(){ return 927;}
-function SeparateEnum(){ return 928;}
-function SsetEnum(){ return 929;}
-function VerboseEnum(){ return 930;}
-function TriangleInterpEnum(){ return 931;}
-function BilinearInterpEnum(){ return 932;}
-function NearestInterpEnum(){ return 933;}
-function XYEnum(){ return 934;}
-function XYZEnum(){ return 935;}
-function DenseEnum(){ return 936;}
-function MpiDenseEnum(){ return 937;}
-function MpiSparseEnum(){ return 938;}
-function SeqEnum(){ return 939;}
-function MpiEnum(){ return 940;}
-function MumpsEnum(){ return 941;}
-function GslEnum(){ return 942;}
-function OptionEnum(){ return 943;}
-function GenericOptionEnum(){ return 944;}
-function OptionCellEnum(){ return 945;}
-function OptionStructEnum(){ return 946;}
-function CuffeyEnum(){ return 947;}
-function PatersonEnum(){ return 948;}
-function ArrheniusEnum(){ return 949;}
-function LliboutryDuvalEnum(){ return 950;}
-function TransientIslevelsetEnum(){ return 951;}
-function SpcLevelsetEnum(){ return 952;}
-function ExtrapolationVariableEnum(){ return 953;}
-function IceMaskNodeActivationEnum(){ return 954;}
-function LevelsetfunctionSlopeXEnum(){ return 955;}
-function LevelsetfunctionSlopeYEnum(){ return 956;}
-function LevelsetfunctionPicardEnum(){ return 957;}
-function SealevelriseSolutionEnum(){ return 958;}
-function SealevelriseAnalysisEnum(){ return 959;}
-function SealevelriseSEnum(){ return 960;}
-function SealevelriseDeltathicknessEnum(){ return 961;}
-function SealevelriseMaxiterEnum(){ return 962;}
-function SealevelriseReltolEnum(){ return 963;}
-function SealevelriseAbstolEnum(){ return 964;}
-function SealevelriseLoveHEnum(){ return 965;}
-function SealevelriseLoveKEnum(){ return 966;}
-function SealevelriseRigidEnum(){ return 967;}
-function SealevelriseElasticEnum(){ return 968;}
-function SealevelriseEustaticEnum(){ return 969;}
-function SealevelriseLegendrePrecomputeEnum(){ return 970;}
-function SealevelriseLegendreCoefficientsEnum(){ return 971;}
-function SealevelriseGRigidEnum(){ return 972;}
-function SealevelriseGElasticEnum(){ return 973;}
-function SealevelriseStoreGreenFunctionsEnum(){ return 974;}
-function MaximumNumberOfDefinitionsEnum(){ return 975;}
+function MisfitWeightsEnum(){ return 854;}
+function SurfaceObservationEnum(){ return 855;}
+function WeightsSurfaceObservationEnum(){ return 856;}
+function VxObsEnum(){ return 857;}
+function WeightsVxObsEnum(){ return 858;}
+function VyObsEnum(){ return 859;}
+function WeightsVyObsEnum(){ return 860;}
+function MinVelEnum(){ return 861;}
+function MaxVelEnum(){ return 862;}
+function MinVxEnum(){ return 863;}
+function MaxVxEnum(){ return 864;}
+function MaxAbsVxEnum(){ return 865;}
+function MinVyEnum(){ return 866;}
+function MaxVyEnum(){ return 867;}
+function MaxAbsVyEnum(){ return 868;}
+function MinVzEnum(){ return 869;}
+function MaxVzEnum(){ return 870;}
+function MaxAbsVzEnum(){ return 871;}
+function FloatingAreaEnum(){ return 872;}
+function GroundedAreaEnum(){ return 873;}
+function IceMassEnum(){ return 874;}
+function IceVolumeEnum(){ return 875;}
+function IceVolumeAboveFloatationEnum(){ return 876;}
+function TotalSmbEnum(){ return 877;}
+function AbsoluteEnum(){ return 878;}
+function IncrementalEnum(){ return 879;}
+function AugmentedLagrangianREnum(){ return 880;}
+function AugmentedLagrangianRhopEnum(){ return 881;}
+function AugmentedLagrangianRlambdaEnum(){ return 882;}
+function AugmentedLagrangianRholambdaEnum(){ return 883;}
+function AugmentedLagrangianThetaEnum(){ return 884;}
+function NoneEnum(){ return 885;}
+function AggressiveMigrationEnum(){ return 886;}
+function SoftMigrationEnum(){ return 887;}
+function SubelementMigrationEnum(){ return 888;}
+function SubelementMigration2Enum(){ return 889;}
+function ContactEnum(){ return 890;}
+function GroundingOnlyEnum(){ return 891;}
+function MaskGroundediceLevelsetEnum(){ return 892;}
+function GaussSegEnum(){ return 893;}
+function GaussTriaEnum(){ return 894;}
+function GaussTetraEnum(){ return 895;}
+function GaussPentaEnum(){ return 896;}
+function FSSolverEnum(){ return 897;}
+function AdjointEnum(){ return 898;}
+function ColinearEnum(){ return 899;}
+function ControlSteadyEnum(){ return 900;}
+function FsetEnum(){ return 901;}
+function Gradient1Enum(){ return 902;}
+function Gradient2Enum(){ return 903;}
+function Gradient3Enum(){ return 904;}
+function GradientEnum(){ return 905;}
+function GroundinglineMigrationEnum(){ return 906;}
+function GsetEnum(){ return 907;}
+function IndexEnum(){ return 908;}
+function IndexedEnum(){ return 909;}
+function IntersectEnum(){ return 910;}
+function NodalEnum(){ return 911;}
+function OldGradientEnum(){ return 912;}
+function OutputBufferPointerEnum(){ return 913;}
+function OutputBufferSizePointerEnum(){ return 914;}
+function OutputFilePointerEnum(){ return 915;}
+function ToolkitsFileNameEnum(){ return 916;}
+function RootPathEnum(){ return 917;}
+function OutputFileNameEnum(){ return 918;}
+function InputFileNameEnum(){ return 919;}
+function LockFileNameEnum(){ return 920;}
+function RestartFileNameEnum(){ return 921;}
+function ToolkitsOptionsAnalysesEnum(){ return 922;}
+function ToolkitsOptionsStringsEnum(){ return 923;}
+function QmuErrNameEnum(){ return 924;}
+function QmuInNameEnum(){ return 925;}
+function QmuOutNameEnum(){ return 926;}
+function RegularEnum(){ return 927;}
+function ScaledEnum(){ return 928;}
+function SeparateEnum(){ return 929;}
+function SsetEnum(){ return 930;}
+function VerboseEnum(){ return 931;}
+function TriangleInterpEnum(){ return 932;}
+function BilinearInterpEnum(){ return 933;}
+function NearestInterpEnum(){ return 934;}
+function XYEnum(){ return 935;}
+function XYZEnum(){ return 936;}
+function DenseEnum(){ return 937;}
+function MpiDenseEnum(){ return 938;}
+function MpiSparseEnum(){ return 939;}
+function SeqEnum(){ return 940;}
+function MpiEnum(){ return 941;}
+function MumpsEnum(){ return 942;}
+function GslEnum(){ return 943;}
+function OptionEnum(){ return 944;}
+function GenericOptionEnum(){ return 945;}
+function OptionCellEnum(){ return 946;}
+function OptionStructEnum(){ return 947;}
+function CuffeyEnum(){ return 948;}
+function PatersonEnum(){ return 949;}
+function ArrheniusEnum(){ return 950;}
+function LliboutryDuvalEnum(){ return 951;}
+function TransientIslevelsetEnum(){ return 952;}
+function SpcLevelsetEnum(){ return 953;}
+function ExtrapolationVariableEnum(){ return 954;}
+function IceMaskNodeActivationEnum(){ return 955;}
+function LevelsetfunctionSlopeXEnum(){ return 956;}
+function LevelsetfunctionSlopeYEnum(){ return 957;}
+function LevelsetfunctionPicardEnum(){ return 958;}
+function SealevelriseSolutionEnum(){ return 959;}
+function SealevelriseAnalysisEnum(){ return 960;}
+function SealevelriseSEnum(){ return 961;}
+function SealevelriseDeltathicknessEnum(){ return 962;}
+function SealevelriseMaxiterEnum(){ return 963;}
+function SealevelriseReltolEnum(){ return 964;}
+function SealevelriseAbstolEnum(){ return 965;}
+function SealevelriseLoveHEnum(){ return 966;}
+function SealevelriseLoveKEnum(){ return 967;}
+function SealevelriseRigidEnum(){ return 968;}
+function SealevelriseElasticEnum(){ return 969;}
+function SealevelriseEustaticEnum(){ return 970;}
+function SealevelriseLegendrePrecomputeEnum(){ return 971;}
+function SealevelriseLegendreCoefficientsEnum(){ return 972;}
+function SealevelriseGRigidEnum(){ return 973;}
+function SealevelriseGElasticEnum(){ return 974;}
+function SealevelriseStoreGreenFunctionsEnum(){ return 975;}
+function MaximumNumberOfDefinitionsEnum(){ return 976;}
Index: /issm/trunk-jpl/src/m/enum/EnumDefinitions.py
===================================================================
--- /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 20015)
+++ /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 20016)
@@ -673,4 +673,5 @@
 def ThicknessAlongGradientEnum(): return StringToEnum("ThicknessAlongGradient")[0]
 def ThicknessAcrossGradientEnum(): return StringToEnum("ThicknessAcrossGradient")[0]
+def ThicknessPositiveEnum(): return StringToEnum("ThicknessPositive")[0]
 def IntMatParamEnum(): return StringToEnum("IntMatParam")[0]
 def RheologyBbarAbsGradientEnum(): return StringToEnum("RheologyBbarAbsGradient")[0]
Index: /issm/trunk-jpl/src/m/enum/ThicknessPositiveEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/ThicknessPositiveEnum.m	(revision 20016)
+++ /issm/trunk-jpl/src/m/enum/ThicknessPositiveEnum.m	(revision 20016)
@@ -0,0 +1,11 @@
+function macro=ThicknessPositiveEnum()
+%THICKNESSPOSITIVEENUM - Enum of ThicknessPositive
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=ThicknessPositiveEnum()
+
+macro=StringToEnum('ThicknessPositive');
Index: /issm/trunk-jpl/src/m/inversions/marshallcostfunctions.m
===================================================================
--- /issm/trunk-jpl/src/m/inversions/marshallcostfunctions.m	(revision 20015)
+++ /issm/trunk-jpl/src/m/inversions/marshallcostfunctions.m	(revision 20016)
@@ -13,3 +13,4 @@
 	pos=find(cost_functions==506); data(pos)=BalancethicknessMisfitEnum();
 	pos=find(cost_functions==507); data(pos)=RheologyBAbsGradientEnum();
+	pos=find(cost_functions==510); data(pos)=ThicknessPositiveEnum();
 	pos=find(cost_functions==601); data(pos)=SurfaceAbsMisfitEnum();
Index: /issm/trunk-jpl/src/m/inversions/supportedcostfunctions.m
===================================================================
--- /issm/trunk-jpl/src/m/inversions/supportedcostfunctions.m	(revision 20015)
+++ /issm/trunk-jpl/src/m/inversions/supportedcostfunctions.m	(revision 20016)
@@ -1,3 +1,3 @@
 function list = supportedcostfunctions(),
 
-	list = [101:105 201 501:507 601:604];
+	list = [101:105 201 501:507 510 601:604];
