Index: /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h
===================================================================
--- /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h	(revision 9606)
+++ /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h	(revision 9607)
@@ -11,4 +11,12 @@
 
 enum definitions{
+	/*model fields {{{1*/
+	ConstantsGEnum,
+	ConstantsReferencetemperatureEnum,
+	ConstantsYtsEnum,
+	SurfaceforcingsAccumulationRateEnum,
+	SurfaceforcingsAblationRateEnum,
+	SurfaceforcingsMassBalanceEnum,
+	/*}}}*/
 	/*Datasets {{{1*/
 	ConstraintsEnum,
@@ -213,9 +221,6 @@
 	ShelfDampeningEnum,
 	StabilizeConstraintsEnum,
-	SurfaceAccumulationRateEnum,
-	SurfaceAblationRateEnum,
 	SurfaceAreaEnum,
 	SurfaceEnum,
-	SurfaceMassBalanceEnum,
 	SurfaceSlopeXEnum,
 	SurfaceSlopeYEnum,
@@ -363,5 +368,4 @@
 	SsetEnum,
 	GroundinglineMigrationEnum,
-	ConstantsYtsEnum,
 	/*}}}*/
 	/*Interpolation {{{1*/
@@ -412,5 +416,4 @@
 	VerticesTypeEnum,
 	HydroKnEnum,
-	ConstantsGEnum,
 	SpcvzEnum,
 	NumberOfNodes2DEnum,
@@ -446,5 +449,4 @@
 	ThermalconductivityEnum,
 	MeltingpointEnum,
-	ConstantsReferencetemperatureEnum,
 	DhdtEnum,
 	GeothermalfluxEnum,
Index: /issm/trunk/src/c/EnumDefinitions/EnumToModelField.cpp
===================================================================
--- /issm/trunk/src/c/EnumDefinitions/EnumToModelField.cpp	(revision 9606)
+++ /issm/trunk/src/c/EnumDefinitions/EnumToModelField.cpp	(revision 9607)
@@ -23,7 +23,7 @@
 		case VyObsEnum : return "vy_obs";
 		case BasalMeltingRateEnum : return "basal_melting_rate";
-      case SurfaceAccumulationRateEnum : return "surface_accumulation_rate";
-		case SurfaceAblationRateEnum : return "surface_ablation_rate";
-		case SurfaceMassBalanceEnum : return "surface_mass_balance";
+      case SurfaceforcingsAccumulationRateEnum : return "surface_accumulation_rate";
+		case SurfaceforcingsAblationRateEnum : return "surface_ablation_rate";
+		case SurfaceforcingsMassBalanceEnum : return "surface_mass_balance";
 		default : _error_("No model field is associated to enum %s",EnumToStringx(en));
 	}
Index: /issm/trunk/src/c/modules/EnumToStringx/EnumToStringx.cpp
===================================================================
--- /issm/trunk/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 9606)
+++ /issm/trunk/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 9607)
@@ -16,4 +16,10 @@
 	switch(en){
 
+		case ConstantsGEnum : return "ConstantsG";
+		case ConstantsReferencetemperatureEnum : return "ConstantsReferencetemperature";
+		case ConstantsYtsEnum : return "ConstantsYts";
+		case SurfaceforcingsAccumulationRateEnum : return "SurfaceforcingsAccumulationRate";
+		case SurfaceforcingsAblationRateEnum : return "SurfaceforcingsAblationRate";
+		case SurfaceforcingsMassBalanceEnum : return "SurfaceforcingsMassBalance";
 		case ConstraintsEnum : return "Constraints";
 		case ElementsEnum : return "Elements";
@@ -182,9 +188,6 @@
 		case ShelfDampeningEnum : return "ShelfDampening";
 		case StabilizeConstraintsEnum : return "StabilizeConstraints";
-		case SurfaceAccumulationRateEnum : return "SurfaceAccumulationRate";
-		case SurfaceAblationRateEnum : return "SurfaceAblationRate";
 		case SurfaceAreaEnum : return "SurfaceArea";
 		case SurfaceEnum : return "Surface";
-		case SurfaceMassBalanceEnum : return "SurfaceMassBalance";
 		case SurfaceSlopeXEnum : return "SurfaceSlopeX";
 		case SurfaceSlopeYEnum : return "SurfaceSlopeY";
@@ -314,5 +317,4 @@
 		case SsetEnum : return "Sset";
 		case GroundinglineMigrationEnum : return "GroundinglineMigration";
-		case ConstantsYtsEnum : return "ConstantsYts";
 		case TriangleInterpEnum : return "TriangleInterp";
 		case BilinearInterpEnum : return "BilinearInterp";
@@ -355,5 +357,4 @@
 		case VerticesTypeEnum : return "VerticesType";
 		case HydroKnEnum : return "HydroKn";
-		case ConstantsGEnum : return "ConstantsG";
 		case SpcvzEnum : return "Spcvz";
 		case NumberOfNodes2DEnum : return "NumberOfNodes2D";
@@ -389,5 +390,4 @@
 		case ThermalconductivityEnum : return "Thermalconductivity";
 		case MeltingpointEnum : return "Meltingpoint";
-		case ConstantsReferencetemperatureEnum : return "ConstantsReferencetemperature";
 		case DhdtEnum : return "Dhdt";
 		case GeothermalfluxEnum : return "Geothermalflux";
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 9606)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 9607)
@@ -42,7 +42,7 @@
 	iomodel->FetchDataToInput(elements,VyEnum);
 	iomodel->FetchDataToInput(elements,BasalMeltingRateEnum);
