Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 26824)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 26825)
@@ -112,4 +112,8 @@
 			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_melting_rate",BasalforcingsSpatialUpperwaterMeltingRateEnum);
 			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_elevation",BasalforcingsSpatialUpperwaterElevationEnum);
+			if(isstochastic){
+            iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum);
+            iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_melting_rate",BaselineBasalforcingsSpatialDeepwaterMeltingRateEnum);
+         }
 			break;
 		case BasalforcingsPicoEnum:
Index: /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 26824)
+++ /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 26825)
@@ -187,4 +187,8 @@
 			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_elevation",BasalforcingsSpatialUpperwaterElevationEnum);
 			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.perturbation_melting_rate",BasalforcingsPerturbationMeltingRateEnum,0.);
+			if(isstochastic){
+            iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum);
+            iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_melting_rate",BaselineBasalforcingsSpatialDeepwaterMeltingRateEnum);
+         }
 			break;
 		case BasalforcingsPicoEnum:
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 26824)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 26825)
@@ -840,4 +840,8 @@
 				iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_melting_rate",BasalforcingsSpatialUpperwaterMeltingRateEnum);
 				iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_elevation",BasalforcingsSpatialUpperwaterElevationEnum);
+				if(isstochastic){
+					iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum);
+					iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_melting_rate",BaselineBasalforcingsSpatialDeepwaterMeltingRateEnum);
+				}
 				break;
 			case BasalforcingsPicoEnum:
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 26824)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 26825)
@@ -143,4 +143,8 @@
 			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_melting_rate",BasalforcingsSpatialUpperwaterMeltingRateEnum);
 			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_elevation",BasalforcingsSpatialUpperwaterElevationEnum);
+			if(isstochastic){
+            iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum);
+            iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_melting_rate",BaselineBasalforcingsSpatialDeepwaterMeltingRateEnum);
+         }
 			break;
 		case BasalforcingsPicoEnum:
Index: /issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp	(revision 26824)
+++ /issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp	(revision 26825)
@@ -100,4 +100,25 @@
 					/*Already done above*/
 					break;
+				case BasalforcingsSpatialDeepwaterMeltingRateEnum:
+               /*Delete BasalforcingsSpatialDeepwaterMeltingRateEnum at previous time step (required if it is transient)*/
+               femmodel->inputs->DeleteInput(BasalforcingsSpatialDeepwaterMeltingRateEnum);
+               for(Object* &object:femmodel->elements->objects){
+                  Element* element = xDynamicCast<Element*>(object);
+                  int numvertices  = element->GetNumberOfVertices();
+                  IssmDouble baselinedeepwatermelt;
+                  IssmDouble deepwatermelt_tot[numvertices];
+                  Input* baselinedeepwatermelt_input  = NULL;
+                  baselinedeepwatermelt_input = element->GetInput(BaselineBasalforcingsSpatialDeepwaterMeltingRateEnum); _assert_(baselinedeepwatermelt_input);
+                  element->GetInputValue(&dimensionid,StochasticForcingDefaultIdEnum);
+                  Gauss* gauss = element->NewGauss();
+                  for(int i=0;i<numvertices;i++){
+                     gauss->GaussVertex(i);
+                     baselinedeepwatermelt_input->GetInputValue(&baselinedeepwatermelt,gauss);
+                     deepwatermelt_tot[i] = baselinedeepwatermelt+noisefield[dimensionid];
+                  }
+                  element->AddInput(BasalforcingsSpatialDeepwaterMeltingRateEnum,&deepwatermelt_tot[0],P1DGEnum);
+                  delete gauss;
+               }
+               break;
 				case DefaultCalvingEnum:
 					/*Delete CalvingCalvingrateEnum at previous time step (required if it is transient)*/
Index: /issm/trunk-jpl/src/c/shared/Enum/Enum.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 26824)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 26825)
@@ -621,4 +621,5 @@
 syn keyword cConstant BaseSlopeYEnum
 syn keyword cConstant BaselineBasalforcingsFloatingiceMeltingRateEnum
+syn keyword cConstant BaselineBasalforcingsSpatialDeepwaterMeltingRateEnum
 syn keyword cConstant BaselineCalvingCalvingrateEnum
 syn keyword cConstant BaselineFrictionEffectivePressureEnum
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 26824)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 26825)
@@ -617,4 +617,5 @@
 	BaseSlopeYEnum,
 	BaselineBasalforcingsFloatingiceMeltingRateEnum,
+	BaselineBasalforcingsSpatialDeepwaterMeltingRateEnum,
 	BaselineCalvingCalvingrateEnum,
 	BaselineFrictionEffectivePressureEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 26824)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 26825)
@@ -623,4 +623,5 @@
 		case BaseSlopeYEnum : return "BaseSlopeY";
 		case BaselineBasalforcingsFloatingiceMeltingRateEnum : return "BaselineBasalforcingsFloatingiceMeltingRate";
+		case BaselineBasalforcingsSpatialDeepwaterMeltingRateEnum : return "BaselineBasalforcingsSpatialDeepwaterMeltingRate";
 		case BaselineCalvingCalvingrateEnum : return "BaselineCalvingCalvingrate";
 		case BaselineFrictionEffectivePressureEnum : return "BaselineFrictionEffectivePressure";
Index: /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim	(revision 26824)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim	(revision 26825)
@@ -614,4 +614,5 @@
 syn keyword juliaConstC BaseSlopeYEnum
 syn keyword juliaConstC BaselineBasalforcingsFloatingiceMeltingRateEnum
+syn keyword juliaConstC BaselineBasalforcingsSpatialDeepwaterMeltingRateEnum
 syn keyword juliaConstC BaselineCalvingCalvingrateEnum
 syn keyword juliaConstC BaselineFrictionEffectivePressureEnum
Index: /issm/trunk-jpl/src/m/classes/stochasticforcing.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/stochasticforcing.m	(revision 26824)
+++ /issm/trunk-jpl/src/m/classes/stochasticforcing.m	(revision 26825)
@@ -78,4 +78,10 @@
 					end
 				end
+				if(contains(field,'BasalforcingsSpatialDeepwaterMeltingRate'))
+					mdname = structstoch.mdnames(find(strcmp(structstoch.fields,char(field))));
+					if~(isequal(class(md.basalforcings),char(mdname)))
+						error('md.basalforcings does not agree with stochasticforcing field %s', char(field));
+					end
+				end
 				if(contains(field,'WaterPressure'))
                mdname = structstoch.mdnames(find(strcmp(structstoch.fields,char(field))));
@@ -127,5 +133,5 @@
 			disp(sprintf('   stochasticforcing parameters:'));
 			fielddisplay(self,'isstochasticforcing','is stochasticity activated?');
-			fielddisplay(self,'fields','fields with stochasticity applied, ex: {''SMBautoregression''}, or {''FrontalForcingsRignotAutoregression''}');
+			fielddisplay(self,'fields','fields with stochasticity applied, ex: [{''SMBautoregression''}], or [{''SMBforcing''},{''DefaultCalving''}]');
 			fielddisplay(self,'defaultdimension','dimensionality of the noise terms (does not apply to fields with their specific dimension)');
 			fielddisplay(self,'default_id','id of each element for partitioning of the noise terms (does not apply to fields with their specific partition)');
@@ -162,5 +168,5 @@
 
 				%Scaling covariance matrix (scale column-by-column and row-by-row)
-				scaledfields = {'DefaultCalving','FloatingMeltRate','SMBautoregression','SMBforcing'}; %list of fields that need scaling *1/yts
+				scaledfields = {'BasalforcingsSpatialDeepwaterMeltingRate','DefaultCalving','FloatingMeltRate','SMBautoregression','SMBforcing'}; %list of fields that need scaling *1/yts
 				tempcovariance = self.covariance; %copy of covariance to avoid writing back in member variable
 				for i=1:num_fields
@@ -201,4 +207,5 @@
 	% supported and corresponding md names
 	structure.fields = {...
+		'BasalforcingsSpatialDeepwaterMeltingRate',...
 		'DefaultCalving',...
 		'FloatingMeltRate',...
@@ -209,4 +216,5 @@
 		};
 	structure.mdnames = {...
+		'spatiallinearbasalforcings',...
 		'calving',...
 		'basalforcings',...
Index: /issm/trunk-jpl/src/m/classes/stochasticforcing.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/stochasticforcing.py	(revision 26824)
+++ /issm/trunk-jpl/src/m/classes/stochasticforcing.py	(revision 26825)
@@ -28,5 +28,5 @@
         s = '   stochasticforcing parameters:\n'
         s += '{}\n'.format(fielddisplay(self, 'isstochasticforcing', 'is stochasticity activated?'))
-        s += '{}\n'.format(fielddisplay(self, 'fields', 'fields with stochasticity applied, ex: [\'SMBautoregression\'], or [\'FrontalForcingsRignotAutoregression\']'))
+        s += '{}\n'.format(fielddisplay(self, 'fields', 'fields with stochasticity applied, ex: [\'SMBautoregression\'], or [\'SMBforcing\',\'DefaultCalving\']'))
         s += '{}\n'.format(fielddisplay(self, 'defaultdimension', 'dimensionality of the noise terms (does not apply to fields with their specific dimension)'))
         s += '{}\n'.format(fielddisplay(self, 'default_id', 'id of each element for partitioning of the noise terms (does not apply to fields with their specific partition)'))
@@ -34,8 +34,11 @@
         s += '{}\n'.format(fielddisplay(self, 'randomflag', 'whether to apply real randomness (true) or pseudo-randomness with fixed seed (false)'))
         s += 'Available fields:\n'
+        s += '   BasalforcingsSpatialDeepwaterMeltingRate\n'
         s += '   DefaultCalving\n'
         s += '   FloatingMeltRate\n'
+        s += '   FrictionWaterPressure\n'
+        s += '   FrontalForcingsRignotAutoregression (thermal forcing)\n'
         s += '   SMBautoregression\n'
-        s += '   FrontalForcingsRignotAutoregression (thermal forcing)\n'
+        s += '   SMBforcing\n'
         return s
     #}}}
@@ -84,4 +87,8 @@
                     raise TypeError('md.calving does not agree with stochasticforcing field {}'.format(field))
             if 'BasalforcingsFloatingice' in field:
+                mdname = structstoch[field]
+                if (type(md.basalforcings).__name__ != mdname):
+                    raise TypeError('md.basalforcings does not agree with stochasticforcing field {}'.format(field))
+            if 'BasalforcingsDpatialDeepwaterMeltingRate' in field:
                 mdname = structstoch[field]
                 if (type(md.basalforcings).__name__ != mdname):
@@ -148,5 +155,5 @@
 
             # Scaling covariance matrix (scale column-by-column and row-by-row)
-            scaledfields = ['DefaultCalving', 'FloatingMeltRate', 'SMBautoregression', 'SMBforcing']  # list of fields that need scaling * 1/yts
+            scaledfields = ['BasalforcingsSpatialDeepwaterMeltingRate','DefaultCalving', 'FloatingMeltRate', 'SMBautoregression', 'SMBforcing']  # list of fields that need scaling * 1/yts
             tempcovariance = np.copy(self.covariance)
             for i in range(num_fields):
@@ -184,5 +191,6 @@
            supported and corresponding md names
         """
-        structure = {'DefaultCalving': 'calving',
+        structure = {'BasalforcingsSpatialDeepwaterMeltingRate': 'spatiallinearbasalforcings',
+                     'DefaultCalving': 'calving',
                      'FloatingMeltRate': 'basalforcings',
                      'FrictionWaterPressure': 'friction',
