Index: /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h
===================================================================
--- /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h	(revision 9645)
+++ /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h	(revision 9646)
@@ -32,4 +32,5 @@
 	HydrologyQEnum,
 	HydrologyCREnum,
+	HydrologyStabilizationEnum,
 	SettingsLowmemEnum,
 	SettingsIoGatherEnum,
@@ -71,4 +72,8 @@
 	MaskVertexonfloatingiceEnum,
 	MaskVertexonwaterEnum,
+	BalancethicknessSpcthicknessEnum,
+	BalancethicknessThickeningRateEnum,
+	BalancethicknessStabilizationEnum,
+	BalancethicknessRequestedOutputsEnum,
 	/*}}}*/
 	/*Datasets {{{1*/
@@ -427,5 +432,4 @@
 	YEnum,
 	ElementsTypeEnum,
-	PrognosticDGEnum,
 	PenaltiesEnum,
 	PressureloadEnum,
@@ -438,5 +442,4 @@
 	NodeonmacayealEnum,
 	ZEnum,
-	SpcthicknessEnum,
 	PenaltyLockEnum,
 	SpcvxEnum,
@@ -447,5 +450,4 @@
 	NumCmResponsesEnum,
 	ElementconnectivityEnum,
-	ArtificialDiffusivityEnum,
 	NumlayersEnum,
 	DiagnosticRefEnum,
@@ -455,5 +457,4 @@
 	StokesreconditioningEnum,
 	LowerelementsEnum,
-	DhdtEnum,
 	IsprognosticEnum,
 	IsdiagnosticEnum,
Index: /issm/trunk/src/c/EnumDefinitions/EnumToModelField.cpp
===================================================================
--- /issm/trunk/src/c/EnumDefinitions/EnumToModelField.cpp	(revision 9645)
+++ /issm/trunk/src/c/EnumDefinitions/EnumToModelField.cpp	(revision 9646)
@@ -17,5 +17,5 @@
 		case MaterialsRheologyBEnum : return "rheology_B";
 		case MaterialsRheologyBbarEnum : return "rheology_B";
-		case DhdtEnum : return "dhdt";
+		case BalancethicknessThickeningRateEnum: return "dhdt";
 		case VxEnum : return "vx";
 		case VxObsEnum : return "vx_obs";
Index: /issm/trunk/src/c/modules/EnumToStringx/EnumToStringx.cpp
===================================================================
--- /issm/trunk/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 9645)
+++ /issm/trunk/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 9646)
@@ -36,4 +36,5 @@
 		case HydrologyQEnum : return "HydrologyQ";
 		case HydrologyCREnum : return "HydrologyCR";
+		case HydrologyStabilizationEnum : return "HydrologyStabilization";
 		case SettingsLowmemEnum : return "SettingsLowmem";
 		case SettingsIoGatherEnum : return "SettingsIoGather";
@@ -75,4 +76,8 @@
 		case MaskVertexonfloatingiceEnum : return "MaskVertexonfloatingice";
 		case MaskVertexonwaterEnum : return "MaskVertexonwater";
+		case BalancethicknessSpcthicknessEnum : return "BalancethicknessSpcthickness";
+		case BalancethicknessThickeningRateEnum : return "BalancethicknessThickeningRate";
+		case BalancethicknessStabilizationEnum : return "BalancethicknessStabilization";
+		case BalancethicknessRequestedOutputsEnum : return "BalancethicknessRequestedOutputs";
 		case ConstraintsEnum : return "Constraints";
 		case ElementsEnum : return "Elements";
@@ -371,5 +376,4 @@
 		case YEnum : return "Y";
 		case ElementsTypeEnum : return "ElementsType";
-		case PrognosticDGEnum : return "PrognosticDG";
 		case PenaltiesEnum : return "Penalties";
 		case PressureloadEnum : return "Pressureload";
@@ -382,5 +386,4 @@
 		case NodeonmacayealEnum : return "Nodeonmacayeal";
 		case ZEnum : return "Z";
