Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 26639)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 26640)
@@ -88,9 +88,15 @@
 
 	/*Get what we need for ocean-induced basal melting*/
+	bool isstochastic;
 	int basalforcing_model;
 	iomodel->FindConstant(&basalforcing_model,"md.basalforcings.model");
+	iomodel->FindConstant(&isstochastic,"md.stochasticforcing.isstochasticforcing");
 	switch(basalforcing_model){
 		case FloatingMeltRateEnum:
 			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
+			if(isstochastic){
+            iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum);
+            iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BaselineBasalforcingsFloatingiceMeltingRateEnum);
+         }
 			break;
 		case LinearFloatingMeltRateEnum:
Index: /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 26639)
+++ /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 26640)
@@ -91,5 +91,5 @@
          iomodel->FetchDataToInput(inputs,elements,"md.calving.calvingrate",CalvingCalvingrateEnum);
          if(isstochastic){
-            iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum);
+				iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum);
             iomodel->FetchDataToInput(inputs,elements,"md.calving.calvingrate",BaselineCalvingCalvingrateEnum);
          }
Index: /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 26639)
+++ /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 26640)
@@ -161,9 +161,15 @@
 
 	/*Get what we need for ocean-induced basal melting*/
+	bool isstochastic;
 	int basalforcing_model;
 	iomodel->FindConstant(&basalforcing_model,"md.basalforcings.model");
+	iomodel->FindConstant(&isstochastic,"md.stochasticforcing.isstochasticforcing");
 	switch(basalforcing_model){
 		case FloatingMeltRateEnum:
 			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
+			if(isstochastic){
+            iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum);
+            iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BaselineBasalforcingsFloatingiceMeltingRateEnum);
+         }
 			break;
 		case LinearFloatingMeltRateEnum:
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 26639)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 26640)
@@ -816,9 +816,15 @@
 
 		/*Add basal forcings to compute melt rate*/
+		bool isstochastic;
 		int basalforcing_model;
 		iomodel->FindConstant(&basalforcing_model,"md.basalforcings.model");
+		iomodel->FindConstant(&isstochastic,"md.stochasticforcing.isstochasticforcing");
 		switch(basalforcing_model){
 			case FloatingMeltRateEnum:
 				iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
+				if(isstochastic){
+					iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum);
+					iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BaselineBasalforcingsFloatingiceMeltingRateEnum);
+				}
 				break;
 			case LinearFloatingMeltRateEnum:
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 26639)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 26640)
@@ -119,9 +119,15 @@
 
 	/*Add basal forcings to compute melt rate*/
+	bool isstochastic;
 	int basalforcing_model;
 	iomodel->FindConstant(&basalforcing_model,"md.basalforcings.model");
+	iomodel->FindConstant(&isstochastic,"md.stochasticforcing.isstochasticforcing");
 	switch(basalforcing_model){
 		case FloatingMeltRateEnum:
 			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
+			if(isstochastic){
+            iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum);
+            iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BaselineBasalforcingsFloatingiceMeltingRateEnum);
+         }
 			break;
 		case LinearFloatingMeltRateEnum:
Index: /issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp	(revision 26639)
+++ /issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp	(revision 26640)
@@ -9,4 +9,21 @@
 
 void StochasticForcingx(FemModel* femmodel){/*{{{*/
+
+
+	//VV testing (12Nov)
+	/*
+	IssmDouble timeVV,dtVV,starttimeVV;
+	femmodel->parameters->FindParam(&timeVV,TimeEnum);
+   femmodel->parameters->FindParam(&dtVV,TimesteppingTimeStepEnum);
+   femmodel->parameters->FindParam(&starttimeVV,TimesteppingStartTimeEnum);
+	IssmDouble valMean = 0;
+	IssmDouble valSdev = 0.5;
+	int seed;
+	//seed = reCast<int,IssmDouble>((timeVV-starttimeVV)/dtVV);
+	seed = -1;
+	IssmDouble rdmVV;
+	univariateNormal_test0(&rdmVV,valMean,valSdev,seed);
+	_printf_("VV rdmVV: "<<rdmVV<<'\n');
+	*/
 
    /*Retrieve parameters*/
@@ -103,4 +120,25 @@
 					}
 					break;
