Index: /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 24043)
+++ /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 24044)
@@ -181,4 +181,5 @@
 		case BasalforcingsIsmip6Enum:{
 			iomodel->FetchDataToInput(elements,"md.basalforcings.basin_id",BasalforcingsIsmp6BasinIdEnum);
+			iomodel->FetchDataToInput(elements,"md.basalforcings.melt_anomaly",BasalforcingsIsmp6MeltAnomalyEnum,0.);
 			IssmDouble** array3d = NULL; int* Ms = NULL; int* Ns = NULL; int K;
 			iomodel->FetchData(&array3d,&Ms,&Ns,&K,"md.basalforcings.tf");
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 24043)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 24044)
@@ -2175,5 +2175,5 @@
 
 	int         basinid,num_basins,M,N;
-	IssmDouble  tf,gamma0,base,delta_t_basin,mean_tf_basin,absval;
+	IssmDouble  tf,gamma0,base,delta_t_basin,mean_tf_basin,absval,meltanomaly;
 	bool        islocal;
 	IssmDouble* delta_t = NULL;
@@ -2203,5 +2203,6 @@
 		this->parameters->FindParam(&mean_tf,&N,BasalforcingsIsmp6AverageTfEnum); _assert_(N==num_basins);
 	}
-	Input* tf_input=this->GetInput(BasalforcingsIsmp6TfShelfEnum);            _assert_(tf_input);
+	Input* tf_input = this->GetInput(BasalforcingsIsmp6TfShelfEnum);              _assert_(tf_input);
+	Input* meltanomaly_input = this->GetInput(BasalforcingsIsmp6MeltAnomalyEnum); _assert_(meltanomaly_input);
 	delta_t_basin = delta_t[basinid];
 	if(!islocal) mean_tf_basin = mean_tf[basinid];
@@ -2212,11 +2213,12 @@
 		gauss->GaussVertex(i);
 		tf_input->GetInputValue(&tf,gauss);
+		meltanomaly_input->GetInputValue(&meltanomaly,gauss);
 		if(!islocal) {
 			absval = mean_tf_basin+delta_t_basin;
 			if (absval<0) {absval = -1.*absval;}
-			basalmeltrate[i] = gamma0*pow((rhow*cp)/(rhoi*lf),2)*(tf+delta_t_basin)*absval;
+			basalmeltrate[i] = gamma0*pow((rhow*cp)/(rhoi*lf),2)*(tf+delta_t_basin)*absval + meltanomaly;
 		}
 		else{
-			basalmeltrate[i] = gamma0*pow((rhow*cp)/(rhoi*lf),2)*pow(max(tf+delta_t_basin,0.),2);
+			basalmeltrate[i] = gamma0*pow((rhow*cp)/(rhoi*lf),2)*pow(max(tf+delta_t_basin,0.),2) + meltanomaly;
 		}
 	}
Index: /issm/trunk-jpl/src/c/shared/Enum/Enum.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 24043)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 24044)
@@ -457,4 +457,5 @@
 syn keyword cConstant BasalforcingsIsmp6TfEnum
 syn keyword cConstant BasalforcingsIsmp6TfShelfEnum
+syn keyword cConstant BasalforcingsIsmp6MeltAnomalyEnum
 syn keyword cConstant BasalforcingsPicoBasinIdEnum
 syn keyword cConstant BasalforcingsPicoBoxIdEnum
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 24043)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 24044)
@@ -453,4 +453,5 @@
 	BasalforcingsIsmp6TfEnum,
 	BasalforcingsIsmp6TfShelfEnum,
+	BasalforcingsIsmp6MeltAnomalyEnum,
 	BasalforcingsPicoBasinIdEnum,
 	BasalforcingsPicoBoxIdEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 24043)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 24044)
@@ -459,4 +459,5 @@
 		case BasalforcingsIsmp6TfEnum : return "BasalforcingsIsmp6Tf";
 		case BasalforcingsIsmp6TfShelfEnum : return "BasalforcingsIsmp6TfShelf";
