Index: /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 27687)
+++ /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 27688)
@@ -107,4 +107,8 @@
 			iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum);
 			break;
+		case CalvingVonmisesADEnum:
+			iomodel->FetchDataToInput(inputs,elements,"md.calving.basin_id",CalvingBasinIdEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum);
+			break;
 		case CalvingDev2Enum:
 			iomodel->FetchDataToInput(inputs,elements,"md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum);
@@ -187,4 +191,19 @@
 		case CalvingVonmisesEnum:
 			parameters->AddObject(iomodel->CopyConstantObject("md.calving.min_thickness",CalvingMinthicknessEnum));
+			break;
+		case CalvingVonmisesADEnum:
+			parameters->AddObject(iomodel->CopyConstantObject("md.calving.min_thickness",CalvingMinthicknessEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.calving.num_basins",CalvingNumberofBasinsEnum));
+
+			iomodel->FetchData(&transparam,&M,&N,"md.calving.stress_threshold_groundedice");
+         _assert_(M>=1 && N>=1);
+         parameters->AddObject(new DoubleVecParam(CalvingADStressThresholdGroundediceEnum,transparam,M));
+         xDelete<IssmDouble>(transparam);
+
+         iomodel->FetchData(&transparam,&M,&N,"md.calving.stress_threshold_floatingice");
+         _assert_(M>=1 && N>=1);
+         parameters->AddObject(new DoubleVecParam(CalvingADStressThresholdFloatingiceEnum,transparam,M));
+         xDelete<IssmDouble>(transparam);
+         
 			break;
 		case CalvingMinthicknessEnum:
@@ -729,5 +748,5 @@
 
 	/*Apply minimum thickness criterion*/
-	if(calvinglaw==CalvingMinthicknessEnum || calvinglaw==CalvingVonmisesEnum || calvinglaw==CalvingParameterizationEnum){
+	if(calvinglaw==CalvingMinthicknessEnum || calvinglaw==CalvingVonmisesEnum || calvinglaw==CalvingParameterizationEnum || calvinglaw==CalvingVonmisesADEnum){
 
 		IssmDouble mig_max = femmodel->parameters->FindParam(MigrationMaxEnum);
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 27687)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 27688)
@@ -3812,4 +3812,7 @@
 													  case CalvingDev2Enum:
 														  this->CalvingRateVonmises();
+														  break;
+													  case CalvingVonmisesADEnum:
+														  this->CalvingRateVonmisesAD();
 														  break;
 													  case CalvingCrevasseDepthEnum:
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 27687)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 27688)
@@ -239,4 +239,5 @@
 		virtual void       CalvingRateParameterization(void){_error_("not implemented yet");};
 		virtual void       CalvingRateVonmises(void){_error_("not implemented yet");};
+		virtual void       CalvingRateVonmisesAD(void){_error_("not implemented yet");};
 		virtual void       CalvingRateTest(void){_error_("not implemented yet");};
 		virtual void       CalvingCrevasseDepth(void){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 27687)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 27688)
@@ -345,4 +345,71 @@
 		smax_fl_input->GetInputValue(&sigma_max_floating,&gauss);
 		smax_gr_input->GetInputValue(&sigma_max_grounded,&gauss);