+				case FloatingMeltRateEnum:
+					/*Delete BasalforcingsFloatingiceMeltingRateEnum at previous time step (required if it is transient)*/
+					femmodel->inputs->DeleteInput(BasalforcingsFloatingiceMeltingRateEnum);
+					for(Object* &object:femmodel->elements->objects){
+						Element* element = xDynamicCast<Element*>(object);
+						int numvertices  = element->GetNumberOfVertices();
+						IssmDouble baselinefloatingicemeltrate;
+						IssmDouble floatingicemeltrate_tot[numvertices];
+						Input* baselinefloatingicemeltrate_input  = NULL;
+						baselinefloatingicemeltrate_input = element->GetInput(BaselineBasalforcingsFloatingiceMeltingRateEnum); _assert_(baselinefloatingicemeltrate_input);
+						element->GetInputValue(&dimensionid,StochasticForcingDefaultIdEnum);
+						Gauss* gauss = element->NewGauss();
+						for(int i=0;i<numvertices;i++){
+							gauss->GaussVertex(i);
+							baselinefloatingicemeltrate_input->GetInputValue(&baselinefloatingicemeltrate,gauss);
+							floatingicemeltrate_tot[i] = max(0.0,baselinefloatingicemeltrate+noisefield[dimensionid]);
+						}
+						element->AddInput(BasalforcingsFloatingiceMeltingRateEnum,&floatingicemeltrate_tot[0],P1DGEnum);
+						delete gauss;
+					}
+					break;
 				default:
 					_error_("Field "<<EnumToStringx(fields[j])<<" does not support stochasticity yet.");
Index: /issm/trunk-jpl/src/c/shared/Enum/Enum.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 26639)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 26640)
@@ -601,4 +601,5 @@
 syn keyword cConstant BaseSlopeXEnum
 syn keyword cConstant BaseSlopeYEnum
+syn keyword cConstant BaselineBasalforcingsFloatingiceMeltingRateEnum
 syn keyword cConstant BaselineCalvingCalvingrateEnum
 syn keyword cConstant BedEnum
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 26639)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 26640)
@@ -597,4 +597,5 @@
 	BaseSlopeXEnum,
 	BaseSlopeYEnum,
+	BaselineBasalforcingsFloatingiceMeltingRateEnum,
 	BaselineCalvingCalvingrateEnum,
 	BedEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 26639)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 26640)
@@ -603,4 +603,5 @@
 		case BaseSlopeXEnum : return "BaseSlopeX";
 		case BaseSlopeYEnum : return "BaseSlopeY";
+		case BaselineBasalforcingsFloatingiceMeltingRateEnum : return "BaselineBasalforcingsFloatingiceMeltingRate";
 		case BaselineCalvingCalvingrateEnum : return "BaselineCalvingCalvingrate";
 		case BedEnum : return "Bed";
Index: /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim	(revision 26639)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim	(revision 26640)
@@ -594,4 +594,5 @@
 syn keyword juliaConstC BaseSlopeXEnum
 syn keyword juliaConstC BaseSlopeYEnum
+syn keyword juliaConstC BaselineBasalforcingsFloatingiceMeltingRateEnum
 syn keyword juliaConstC BaselineCalvingCalvingrateEnum
 syn keyword juliaConstC BedEnum
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 26639)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 26640)
@@ -615,4 +615,5 @@
 	      else if (strcmp(name,"BaseSlopeX")==0) return BaseSlopeXEnum;
 	      else if (strcmp(name,"BaseSlopeY")==0) return BaseSlopeYEnum;
+	      else if (strcmp(name,"BaselineBasalforcingsFloatingiceMeltingRate")==0) return BaselineBasalforcingsFloatingiceMeltingRateEnum;
 	      else if (strcmp(name,"BaselineCalvingCalvingrate")==0) return BaselineCalvingCalvingrateEnum;
 	      else if (strcmp(name,"Bed")==0) return BedEnum;
@@ -628,9 +629,9 @@
 	      else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
 	      else if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum;
