Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 20211)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 20212)
@@ -3073,26 +3073,35 @@
 
 	/*The fbmb[kg yr-1] of one element is area[m2] * melting_rate [kg m^-2 yr^-1]*/
-	IssmDouble base,fbmb,rho_ice;
+	int        point1;
+	bool       mainlyfloating;
+	IssmDouble fbmb=0;
+	IssmDouble rho_ice,fraction1,fraction2,floatingmelt,Jdet;
 	IssmDouble Total_Fbmb=0;
 	IssmDouble xyz_list[NUMVERTICES][3];
+	Gauss*     gauss     = NULL;
+
+   if(!IsIceInElement())return 0;
 
 	/*Get material parameters :*/
 	rho_ice=matpar->GetMaterialParameter(MaterialsRhoIceEnum);
-
-   if(!IsIceInElement())return 0;
-
+	Input* floatingmelt_input = this->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(floatingmelt_input); 
+	Input* gllevelset_input = this->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);
 	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
 
-	/*First calculate the area of the base (cross section triangle)
-	 * http://en.wikipedia.org/wiki/Triangle
-	 * base = 1/2 abs((xA-xC)(yB-yA)-(xA-xB)(yC-yA))*/
-	base = 1./2. * fabs((xyz_list[0][0]-xyz_list[2][0])*(xyz_list[1][1]-xyz_list[0][1]) - (xyz_list[0][0]-xyz_list[1][0])*(xyz_list[2][1]-xyz_list[0][1]));	// area of element in m2
-
-	/*Now get the average SMB over the element*/
-	Input* fbmb_input = inputs->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(fbmb_input);
-	fbmb_input->GetInputAverage(&fbmb);																								// average melting rate on element in m ice s-1
-   Total_Fbmb=rho_ice*base*fbmb;																											// melting rate on element in kg s-1
+	this->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating);
+	/* Start  looping on the number of gaussian points: */
+	gauss = this->NewGauss(point1,fraction1,fraction2,1-mainlyfloating,2);
+	for(int ig=gauss->begin();ig<gauss->end();ig++){
+
+		gauss->GaussPoint(ig);
+		this->JacobianDeterminant(&Jdet,&xyz_list[0][0],gauss);
+		floatingmelt_input->GetInputValue(&floatingmelt,gauss);
+		fbmb+=floatingmelt*Jdet*gauss->weight;
+	}
+
+   Total_Fbmb=rho_ice*fbmb;	        // from volume to mass
 
 	/*Return: */
+	delete gauss;
 	return Total_Fbmb;
 }
@@ -3101,26 +3110,35 @@
 
 	/*The gbmb[kg yr-1] of one element is area[m2] * gounded melting rate [kg m^-2 yr^-1]*/
-	IssmDouble base,gbmb,rho_ice;
+	int        point1;
+	bool       mainlyfloating;
+	IssmDouble gbmb=0;
+	IssmDouble rho_ice,fraction1,fraction2,groundedmelt,Jdet;
 	IssmDouble Total_Gbmb=0;
 	IssmDouble xyz_list[NUMVERTICES][3];
+	Gauss*     gauss     = NULL;
+
+   if(!IsIceInElement())return 0;
 
 	/*Get material parameters :*/
 	rho_ice=matpar->GetMaterialParameter(MaterialsRhoIceEnum);
-
-   if(!IsIceInElement())return 0;
-
+	Input* groundedmelt_input = this->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(groundedmelt_input); 
+	Input* gllevelset_input = this->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);
 	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
 
-	/*First calculate the area of the base (cross section triangle)
-	 * http://en.wikipedia.org/wiki/Triangle
-	 * base = 1/2 abs((xA-xC)(yB-yA)-(xA-xB)(yC-yA))*/
-	base = 1./2. * fabs((xyz_list[0][0]-xyz_list[2][0])*(xyz_list[1][1]-xyz_list[0][1]) - (xyz_list[0][0]-xyz_list[1][0])*(xyz_list[2][1]-xyz_list[0][1]));	// area of element in m2
-
-	/*Now get the average grounded melting rate over the element*/
-	Input* gbmb_input = inputs->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(gbmb_input);
-	gbmb_input->GetInputAverage(&gbmb);																								// average smb on element in m ice s-1
-   Total_Gbmb=rho_ice*base*gbmb;																											// smb on element in kg s-1
+	this->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating);
+	/* Start  looping on the number of gaussian points: */
+	gauss = this->NewGauss(point1,fraction1,fraction2,mainlyfloating,2);
+	for(int ig=gauss->begin();ig<gauss->end();ig++){
+
+		gauss->GaussPoint(ig);
+		this->JacobianDeterminant(&Jdet,&xyz_list[0][0],gauss);
+		groundedmelt_input->GetInputValue(&groundedmelt,gauss);
+		gbmb+=groundedmelt*Jdet*gauss->weight;
+	}
+
+   Total_Gbmb=rho_ice*gbmb;	        // from volume to mass
 
 	/*Return: */
+	delete gauss;
 	return Total_Gbmb;
 }
Index: /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.m
===================================================================
--- /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.m	(revision 20211)
+++ /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.m	(revision 20212)
@@ -194,4 +194,8 @@
 	elseif strcmp(fieldname,'BasalforcingsFloatingiceMeltingRate'),
 		field = field*yts;
+	elseif strcmp(fieldname,'TotalFloatingBmb'),
+		field = field/10.^12*yts; %(GigaTon/year)
+	elseif strcmp(fieldname,'TotalGroundedBmb'),
+		field = field/10.^12*yts; %(GigaTon/year)
 	elseif strcmp(fieldname,'TotalSmb'),
 		field = field/10.^12*yts; %(GigaTon/year)
Index: /issm/trunk-jpl/test/NightlyRun/test208.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test208.m	(revision 20211)
+++ /issm/trunk-jpl/test/NightlyRun/test208.m	(revision 20212)
@@ -5,5 +5,6 @@
 md=setflowequation(md,'SSA','all');
 md.cluster=generic('name',oshostname(),'np',3);
-md.transient.requested_outputs={'default','GroundedArea','TotalGroundedBmb','TotalFloatingBmb'};
+md.transient.requested_outputs={'default','FloatingArea','GroundedArea','TotalGroundedBmb','TotalFloatingBmb'};
+md.basalforcings.floatingice_melting_rate(:)=1;
 md=solve(md,TransientSolutionEnum());
 