+		sl_input->GetInputValue(&sealevel,&gauss);
+
+		/*Tensile stress threshold*/
+		if(groundedice<0)
+		 sigma_max = sigma_max_floating;
+		else
+		 sigma_max = sigma_max_grounded;
+
+		/*Assign values*/
+		if(bed>sealevel){
+			calvingrate[iv] = 0.;
+		}
+		else{
+			calvingrate[iv] = sqrt(vx*vx+vy*vy)*sigma_vm/sigma_max;
+		}
+	}
+
+	/*Add input*/
+	this->AddInput(CalvingCalvingrateEnum,&calvingrate[0],P1DGEnum);
+   this->CalvingRateToVector();
+}
+/*}}}*/
+void       Tria::CalvingRateVonmisesAD(){/*{{{*/
+
+	/*First, compute Von Mises Stress*/
+	this->ComputeSigmaVM();
+
+	/*Now compute calving rate*/
+	IssmDouble  calvingrate[NUMVERTICES];
+	IssmDouble  sigma_vm,vx,vy;
+	IssmDouble  sigma_max,sigma_max_floating,sigma_max_grounded,n;
+	IssmDouble  groundedice,bed,sealevel;
+	int M;
+	int basinid;
+	IssmDouble* sigma_max_floating_basin=NULL;
+	IssmDouble* sigma_max_grounded_basin=NULL;
+
+	/*Retrieve all inputs and parameters we will need*/
+	Input* vx_input       = this->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input       = this->GetInput(VyEnum); _assert_(vy_input);
+	Input* gr_input       = this->GetInput(MaskOceanLevelsetEnum); _assert_(gr_input);
+	Input* bs_input       = this->GetInput(BaseEnum);                    _assert_(bs_input);
+	Input* sl_input       = this->GetInput(SealevelEnum); _assert_(sl_input);
+	Input* sigma_vm_input = this->GetInput(SigmaVMEnum); _assert_(sigma_vm_input);
+
+	this->Element::GetInputValue(&basinid,CalvingBasinIdEnum);
+
+	parameters->FindParam(&sigma_max_floating_basin,&M,CalvingADStressThresholdFloatingiceEnum);
+	parameters->FindParam(&sigma_max_grounded_basin,&M,CalvingADStressThresholdGroundediceEnum);
+
+	sigma_max_floating = sigma_max_floating_basin[basinid];
+	sigma_max_grounded = sigma_max_grounded_basin[basinid];
+
+	_print0_("basinid: " << basinid << "\n");
+	_print0_("sigma_max_grounded: " << sigma_max_grounded << "\n");
+	
+	/* Start looping on the number of vertices: */
+	GaussTria gauss;
+	for(int iv=0;iv<NUMVERTICES;iv++){
+		gauss.GaussVertex(iv);
+
+		/*Get velocity components and thickness*/
+		sigma_vm_input->GetInputValue(&sigma_vm,&gauss);
+		vx_input->GetInputValue(&vx,&gauss);
+		vy_input->GetInputValue(&vy,&gauss);
+		gr_input->GetInputValue(&groundedice,&gauss);
+		bs_input->GetInputValue(&bed,&gauss);
 		sl_input->GetInputValue(&sealevel,&gauss);
 
@@ -4414,4 +4481,5 @@
 		case DefaultCalvingEnum:
 		case CalvingVonmisesEnum:
+		case CalvingVonmisesADEnum:
 		case CalvingLevermannEnum:
 		case CalvingPollardEnum:
@@ -4458,4 +4526,5 @@
 			case DefaultCalvingEnum:
 			case CalvingVonmisesEnum:
+			case CalvingVonmisesADEnum:
 			case CalvingTestEnum:
 			case CalvingParameterizationEnum:
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 27687)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 27688)
@@ -55,4 +55,5 @@
 		void        AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part);
 		void			CalvingRateVonmises();
+		void			CalvingRateVonmisesAD();
 		void			CalvingRateTest();
 		void        CalvingCrevasseDepth();
Index: /issm/trunk-jpl/src/c/modules/Calvingx/Calvingx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/Calvingx/Calvingx.cpp	(revision 27687)
+++ /issm/trunk-jpl/src/c/modules/Calvingx/Calvingx.cpp	(revision 27688)
@@ -39,4 +39,7 @@
 			femmodel->ElementOperationx(&Element::CalvingRateVonmises);
 			break;
+		case CalvingVonmisesADEnum:
+			femmodel->ElementOperationx(&Element::CalvingRateVonmisesAD);
+			break;
 		case CalvingTestEnum:
 			femmodel->ElementOperationx(&Element::CalvingRateTest);
Index: /issm/trunk-jpl/src/c/shared/Enum/Enum.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 27687)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 27688)
@@ -114,4 +114,6 @@
 syn keyword cConstant BasalforcingsUpperwaterElevationEnum
 syn keyword cConstant BasalforcingsUpperwaterMeltingRateEnum
+syn keyword cConstant CalvingADStressThresholdFloatingiceEnum
+syn keyword cConstant CalvingADStressThresholdGroundediceEnum
 syn keyword cConstant CalvingCrevasseDepthEnum
 syn keyword cConstant CalvingCrevasseThresholdEnum
@@ -131,4 +133,5 @@
 syn keyword cConstant CalvingVelUpperboundEnum
 syn keyword cConstant CalvingRcEnum
+syn keyword cConstant CalvingNumberofBasinsEnum
 syn keyword cConstant ConfigurationTypeEnum
 syn keyword cConstant ConstantsGEnum
@@ -753,4 +756,5 @@
 syn keyword cConstant BottomPressureEnum
 syn keyword cConstant BottomPressureOldEnum
+syn keyword cConstant CalvingBasinIdEnum
 syn keyword cConstant CalvingCalvingrateEnum
 syn keyword cConstant CalvingHabFractionEnum
@@ -1386,4 +1390,5 @@
 syn keyword cConstant CalvingParameterizationEnum
 syn keyword cConstant CalvingVonmisesEnum
+syn keyword cConstant CalvingVonmisesADEnum
 syn keyword cConstant CalvingPollardEnum
 syn keyword cConstant CfdragcoeffabsgradEnum
@@ -1762,4 +1767,5 @@
 syn keyword cType Cfdragcoeffabsgrad
 syn keyword cType Cflevelsetmisfit
+syn keyword cType Cfrheologybbarabsgrad
 syn keyword cType Cfsurfacelogvel
 syn keyword cType Cfsurfacesquare
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 27687)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 27688)
@@ -108,4 +108,6 @@
 	BasalforcingsUpperwaterElevationEnum,
 	BasalforcingsUpperwaterMeltingRateEnum,