-	      else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;
          else stage=6;
    }
    if(stage==6){
-	      if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum;
+	      if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;
+	      else if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum;
 	      else if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum;
 	      else if (strcmp(name,"CalvinglevermannCoeff")==0) return CalvinglevermannCoeffEnum;
@@ -751,9 +752,9 @@
 	      else if (strcmp(name,"HydrologyReynolds")==0) return HydrologyReynoldsEnum;
 	      else if (strcmp(name,"HydrologySheetConductivity")==0) return HydrologySheetConductivityEnum;
-	      else if (strcmp(name,"HydrologySheetThickness")==0) return HydrologySheetThicknessEnum;
          else stage=7;
    }
    if(stage==7){
-	      if (strcmp(name,"HydrologySheetThicknessOld")==0) return HydrologySheetThicknessOldEnum;
+	      if (strcmp(name,"HydrologySheetThickness")==0) return HydrologySheetThicknessEnum;
+	      else if (strcmp(name,"HydrologySheetThicknessOld")==0) return HydrologySheetThicknessOldEnum;
 	      else if (strcmp(name,"HydrologyTws")==0) return HydrologyTwsEnum;
 	      else if (strcmp(name,"HydrologyTwsSpc")==0) return HydrologyTwsSpcEnum;
@@ -874,9 +875,9 @@
 	      else if (strcmp(name,"SealevelUNorthEsa")==0) return SealevelUNorthEsaEnum;
 	      else if (strcmp(name,"SealevelchangeIndices")==0) return SealevelchangeIndicesEnum;
-	      else if (strcmp(name,"SealevelchangeG")==0) return SealevelchangeGEnum;
          else stage=8;
    }
    if(stage==8){
-	      if (strcmp(name,"SealevelchangeGU")==0) return SealevelchangeGUEnum;
+	      if (strcmp(name,"SealevelchangeG")==0) return SealevelchangeGEnum;
+	      else if (strcmp(name,"SealevelchangeGU")==0) return SealevelchangeGUEnum;
 	      else if (strcmp(name,"SealevelchangeGE")==0) return SealevelchangeGEEnum;
 	      else if (strcmp(name,"SealevelchangeGN")==0) return SealevelchangeGNEnum;
@@ -997,9 +998,9 @@
 	      else if (strcmp(name,"SmbSzaValue")==0) return SmbSzaValueEnum;
 	      else if (strcmp(name,"SmbT")==0) return SmbTEnum;
-	      else if (strcmp(name,"SmbTa")==0) return SmbTaEnum;
          else stage=9;
    }
    if(stage==9){
-	      if (strcmp(name,"SmbTeValue")==0) return SmbTeValueEnum;
+	      if (strcmp(name,"SmbTa")==0) return SmbTaEnum;
+	      else if (strcmp(name,"SmbTeValue")==0) return SmbTeValueEnum;
 	      else if (strcmp(name,"SmbTemperaturesAnomaly")==0) return SmbTemperaturesAnomalyEnum;
 	      else if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum;
@@ -1120,9 +1121,9 @@
 	      else if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum;
 	      else if (strcmp(name,"Outputdefinition25")==0) return Outputdefinition25Enum;
-	      else if (strcmp(name,"Outputdefinition26")==0) return Outputdefinition26Enum;
          else stage=10;
    }
    if(stage==10){
-	      if (strcmp(name,"Outputdefinition27")==0) return Outputdefinition27Enum;
+	      if (strcmp(name,"Outputdefinition26")==0) return Outputdefinition26Enum;
+	      else if (strcmp(name,"Outputdefinition27")==0) return Outputdefinition27Enum;
 	      else if (strcmp(name,"Outputdefinition28")==0) return Outputdefinition28Enum;
 	      else if (strcmp(name,"Outputdefinition29")==0) return Outputdefinition29Enum;
@@ -1243,9 +1244,9 @@
 	      else if (strcmp(name,"CalvingVonmises")==0) return CalvingVonmisesEnum;
 	      else if (strcmp(name,"Cfdragcoeffabsgrad")==0) return CfdragcoeffabsgradEnum;
-	      else if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum;
          else stage=11;
    }
    if(stage==11){
-	      if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum;
+	      if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum;
+	      else if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum;
 	      else if (strcmp(name,"Cflevelsetmisfit")==0) return CflevelsetmisfitEnum;
 	      else if (strcmp(name,"Channel")==0) return ChannelEnum;
@@ -1366,9 +1367,9 @@
 	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
 	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
-	      else if (strcmp(name,"Inputs")==0) return InputsEnum;
          else stage=12;
    }
    if(stage==12){
-	      if (strcmp(name,"Internal")==0) return InternalEnum;
+	      if (strcmp(name,"Inputs")==0) return InputsEnum;
+	      else if (strcmp(name,"Internal")==0) return InternalEnum;
 	      else if (strcmp(name,"Intersect")==0) return IntersectEnum;
 	      else if (strcmp(name,"InversionVzObs")==0) return InversionVzObsEnum;
@@ -1489,9 +1490,9 @@
 	      else if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
 	      else if (strcmp(name,"SMBd18opdd")==0) return SMBd18opddEnum;
-	      else if (strcmp(name,"SMBforcing")==0) return SMBforcingEnum;
          else stage=13;
    }
    if(stage==13){
-	      if (strcmp(name,"SMBgcm")==0) return SMBgcmEnum;
+	      if (strcmp(name,"SMBforcing")==0) return SMBforcingEnum;
+	      else if (strcmp(name,"SMBgcm")==0) return SMBgcmEnum;
 	      else if (strcmp(name,"SMBgemb")==0) return SMBgembEnum;
 	      else if (strcmp(name,"SMBgradients")==0) return SMBgradientsEnum;
Index: /issm/trunk-jpl/src/m/classes/stochasticforcing.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/stochasticforcing.m	(revision 26639)
+++ /issm/trunk-jpl/src/m/classes/stochasticforcing.m	(revision 26640)
@@ -45,14 +45,29 @@
 			%Check that all fields agree with the corresponding md class and if any field needs the default params   
          checkdefaults = false; %need to check defaults only if one of the field does not have its own dimensionality
+			structstoch   = structstochforcing();
 			for field=self.fields
             %Checking agreement of classes
             if(contains(field,'SMB'))
-               if~(isequal(class(md.smb),char(field)))
+					mdname = structstoch.mdnames(find(strcmp(structstoch.fields,char(field))));
+					if~(isequal(class(md.smb),char(mdname)))
                   error('md.smb does not agree with stochasticforcing field %s', char(field));
                end
             end
-            if(contains(field,'frontalforcings'))
-               if~(isequal(class(md.frontalforcings),char(field)))
+            if(contains(field,'FrontalForcings'))
+					mdname = structstoch.mdnames(find(strcmp(structstoch.fields,char(field))));
+               if~(isequal(class(md.frontalforcings),char(mdname)))
                   error('md.frontalforcings does not agree with stochasticforcing field %s', char(field));
+               end
+            end
+				if(contains(field,'Calving'))
+					mdname = structstoch.mdnames(find(strcmp(structstoch.fields,char(field))));
+               if~(isequal(class(md.calving),char(mdname)))
+                  error('md.calving does not agree with stochasticforcing field %s', char(field));
+               end
+            end
+				if(contains(field,'BasalforcingsFloatingice'))
+					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
@@ -129,5 +144,5 @@
 
 				%Scaling covariance matrix (scale column-by-column and row-by-row)
-				scaledfields = {'DefaultCalving','SMBautoregression'}; %list of fields that need scaling *1/yts
+				scaledfields = {'DefaultCalving','FloatingMeltRate','SMBautoregression'}; %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
@@ -161,8 +176,25 @@
    % by the class md.stochasticforcing
 
-   list = {...
+   list = structstochforcing(); 
+	list = list.fields;
+end % }}}
+function structure = structstochforcing() % {{{
+	% Defines structure with list of fields
+	% supported and corresponding md names
+	structure.fields = {...
       'DefaultCalving',...
-		'FrontalForcingsRignotAutoregression',...
+      'FloatingMeltRate',...
+      'FrontalForcingsRignotAutoregression',...
       'SMBautoregression'
       };
+	structure.mdnames = {...
+		'calving',...
+		'basalforcings',...
+		'frontalforcingsrignotautoregression',...
+		'SMBautoregression'
+	};
 end % }}}
