Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16251)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16252)
@@ -44,4 +44,6 @@
 		parameters->AddObject(iomodel->CopyConstantObject(AutodiffLbufsizeEnum));
 		parameters->AddObject(iomodel->CopyConstantObject(AutodiffTbufsizeEnum));
+		parameters->AddObject(iomodel->CopyConstantObject(AutodiffGcTriggerRatioEnum));
+		parameters->AddObject(iomodel->CopyConstantObject(AutodiffGcTriggerMaxSizeEnum));
 		/*}}}*/
 		/*retrieve driver: {{{*/
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16251)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16252)
@@ -33,4 +33,6 @@
 	AutodiffCbufsizeEnum,
 	AutodiffTbufsizeEnum,
+	AutodiffGcTriggerRatioEnum,
+	AutodiffGcTriggerMaxSizeEnum,
 	BalancethicknessSpcthicknessEnum,
 	BalancethicknessStabilizationEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16251)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16252)
@@ -41,4 +41,6 @@
 		case AutodiffCbufsizeEnum : return "AutodiffCbufsize";
 		case AutodiffTbufsizeEnum : return "AutodiffTbufsize";
+		case AutodiffGcTriggerRatioEnum : return "AutodiffGcTriggerRatio";
+		case AutodiffGcTriggerMaxSizeEnum : return "AutodiffGcTriggerMaxSize";
 		case BalancethicknessSpcthicknessEnum : return "BalancethicknessSpcthickness";
 		case BalancethicknessStabilizationEnum : return "BalancethicknessStabilization";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16251)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16252)
@@ -41,4 +41,6 @@
 	      else if (strcmp(name,"AutodiffCbufsize")==0) return AutodiffCbufsizeEnum;
 	      else if (strcmp(name,"AutodiffTbufsize")==0) return AutodiffTbufsizeEnum;
+	      else if (strcmp(name,"AutodiffGcTriggerRatio")==0) return AutodiffGcTriggerRatioEnum;
+	      else if (strcmp(name,"AutodiffGcTriggerMaxSize")==0) return AutodiffGcTriggerMaxSizeEnum;
 	      else if (strcmp(name,"BalancethicknessSpcthickness")==0) return BalancethicknessSpcthicknessEnum;
 	      else if (strcmp(name,"BalancethicknessStabilization")==0) return BalancethicknessStabilizationEnum;
@@ -135,10 +137,10 @@
 	      else if (strcmp(name,"InversionCostFunctionsCoefficients")==0) return InversionCostFunctionsCoefficientsEnum;
 	      else if (strcmp(name,"InversionCostFunctions")==0) return InversionCostFunctionsEnum;
-	      else if (strcmp(name,"InversionGradientScaling")==0) return InversionGradientScalingEnum;
-	      else if (strcmp(name,"InversionIscontrol")==0) return InversionIscontrolEnum;
          else stage=2;
    }
    if(stage==2){
-	      if (strcmp(name,"InversionTao")==0) return InversionTaoEnum;
+	      if (strcmp(name,"InversionGradientScaling")==0) return InversionGradientScalingEnum;
+	      else if (strcmp(name,"InversionIscontrol")==0) return InversionIscontrolEnum;
+	      else if (strcmp(name,"InversionTao")==0) return InversionTaoEnum;
 	      else if (strcmp(name,"InversionIncompleteAdjoint")==0) return InversionIncompleteAdjointEnum;
 	      else if (strcmp(name,"InversionMaxParameters")==0) return InversionMaxParametersEnum;
@@ -258,10 +260,10 @@
 	      else if (strcmp(name,"SurfaceforcingsS0p")==0) return SurfaceforcingsS0pEnum;
 	      else if (strcmp(name,"SurfaceforcingsIssmbgradients")==0) return SurfaceforcingsIssmbgradientsEnum;
-	      else if (strcmp(name,"SurfaceforcingsMonthlytemperatures")==0) return SurfaceforcingsMonthlytemperaturesEnum;
-	      else if (strcmp(name,"SurfaceforcingsHref")==0) return SurfaceforcingsHrefEnum;
          else stage=3;
    }
    if(stage==3){
-	      if (strcmp(name,"SurfaceforcingsSmbref")==0) return SurfaceforcingsSmbrefEnum;
+	      if (strcmp(name,"SurfaceforcingsMonthlytemperatures")==0) return SurfaceforcingsMonthlytemperaturesEnum;
+	      else if (strcmp(name,"SurfaceforcingsHref")==0) return SurfaceforcingsHrefEnum;
+	      else if (strcmp(name,"SurfaceforcingsSmbref")==0) return SurfaceforcingsSmbrefEnum;
 	      else if (strcmp(name,"SurfaceforcingsBPos")==0) return SurfaceforcingsBPosEnum;
 	      else if (strcmp(name,"SurfaceforcingsBNeg")==0) return SurfaceforcingsBNegEnum;
@@ -381,10 +383,10 @@
 	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
 	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
-	      else if (strcmp(name,"Matice")==0) return MaticeEnum;
-	      else if (strcmp(name,"Matpar")==0) return MatparEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"Node")==0) return NodeEnum;
+	      if (strcmp(name,"Matice")==0) return MaticeEnum;
+	      else if (strcmp(name,"Matpar")==0) return MatparEnum;
+	      else if (strcmp(name,"Node")==0) return NodeEnum;
 	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
 	      else if (strcmp(name,"NumericalfluxType")==0) return NumericalfluxTypeEnum;