+	CalvingADStressThresholdFloatingiceEnum,
+	CalvingADStressThresholdGroundediceEnum,
 	CalvingCrevasseDepthEnum,
 	CalvingCrevasseThresholdEnum,
@@ -125,4 +127,5 @@
 	CalvingVelUpperboundEnum,
 	CalvingRcEnum,
+	CalvingNumberofBasinsEnum,
 	ConfigurationTypeEnum,
 	ConstantsGEnum,
@@ -749,4 +752,5 @@
 	BottomPressureEnum,
 	BottomPressureOldEnum,
+	CalvingBasinIdEnum,
 	CalvingCalvingrateEnum,
 	CalvingHabFractionEnum,
@@ -1385,4 +1389,5 @@
 	CalvingParameterizationEnum,
 	CalvingVonmisesEnum,
+	CalvingVonmisesADEnum,
 	CalvingPollardEnum,
 	CfdragcoeffabsgradEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 27687)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 27688)
@@ -116,4 +116,6 @@
 		case BasalforcingsUpperwaterElevationEnum : return "BasalforcingsUpperwaterElevation";
 		case BasalforcingsUpperwaterMeltingRateEnum : return "BasalforcingsUpperwaterMeltingRate";
+		case CalvingADStressThresholdFloatingiceEnum : return "CalvingADStressThresholdFloatingice";
+		case CalvingADStressThresholdGroundediceEnum : return "CalvingADStressThresholdGroundedice";
 		case CalvingCrevasseDepthEnum : return "CalvingCrevasseDepth";
 		case CalvingCrevasseThresholdEnum : return "CalvingCrevasseThreshold";
@@ -133,4 +135,5 @@
 		case CalvingVelUpperboundEnum : return "CalvingVelUpperbound";
 		case CalvingRcEnum : return "CalvingRc";
+		case CalvingNumberofBasinsEnum : return "CalvingNumberofBasins";
 		case ConfigurationTypeEnum : return "ConfigurationType";
 		case ConstantsGEnum : return "ConstantsG";
@@ -755,4 +758,5 @@
 		case BottomPressureEnum : return "BottomPressure";
 		case BottomPressureOldEnum : return "BottomPressureOld";
+		case CalvingBasinIdEnum : return "CalvingBasinId";
 		case CalvingCalvingrateEnum : return "CalvingCalvingrate";
 		case CalvingHabFractionEnum : return "CalvingHabFraction";
@@ -1388,4 +1392,5 @@
 		case CalvingParameterizationEnum : return "CalvingParameterization";
 		case CalvingVonmisesEnum : return "CalvingVonmises";
+		case CalvingVonmisesADEnum : return "CalvingVonmisesAD";
 		case CalvingPollardEnum : return "CalvingPollard";
 		case CfdragcoeffabsgradEnum : return "Cfdragcoeffabsgrad";
Index: /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim	(revision 27687)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim	(revision 27688)
@@ -107,4 +107,6 @@
 syn keyword juliaConstC BasalforcingsUpperwaterElevationEnum
 syn keyword juliaConstC BasalforcingsUpperwaterMeltingRateEnum
+syn keyword juliaConstC CalvingADStressThresholdFloatingiceEnum
+syn keyword juliaConstC CalvingADStressThresholdGroundediceEnum
 syn keyword juliaConstC CalvingCrevasseDepthEnum
 syn keyword juliaConstC CalvingCrevasseThresholdEnum
@@ -124,4 +126,5 @@
 syn keyword juliaConstC CalvingVelUpperboundEnum
 syn keyword juliaConstC CalvingRcEnum
+syn keyword juliaConstC CalvingNumberofBasinsEnum
 syn keyword juliaConstC ConfigurationTypeEnum
 syn keyword juliaConstC ConstantsGEnum
@@ -746,4 +749,5 @@
 syn keyword juliaConstC BottomPressureEnum
 syn keyword juliaConstC BottomPressureOldEnum
+syn keyword juliaConstC CalvingBasinIdEnum
 syn keyword juliaConstC CalvingCalvingrateEnum
 syn keyword juliaConstC CalvingHabFractionEnum
@@ -1379,4 +1383,5 @@
 syn keyword juliaConstC CalvingParameterizationEnum
 syn keyword juliaConstC CalvingVonmisesEnum
+syn keyword juliaConstC CalvingVonmisesADEnum
 syn keyword juliaConstC CalvingPollardEnum
 syn keyword juliaConstC CfdragcoeffabsgradEnum
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 27687)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 27688)
@@ -116,4 +116,6 @@
 	      else if (strcmp(name,"BasalforcingsUpperwaterElevation")==0) return BasalforcingsUpperwaterElevationEnum;
 	      else if (strcmp(name,"BasalforcingsUpperwaterMeltingRate")==0) return BasalforcingsUpperwaterMeltingRateEnum;