-	iomodel->FetchDataToInput(elements,SurfaceAccumulationRateEnum);
-	iomodel->FetchDataToInput(elements,SurfaceAblationRateEnum);
-	iomodel->FetchDataToInput(elements,SurfaceMassBalanceEnum);
+	iomodel->FetchDataToInput(elements,SurfaceforcingsAccumulationRateEnum);
+	iomodel->FetchDataToInput(elements,SurfaceforcingsAblationRateEnum);
+	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
 	iomodel->FetchDataToInput(elements,DhdtEnum);
 
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 9606)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 9607)
@@ -67,7 +67,7 @@
 		iomodel->FetchDataToInput(elements,ElementOnSurfaceEnum);
 		iomodel->FetchDataToInput(elements,VzEnum);
-		iomodel->FetchDataToInput(elements,SurfaceAccumulationRateEnum);
-		iomodel->FetchDataToInput(elements,SurfaceAblationRateEnum);
-		iomodel->FetchDataToInput(elements,SurfaceMassBalanceEnum);
+		iomodel->FetchDataToInput(elements,SurfaceforcingsAccumulationRateEnum);
+		iomodel->FetchDataToInput(elements,SurfaceforcingsAblationRateEnum);
+		iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
 		iomodel->FetchDataToInput(elements,BasalMeltingRateEnum);
 		iomodel->FetchDataToInput(elements,NodeOnStokesEnum);
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 9606)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 9607)
@@ -48,7 +48,7 @@
 	iomodel->FetchDataToInput(elements,ElementOnWaterEnum);
 	iomodel->FetchDataToInput(elements,BasalMeltingRateEnum);
-	iomodel->FetchDataToInput(elements,SurfaceAccumulationRateEnum);
-	iomodel->FetchDataToInput(elements,SurfaceAblationRateEnum);
-	iomodel->FetchDataToInput(elements,SurfaceMassBalanceEnum);
+	iomodel->FetchDataToInput(elements,SurfaceforcingsAccumulationRateEnum);
+	iomodel->FetchDataToInput(elements,SurfaceforcingsAblationRateEnum);
+	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
 	iomodel->FetchDataToInput(elements,VxEnum);
 	iomodel->FetchDataToInput(elements,VyEnum);
Index: /issm/trunk/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 9606)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 9607)
@@ -53,7 +53,7 @@
 	iomodel->FetchDataToInput(elements,RheologyBEnum);
 	iomodel->FetchDataToInput(elements,RheologyNEnum);
-	iomodel->FetchDataToInput(elements,SurfaceAccumulationRateEnum);
-	iomodel->FetchDataToInput(elements,SurfaceAblationRateEnum);
-	iomodel->FetchDataToInput(elements,SurfaceMassBalanceEnum);
+	iomodel->FetchDataToInput(elements,SurfaceforcingsAccumulationRateEnum);
+	iomodel->FetchDataToInput(elements,SurfaceforcingsAblationRateEnum);
+	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
 	iomodel->FetchDataToInput(elements,BasalMeltingRateEnum);
 	iomodel->FetchDataToInput(elements,PressureEnum);
Index: /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 9606)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 9607)
@@ -41,7 +41,7 @@
 	iomodel->FetchDataToInput(elements,ElementOnIceShelfEnum);
 	iomodel->FetchDataToInput(elements,ElementOnWaterEnum);
-	iomodel->FetchDataToInput(elements,SurfaceAccumulationRateEnum);
-	iomodel->FetchDataToInput(elements,SurfaceAblationRateEnum);
-	iomodel->FetchDataToInput(elements,SurfaceMassBalanceEnum);
+	iomodel->FetchDataToInput(elements,SurfaceforcingsAccumulationRateEnum);
+	iomodel->FetchDataToInput(elements,SurfaceforcingsAblationRateEnum);
+	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
 	iomodel->FetchDataToInput(elements,BasalMeltingRateEnum);
 	iomodel->FetchDataToInput(elements,BasalMeltingRateCorrectionEnum);