-		case SpcthicknessEnum : return "Spcthickness";
 		case PenaltyLockEnum : return "PenaltyLock";
 		case SpcvxEnum : return "Spcvx";
@@ -391,5 +394,4 @@
 		case NumCmResponsesEnum : return "NumCmResponses";
 		case ElementconnectivityEnum : return "Elementconnectivity";
-		case ArtificialDiffusivityEnum : return "ArtificialDiffusivity";
 		case NumlayersEnum : return "Numlayers";
 		case DiagnosticRefEnum : return "DiagnosticRef";
@@ -399,5 +401,4 @@
 		case StokesreconditioningEnum : return "Stokesreconditioning";
 		case LowerelementsEnum : return "Lowerelements";
-		case DhdtEnum : return "Dhdt";
 		case IsprognosticEnum : return "Isprognostic";
 		case IsdiagnosticEnum : return "Isdiagnostic";
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp	(revision 9645)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp	(revision 9646)
@@ -10,8 +10,8 @@
 void	CreateConstraintsBalancethickness(Constraints** pconstraints, IoModel* iomodel){
 
-	int    prognostic_DG;	
+	int    stabilization;	
 	
 	/*Fetch parameters: */
-	iomodel->Constant(&prognostic_DG,PrognosticDGEnum);
+	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
 
 	/*Output*/
@@ -25,6 +25,6 @@
 
 	/*Do not add constraints in DG*/
-	if(!prognostic_DG){
-		IoModelToConstraintsx(constraints,iomodel,SpcthicknessEnum,BalancethicknessAnalysisEnum);
+	if(!stabilization==3){
+		IoModelToConstraintsx(constraints,iomodel,BalancethicknessSpcthicknessEnum,BalancethicknessAnalysisEnum);
 	}
 
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 9645)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 9646)
@@ -16,9 +16,9 @@
 	int i;
 	int element;
-	int prognostic_DG;
+	int stabilization;
 	int numberofedges;
 
 	/*Fetch parameters: */
-	iomodel->Constant(&prognostic_DG,PrognosticDGEnum);
+	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
 	iomodel->Constant(&numberofedges,NumberOfEdgesEnum);
 
@@ -33,5 +33,5 @@
 	
 	/*Loads only in DG*/