+	      else if (strcmp(name,"CalvingADStressThresholdFloatingice")==0) return CalvingADStressThresholdFloatingiceEnum;
+	      else if (strcmp(name,"CalvingADStressThresholdGroundedice")==0) return CalvingADStressThresholdGroundediceEnum;
 	      else if (strcmp(name,"CalvingCrevasseDepth")==0) return CalvingCrevasseDepthEnum;
 	      else if (strcmp(name,"CalvingCrevasseThreshold")==0) return CalvingCrevasseThresholdEnum;
@@ -133,12 +135,13 @@
 	      else if (strcmp(name,"CalvingVelUpperbound")==0) return CalvingVelUpperboundEnum;
 	      else if (strcmp(name,"CalvingRc")==0) return CalvingRcEnum;
+	      else if (strcmp(name,"CalvingNumberofBasins")==0) return CalvingNumberofBasinsEnum;
 	      else if (strcmp(name,"ConfigurationType")==0) return ConfigurationTypeEnum;
-	      else if (strcmp(name,"ConstantsG")==0) return ConstantsGEnum;
-	      else if (strcmp(name,"ConstantsNewtonGravity")==0) return ConstantsNewtonGravityEnum;
-	      else if (strcmp(name,"ConstantsReferencetemperature")==0) return ConstantsReferencetemperatureEnum;
          else stage=2;
    }
    if(stage==2){
-	      if (strcmp(name,"ConstantsYts")==0) return ConstantsYtsEnum;
+	      if (strcmp(name,"ConstantsG")==0) return ConstantsGEnum;
+	      else if (strcmp(name,"ConstantsNewtonGravity")==0) return ConstantsNewtonGravityEnum;
+	      else if (strcmp(name,"ConstantsReferencetemperature")==0) return ConstantsReferencetemperatureEnum;
+	      else if (strcmp(name,"ConstantsYts")==0) return ConstantsYtsEnum;
 	      else if (strcmp(name,"ControlInputSizeM")==0) return ControlInputSizeMEnum;
 	      else if (strcmp(name,"ControlInputSizeN")==0) return ControlInputSizeNEnum;
@@ -257,11 +260,11 @@
 	      else if (strcmp(name,"Hydrologyarmamalagcoefs")==0) return HydrologyarmamalagcoefsEnum;
 	      else if (strcmp(name,"HydrologyarmamaOrder")==0) return HydrologyarmamaOrderEnum;
-	      else if (strcmp(name,"HydrologyarmaMonthlyFactors")==0) return HydrologyarmaMonthlyFactorsEnum;
-	      else if (strcmp(name,"HydrologyarmaNumBreaks")==0) return HydrologyarmaNumBreaksEnum;
-	      else if (strcmp(name,"HydrologyarmaNumParams")==0) return HydrologyarmaNumParamsEnum;
          else stage=3;
    }
    if(stage==3){
-	      if (strcmp(name,"Hydrologyarmapolyparams")==0) return HydrologyarmapolyparamsEnum;
+	      if (strcmp(name,"HydrologyarmaMonthlyFactors")==0) return HydrologyarmaMonthlyFactorsEnum;
+	      else if (strcmp(name,"HydrologyarmaNumBreaks")==0) return HydrologyarmaNumBreaksEnum;
+	      else if (strcmp(name,"HydrologyarmaNumParams")==0) return HydrologyarmaNumParamsEnum;
+	      else if (strcmp(name,"Hydrologyarmapolyparams")==0) return HydrologyarmapolyparamsEnum;
 	      else if (strcmp(name,"HydrologyarmaTimestep")==0) return HydrologyarmaTimestepEnum;
 	      else if (strcmp(name,"HydrologyAveraging")==0) return HydrologyAveragingEnum;
@@ -380,11 +383,11 @@
 	      else if (strcmp(name,"MasstransportRequestedOutputs")==0) return MasstransportRequestedOutputsEnum;
 	      else if (strcmp(name,"MasstransportStabilization")==0) return MasstransportStabilizationEnum;
-	      else if (strcmp(name,"MaterialsBeta")==0) return MaterialsBetaEnum;
-	      else if (strcmp(name,"MaterialsEarthDensity")==0) return MaterialsEarthDensityEnum;
-	      else if (strcmp(name,"MaterialsEffectiveconductivityAveraging")==0) return MaterialsEffectiveconductivityAveragingEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"MaterialsHeatcapacity")==0) return MaterialsHeatcapacityEnum;
+	      if (strcmp(name,"MaterialsBeta")==0) return MaterialsBetaEnum;
+	      else if (strcmp(name,"MaterialsEarthDensity")==0) return MaterialsEarthDensityEnum;
+	      else if (strcmp(name,"MaterialsEffectiveconductivityAveraging")==0) return MaterialsEffectiveconductivityAveragingEnum;
+	      else if (strcmp(name,"MaterialsHeatcapacity")==0) return MaterialsHeatcapacityEnum;
 	      else if (strcmp(name,"MaterialsLatentheat")==0) return MaterialsLatentheatEnum;
 	      else if (strcmp(name,"MaterialsMeltingpoint")==0) return MaterialsMeltingpointEnum;
@@ -503,11 +506,11 @@
 	      else if (strcmp(name,"SolidearthSettingsHoriz")==0) return SolidearthSettingsHorizEnum;
 	      else if (strcmp(name,"SolidearthSettingsMaxiter")==0) return SolidearthSettingsMaxiterEnum;
-	      else if (strcmp(name,"SolidearthSettingsGrdOcean")==0) return SolidearthSettingsGrdOceanEnum;
-	      else if (strcmp(name,"SolidearthSettingsOceanAreaScaling")==0) return SolidearthSettingsOceanAreaScalingEnum;
-	      else if (strcmp(name,"StochasticForcingCovariance")==0) return StochasticForcingCovarianceEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"StochasticForcingDefaultDimension")==0) return StochasticForcingDefaultDimensionEnum;
+	      if (strcmp(name,"SolidearthSettingsGrdOcean")==0) return SolidearthSettingsGrdOceanEnum;
+	      else if (strcmp(name,"SolidearthSettingsOceanAreaScaling")==0) return SolidearthSettingsOceanAreaScalingEnum;
+	      else if (strcmp(name,"StochasticForcingCovariance")==0) return StochasticForcingCovarianceEnum;
+	      else if (strcmp(name,"StochasticForcingDefaultDimension")==0) return StochasticForcingDefaultDimensionEnum;
 	      else if (strcmp(name,"StochasticForcingDimensions")==0) return StochasticForcingDimensionsEnum;
 	      else if (strcmp(name,"StochasticForcingFields")==0) return StochasticForcingFieldsEnum;
@@ -626,11 +629,11 @@
 	      else if (strcmp(name,"SteadystateReltol")==0) return SteadystateReltolEnum;
 	      else if (strcmp(name,"SteadystateRequestedOutputs")==0) return SteadystateRequestedOutputsEnum;