Index: /issm/trunk/src/c/modules/StringToEnumx/StringToEnumx.cpp
===================================================================
--- /issm/trunk/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 9606)
+++ /issm/trunk/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 9607)
@@ -14,5 +14,11 @@
 int  StringToEnumx(char* name){
 
-	if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
+	if (strcmp(name,"ConstantsG")==0) return ConstantsGEnum;
+	else if (strcmp(name,"ConstantsReferencetemperature")==0) return ConstantsReferencetemperatureEnum;
+	else if (strcmp(name,"ConstantsYts")==0) return ConstantsYtsEnum;
+	else if (strcmp(name,"SurfaceforcingsAccumulationRate")==0) return SurfaceforcingsAccumulationRateEnum;
+	else if (strcmp(name,"SurfaceforcingsAblationRate")==0) return SurfaceforcingsAblationRateEnum;
+	else if (strcmp(name,"SurfaceforcingsMassBalance")==0) return SurfaceforcingsMassBalanceEnum;
+	else if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
 	else if (strcmp(name,"Elements")==0) return ElementsEnum;
 	else if (strcmp(name,"Loads")==0) return LoadsEnum;
@@ -180,9 +186,6 @@
 	else if (strcmp(name,"ShelfDampening")==0) return ShelfDampeningEnum;
 	else if (strcmp(name,"StabilizeConstraints")==0) return StabilizeConstraintsEnum;
-	else if (strcmp(name,"SurfaceAccumulationRate")==0) return SurfaceAccumulationRateEnum;
-	else if (strcmp(name,"SurfaceAblationRate")==0) return SurfaceAblationRateEnum;
 	else if (strcmp(name,"SurfaceArea")==0) return SurfaceAreaEnum;
 	else if (strcmp(name,"Surface")==0) return SurfaceEnum;
-	else if (strcmp(name,"SurfaceMassBalance")==0) return SurfaceMassBalanceEnum;
 	else if (strcmp(name,"SurfaceSlopeX")==0) return SurfaceSlopeXEnum;
 	else if (strcmp(name,"SurfaceSlopeY")==0) return SurfaceSlopeYEnum;
@@ -312,5 +315,4 @@
 	else if (strcmp(name,"Sset")==0) return SsetEnum;
 	else if (strcmp(name,"GroundinglineMigration")==0) return GroundinglineMigrationEnum;
-	else if (strcmp(name,"ConstantsYts")==0) return ConstantsYtsEnum;
 	else if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum;
 	else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
@@ -353,5 +355,4 @@
 	else if (strcmp(name,"VerticesType")==0) return VerticesTypeEnum;
 	else if (strcmp(name,"HydroKn")==0) return HydroKnEnum;
-	else if (strcmp(name,"ConstantsG")==0) return ConstantsGEnum;
 	else if (strcmp(name,"Spcvz")==0) return SpcvzEnum;
 	else if (strcmp(name,"NumberOfNodes2D")==0) return NumberOfNodes2DEnum;
@@ -387,5 +388,4 @@
 	else if (strcmp(name,"Thermalconductivity")==0) return ThermalconductivityEnum;
 	else if (strcmp(name,"Meltingpoint")==0) return MeltingpointEnum;
-	else if (strcmp(name,"ConstantsReferencetemperature")==0) return ConstantsReferencetemperatureEnum;
 	else if (strcmp(name,"Dhdt")==0) return DhdtEnum;
 	else if (strcmp(name,"Geothermalflux")==0) return GeothermalfluxEnum;
Index: /issm/trunk/src/c/objects/Elements/Penta.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 9606)
+++ /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 9607)
@@ -6588,5 +6588,5 @@
 				name==SurfaceSlopeYEnum ||
 				name==BasalMeltingRateEnum ||
-				name==SurfaceMassBalanceEnum ||
+				name==SurfaceforcingsMassBalanceEnum ||
 				name==GeothermalfluxEnum ||
 				name==SurfaceAreaEnum||
Index: /issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 9606)
+++ /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 9607)
@@ -1314,7 +1314,7 @@
 	/*Retrieve all inputs and parameters*/
 	GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
-	Input* surface_mass_balance_input=inputs->GetInput(SurfaceMassBalanceEnum); _assert_(surface_mass_balance_input);
-	Input* basal_melting_input=inputs->GetInput(BasalMeltingRateEnum);           _assert_(basal_melting_input);
-	Input* dhdt_input=inputs->GetInput(DhdtEnum);                     _assert_(dhdt_input);
+	Input* surface_mass_balance_input=inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(surface_mass_balance_input);
+	Input* basal_melting_input=inputs->GetInput(BasalMeltingRateEnum);                  _assert_(basal_melting_input);
+	Input* dhdt_input=inputs->GetInput(DhdtEnum);                                       _assert_(dhdt_input);
 	
 	/* Start  looping on the number of gaussian points: */
@@ -1357,7 +1357,7 @@
 	/*Retrieve all inputs and parameters*/
 	GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
-	Input* surface_mass_balance_input=inputs->GetInput(SurfaceMassBalanceEnum); _assert_(surface_mass_balance_input);
-	Input* basal_melting_input=inputs->GetInput(BasalMeltingRateEnum);           _assert_(basal_melting_input);
-	Input* dhdt_input=inputs->GetInput(DhdtEnum);                     _assert_(dhdt_input);
+	Input* surface_mass_balance_input=inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(surface_mass_balance_input);
+	Input* basal_melting_input=inputs->GetInput(BasalMeltingRateEnum);                  _assert_(basal_melting_input);
+	Input* dhdt_input=inputs->GetInput(DhdtEnum);                                       _assert_(dhdt_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -1987,8 +1987,8 @@
 	GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
 	this->parameters->FindParam(&dt,DtEnum);
-	Input* surface_mass_balance_input=inputs->GetInput(SurfaceMassBalanceEnum); _assert_(surface_mass_balance_input);
-	Input* basal_melting_input=inputs->GetInput(BasalMeltingRateEnum);           _assert_(basal_melting_input);
+	Input* surface_mass_balance_input=inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(surface_mass_balance_input);
+	Input* basal_melting_input=inputs->GetInput(BasalMeltingRateEnum);                  _assert_(basal_melting_input);
 	Input* basal_melting_correction_input=inputs->GetInput(BasalMeltingRateCorrectionEnum);
-	Input* thickness_input=inputs->GetInput(ThicknessEnum);           _assert_(thickness_input);
+	Input* thickness_input=inputs->GetInput(ThicknessEnum);                             _assert_(thickness_input);
 
 	/*Initialize basal_melting_correction_g to 0, do not forget!:*/
@@ -2035,7 +2035,7 @@
 	this->parameters->FindParam(&dt,DtEnum);
 	GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
-	Input* surface_mass_balance_input=inputs->GetInput(SurfaceMassBalanceEnum); _assert_(surface_mass_balance_input);
-	Input* basal_melting_input=inputs->GetInput(BasalMeltingRateEnum);          _assert_(basal_melting_input);
-	Input* thickness_input=inputs->GetInput(ThicknessEnum);                     _assert_(thickness_input);
+	Input* surface_mass_balance_input=inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(surface_mass_balance_input);
+	Input* basal_melting_input=inputs->GetInput(BasalMeltingRateEnum);                  _assert_(basal_melting_input);
+	Input* thickness_input=inputs->GetInput(ThicknessEnum);                             _assert_(thickness_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -3986,5 +3986,5 @@
 				name==BasalMeltingRateEnum ||
 				name==WatercolumnEnum || 
-				name==SurfaceMassBalanceEnum ||
+				name==SurfaceforcingsMassBalanceEnum ||
 				name==SurfaceAreaEnum||
 				name==VxEnum ||
Index: /issm/trunk/src/c/shared/Numerics/UnitConversion.cpp
===================================================================
--- /issm/trunk/src/c/shared/Numerics/UnitConversion.cpp	(revision 9606)
+++ /issm/trunk/src/c/shared/Numerics/UnitConversion.cpp	(revision 9607)
@@ -61,7 +61,7 @@
 		case BasalMeltingRateEnum:        scale=yts;break; //m/yr
 		case BasalMeltingRateCorrectionEnum: scale=yts;break; //m/yr
-		case SurfaceAccumulationRateEnum: scale=yts;break; //m/yr
-		case SurfaceAblationRateEnum:     scale=yts;break; //m/yr
-		case SurfaceMassBalanceEnum:      scale=yts;break; //m/yr
+		case SurfaceforcingsAccumulationRateEnum: scale=yts;break; //m/yr
+		case SurfaceforcingsAblationRateEnum:     scale=yts;break; //m/yr
+		case SurfaceforcingsMassBalanceEnum:      scale=yts;break; //m/yr
 		case MisfitEnum:      scale=pow(yts,2);break; //(m/yr)^2
 		case MassFluxEnum:    scale=pow(10,-12)*yts;break; // (GigaTon/year)
Index: /issm/trunk/src/c/solutions/transient_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/transient_core.cpp	(revision 9606)
+++ /issm/trunk/src/c/solutions/transient_core.cpp	(revision 9607)
@@ -95,5 +95,5 @@
 			if(dim==3) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,TemperatureEnum,step,time);
 			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BasalMeltingRateEnum,step,time);
-			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceMassBalanceEnum,step,time);
+			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceforcingsMassBalanceEnum,step,time);
 			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ElementOnIceShelfEnum,step,time);
 
Index: /issm/trunk/src/m/classes/model/model.m
===================================================================
--- /issm/trunk/src/m/classes/model/model.m	(revision 9606)
+++ /issm/trunk/src/m/classes/model/model.m	(revision 9607)
@@ -15,4 +15,5 @@
 		 constants = modelfield('default',0,'marshall',true);
 		 flaim     = modelfield('default',0,'marshall',false);
+		 surfaceforcings = modelfield('default',0,'marshall',true);
 
 		 %FIXME: all other fields should belong to other classes
@@ -153,7 +154,5 @@
 		 vy_obs                    = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
 		 vel_obs                   = modelfield('default',NaN,'marshall',false);
-		 surface_accumulation_rate = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
-		 surface_ablation_rate     = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
-		 surface_mass_balance      = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
+
 		 dhdt                      = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
 		 geothermalflux            = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);
@@ -416,6 +415,6 @@
 			 if isfield(structmd,'melting'), md.basal_melting_rate=structmd.melting; end
 			 if isfield(structmd,'melting_rate'), md.basal_melting_rate=structmd.melting_rate; end
-			 if isfield(structmd,'accumulation'), md.surface_mass_balance=structmd.accumulation; end
-			 if isfield(structmd,'accumulation_rate'), md.surface_mass_balance=structmd.accumulation_rate; end
+			 if isfield(structmd,'accumulation'), md.surfaceforcings.mass_balance=structmd.accumulation; end
+			 if isfield(structmd,'accumulation_rate'), md.surfaceforcings.mass_balance=structmd.accumulation_rate; end
 			 if isfield(structmd,'numberofgrids'), md.numberofnodes=structmd.numberofgrids; end
 			 if isfield(structmd,'numberofgrids2d'), md.numberofnodes2d=structmd.numberofgrids2d; end
@@ -438,4 +437,5 @@
 			 if isfield(structmd,'yts'), md.constants.yts=structmd.yts; end
 			 if isfield(structmd,'dakota_analysis'), md.dakota_analysis=structmd.dakota_analysis; end
+			 if isfield(structmd,'surface_mass_balance'), md.surfaceforcings.mass_balance=structmd.surface_mass_balance; end
 
 			 %Field changes
@@ -544,5 +544,5 @@
 			 md.constants=constants;
 			 md.flaim=flaim;
-
+			 md.surfaceforcings=surfaceforcings;
 
 			 %Materials parameters
Index: /issm/trunk/src/m/model/collapse.m
===================================================================
--- /issm/trunk/src/m/model/collapse.m	(revision 9606)
+++ /issm/trunk/src/m/model/collapse.m	(revision 9607)
@@ -29,5 +29,7 @@
 if ~isnan(md.vy_obs), md.vy_obs=project2d(md,md.vy_obs,md.numlayers); end;
 if ~isnan(md.vel_obs), md.vel_obs=project2d(md,md.vel_obs,md.numlayers); end;