@@ -504,10 +506,10 @@
 	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
 	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
-	      else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
-	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"P0")==0) return P0Enum;
+	      if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
+	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
+	      else if (strcmp(name,"P0")==0) return P0Enum;
 	      else if (strcmp(name,"P1")==0) return P1Enum;
 	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
Index: /issm/trunk-jpl/src/m/classes/autodiff.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/autodiff.m	(revision 16251)
+++ /issm/trunk-jpl/src/m/classes/autodiff.m	(revision 16252)
@@ -15,4 +15,6 @@
 		cbufsize     = NaN;
 		tbufsize     = NaN;
+		gcTriggerRatio = NaN;
+		gcTriggerMaxSize = NaN;
 		end
 		%}}}
@@ -31,4 +33,6 @@
 		cbufsize     = 524288;
 		tbufsize     = 524288;
+		gcTriggerRatio=2.0;
+		gcTriggerMaxSize=2000000;
 		end % }}}
 		function md = checkconsistency(obj,md,solution,analyses) % {{{
@@ -45,4 +49,6 @@
 			md = checkfield(md,'autodiff.cbufsize','>=',524288);
 			md = checkfield(md,'autodiff.tbufsize','>=',524288);
+			md = checkfield(md,'autodiff.gcTriggerRatio','>=',2);
+			md = checkfield(md,'autodiff.gcTriggerMaxSize','>=',2000000);
 
 			%go through our dependents and independents and check consistency: 
@@ -67,4 +73,6 @@
 			fielddisplay(obj,'cbufsize','Number of values per buffer (==CBUFSIZE in usrparms.h)');
 			fielddisplay(obj,'tbufsize','Number of taylors per buffer (<=TBUFSIZE in usrparms.h)');
+			fielddisplay(obj,'gcTriggerRatio','free location block sorting/consolidation triggered if the ratio between allocated and used locations exceeds gcTriggerRatio');
+			fielddisplay(obj,'gcTriggerMaxSize','free location block sorting/consolidation triggered if the allocated locations exceed gcTriggerMaxSize');
 		end % }}}
 		function marshall(obj,md,fid) % {{{
@@ -81,8 +89,10 @@
 
 			%buffer sizes {{{
-			WriteData(fid,'data',obj,'fieldname','obufsize','enum',AutodiffObufsizeEnum(),'format','Double');
-			WriteData(fid,'data',obj,'fieldname','lbufsize','enum',AutodiffLbufsizeEnum(),'format','Double');
-			WriteData(fid,'data',obj,'fieldname','cbufsize','enum',AutodiffCbufsizeEnum(),'format','Double');
-			WriteData(fid,'data',obj,'fieldname','tbufsize','enum',AutodiffTbufsizeEnum(),'format','Double');
+			WriteData(fid,'object',obj,'fieldname','obufsize','format','Double');
+			WriteData(fid,'object',obj,'fieldname','lbufsize','format','Double');
+			WriteData(fid,'object',obj,'fieldname','cbufsize','format','Double');
+			WriteData(fid,'object',obj,'fieldname','tbufsize','format','Double');
+			WriteData(fid,'object',obj,'fieldname','gcTriggerRatio','format','Double');
+			WriteData(fid,'object',obj,'fieldname','gcTriggerMaxSize','format','Double');
 			%}}}
 			%process dependent variables {{{
Index: /issm/trunk-jpl/src/m/classes/autodiff.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/autodiff.py	(revision 16251)
+++ /issm/trunk-jpl/src/m/classes/autodiff.py	(revision 16252)
@@ -23,4 +23,6 @@
 		self.cbufsize     = float('NaN')
 		self.tbufsize     = float('NaN')
+		self.gcTriggerMaxSize     = float('NaN')
+		self.gcTriggerRatio     = float('NaN')
 		if not len(args):
 			self.setdefaultparameters()
@@ -39,4 +41,7 @@
 		s+="%s\n" % fielddisplay(self,'cbufsize',"Number of values per buffer (==CBUFSIZE in usrparms.h)")
 		s+="%s\n" % fielddisplay(self,'tbufsize',"Number of taylors per buffer (<=TBUFSIZE in usrparms.h)")
+		s+="%s\n" % fielddisplay(self,'gcTriggerRatio',"free location block sorting/consolidation triggered if the ratio between allocated and used locations exceeds gcTriggerRatio")
+		s+="%s\n" % fielddisplay(self,'gcTriggerMaxSize',"free location block sorting/consolidation triggered if the allocated locations exceed gcTriggerMaxSize)")
+
 		return s
 	# }}}
@@ -46,4 +51,6 @@
 		self.cbufsize     = 524288
 		self.tbufsize     = 524288
+		gcTriggerRatio=2.0
+		gcTriggerMaxSize=2000000
 		return self
 	# }}}
@@ -58,4 +65,6 @@
 		md = checkfield(md,'autodiff.cbufsize','>=',524288)
 		md = checkfield(md,'autodiff.tbufsize','>=',524288)
+		md = checkfield(md,'autodiff.gcTriggerRatio','>=',2.0)
+		md = checkfield(md,'autodiff.gcTriggerMaxSize','>=',2000000)
 
 		#Driver value:
@@ -81,8 +90,10 @@
 			
 		#buffer sizes {{{
-		WriteData(fid,'data',self,'fieldname','obufsize','enum',AutodiffObufsizeEnum(),'format','Double');
-		WriteData(fid,'data',self,'fieldname','lbufsize','enum',AutodiffLbufsizeEnum(),'format','Double');
-		WriteData(fid,'data',self,'fieldname','cbufsize','enum',AutodiffCbufsizeEnum(),'format','Double');
-		WriteData(fid,'data',self,'fieldname','tbufsize','enum',AutodiffTbufsizeEnum(),'format','Double');
+		WriteData(fid,'object',self,'fieldname','obufsize','format','Double');
+		WriteData(fid,'object',self,'fieldname','lbufsize','format','Double');
+		WriteData(fid,'object',self,'fieldname','cbufsize','format','Double');
+		WriteData(fid,'object',self,'fieldname','tbufsize','format','Double');
+		WriteData(fid,'object',self,'fieldname','gcTriggerRatio','format','Double');
+		WriteData(fid,'object',self,'fieldname','gcTriggerMaxSize','format','Double');
 		#}}}
 		#process dependent variables {{{
Index: /issm/trunk-jpl/src/m/enum/AutodiffGcTriggerMaxSizeEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/AutodiffGcTriggerMaxSizeEnum.m	(revision 16252)
+++ /issm/trunk-jpl/src/m/enum/AutodiffGcTriggerMaxSizeEnum.m	(revision 16252)
@@ -0,0 +1,11 @@
+function macro=AutodiffGcTriggerMaxSizeEnum()
+%AUTODIFFGCTRIGGERMAXSIZEENUM - Enum of AutodiffGcTriggerMaxSize
+%
+%   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=AutodiffGcTriggerMaxSizeEnum()
+
+macro=StringToEnum('AutodiffGcTriggerMaxSize');
Index: /issm/trunk-jpl/src/m/enum/AutodiffGcTriggerRatioEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/AutodiffGcTriggerRatioEnum.m	(revision 16252)
+++ /issm/trunk-jpl/src/m/enum/AutodiffGcTriggerRatioEnum.m	(revision 16252)
@@ -0,0 +1,11 @@
+function macro=AutodiffGcTriggerRatioEnum()
+%AUTODIFFGCTRIGGERRATIOENUM - Enum of AutodiffGcTriggerRatio
+%
+%   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=AutodiffGcTriggerRatioEnum()
+
+macro=StringToEnum('AutodiffGcTriggerRatio');
Index: /issm/trunk-jpl/src/m/enum/EnumDefinitions.py
===================================================================
--- /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16251)
+++ /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16252)
@@ -33,4 +33,6 @@
 def AutodiffCbufsizeEnum(): return StringToEnum("AutodiffCbufsize")[0]
 def AutodiffTbufsizeEnum(): return StringToEnum("AutodiffTbufsize")[0]
+def AutodiffGcTriggerRatioEnum(): return StringToEnum("AutodiffGcTriggerRatio")[0]
+def AutodiffGcTriggerMaxSizeEnum(): return StringToEnum("AutodiffGcTriggerMaxSize")[0]
 def BalancethicknessSpcthicknessEnum(): return StringToEnum("BalancethicknessSpcthickness")[0]
 def BalancethicknessStabilizationEnum(): return StringToEnum("BalancethicknessStabilization")[0]