-	if (prognostic_DG){
+	if (stabilization==3){
 
 		/*Get edges and elements*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 9645)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 9646)
@@ -24,5 +24,5 @@
 	int    numberofelements;
 	int    numberofvertices;
-	int    prognostic_DG;
+	int    stabilization;
 
 	/*DataSets: */
@@ -33,5 +33,5 @@
 	iomodel->Constant(&numberofelements,NumberOfElementsEnum);
 	iomodel->Constant(&numberofvertices,NumberOfVerticesEnum);
-	iomodel->Constant(&prognostic_DG,PrognosticDGEnum);
+	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
 
 	/*Recover pointer: */
@@ -42,9 +42,9 @@
 
 	/*Continuous Galerkin partition of nodes: */
-	if(prognostic_DG) continuous_galerkin=false;
+	if(stabilization==3) continuous_galerkin=false;
 	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
 
 	/*Check in 3d*/
-	if(prognostic_DG && dim==3) _error_("DG 3d not implemented yet");
+	if(stabilization==3 && dim==3) _error_("DG 3d not implemented yet");
 
 	/*First fetch data: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 9645)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 9646)
@@ -45,5 +45,5 @@
 	iomodel->FetchDataToInput(elements,SurfaceforcingsAblationRateEnum);
 	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
-	iomodel->FetchDataToInput(elements,DhdtEnum);
+	iomodel->FetchDataToInput(elements,BalancethicknessThickeningRateEnum);
 
 	if (dim==3){
Index: /issm/trunk/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 9645)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 9646)
@@ -43,5 +43,5 @@
 	for(i=0;i<num_control_type;i++){
 		switch((int)iomodel->Data(ControlTypeEnum)[i]){
-			case DhdtEnum: iomodel->FetchData(1,DhdtEnum); break;
+			case BalancethicknessThickeningRateEnum: iomodel->FetchData(1,BalancethicknessThickeningRateEnum); break;
 			case VxEnum:   iomodel->FetchData(1,VxEnum); break;
 			case VyEnum:   iomodel->FetchData(1,VyEnum); break;
@@ -66,4 +66,4 @@
 	
 	/*Free data: */
-	iomodel->DeleteData(1+4+5,ElementsEnum,ControlTypeEnum,WeightsEnum,CmMinEnum,CmMaxEnum,DhdtEnum,VxEnum,VyEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum);
+	iomodel->DeleteData(1+4+5,ElementsEnum,ControlTypeEnum,WeightsEnum,CmMinEnum,CmMaxEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum);
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 9645)
+++ /issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 9646)
@@ -47,5 +47,6 @@
 	parameters->AddObject(iomodel->CopyConstantObject(ConnectivityEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(ConstantsReferencetemperatureEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(ArtificialDiffusivityEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(BalancethicknessStabilizationEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(HydrologyStabilizationEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(GroundinglineMeltingRateEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(ThermalMaxiterEnum));
Index: /issm/trunk/src/c/modules/StringToEnumx/StringToEnumx.cpp
===================================================================
--- /issm/trunk/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 9645)
+++ /issm/trunk/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 9646)
@@ -34,4 +34,5 @@
 	else if (strcmp(name,"HydrologyQ")==0) return HydrologyQEnum;
 	else if (strcmp(name,"HydrologyCR")==0) return HydrologyCREnum;
+	else if (strcmp(name,"HydrologyStabilization")==0) return HydrologyStabilizationEnum;
 	else if (strcmp(name,"SettingsLowmem")==0) return SettingsLowmemEnum;
 	else if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum;
@@ -73,4 +74,8 @@
 	else if (strcmp(name,"MaskVertexonfloatingice")==0) return MaskVertexonfloatingiceEnum;
 	else if (strcmp(name,"MaskVertexonwater")==0) return MaskVertexonwaterEnum;
+	else if (strcmp(name,"BalancethicknessSpcthickness")==0) return BalancethicknessSpcthicknessEnum;
+	else if (strcmp(name,"BalancethicknessThickeningRate")==0) return BalancethicknessThickeningRateEnum;
+	else if (strcmp(name,"BalancethicknessStabilization")==0) return BalancethicknessStabilizationEnum;
+	else if (strcmp(name,"BalancethicknessRequestedOutputs")==0) return BalancethicknessRequestedOutputsEnum;
 	else if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
 	else if (strcmp(name,"Elements")==0) return ElementsEnum;
@@ -369,5 +374,4 @@
 	else if (strcmp(name,"Y")==0) return YEnum;
 	else if (strcmp(name,"ElementsType")==0) return ElementsTypeEnum;
-	else if (strcmp(name,"PrognosticDG")==0) return PrognosticDGEnum;
 	else if (strcmp(name,"Penalties")==0) return PenaltiesEnum;
 	else if (strcmp(name,"Pressureload")==0) return PressureloadEnum;
@@ -380,5 +384,4 @@
 	else if (strcmp(name,"Nodeonmacayeal")==0) return NodeonmacayealEnum;
 	else if (strcmp(name,"Z")==0) return ZEnum;
-	else if (strcmp(name,"Spcthickness")==0) return SpcthicknessEnum;
 	else if (strcmp(name,"PenaltyLock")==0) return PenaltyLockEnum;
 	else if (strcmp(name,"Spcvx")==0) return SpcvxEnum;
@@ -389,5 +392,4 @@
 	else if (strcmp(name,"NumCmResponses")==0) return NumCmResponsesEnum;
 	else if (strcmp(name,"Elementconnectivity")==0) return ElementconnectivityEnum;
-	else if (strcmp(name,"ArtificialDiffusivity")==0) return ArtificialDiffusivityEnum;
 	else if (strcmp(name,"Numlayers")==0) return NumlayersEnum;
 	else if (strcmp(name,"DiagnosticRef")==0) return DiagnosticRefEnum;
@@ -397,5 +399,4 @@
 	else if (strcmp(name,"Stokesreconditioning")==0) return StokesreconditioningEnum;
 	else if (strcmp(name,"Lowerelements")==0) return LowerelementsEnum;
-	else if (strcmp(name,"Dhdt")==0) return DhdtEnum;
 	else if (strcmp(name,"Isprognostic")==0) return IsprognosticEnum;
 	else if (strcmp(name,"Isdiagnostic")==0) return IsdiagnosticEnum;
Index: /issm/trunk/src/c/objects/Elements/Penta.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 9645)
+++ /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 9646)
@@ -5172,10 +5172,10 @@
 		for(i=0;i<num_control_type;i++){
 			switch((int)iomodel->Data(ControlTypeEnum)[i]){
-				case DhdtEnum:
-					if (iomodel->Data(DhdtEnum)){
-						for(j=0;j<6;j++)nodeinputs[j]=iomodel->Data(DhdtEnum)[penta_vertex_ids[j]-1]/yts;
+				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;
-						this->inputs->AddInput(new ControlInput(DhdtEnum,PentaVertexInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+						this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,PentaVertexInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
 					break;
Index: /issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 9645)
+++ /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 9646)
@@ -870,5 +870,5 @@
 	GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
 	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
-	this->parameters->FindParam(&artdiff,ArtificialDiffusivityEnum);
+	this->parameters->FindParam(&artdiff,HydrologyStabilizationEnum);
 	Input* vx_input=inputs->GetInput(HydrologyWaterVxEnum); _assert_(vx_input);
 	Input* vy_input=inputs->GetInput(HydrologyWaterVyEnum); _assert_(vy_input);
@@ -1316,5 +1316,5 @@
 	Input* surface_mass_balance_input=inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(surface_mass_balance_input);
 	Input* basal_melting_input=inputs->GetInput(BasalforcingsMeltingRateEnum);          _assert_(basal_melting_input);
-	Input* dhdt_input=inputs->GetInput(DhdtEnum);                                       _assert_(dhdt_input);
+	Input* dhdt_input=inputs->GetInput(BalancethicknessThickeningRateEnum);                                       _assert_(dhdt_input);
 	
 	/* Start  looping on the number of gaussian points: */
@@ -1359,5 +1359,5 @@
 	Input* surface_mass_balance_input=inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(surface_mass_balance_input);
 	Input* basal_melting_input=inputs->GetInput(BasalforcingsMeltingRateEnum);          _assert_(basal_melting_input);
-	Input* dhdt_input=inputs->GetInput(DhdtEnum);                                       _assert_(dhdt_input);
+	Input* dhdt_input=inputs->GetInput(BalancethicknessThickeningRateEnum);                                       _assert_(dhdt_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -2696,5 +2696,5 @@
 			GradjBMacAyeal(gradient);
 			break;
-		case DhdtEnum:
+		case BalancethicknessThickeningRateEnum:
 			GradjDhDtBalancedthickness(gradient);
 			break;
@@ -3285,10 +3285,10 @@
 		for(i=0;i<num_control_type;i++){
 			switch((int)iomodel->Data(ControlTypeEnum)[i]){
-				case DhdtEnum:
-					if (iomodel->Data(DhdtEnum)){
-						for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data(DhdtEnum)[tria_vertex_ids[j]-1]/yts;
+				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;
-						this->inputs->AddInput(new ControlInput(DhdtEnum,TriaVertexInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+						this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,TriaVertexInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
 					break;
Index: /issm/trunk/src/c/shared/Numerics/UnitConversion.cpp
===================================================================
--- /issm/trunk/src/c/shared/Numerics/UnitConversion.cpp	(revision 9645)
+++ /issm/trunk/src/c/shared/Numerics/UnitConversion.cpp	(revision 9646)
@@ -58,5 +58,5 @@
 		case VelEnum:         scale=yts;break; //m/yr
 		case VelObsEnum:      scale=yts;break; //m/yr
-		case DhdtEnum:        scale=yts;break; //m/yr
+		case BalancethicknessThickeningRateEnum:  scale=yts;break; //m/yr
 		case BasalforcingsMeltingRateEnum:        scale=yts;break; //m/yr
 		case BasalforcingsMeltingRateCorrectionEnum: scale=yts;break; //m/yr
Index: /issm/trunk/src/m/classes/balancethickness.m
===================================================================
--- /issm/trunk/src/m/classes/balancethickness.m	(revision 9646)
+++ /issm/trunk/src/m/classes/balancethickness.m	(revision 9646)
@@ -0,0 +1,43 @@
+%BALANCETHICKNESS class definition
+%
+%   Usage:
+%      balancethickness=balancethickness();
+
+classdef balancethickness
+	properties (SetAccess=public) 
+		spcthickness      = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
+		thickening_rate   = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
+		stabilization     = modelfield('default',0,'marshall',true,'format','Integer');
+		requested_outputs = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',3);
+	end
+	methods
+		function obj = balancethickness(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
+
+			%Type of stabilization used
+			obj.stabilization=1;
+
+		end % }}}
+	end
+end
Index: /issm/trunk/src/m/classes/hydrology.m
===================================================================
--- /issm/trunk/src/m/classes/hydrology.m	(revision 9645)
+++ /issm/trunk/src/m/classes/hydrology.m	(revision 9646)
@@ -12,4 +12,5 @@
 		q              = modelfield('default',0,'marshall',true,'format','Double');
 		kn             = modelfield('default',0,'marshall',true,'format','Double');
+		stabilization          = modelfield('default',0,'marshall',true,'format','Integer');
 	end
 	methods
@@ -44,4 +45,7 @@
 			obj.q=1;		 
 			obj.kn=0;
+
+			%Type of stabilization to use 0:nothing 1:artificial_diffusivity
+			obj.stabilization=1;
 		end % }}}
 	end
Index: /issm/trunk/src/m/classes/model/model.m
===================================================================
--- /issm/trunk/src/m/classes/model/model.m	(revision 9645)
+++ /issm/trunk/src/m/classes/model/model.m	(revision 9646)
@@ -30,4 +30,5 @@
 		 materials = modelfield('default',0,'marshall',true);
 		 mask = modelfield('default',0,'marshall',true);
+		 balancethickness = modelfield('default',0,'marshall',true);
 
 		 %FIXME: all other fields should belong to other classes
@@ -122,5 +123,4 @@
 		 spcvy          = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
 		 spcvz          = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
-		 spcthickness   = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
 		 diagnostic_ref = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
 
@@ -130,5 +130,4 @@
 		 vel_obs                   = modelfield('default',NaN,'marshall',false);
 
-		 dhdt                      = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
 		 thickness_obs             = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
 
@@ -143,5 +142,4 @@
 
 		 %Transient 
-		 artificial_diffusivity = modelfield('default',0,'marshall',true,'format','Integer');
 		 isprognostic = modelfield('default',0,'marshall',true,'format','Boolean');
 		 isdiagnostic = modelfield('default',0,'marshall',true,'format','Boolean');
@@ -411,4 +409,7 @@
 			 if isfield(structmd,'nodeonicesheet'), md.mask.vertexongroundedice=structmd.nodeonicesheet; end
 			 if isfield(structmd,'nodeonwater'), md.mask.vertexonwater=structmd.nodeonwater; end
+			 if isfield(structmd,'spcthickness'), md.balancethickness.spcthickness=structmd.spcthickness; end
+			 if isfield(structmd,'artificial_diffusivity'), md.balancethickness.stabilization=structmd.artificial_diffusivity; end
+			 if isfield(structmd,'dhdt'), md.balancethickness.thickening_rate=structmd.dhdt; end
 
 			 %Field changes
@@ -532,6 +533,5 @@
 			 md.materials=materials;
 			 md.mask=mask;
-
-			 %Physical parameters
+			 md.balancethickness=balancethickness;
 
 			 %Solver parameters
@@ -592,8 +592,4 @@
 			 %parameter is often used.
 			 md.min_mechanical_constraints=0;
-
-			 %the artificial diffusivity is used in prognostic to avoid
-			 %numerical wiggles of the solution.
-			 md.artificial_diffusivity=1;
 
 			 %Solution activated for transient runs. By default we do a
Index: /issm/trunk/src/m/classes/prognostic.m
===================================================================
--- /issm/trunk/src/m/classes/prognostic.m	(revision 9645)
+++ /issm/trunk/src/m/classes/prognostic.m	(revision 9646)
@@ -51,5 +51,5 @@
 
 			disp(sprintf('\n      transient:'));
-			fielddisplay(obj,'stabilization','0->no, 1->artificial_diffusivity, 3-:discontinuous Galerkin');
+			fielddisplay(obj,'stabilization','0->no, 1->artificial_diffusivity, 3->discontinuous Galerkin');
 
 			disp(sprintf('\n      boundary conditions:'));
Index: sm/trunk/src/m/enum/ArtificialDiffusivityEnum.m
===================================================================
--- /issm/trunk/src/m/enum/ArtificialDiffusivityEnum.m	(revision 9645)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=ArtificialDiffusivityEnum()
-%ARTIFICIALDIFFUSIVITYENUM - Enum of ArtificialDiffusivity
-%
-%   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=ArtificialDiffusivityEnum()
-
-macro=StringToEnum('ArtificialDiffusivity');
Index: /issm/trunk/src/m/enum/BalancethicknessRequestedOutputsEnum.m
===================================================================
--- /issm/trunk/src/m/enum/BalancethicknessRequestedOutputsEnum.m	(revision 9646)
+++ /issm/trunk/src/m/enum/BalancethicknessRequestedOutputsEnum.m	(revision 9646)
@@ -0,0 +1,11 @@
+function macro=BalancethicknessRequestedOutputsEnum()
+%BALANCETHICKNESSREQUESTEDOUTPUTSENUM - Enum of BalancethicknessRequestedOutputs
+%
+%   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=BalancethicknessRequestedOutputsEnum()
+
+macro=StringToEnum('BalancethicknessRequestedOutputs');
Index: /issm/trunk/src/m/enum/BalancethicknessSpcthicknessEnum.m
===================================================================
--- /issm/trunk/src/m/enum/BalancethicknessSpcthicknessEnum.m	(revision 9646)
+++ /issm/trunk/src/m/enum/BalancethicknessSpcthicknessEnum.m	(revision 9646)
@@ -0,0 +1,11 @@
+function macro=BalancethicknessSpcthicknessEnum()
+%BALANCETHICKNESSSPCTHICKNESSENUM - Enum of BalancethicknessSpcthickness
+%
+%   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=BalancethicknessSpcthicknessEnum()
+
+macro=StringToEnum('BalancethicknessSpcthickness');
Index: /issm/trunk/src/m/enum/BalancethicknessStabilizationEnum.m
===================================================================
--- /issm/trunk/src/m/enum/BalancethicknessStabilizationEnum.m	(revision 9646)
+++ /issm/trunk/src/m/enum/BalancethicknessStabilizationEnum.m	(revision 9646)
@@ -0,0 +1,11 @@
+function macro=BalancethicknessStabilizationEnum()
+%BALANCETHICKNESSSTABILIZATIONENUM - Enum of BalancethicknessStabilization
+%
+%   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=BalancethicknessStabilizationEnum()
+
+macro=StringToEnum('BalancethicknessStabilization');
Index: /issm/trunk/src/m/enum/BalancethicknessThickeningRateEnum.m
===================================================================
--- /issm/trunk/src/m/enum/BalancethicknessThickeningRateEnum.m	(revision 9646)
+++ /issm/trunk/src/m/enum/BalancethicknessThickeningRateEnum.m	(revision 9646)
@@ -0,0 +1,11 @@
+function macro=BalancethicknessThickeningRateEnum()
+%BALANCETHICKNESSTHICKENINGRATEENUM - Enum of BalancethicknessThickeningRate
+%
+%   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=BalancethicknessThickeningRateEnum()
+
+macro=StringToEnum('BalancethicknessThickeningRate');
Index: sm/trunk/src/m/enum/DhdtEnum.m
===================================================================
--- /issm/trunk/src/m/enum/DhdtEnum.m	(revision 9645)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=DhdtEnum()
-%DHDTENUM - Enum of Dhdt
-%
-%   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=DhdtEnum()
-
-macro=StringToEnum('Dhdt');
Index: /issm/trunk/src/m/enum/HydrologyStabilizationEnum.m
===================================================================
--- /issm/trunk/src/m/enum/HydrologyStabilizationEnum.m	(revision 9646)
+++ /issm/trunk/src/m/enum/HydrologyStabilizationEnum.m	(revision 9646)
@@ -0,0 +1,11 @@
+function macro=HydrologyStabilizationEnum()
+%HYDROLOGYSTABILIZATIONENUM - Enum of HydrologyStabilization
+%
+%   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=HydrologyStabilizationEnum()
+
+macro=StringToEnum('HydrologyStabilization');
Index: sm/trunk/src/m/enum/PrognosticDGEnum.m
===================================================================
--- /issm/trunk/src/m/enum/PrognosticDGEnum.m	(revision 9645)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=PrognosticDGEnum()
-%PROGNOSTICDGENUM - Enum of PrognosticDG
-%
-%   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=PrognosticDGEnum()
-
-macro=StringToEnum('PrognosticDG');
Index: sm/trunk/src/m/enum/SpcthicknessEnum.m
===================================================================
--- /issm/trunk/src/m/enum/SpcthicknessEnum.m	(revision 9645)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=SpcthicknessEnum()
-%SPCTHICKNESSENUM - Enum of Spcthickness
-%
-%   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=SpcthicknessEnum()
-
-macro=StringToEnum('Spcthickness');
Index: /issm/trunk/src/m/model/collapse.m
===================================================================
--- /issm/trunk/src/m/model/collapse.m	(revision 9645)
+++ /issm/trunk/src/m/model/collapse.m	(revision 9646)
@@ -32,5 +32,5 @@
 	md.surfaceforcings.mass_balance=project2d(md,md.surfaceforcings.mass_balance,md.numlayers); 
 end;
-if ~isnan(md.dhdt), md.dhdt=project2d(md,md.dhdt,md.numlayers); end;
+if ~isnan(md.balancethickness.thickening_rate), md.balancethickness.thickening_rate=project2d(md,md.balancethickness.thickening_rate,md.numlayers); end;
 
 %results
Index: /issm/trunk/src/m/model/extrude.m
===================================================================
--- /issm/trunk/src/m/model/extrude.m	(revision 9645)
+++ /issm/trunk/src/m/model/extrude.m	(revision 9646)
@@ -137,5 +137,5 @@
 md.surfaceforcings.accumulation_rate=project3d(md,'vector',md.surfaceforcings.accumulation_rate,'type','node');
 md.surfaceforcings.ablation_rate=project3d(md,'vector',md.surfaceforcings.ablation_rate,'type','node');
-md.dhdt=project3d(md,'vector',md.dhdt,'type','node');
+md.balancethickness.thickening_rate=project3d(md,'vector',md.balancethickness.thickening_rate,'type','node');
 
 %results
Index: /issm/trunk/src/m/model/ismodelselfconsistent.m
===================================================================
--- /issm/trunk/src/m/model/ismodelselfconsistent.m	(revision 9645)
+++ /issm/trunk/src/m/model/ismodelselfconsistent.m	(revision 9646)
@@ -163,7 +163,4 @@
 %}}}
 %FLAGS (0 or 1){{{1
-if ~ismember(md.artificial_diffusivity,[0 1 2]),
-	message('model not consistent: artificial_diffusivity should be a scalar (0 or 1 or 2)');
-end
 if ~ismember(md.prognostic.stabilization,[0 1 3]),
 	message('model not consistent: prognostic.stabilization should be a scalar (0 or 1 or 3)');
@@ -171,4 +168,7 @@
 if ~ismember(md.thermal.stabilization,[0 1 2]),
 	message('model not consistent: thermal.stabilization should be a scalar (0 or 1 or 2)');
+end
+if ~ismember(md.balancethickness.stabilization,[0 1 3]),
+	message('model not consistent: balancethickness.stabilization should be a scalar (0 or 1 or 3)');
 end
 if ~ismember(md.settings.lowmem,[0 1]),
@@ -245,5 +245,5 @@
 	if any(md.thickness<=0),
 		pos=find(md.thickness<=0);
-		if any(isnan(md.spcthickness(pos))),
+		if any(isnan(md.balancethickness.spcthickness(pos))),
 			message(['model not consistent: model ' md.miscellaneous.name ' has some nodes with 0 thickness']);
 		end
@@ -567,5 +567,5 @@
 			% {{{2
 			%VELOCITIES MELTING AND ACCUMULATION
-			fields={'vx','vy','basalforcings.melting_rate','dhdt'};
+			fields={'vx','vy','basalforcings.melting_rate','balancethickness.thickeningrate'};
 			checksize(md,fields,[md.numberofnodes 1]);
 			checknan(md,fields);
Index: /issm/trunk/src/m/utils/BC/SetIceSheetBC.m
===================================================================
--- /issm/trunk/src/m/utils/BC/SetIceSheetBC.m	(revision 9645)
+++ /issm/trunk/src/m/utils/BC/SetIceSheetBC.m	(revision 9646)
@@ -50,7 +50,7 @@
 	disp('      no basalforcings.melting_rate specified: values set as zero');
 end
-if isnan(md.dhdt),
-	md.dhdt=zeros(md.numberofnodes,1);
-	disp('      no dhdt specified: values set as zero');
+if isnan(md.balancethickness.thickening_rate),
+	md.balancethickness.thickening_rate=zeros(md.numberofnodes,1);
+	disp('      no balancethickness.thickening_rate specified: values set as zero');
 end
 
Index: /issm/trunk/src/m/utils/BC/SetIceShelfBC.m
===================================================================
--- /issm/trunk/src/m/utils/BC/SetIceShelfBC.m	(revision 9645)
+++ /issm/trunk/src/m/utils/BC/SetIceShelfBC.m	(revision 9646)
@@ -82,7 +82,7 @@
 	disp('      no basalforcings.melting_rate specified: values set as zero');
 end
-if isnan(md.dhdt),
-	md.dhdt=zeros(md.numberofnodes,1);
-	disp('      no dhdt specified: values set as zero');
+if isnan(md.balancethickness.thickening_rate),
+	md.balancethickness.thickening_rate=zeros(md.numberofnodes,1);
+	disp('      no balancethickness.thickening_rate specified: values set as zero');
 end
 
Index: /issm/trunk/src/m/utils/BC/SetMarineIceSheetBC.m
===================================================================
--- /issm/trunk/src/m/utils/BC/SetMarineIceSheetBC.m	(revision 9645)
+++ /issm/trunk/src/m/utils/BC/SetMarineIceSheetBC.m	(revision 9646)
@@ -93,7 +93,7 @@
 	disp('      no basalforcings.melting_rate specified: values set as zero');
 end
-if isnan(md.dhdt),
-	md.dhdt=zeros(md.numberofnodes,1);
-	disp('      no dhdt specified: values set as zero');
+if isnan(md.balancethickness.thickening_rate),
+	md.balancethickness.thickening_rate=zeros(md.numberofnodes,1);
+	disp('      no balancethickness.thickening_rate specified: values set as zero');
 end
 