-if ~isnan(md.surface_mass_balance), md.surface_mass_balance=project2d(md,md.surface_mass_balance,md.numlayers); end;
+if ~isnan(md.surfaceforcings.mass_balance),
+	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;
 
Index: /issm/trunk/src/m/model/display/displayobservations.m
===================================================================
--- /issm/trunk/src/m/model/display/displayobservations.m	(revision 9606)
+++ /issm/trunk/src/m/model/display/displayobservations.m	(revision 9607)
@@ -17,5 +17,4 @@
 fielddisplay(md,'vy_obs_raw','raw observed velocity y component [m/a]');
 fielddisplay(md,'vel_obs_raw','raw observed magnitude [m/a]');
-fielddisplay(md,'surface_mass_balance','surface mass balance [m/a]');
 fielddisplay(md,'dhdt','surface dhdt rate [m/a]');
 fielddisplay(md,'observed_temperature','observed temperature [K]');
Index: /issm/trunk/src/m/model/extrude.m
===================================================================
--- /issm/trunk/src/m/model/extrude.m	(revision 9606)
+++ /issm/trunk/src/m/model/extrude.m	(revision 9607)
@@ -134,7 +134,7 @@
 md.vy_obs=project3d(md,'vector',md.vy_obs,'type','node');
 md.vel_obs=project3d(md,'vector',md.vel_obs,'type','node');
-md.surface_mass_balance=project3d(md,'vector',md.surface_mass_balance,'type','node');
-md.surface_accumulation_rate=project3d(md,'vector',md.surface_accumulation_rate,'type','node');
-md.surface_ablation_rate=project3d(md,'vector',md.surface_ablation_rate,'type','node');
+md.surfaceforcings.mass_balance=project3d(md,'vector',md.surfaceforcings.mass_balance,'type','node');
+md.surfaceforcings.accumulation_rate=project3d(md,'vector',md.surfaceforcings.accumulation_rate,'type','node');
+md.surfaceforcings.ablation_rate=project3d(md,'vector',md.surfaceforcings.ablation_rate,'type','node');
 md.dhdt=project3d(md,'vector',md.dhdt,'type','node');
 
Index: /issm/trunk/src/m/model/ismodelselfconsistent.m
===================================================================
--- /issm/trunk/src/m/model/ismodelselfconsistent.m	(revision 9606)
+++ /issm/trunk/src/m/model/ismodelselfconsistent.m	(revision 9607)
@@ -452,5 +452,5 @@
 
 			%FORCINGS
-			fields={'surface_mass_balance'};
+			fields={'surfaceforcings.mass_balance'};
 			checkforcing(md,fields);
 
Index: /issm/trunk/src/m/utils/BC/SetIceSheetBC.m
===================================================================
--- /issm/trunk/src/m/utils/BC/SetIceSheetBC.m	(revision 9606)
+++ /issm/trunk/src/m/utils/BC/SetIceSheetBC.m	(revision 9607)
@@ -34,15 +34,15 @@
 
 %Create zeros basal_melting_rate and surface mass balance if not specified
-if isnan(md.surface_accumulation_rate),
-	md.surface_accumulation_rate=zeros(md.numberofnodes,1);
-	disp('      no surface_accumulation_rate specified: values set as zero');
+if isnan(md.surfaceforcings.accumulation_rate),
+	md.surfaceforcings.accumulation_rate=zeros(md.numberofnodes,1);
+	disp('      no surfaceforcings.accumulation_rate specified: values set as zero');
 end
-if isnan(md.surface_ablation_rate),
-	md.surface_ablation_rate=zeros(md.numberofnodes,1);
-	disp('      no surface_ablation_rate specified: values set as zero');
+if isnan(md.surfaceforcings.ablation_rate),
+	md.surfaceforcings.ablation_rate=zeros(md.numberofnodes,1);
+	disp('      no surfaceforcings.ablation_rate specified: values set as zero');
 end
-if isnan(md.surface_mass_balance),
-	md.surface_mass_balance=zeros(md.numberofnodes,1);
-	disp('      no surface_mass_balance specified: values set as zero');
+if isnan(md.surfaceforcings.mass_balance),
+	md.surfaceforcings.mass_balance=zeros(md.numberofnodes,1);
+	disp('      no surfaceforcings.mass_balance specified: values set as zero');
 end
 if isnan(md.basal_melting_rate),
Index: /issm/trunk/src/m/utils/BC/SetIceShelfBC.m
===================================================================
--- /issm/trunk/src/m/utils/BC/SetIceShelfBC.m	(revision 9606)
+++ /issm/trunk/src/m/utils/BC/SetIceShelfBC.m	(revision 9607)
@@ -64,17 +64,17 @@
 md.pressureload=pressureload;
 
-%Create zeros basal_melting_rate, surface_ablation_rate, surface_accumulation_rate
-% and surface_mass_balance if not specified
-if isnan(md.surface_accumulation_rate),
-	md.surface_accumulation_rate=zeros(md.numberofnodes,1);
-	disp('      no surface_accumulation_rate specified: values set as zero');
+%Create zeros basal_melting_rate, surfaceforcings.ablation_rate, surfaceforcings.accumulation_rate
+% and surfaceforcings.mass_balance if not specified
+if isnan(md.surfaceforcings.accumulation_rate),
+	md.surfaceforcings.accumulation_rate=zeros(md.numberofnodes,1);
+	disp('      no surfaceforcings.accumulation_rate specified: values set as zero');
 end