+		case BasalforcingsIsmp6MeltAnomalyEnum : return "BasalforcingsIsmp6MeltAnomaly";
 		case BasalforcingsPicoBasinIdEnum : return "BasalforcingsPicoBasinId";
 		case BasalforcingsPicoBoxIdEnum : return "BasalforcingsPicoBoxId";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 24043)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 24044)
@@ -468,4 +468,5 @@
 	      else if (strcmp(name,"BasalforcingsIsmp6Tf")==0) return BasalforcingsIsmp6TfEnum;
 	      else if (strcmp(name,"BasalforcingsIsmp6TfShelf")==0) return BasalforcingsIsmp6TfShelfEnum;
+	      else if (strcmp(name,"BasalforcingsIsmp6MeltAnomaly")==0) return BasalforcingsIsmp6MeltAnomalyEnum;
 	      else if (strcmp(name,"BasalforcingsPicoBasinId")==0) return BasalforcingsPicoBasinIdEnum;
 	      else if (strcmp(name,"BasalforcingsPicoBoxId")==0) return BasalforcingsPicoBoxIdEnum;
Index: /issm/trunk-jpl/src/m/classes/basalforcingsismip6.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/basalforcingsismip6.m	(revision 24043)
+++ /issm/trunk-jpl/src/m/classes/basalforcingsismip6.m	(revision 24044)
@@ -15,4 +15,5 @@
 		geothermalflux            = NaN;
 		groundedice_melting_rate  = NaN;
+		melt_anomaly              = NaN;
 	end
 	methods
@@ -24,4 +25,5 @@
 			self.geothermalflux=project3d(md,'vector',self.geothermalflux,'type','element','layer',1); %bedrock only gets geothermal flux
 			self.groundedice_melting_rate=project3d(md,'vector',self.groundedice_melting_rate,'type','node','layer',1);
+			self.melt_anomaly=project3d(md,'vector',self.melt_anomaly,'type','element','layer',1); %bedrock only gets geothermal flux
 		end % }}}
 		function self = basalforcingsismip6(varargin) % {{{
@@ -61,4 +63,7 @@
 			md = checkfield(md,'fieldname','basalforcings.geothermalflux','NaN',1,'Inf',1,'>=',0,'timeseries',1);
 			md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'timeseries',1);
+			if length(md.basalforcings.melt_anomaly)>1,
+				md = checkfield(md,'fieldname','basalforcings.melt_anomaly','NaN',1,'Inf',1,'timeseries',1);
+			end
 
 			md = checkfield(md,'fieldname','basalforcings.tf','size',[1,1,numel(md.basalforcings.tf_depths)]);
@@ -79,4 +84,5 @@
 			fielddisplay(self,'geothermalflux','geothermal heat flux (W/m^2)');
 			fielddisplay(self,'groundedice_melting_rate','basal melting rate (positive if melting) (m/yr)');
+			fielddisplay(self,'melt_anomaly','floating ice basal melt anomaly (m/yr)');
 
 		end % }}}
@@ -95,4 +101,5 @@
 			WriteData(fid,prefix,'object',self,'fieldname','geothermalflux','format','DoubleMat','name','md.basalforcings.geothermalflux','mattype',1,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts);
 			WriteData(fid,prefix,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+			WriteData(fid,prefix,'object',self,'fieldname','melt_anomaly','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
 
 		end % }}}
Index: /issm/trunk-jpl/test/NightlyRun/test472.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test472.m	(revision 24043)
+++ /issm/trunk-jpl/test/NightlyRun/test472.m	(revision 24044)
@@ -32,4 +32,9 @@
 D = cell(1,1,3); D(:,:,1)={A}; D(:,:,2)={B}; D(:,:,3)={C};
 md.basalforcings.tf = D;
+
+%Add a melt anomaly
+md.basalforcings.melt_anomaly= ones(md.mesh.numberofvertices+1,2);
+md.basalforcings.melt_anomaly(:,2)= 2;
+md.basalforcings.melt_anomaly(end,:)=[1;2];
 
 %Boundary conditions:
