Index: /issm/trunk-jpl/externalpackages/matlab/install.sh
===================================================================
--- /issm/trunk-jpl/externalpackages/matlab/install.sh	(revision 12772)
+++ /issm/trunk-jpl/externalpackages/matlab/install.sh	(revision 12773)
@@ -5,5 +5,5 @@
 
 #Select or create a new simlink
-ln -s /usr/local/pkgs/matlab-7.6/ install
+#ln -s /usr/local/pkgs/matlab-7.6/ install
 #ln -s /discover/vis/mathworks/matlab_r2011b/ install
 #ln -s /usr/local/matlab704/ install
@@ -16,3 +16,4 @@
 #ln -s /Applications/MATLAB_R2010a.app/ install
 #ln -s /Applications/MATLAB_R2012a.app/ install
+ln -s /Applications/MATLAB_R2011a.app/ install
 #ln -s /Applications/MATLAB*.app/ install
Index: /issm/trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim
===================================================================
--- /issm/trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 12772)
+++ /issm/trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 12773)
@@ -694,8 +694,14 @@
 syn keyword cConstant SettingsResultsAsPatchesEnum
 syn keyword cConstant SettingsWaitonlockEnum
-syn keyword cConstant DebugPetscProfilingEnum
-syn keyword cConstant PetscProfilingCurrentMemEnum
-syn keyword cConstant PetscProfilingCurrentFlopsEnum
-syn keyword cConstant PetscProfilingSolutionTimeEnum
+syn keyword cConstant SurfaceforcingsDelta18oEnum
+syn keyword cConstant SurfaceforcingsDelta18oTemperaturesPresentdayEnum
+syn keyword cConstant SurfaceforcingsDelta18oTemperaturesLgmEnum
+syn keyword cConstant SurfaceforcingsDelta18oSurfaceEnum
+syn keyword cConstant SurfaceforcingsIsdelta18oEnum
+syn keyword cConstant SurfaceforcingsPrecipitationsPresentdayEnum
+syn keyword cConstant DebugProfilingEnum
+syn keyword cConstant ProfilingCurrentMemEnum
+syn keyword cConstant ProfilingCurrentFlopsEnum
+syn keyword cConstant ProfilingSolutionTimeEnum
 syn keyword cConstant MaxIterationConvergenceFlagEnum
 syn keyword cConstant SteadystateMaxiterEnum
@@ -797,4 +803,5 @@
 syn keyword cConstant IntParamEnum
 syn keyword cConstant IntVecParamEnum
+syn keyword cConstant TransientParamEnum
 syn keyword cConstant MacAyeal2dIceFrontEnum
 syn keyword cConstant MacAyeal3dIceFrontEnum
@@ -916,4 +923,5 @@
 syn keyword cConstant StressTensorzzEnum
 syn keyword cConstant IceVolumeEnum
+syn keyword cConstant TotalSmbEnum
 syn keyword cConstant P0Enum
 syn keyword cConstant P1Enum
Index: /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 12772)
+++ /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 12773)
@@ -402,4 +402,5 @@
 	StressTensorzzEnum,
 	IceVolumeEnum,
+	TotalSmbEnum,
 	/*}}}*/
 	/*Element Interpolations{{{1*/
Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 12772)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 12773)
@@ -528,4 +528,6 @@
 					     ./modules/MinVzx/MinVzx.h\
 					     ./modules/MinVzx/MinVzx.cpp\
+					     ./modules/TotalSmbx/TotalSmbx.h\
+					     ./modules/TotalSmbx/TotalSmbx.cpp\
 					     ./modules/IceVolumex/IceVolumex.h\
 					     ./modules/IceVolumex/IceVolumex.cpp\
Index: /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 12772)
+++ /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 12773)
@@ -393,4 +393,5 @@
 		case StressTensorzzEnum : return "StressTensorzz";
 		case IceVolumeEnum : return "IceVolume";
+		case TotalSmbEnum : return "TotalSmb";
 		case P0Enum : return "P0";
 		case P1Enum : return "P1";
Index: /issm/trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.cpp	(revision 12772)
+++ /issm/trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.cpp	(revision 12773)
@@ -32,4 +32,8 @@
 					results->AddObject(new DoubleExternalResult(results->Size()+1,IceVolumeEnum,output_value,step,time));
 					break;
+				case TotalSmbEnum:
+					Responsex(&output_value,elements,nodes,vertices,loads,materials,parameters,"TotalSmb",false,0);
+					results->AddObject(new DoubleExternalResult(results->Size()+1,TotalSmbEnum,output_value,step,time));
+					break;
 				default:
 					/*create this output in the element inputs, and then transfer to results:*/
Index: /issm/trunk-jpl/src/c/modules/Responsex/Responsex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/Responsex/Responsex.cpp	(revision 12772)
+++ /issm/trunk-jpl/src/c/modules/Responsex/Responsex.cpp	(revision 12773)
@@ -41,4 +41,5 @@
 		case ThicknessAbsMisfitEnum:     ThicknessAbsMisfitx(      responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
 		case ThicknessAbsGradientEnum:   ThicknessAbsGradientx(    responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+		case TotalSmbEnum:					TotalSmbx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
 		case RheologyBbarAbsGradientEnum:RheologyBbarAbsGradientx( responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
 		case DragCoefficientAbsGradientEnum:DragCoefficientAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
Index: /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 12772)
+++ /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 12773)
@@ -403,4 +403,5 @@
 	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
 	      else if (strcmp(name,"IceVolume")==0) return IceVolumeEnum;
+	      else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
 	      else if (strcmp(name,"P0")==0) return P0Enum;
 	      else if (strcmp(name,"P1")==0) return P1Enum;
Index: /issm/trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.cpp	(revision 12773)
+++ /issm/trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.cpp	(revision 12773)
@@ -0,0 +1,30 @@
+/*!\file TotalSmbx
+ * \brief: compute total ice sheet surface mass balance 
+ */
+
+#include "./TotalSmbx.h"
+
+#include "../../shared/shared.h"
+#include "../../include/include.h"
+#include "../../toolkits/toolkits.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+
+void TotalSmbx(double* pSmb, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+
+	double local_smb = 0;
+	double total_smb;
+
+	for(int i=0;i<elements->Size();i++){
+		Element* element=(Element*)elements->GetObjectByOffset(i);
+		local_smb+=element->TotalSmb();
+	}
+	#ifdef _HAVE_MPI_
+	MPI_Reduce(&local_smb,&total_smb,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD );
+	MPI_Bcast(&total_smb,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
+	#else
+	total_smb=local_smb;
+	#endif
+
+	/*Assign output pointers: */
+	*pSmb=total_smb;
+}
Index: /issm/trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.h	(revision 12773)
+++ /issm/trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.h	(revision 12773)
@@ -0,0 +1,14 @@
+/*!\file:  TotalSmbx.h
+ * \brief header file for inverse methods misfit computation
+ */ 
+
+#ifndef _TOTALSMBX_H
+#define _TOTALSMBX_H
+
+#include "../../Container/Container.h"
+#include "../../objects/objects.h"
+
+/* local prototypes: */
+void TotalSmbx(double* pSmb, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+
+#endif
Index: /issm/trunk-jpl/src/c/modules/modules.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/modules.h	(revision 12772)
+++ /issm/trunk-jpl/src/c/modules/modules.h	(revision 12773)
@@ -37,4 +37,5 @@
 #include "./GroundinglineMigrationx/GroundinglineMigrationx.h"
 #include "./HoleFillerx/HoleFillerx.h"
+#include "./TotalSmbx/TotalSmbx.h"
 #include "./IceVolumex/IceVolumex.h"
 #include "./InputControlUpdatex/InputControlUpdatex.h"
Index: /issm/trunk-jpl/src/c/objects/Elements/Element.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/Elements/Element.h	(revision 12772)
+++ /issm/trunk-jpl/src/c/objects/Elements/Element.h	(revision 12773)
@@ -93,4 +93,5 @@
 		virtual void   ElementResponse(IssmDouble* presponse,int response_enum,bool process_units)=0;
 		virtual IssmDouble IceVolume(void)=0;
+		virtual IssmDouble TotalSmb(void)=0;
 		#endif
 
Index: /issm/trunk-jpl/src/c/objects/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/Elements/Penta.cpp	(revision 12772)
+++ /issm/trunk-jpl/src/c/objects/Elements/Penta.cpp	(revision 12773)
@@ -3235,4 +3235,36 @@
 }
 /*}}}*/
+/*FUNCTION Penta::TotalSmb {{{*/
+IssmDouble Penta::TotalSmb(void){
+
+	/*The smb[Gt yr-1] of one element is area[m2] * smb [ m ice yr^-1] * rho_ice [kg m-3] / 1e+10^12 */
+	IssmDouble base,smb,rho_ice;
+	IssmDouble Total_Smb=0;
+	IssmDouble xyz_list[NUMVERTICES][3];
+
+	/*Get material parameters :*/
+	rho_ice=matpar->GetRhoIce();
+
+	if(IsOnWater())return 0;
+
+	GetVerticesCoordinates(&xyz_list[0][0], nodes, 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]));
+
+	/*Now get the average SMB over the element*/
+	Input* smb_input = inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(smb_input);
+	smb_input->GetInputAverage(&smb);
+	Total_Smb=rho_ice*base*smb;																											// smb on element in kg s-1
+	
+	/*Process units: */
+	Total_Smb=UnitConversion(Total_Smb,IuToExtEnum,TotalSmbEnum);																// smb on element in GigaTon yr-1
+	
+	/*Return: */
+	return Total_Smb;
+}
+/*}}}*/
 #endif
 
Index: /issm/trunk-jpl/src/c/objects/Elements/Penta.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/Elements/Penta.h	(revision 12772)
+++ /issm/trunk-jpl/src/c/objects/Elements/Penta.h	(revision 12773)
@@ -123,4 +123,5 @@
 		 #ifdef _HAVE_RESPONSES_
 		IssmDouble IceVolume(void);
+		IssmDouble TotalSmb(void);
 		void   MinVel(IssmDouble* pminvel, bool process_units);
 		void   MinVx(IssmDouble* pminvx, bool process_units);
Index: /issm/trunk-jpl/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/Elements/Tria.cpp	(revision 12772)
+++ /issm/trunk-jpl/src/c/objects/Elements/Tria.cpp	(revision 12773)
@@ -2804,4 +2804,36 @@
 	}
 
+}
+/*}}}*/
+/*FUNCTION Tria::TotalSmb {{{*/
+IssmDouble Tria::TotalSmb(void){
+
+	/*The smb[kg yr-1] of one element is area[m2] * smb [kg m^-2 yr^-1]*/
+	IssmDouble base,smb,rho_ice;
+	IssmDouble Total_Smb=0;
+	IssmDouble xyz_list[NUMVERTICES][3];
+
+	/*Get material parameters :*/
+	rho_ice=matpar->GetRhoIce();
+
+   if(IsOnWater())return 0;
+
+	GetVerticesCoordinates(&xyz_list[0][0], nodes, 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* smb_input = inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(smb_input);
+	smb_input->GetInputAverage(&smb);																								// average smb on element in m ice s-1
+   Total_Smb=rho_ice*base*smb;																											// smb on element in kg s-1
+	
+	/*Process units: */
+	Total_Smb=UnitConversion(Total_Smb,IuToExtEnum,TotalSmbEnum);																// smb on element in GigaTon yr-1
+	
+	/*Return: */
+	return Total_Smb;
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/objects/Elements/Tria.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/Elements/Tria.h	(revision 12772)
+++ /issm/trunk-jpl/src/c/objects/Elements/Tria.h	(revision 12773)
@@ -121,4 +121,5 @@
 		#ifdef _HAVE_RESPONSES_
 		IssmDouble IceVolume(void);
+		IssmDouble TotalSmb(void);
 		void   MinVel(IssmDouble* pminvel, bool process_units);
 		void   MinVx(IssmDouble* pminvx, bool process_units);
Index: /issm/trunk-jpl/src/c/shared/Numerics/UnitConversion.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Numerics/UnitConversion.cpp	(revision 12772)
+++ /issm/trunk-jpl/src/c/shared/Numerics/UnitConversion.cpp	(revision 12773)
@@ -74,4 +74,5 @@
 		case MisfitEnum:                             scale=pow(yts,2);break; //(m/yr)^2
 		case MassFluxEnum:                           scale=pow((IssmDouble)10,-12)*yts;break; // (GigaTon/year)
+		case TotalSmbEnum:                           scale=pow((IssmDouble)10,-12)*yts;break; // (GigaTon/year)
 		default: scale=1.0; break;
 	}
Index: /issm/trunk-jpl/src/m/enum/EnumDefinitions.py
===================================================================
--- /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 12772)
+++ /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 12773)
@@ -3767,4 +3767,14 @@
 	return StringToEnum('IceVolume')
 
+def TotalSmbEnum():
+	"""
+	TOTALSMBENUM - Enum of TotalSmb
+
+	   Usage:
+	      macro=TotalSmbEnum()
+	"""
+
+	return StringToEnum('TotalSmb')
+
 def P0Enum():
 	"""
@@ -4565,4 +4575,4 @@
 	"""
 
-	return 455
-
+	return 456
+
Index: /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 12772)
+++ /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 12773)
@@ -9,3 +9,3 @@
 %      macro=MaximumNumberOfEnums()
 
-macro=455;
+macro=456;
Index: /issm/trunk-jpl/src/m/enum/TotalSmbEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/TotalSmbEnum.m	(revision 12773)
+++ /issm/trunk-jpl/src/m/enum/TotalSmbEnum.m	(revision 12773)
@@ -0,0 +1,11 @@
+function macro=TotalSmbEnum()
+%TOTALSMBENUM - Enum of TotalSmb
+%
+%   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=TotalSmbEnum()
+
+macro=StringToEnum('TotalSmb');