-if isnan(md.surface_ablation_rate),
-	md.surface_ablation_rate=zeros(md.numberofnodes,1);
-	disp('      no surface_ablation_rate specified: values set as zero');
+if isnan(md.surfaceforcings.ablation_rate),
+	md.surfaceforcings.ablation_rate=zeros(md.numberofnodes,1);
+	disp('      no surfaceforcings.ablation_rate specified: values set as zero');
 end
-if isnan(md.surface_mass_balance),
-	md.surface_mass_balance=zeros(md.numberofnodes,1);
-	disp('      no surface_mass_balance specified: values set as zero');
+if isnan(md.surfaceforcings.mass_balance),
+	md.surfaceforcings.mass_balance=zeros(md.numberofnodes,1);
+	disp('      no surfaceforcings.mass_balance specified: values set as zero');
 end
 if isnan(md.basal_melting_rate),
Index: /issm/trunk/src/m/utils/BC/SetMarineIceSheetBC.m
===================================================================
--- /issm/trunk/src/m/utils/BC/SetMarineIceSheetBC.m	(revision 9606)
+++ /issm/trunk/src/m/utils/BC/SetMarineIceSheetBC.m	(revision 9607)
@@ -75,17 +75,17 @@
 
 
-%Create zeros basal_melting_rate, surface_ablation_rate, surface_accumulation_rate
-% and surface_mass_balance if not specified
-if isnan(md.surface_accumulation_rate),
-	md.surface_accumulation_rate=zeros(md.numberofnodes,1);
-	disp('      no surface_accumulation_rate specified: values set as zero');
+%Create zeros basal_melting_rate, surfaceforcings.ablation_rate, surfaceforcings.accumulation_rate
+% and surfaceforcings.mass_balance if not specified
+if isnan(md.surfaceforcings.accumulation_rate),
+	md.surfaceforcings.accumulation_rate=zeros(md.numberofnodes,1);
+	disp('      no surfaceforcings.accumulation_rate specified: values set as zero');
 end
-if isnan(md.surface_ablation_rate),
-	md.surface_ablation_rate=zeros(md.numberofnodes,1);
-	disp('      no surface_ablation_rate specified: values set as zero');
+if isnan(md.surfaceforcings.ablation_rate),
+	md.surfaceforcings.ablation_rate=zeros(md.numberofnodes,1);
+	disp('      no surfaceforcings.ablation_rate specified: values set as zero');
 end
-if isnan(md.surface_mass_balance),
-	md.surface_mass_balance=zeros(md.numberofnodes,1);
-	disp('      no surface_mass_balance specified: values set as zero');
+if isnan(md.surfaceforcings.mass_balance),
+	md.surfaceforcings.mass_balance=zeros(md.numberofnodes,1);
+	disp('      no surfaceforcings.mass_balance specified: values set as zero');
 end
 if isnan(md.basal_melting_rate),
Index: /issm/trunk/test/NightlyRun/test1201.m
===================================================================
--- /issm/trunk/test/NightlyRun/test1201.m	(revision 9606)
+++ /issm/trunk/test/NightlyRun/test1201.m	(revision 9607)
@@ -9,5 +9,5 @@
 	md=geography(md,'all','');
 	md=parameterize(md,'../Par/SquareEISMINT.par');
-	md.surface_mass_balance(:)=0;
+	md.surfaceforcings.mass_balance(:)=0;
 	md=setelementstype(md,'macayeal','all');
 	md.cluster=generic('name',oshostname(),'np',8);
Index: /issm/trunk/test/NightlyRun/test1501.m
===================================================================
--- /issm/trunk/test/NightlyRun/test1501.m	(revision 9606)
+++ /issm/trunk/test/NightlyRun/test1501.m	(revision 9607)
@@ -14,5 +14,5 @@
 %Solve for thinning rate -> -1 * surface mass balance
 smb= 2*ones(md.numberofnodes,1);   
-md.surface_mass_balance= smb;
+md.surfaceforcings.mass_balance= smb;
 md.basal_melting_rate= smb;
 
@@ -21,15 +21,15 @@
 for i=1:10
 	 md=solve(md,PrognosticSolutionEnum);
-	 md.surface_mass_balance= md.surface_mass_balance - (PatchToVec(md.results.PrognosticSolution.Thickness)-md.thickness);
+	 md.surfaceforcings.mass_balance= md.surfaceforcings.mass_balance - (PatchToVec(md.results.PrognosticSolution.Thickness)-md.thickness);
 end
 
 %Set up transient