-	      else if (strcmp(name,"Step")==0) return StepEnum;
-	      else if (strcmp(name,"Steps")==0) return StepsEnum;
-	      else if (strcmp(name,"StressbalanceAbstol")==0) return StressbalanceAbstolEnum;
          else stage=6;
    }
    if(stage==6){
-	      if (strcmp(name,"StressbalanceFSreconditioning")==0) return StressbalanceFSreconditioningEnum;
+	      if (strcmp(name,"Step")==0) return StepEnum;
+	      else if (strcmp(name,"Steps")==0) return StepsEnum;
+	      else if (strcmp(name,"StressbalanceAbstol")==0) return StressbalanceAbstolEnum;
+	      else if (strcmp(name,"StressbalanceFSreconditioning")==0) return StressbalanceFSreconditioningEnum;
 	      else if (strcmp(name,"StressbalanceIsnewton")==0) return StressbalanceIsnewtonEnum;
 	      else if (strcmp(name,"StressbalanceMaxiter")==0) return StressbalanceMaxiterEnum;
@@ -749,11 +752,11 @@
 	      else if (strcmp(name,"BasalforcingsPicoSubShelfOceanTemp")==0) return BasalforcingsPicoSubShelfOceanTempEnum;
 	      else if (strcmp(name,"BasalStressx")==0) return BasalStressxEnum;
-	      else if (strcmp(name,"BasalStressy")==0) return BasalStressyEnum;
-	      else if (strcmp(name,"BasalStress")==0) return BasalStressEnum;
-	      else if (strcmp(name,"Base")==0) return BaseEnum;
          else stage=7;
    }
    if(stage==7){
-	      if (strcmp(name,"BaseOld")==0) return BaseOldEnum;
+	      if (strcmp(name,"BasalStressy")==0) return BasalStressyEnum;
+	      else if (strcmp(name,"BasalStress")==0) return BasalStressEnum;
+	      else if (strcmp(name,"Base")==0) return BaseEnum;
+	      else if (strcmp(name,"BaseOld")==0) return BaseOldEnum;
 	      else if (strcmp(name,"BaseSlopeX")==0) return BaseSlopeXEnum;
 	      else if (strcmp(name,"BaseSlopeY")==0) return BaseSlopeYEnum;
@@ -773,4 +776,5 @@
 	      else if (strcmp(name,"BottomPressure")==0) return BottomPressureEnum;
 	      else if (strcmp(name,"BottomPressureOld")==0) return BottomPressureOldEnum;
+	      else if (strcmp(name,"CalvingBasinId")==0) return CalvingBasinIdEnum;
 	      else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
 	      else if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum;
@@ -871,12 +875,12 @@
 	      else if (strcmp(name,"GroundinglineHeight")==0) return GroundinglineHeightEnum;
 	      else if (strcmp(name,"HydraulicPotential")==0) return HydraulicPotentialEnum;
-	      else if (strcmp(name,"HydraulicPotentialOld")==0) return HydraulicPotentialOldEnum;
+         else stage=8;
+   }
+   if(stage==8){
+	      if (strcmp(name,"HydraulicPotentialOld")==0) return HydraulicPotentialOldEnum;
 	      else if (strcmp(name,"HydrologyBasalFlux")==0) return HydrologyBasalFluxEnum;
 	      else if (strcmp(name,"HydrologyBasinsId")==0) return HydrologyBasinsIdEnum;
 	      else if (strcmp(name,"HydrologyBumpHeight")==0) return HydrologyBumpHeightEnum;
-         else stage=8;
-   }
-   if(stage==8){
-	      if (strcmp(name,"HydrologyBumpSpacing")==0) return HydrologyBumpSpacingEnum;
+	      else if (strcmp(name,"HydrologyBumpSpacing")==0) return HydrologyBumpSpacingEnum;
 	      else if (strcmp(name,"HydrologyChannelConductivity")==0) return HydrologyChannelConductivityEnum;
 	      else if (strcmp(name,"HydrologydcBasalMoulinInput")==0) return HydrologydcBasalMoulinInputEnum;
@@ -994,12 +998,12 @@
 	      else if (strcmp(name,"SealevelBarystaticBpMask")==0) return SealevelBarystaticBpMaskEnum;
 	      else if (strcmp(name,"SealevelBarystaticBpWeights")==0) return SealevelBarystaticBpWeightsEnum;
-	      else if (strcmp(name,"SealevelBarystaticBpArea")==0) return SealevelBarystaticBpAreaEnum;
+         else stage=9;
+   }
+   if(stage==9){
+	      if (strcmp(name,"SealevelBarystaticBpArea")==0) return SealevelBarystaticBpAreaEnum;
 	      else if (strcmp(name,"SealevelBarystaticBpLoad")==0) return SealevelBarystaticBpLoadEnum;
 	      else if (strcmp(name,"SealevelBarystaticOceanMask")==0) return SealevelBarystaticOceanMaskEnum;
 	      else if (strcmp(name,"SealevelBarystaticOceanWeights")==0) return SealevelBarystaticOceanWeightsEnum;
-         else stage=9;
-   }
-   if(stage==9){
-	      if (strcmp(name,"SealevelBarystaticOceanArea")==0) return SealevelBarystaticOceanAreaEnum;
+	      else if (strcmp(name,"SealevelBarystaticOceanArea")==0) return SealevelBarystaticOceanAreaEnum;
 	      else if (strcmp(name,"SealevelBarystaticOceanLatbar")==0) return SealevelBarystaticOceanLatbarEnum;
 	      else if (strcmp(name,"SealevelBarystaticOceanLongbar")==0) return SealevelBarystaticOceanLongbarEnum;
@@ -1117,12 +1121,12 @@
 	      else if (strcmp(name,"SmbMassBalanceSnow")==0) return SmbMassBalanceSnowEnum;
 	      else if (strcmp(name,"SmbMassBalanceIce")==0) return SmbMassBalanceIceEnum;
-	      else if (strcmp(name,"SmbMassBalanceSemic")==0) return SmbMassBalanceSemicEnum;
+         else stage=10;
+   }
+   if(stage==10){
+	      if (strcmp(name,"SmbMassBalanceSemic")==0) return SmbMassBalanceSemicEnum;
 	      else if (strcmp(name,"SmbMassBalanceSubstep")==0) return SmbMassBalanceSubstepEnum;
 	      else if (strcmp(name,"SmbMassBalanceTransient")==0) return SmbMassBalanceTransientEnum;
 	      else if (strcmp(name,"SmbMask")==0) return SmbMaskEnum;
-         else stage=10;
-   }
-   if(stage==10){
-	      if (strcmp(name,"SmbMeanLHF")==0) return SmbMeanLHFEnum;
+	      else if (strcmp(name,"SmbMeanLHF")==0) return SmbMeanLHFEnum;
 	      else if (strcmp(name,"SmbMeanSHF")==0) return SmbMeanSHFEnum;
 	      else if (strcmp(name,"SmbMeanULW")==0) return SmbMeanULWEnum;
@@ -1240,12 +1244,12 @@
 	      else if (strcmp(name,"VxAverage")==0) return VxAverageEnum;
 	      else if (strcmp(name,"VxBase")==0) return VxBaseEnum;
-	      else if (strcmp(name,"VxDebris")==0) return VxDebrisEnum;
+         else stage=11;
+   }
+   if(stage==11){
+	      if (strcmp(name,"VxDebris")==0) return VxDebrisEnum;
 	      else if (strcmp(name,"Vx")==0) return VxEnum;
 	      else if (strcmp(name,"VxMesh")==0) return VxMeshEnum;
 	      else if (strcmp(name,"VxObs")==0) return VxObsEnum;
-         else stage=11;
-   }
-   if(stage==11){
-	      if (strcmp(name,"VxShear")==0) return VxShearEnum;
+	      else if (strcmp(name,"VxShear")==0) return VxShearEnum;
 	      else if (strcmp(name,"VxSurface")==0) return VxSurfaceEnum;
 	      else if (strcmp(name,"VyAverage")==0) return VyAverageEnum;
@@ -1363,12 +1367,12 @@
 	      else if (strcmp(name,"Outputdefinition85")==0) return Outputdefinition85Enum;
 	      else if (strcmp(name,"Outputdefinition86")==0) return Outputdefinition86Enum;
-	      else if (strcmp(name,"Outputdefinition87")==0) return Outputdefinition87Enum;
+         else stage=12;
+   }
+   if(stage==12){
+	      if (strcmp(name,"Outputdefinition87")==0) return Outputdefinition87Enum;
 	      else if (strcmp(name,"Outputdefinition88")==0) return Outputdefinition88Enum;
 	      else if (strcmp(name,"Outputdefinition89")==0) return Outputdefinition89Enum;
 	      else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum;
-         else stage=12;
-   }
-   if(stage==12){
-	      if (strcmp(name,"Outputdefinition90")==0) return Outputdefinition90Enum;
+	      else if (strcmp(name,"Outputdefinition90")==0) return Outputdefinition90Enum;
 	      else if (strcmp(name,"Outputdefinition91")==0) return Outputdefinition91Enum;
 	      else if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
@@ -1421,4 +1425,5 @@
 	      else if (strcmp(name,"CalvingParameterization")==0) return CalvingParameterizationEnum;
 	      else if (strcmp(name,"CalvingVonmises")==0) return CalvingVonmisesEnum;
+	      else if (strcmp(name,"CalvingVonmisesAD")==0) return CalvingVonmisesADEnum;
 	      else if (strcmp(name,"CalvingPollard")==0) return CalvingPollardEnum;
 	      else if (strcmp(name,"Cfdragcoeffabsgrad")==0) return CfdragcoeffabsgradEnum;
@@ -1485,13 +1490,13 @@
 	      else if (strcmp(name,"FSvelocity")==0) return FSvelocityEnum;
 	      else if (strcmp(name,"FemModel")==0) return FemModelEnum;
-	      else if (strcmp(name,"FileParam")==0) return FileParamEnum;
+         else stage=13;
+   }
+   if(stage==13){
+	      if (strcmp(name,"FileParam")==0) return FileParamEnum;
 	      else if (strcmp(name,"FixedTimestepping")==0) return FixedTimesteppingEnum;
 	      else if (strcmp(name,"FloatingArea")==0) return FloatingAreaEnum;
 	      else if (strcmp(name,"FloatingAreaScaled")==0) return FloatingAreaScaledEnum;
 	      else if (strcmp(name,"FloatingMeltRate")==0) return FloatingMeltRateEnum;
-         else stage=13;
-   }
-   if(stage==13){
-	      if (strcmp(name,"Free")==0) return FreeEnum;
+	      else if (strcmp(name,"Free")==0) return FreeEnum;
 	      else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum;
 	      else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum;
@@ -1608,13 +1613,13 @@
 	      else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum;
 	      else if (strcmp(name,"MaxAbsVy")==0) return MaxAbsVyEnum;
-	      else if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum;
+         else stage=14;
+   }
+   if(stage==14){
+	      if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum;
 	      else if (strcmp(name,"MaxDivergence")==0) return MaxDivergenceEnum;
 	      else if (strcmp(name,"MaxVel")==0) return MaxVelEnum;
 	      else if (strcmp(name,"MaxVx")==0) return MaxVxEnum;
 	      else if (strcmp(name,"MaxVy")==0) return MaxVyEnum;
-         else stage=14;
-   }
-   if(stage==14){
-	      if (strcmp(name,"MaxVz")==0) return MaxVzEnum;
+	      else if (strcmp(name,"MaxVz")==0) return MaxVzEnum;
 	      else if (strcmp(name,"Melange")==0) return MelangeEnum;
 	      else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
@@ -1731,13 +1736,13 @@
 	      else if (strcmp(name,"StressbalanceConvergenceNumSteps")==0) return StressbalanceConvergenceNumStepsEnum;
 	      else if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
-	      else if (strcmp(name,"StressbalanceSolution")==0) return StressbalanceSolutionEnum;
+         else stage=15;
+   }
+   if(stage==15){
+	      if (strcmp(name,"StressbalanceSolution")==0) return StressbalanceSolutionEnum;
 	      else if (strcmp(name,"StressbalanceVerticalAnalysis")==0) return StressbalanceVerticalAnalysisEnum;
 	      else if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum;
 	      else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum;
 	      else if (strcmp(name,"StringParam")==0) return StringParamEnum;
-         else stage=15;
-   }
-   if(stage==15){
-	      if (strcmp(name,"SubelementFriction1")==0) return SubelementFriction1Enum;
+	      else if (strcmp(name,"SubelementFriction1")==0) return SubelementFriction1Enum;
 	      else if (strcmp(name,"SubelementFriction2")==0) return SubelementFriction2Enum;
 	      else if (strcmp(name,"SubelementMelt1")==0) return SubelementMelt1Enum;
Index: /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 27687)
+++ /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 27688)
@@ -282,4 +282,5 @@
 		case 9:  return CalvingParameterizationEnum;
 		case 10: return CalvingPollardEnum;