+
+
+
+
Index: /issm/trunk-jpl/src/m/classes/stochasticforcing.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/stochasticforcing.py	(revision 26639)
+++ /issm/trunk-jpl/src/m/classes/stochasticforcing.py	(revision 26640)
@@ -60,12 +60,22 @@
         # Check that all fields agree with the corresponding md class
         checkdefaults = False
+        structstoch   = stochasticforcing.structstochforcing()
         for field in self.fields:
             if 'SMB' in field:
-                if type(md.smb).__name__ != field:
+                mdname = structstoch['mdnames'][structstoch['fields']==field]
+                if type(md.smb).__name__ != mdname:
                     raise TypeError('md.smb does not agree with stochasticforcing field {}'.format(field))
-            if 'frontalforcings' in field:
-                if type(md.frontalforcings).__name__ != field:
+            if 'FrontalForcings' in field:
+                mdname = structstoch['mdnames'][structstoch['fields']==field]
+                if type(md.frontalforcings).__name__ != mdname:
                     raise TypeError('md.frontalforcings does not agree with stochasticforcing field {}'.format(field))
-            #Checking for specific dimensions
+            if 'Calving' in field:
+                mdname = structstoch['mdnames'][structstoch['fields']==field]
+                if type(md.calving).__name__ != mdname:
+                    raise TypeError('md.calving does not agree with stochasticforcing field {}'.format(field))
+            if 'BasalforcingsFloatingice' in field:
+                mdname = structstoch['mdnames'][structstoch['fields']==field]
+                if type(md.basalforcings).__name__ != mdname:
+                    raise TypeError('md.basalforcings does not agree with stochasticforcing field {}'.format(field))#Checking for specific dimensions
             if not (field == 'SMBautoregression' or field == 'FrontalForcingsRignotAutoregression'):
                 checkdefaults = True   #field with non-specific dimensionality