-smb = md.surface_mass_balance;
+smb = md.surfaceforcings.mass_balance;
 
 tooth= [ [ones(400,1)*(smb') - 10]' [ones(400,1)*(smb')]' ];
 smb=[ [ones(399,1)*(smb')]' smb  tooth tooth];
 
-md.surface_mass_balance= smb;
-md.surface_mass_balance(end+1,:)=[1:2000];
+md.surfaceforcings.mass_balance= smb;
+md.surfaceforcings.mass_balance(end+1,:)=[1:2000];
 
 md=solve(md,TransientSolutionEnum);
Index: /issm/trunk/test/NightlyRun/test1502.m
===================================================================
--- /issm/trunk/test/NightlyRun/test1502.m	(revision 9606)
+++ /issm/trunk/test/NightlyRun/test1502.m	(revision 9607)
@@ -15,5 +15,5 @@
 %Solve for thinning rate -> -1 * surface mass balance
 smb= 2*ones(md.numberofnodes,1);   
-md.surface_mass_balance= smb;
+md.surfaceforcings.mass_balance= smb;
 md.basal_melting_rate= smb;
 
@@ -22,15 +22,15 @@
 for i=1:10
 	 md=solve(md,PrognosticSolutionEnum);
-	 md.surface_mass_balance= md.surface_mass_balance - (PatchToVec(md.results.PrognosticSolution.Thickness)-md.thickness);
+	 md.surfaceforcings.mass_balance= md.surfaceforcings.mass_balance - (PatchToVec(md.results.PrognosticSolution.Thickness)-md.thickness);
 end
 
 %Set up transient
-smb = md.surface_mass_balance;
+smb = md.surfaceforcings.mass_balance;
 
 tooth= [ [ones(400,1)*(smb') - 10]' [ones(400,1)*(smb')]' ];
 smb=[ [ones(399,1)*(smb')]' smb  tooth tooth];
 
-md.surface_mass_balance= smb;
-md.surface_mass_balance(end+1,:)=[1:2000];
+md.surfaceforcings.mass_balance= smb;
+md.surfaceforcings.mass_balance(end+1,:)=[1:2000];
 
 md=solve(md,TransientSolutionEnum);
Index: /issm/trunk/test/NightlyRun/test255.m
===================================================================
--- /issm/trunk/test/NightlyRun/test255.m	(revision 9606)
+++ /issm/trunk/test/NightlyRun/test255.m	(revision 9607)
@@ -13,6 +13,6 @@
 smb=[ smb smb*-1 ];
 
-md.surface_mass_balance= smb;
-md.surface_mass_balance(end+1,:)=[1.5 3];
+md.surfaceforcings.mass_balance= smb;
+md.surfaceforcings.mass_balance(end+1,:)=[1.5 3];
 md.isthermal=0;
 
Index: /issm/trunk/test/NightlyRun/test256.m
===================================================================
--- /issm/trunk/test/NightlyRun/test256.m	(revision 9606)
+++ /issm/trunk/test/NightlyRun/test256.m	(revision 9607)
@@ -13,6 +13,6 @@
 smb=[ smb smb*-1 ];
 
-md.surface_mass_balance= smb;
-md.surface_mass_balance(end+1,:)=[1.5 3];
+md.surfaceforcings.mass_balance= smb;
+md.surfaceforcings.mass_balance(end+1,:)=[1.5 3];
 md.isthermal=0;
 
Index: /issm/trunk/test/NightlyRun/test257.m
===================================================================
--- /issm/trunk/test/NightlyRun/test257.m	(revision 9606)
+++ /issm/trunk/test/NightlyRun/test257.m	(revision 9607)
@@ -13,6 +13,6 @@
 smb=[ smb smb*2 ];
 
-md.surface_mass_balance= smb;
-md.surface_mass_balance(end+1,:)=[1.5 3];
+md.surfaceforcings.mass_balance= smb;
+md.surfaceforcings.mass_balance(end+1,:)=[1.5 3];
 md.isthermal=0;
 
Index: /issm/trunk/test/NightlyRun/test258.m
===================================================================
--- /issm/trunk/test/NightlyRun/test258.m	(revision 9606)
+++ /issm/trunk/test/NightlyRun/test258.m	(revision 9607)
@@ -13,6 +13,6 @@
 smb=[ smb smb*2 ];
 
-md.surface_mass_balance= smb;
-md.surface_mass_balance(end+1,:)=[1.5 3];
+md.surfaceforcings.mass_balance= smb;
+md.surfaceforcings.mass_balance(end+1,:)=[1.5 3];
 md.isthermal=0;
 
Index: /issm/trunk/test/NightlyRun/test259.m
===================================================================
--- /issm/trunk/test/NightlyRun/test259.m	(revision 9606)
+++ /issm/trunk/test/NightlyRun/test259.m	(revision 9607)
@@ -14,6 +14,6 @@
 smb=[ smb smb*-1 ];
 
-md.surface_mass_balance= smb;
-md.surface_mass_balance(end+1,:)=[1.5 3];
+md.surfaceforcings.mass_balance= smb;
+md.surfaceforcings.mass_balance(end+1,:)=[1.5 3];
 md.isthermal=0;
 
Index: /issm/trunk/test/NightlyRun/test260.m
===================================================================
--- /issm/trunk/test/NightlyRun/test260.m	(revision 9606)
+++ /issm/trunk/test/NightlyRun/test260.m	(revision 9607)
@@ -14,6 +14,6 @@
 smb=[ smb smb*-1 ];
 
-md.surface_mass_balance= smb;
-md.surface_mass_balance(end+1,:)=[1.5 3];
+md.surfaceforcings.mass_balance= smb;
+md.surfaceforcings.mass_balance(end+1,:)=[1.5 3];
 md.isthermal=0;
 
Index: /issm/trunk/test/NightlyRun/test261.m
===================================================================
--- /issm/trunk/test/NightlyRun/test261.m	(revision 9606)
+++ /issm/trunk/test/NightlyRun/test261.m	(revision 9607)
@@ -14,6 +14,6 @@
 smb=[ smb smb*2 ];
 
-md.surface_mass_balance= smb;
-md.surface_mass_balance(end+1,:)=[1.5 3];
+md.surfaceforcings.mass_balance= smb;
+md.surfaceforcings.mass_balance(end+1,:)=[1.5 3];
 md.isthermal=0;
 
Index: /issm/trunk/test/NightlyRun/test262.m
===================================================================
--- /issm/trunk/test/NightlyRun/test262.m	(revision 9606)
+++ /issm/trunk/test/NightlyRun/test262.m	(revision 9607)
@@ -14,6 +14,6 @@
 smb=[ smb smb*2 ];
 
-md.surface_mass_balance= smb;
-md.surface_mass_balance(end+1,:)=[1.5 3];
+md.surfaceforcings.mass_balance= smb;
+md.surfaceforcings.mass_balance(end+1,:)=[1.5 3];
 md.isthermal=0;
 
Index: /issm/trunk/test/Par/79North.par
===================================================================
--- /issm/trunk/test/Par/79North.par	(revision 9606)
+++ /issm/trunk/test/Par/79North.par	(revision 9607)
@@ -27,5 +27,5 @@
 pos(md.elements(find(md.elementoniceshelf),:))=1;
 md.basal_melting_rate(find(pos))=10;
-md.surface_mass_balance=15*ones(md.numberofnodes,1);
+md.surfaceforcings.mass_balance=15*ones(md.numberofnodes,1);
 
 %Numerical parameters
Index: /issm/trunk/test/Par/RoundSheetEISMINT.par
===================================================================
--- /issm/trunk/test/Par/RoundSheetEISMINT.par	(revision 9606)
+++ /issm/trunk/test/Par/RoundSheetEISMINT.par	(revision 9607)
@@ -25,5 +25,5 @@
 sb=10^-2/1000; %m/yr/m
 rel=450*1000; %m
-md.surface_mass_balance=min(smb_max,sb*(rel-radius));
+md.surfaceforcings.mass_balance=min(smb_max,sb*(rel-radius));
 
 disp('      creating velocities');
Index: /issm/trunk/test/Par/RoundSheetShelf.par
===================================================================
--- /issm/trunk/test/Par/RoundSheetShelf.par	(revision 9606)
+++ /issm/trunk/test/Par/RoundSheetShelf.par	(revision 9607)
@@ -45,5 +45,5 @@
 
 %Surface mass balance and basal melting
-md.surface_mass_balance=-10*ones(md.numberofnodes,1);
+md.surfaceforcings.mass_balance=-10*ones(md.numberofnodes,1);
 md.basal_melting_rate=zeros(md.numberofnodes,1);
 pos=find(md.nodeoniceshelf);md.basal_melting_rate(pos)=10;
Index: /issm/trunk/test/Par/RoundSheetStaticEISMINT.par
===================================================================
--- /issm/trunk/test/Par/RoundSheetStaticEISMINT.par	(revision 9606)
+++ /issm/trunk/test/Par/RoundSheetStaticEISMINT.par	(revision 9607)
@@ -30,5 +30,5 @@
 sb=10^-2/1000; %m/yr/m
 rel=450*1000; %m
-md.surface_mass_balance=min(smb_max,sb*(rel-radius));
+md.surfaceforcings.mass_balance=min(smb_max,sb*(rel-radius));
 
 disp('      creating velocities');
Index: /issm/trunk/test/Par/SquareEISMINT.par
===================================================================
--- /issm/trunk/test/Par/SquareEISMINT.par	(revision 9606)
+++ /issm/trunk/test/Par/SquareEISMINT.par	(revision 9607)
@@ -24,5 +24,5 @@
 
 disp('      creating surface mass balance');
-md.surface_mass_balance=0.2*ones(md.numberofnodes,1); %0m/a
+md.surfaceforcings.mass_balance=0.2*ones(md.numberofnodes,1); %0m/a
 md.basal_melting_rate=0*ones(md.numberofnodes,1); %0m/a
 
Index: /issm/trunk/test/Par/SquareSheetShelf.par
===================================================================
--- /issm/trunk/test/Par/SquareSheetShelf.par	(revision 9606)
+++ /issm/trunk/test/Par/SquareSheetShelf.par	(revision 9607)
@@ -27,5 +27,5 @@
 
 %Accumulation and melting
-md.surface_mass_balance=10*ones(md.numberofnodes,1);
+md.surfaceforcings.mass_balance=10*ones(md.numberofnodes,1);
 md.basal_melting_rate=5*ones(md.numberofnodes,1);
 
Index: /issm/trunk/test/Par/SquareShelfConstrained.par
===================================================================
--- /issm/trunk/test/Par/SquareShelfConstrained.par	(revision 9606)
+++ /issm/trunk/test/Par/SquareShelfConstrained.par	(revision 9607)
@@ -24,5 +24,5 @@
 
 %Surface mass balance and basal melting
-md.surface_mass_balance=10*ones(md.numberofnodes,1);
+md.surfaceforcings.mass_balance=10*ones(md.numberofnodes,1);
 md.basal_melting_rate=5*ones(md.numberofnodes,1);
 
Index: /issm/trunk/test/Par/SquareThermal.par
===================================================================
--- /issm/trunk/test/Par/SquareThermal.par	(revision 9606)
+++ /issm/trunk/test/Par/SquareThermal.par	(revision 9607)
@@ -29,6 +29,6 @@
 md.rheology_n=3*ones(md.numberofelements,1);
 
-disp('      creating surface_mass_balance');
-md.surface_mass_balance=ones(md.numberofnodes,1)/md.constants.yts; %1m/a
+disp('      creating surface mass balance');
+md.surfaceforcings.mass_balance=ones(md.numberofnodes,1)/md.constants.yts; %1m/a
 md.basal_melting_rate=0*ones(md.numberofnodes,1)/md.constants.yts; %1m/a
 