+		case 11: return CalvingVonmisesADEnum;
 		default: _error_("Marshalled Calving law code \""<<enum_in<<"\" not supported yet");
 	}
Index: /issm/trunk-jpl/src/m/classes/calvingvonmisesAD.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/calvingvonmisesAD.m	(revision 27688)
+++ /issm/trunk-jpl/src/m/classes/calvingvonmisesAD.m	(revision 27688)
@@ -0,0 +1,82 @@
+%CALVINGVONMISESAD class definition
+%
+%   Usage:
+%      calvingvonmisesAD=calvingvonmisesAD();
+
+classdef calvingvonmisesAD
+	properties (SetAccess=public) 
+		basin_id							  = NaN;
+		num_basins           = 0;
+		stress_threshold_groundedice = 0.;
+		stress_threshold_floatingice = 0.;
+		min_thickness = 0.;
+	end
+	methods
+		function self = calvingvonmises(varargin) % {{{
+			switch nargin
+				case 0
+					self=setdefaultparameters(self);
+				case 1
+					inputstruct=varargin{1};
+					list1 = properties('calvingvonmisesAD');
+					list2 = fieldnames(inputstruct);
+					for i=1:length(list1)
+						fieldname = list1{i};
+						if ismember(fieldname,list2),
+							self.(fieldname) = inputstruct.(fieldname);
+						end
+					end
+				otherwise
+					error('constructor not supported');
+			end
+		end % }}}
+		function self = extrude(self,md) % {{{
+		end % }}}
+		function self = setdefaultparameters(self) % {{{
+
+			self.basin_id             = NaN;
+			num_basins           = 0;
+			
+			%Default sigma max
+			self.stress_threshold_groundedice = 1e6;
+			self.stress_threshold_floatingice = 150e3;
+
+			%For now we turn this off by setting the threshold to 0
+			self.min_thickness = 0.;
+		end % }}}
+		function md = checkconsistency(self,md,solution,analyses) % {{{
+			%Early return
+			if (~strcmp(solution,'TransientSolution') | md.transient.ismovingfront==0), return; end
+
+			md = checkfield(md,'fieldname','calving.basin_id','Inf',1,'>=',0,'<=',md.frontalforcings.num_basins,'size',[md.mesh.numberofelements 1]);
+			md = checkfield(md,'fieldname','frontalforcings.num_basins','numel',1,'NaN',1,'Inf',1,'>',0);
+			md = checkfield(md,'fieldname','calving.stress_threshold_groundedice','>',0,'NaN',1,'Inf',1,'size',[md.calving.num_basins 1]);
+			md = checkfield(md,'fieldname','calving.stress_threshold_floatingice','>',0,'NaN',1,'Inf',1,'size',[md.calving.num_basins 1]);
+			%md = checkfield(md,'fieldname','calving.stress_threshold_groundedice','>',0,'NaN',1,'Inf',1,'size',[1 1]);
+			%md = checkfield(md,'fieldname','calving.stress_threshold_floatingice','>',0,'NaN',1,'Inf',1,'size',[1 1]);
+			md = checkfield(md,'fieldname','calving.min_thickness','>=',0,'NaN',1,'Inf',1,'numel',1);
+		end % }}}
+		function disp(self) % {{{
+			disp(sprintf('   Calving VonMises (AD) parameters:'));
+			fielddisplay(self,'basin_id','basin ID for elements');
+			fielddisplay(self,'num_basins', 'number of basins');
+			fielddisplay(self,'stress_threshold_groundedice','sigma_max applied to grounded ice only [Pa]');
+			fielddisplay(self,'stress_threshold_floatingice','sigma_max applied to floating ice only [Pa]');
+			fielddisplay(self,'min_thickness','minimum thickness below which no ice is allowed [m]');
+
+		end % }}}
+		function marshall(self,prefix,md,fid) % {{{
+			yts=md.constants.yts;
+			WriteData(fid,prefix,'name','md.calving.law','data',11,'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','num_basins','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','basin_id','data',self.basin_id-1,'name','md.calving.basin_id','format','IntMat','mattype',2); %0-indexed
+			%WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_groundedice','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+			%WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_floatingice','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+			%WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_groundedice','format','Double');
+			%WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_floatingice','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_groundedice','format','DoubleMat');
+			WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_floatingice','format','DoubleMat');
+			WriteData(fid,prefix,'object',self,'fieldname','min_thickness','format','Double');
+		end % }}}
+	end
+end