@@ -80,5 +90,5 @@
         if ('FrontalForcingsRignotAutoregression' in self.fields):
             size_tot = size_tot - self.defaultdimension + md.frontalforcings.num_basins
-            indSMBar = self.fields.index('FrontalForcingsRignotAutoregression')
+            indTFar  = self.fields.index('FrontalForcingsRignotAutoregression')
         if (indSMBar != -1 and indTFar != -1):
             covsum = self.covariance[np.sum(self.defaultdimensions[0:indSMBar]).astype(int):np.sum(self.defaultdimensions[0:indSMBar + 1]).astype(int), np.sum(self.defaultdimensions[0:indTFar]).astype(int):np.sum(self.defaultdimensions[0:indTFar + 1]).astype(int)]
@@ -87,5 +97,5 @@
 
         md = checkfield(md, 'fieldname', 'stochasticforcing.isstochasticforcing', 'values', [0, 1])
-        md = checkfield(md, 'fieldname', 'stochasticforcing.fields', 'numel', num_fields, 'cell', 1, 'values', supportedstochforcings())
+        md = checkfield(md, 'fieldname', 'stochasticforcing.fields', 'numel', num_fields, 'cell', 1, 'values', stochasticforcing.supportedstochforcings())
         #md = checkfield(md, 'fieldname', 'stochasticforcing.dimensions', 'NaN', 1, 'Inf', 1, '>', 0, 'size', [num_fields]) # specific dimension for each field; NOTE: As opposed to MATLAB implementation, pass list
         md = checkfield(md, 'fieldname', 'stochasticforcing.covariance', 'NaN', 1, 'Inf', 1, 'size', [size_tot, size_tot])  # global covariance matrix
@@ -141,11 +151,27 @@
     # }}}
 
+    def supportedstochforcings(): # {{{
+        """Defines list of fields supported by the class md.stochasticforcing
+        """
+        list1 = stochasticforcing.structstochforcing()
+        list1 = list1['fields']
+        return(list1) #}}}
 
-def supportedstochforcings():
-    """ Defines list of fields supported  by the class stochasticforcings
-    """
-    return [
-        'DefaultCalving',
-        'FrontalForcingsRignotAutoregression',
-        'SMBautoregression'
-    ]
+    def structstochforcing(): # {{{
+        """Defines dictionary with list of fields
+           supported and corresponding md names
+        """
+        structure = dict({
+                    'fields':
+                        ['DefaultCalving',
+                        'FloatingMeltRate',
+                        'FrontalForcingsRignotAutoregression',
+                        'SMBautoregression'],
+
+                    'mdnames':
+                        ['calving',
+                        'basalforcings',
+                        'frontalforcingsrignotautoregression',
+                        'SMBautoregression']})
+    return(structure) # }}}
+
Index: sm/trunk-jpl/src/m/miscellaneous/supportedstochforcings.m
===================================================================
--- /issm/trunk-jpl/src/m/miscellaneous/supportedstochforcings.m	(revision 26639)
+++ 	(revision )
@@ -1,8 +1,0 @@
-function list = supportedstochforcings(),
-	% Defines list of fields supported
-	% by the class md.stochasticforcings
-
-	list = {...
-		'SMBautoregression',...
-		'FrontalForcingsRignotAutoregression'
-		};
