Index: /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 26836)
+++ /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 26837)
@@ -221,4 +221,5 @@
 		case AutoregressionLinearFloatingMeltRateEnum:
 			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.basin_id",BasalforcingsLinearBasinIdEnum);
+			if(isstochastic) iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum);
 			break;
 		default:
Index: /issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp	(revision 26836)
+++ /issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp	(revision 26837)
@@ -11,20 +11,4 @@
 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*/
@@ -73,5 +57,5 @@
 
 		/*Deal with the autoregressive models*/
-		if(fields[j]==SMBautoregressionEnum || fields[j]==FrontalForcingsRignotAutoregressionEnum){
+		if(fields[j]==SMBautoregressionEnum || fields[j]==FrontalForcingsRignotAutoregressionEnum || fields[j]==BasalforcingsDeepwaterMeltingRateAutoregressionEnum){
 			switch(fields[j]){
 				case SMBautoregressionEnum:
@@ -82,4 +66,8 @@
 					dimenum_type   = FrontalForcingsBasinIdEnum;
 					noiseenum_type = ThermalforcingAutoregressionNoiseEnum;
+					break;
+				case BasalforcingsDeepwaterMeltingRateAutoregressionEnum:
+					dimenum_type   = BasalforcingsLinearBasinIdEnum;
+					noiseenum_type = BasalforcingsDeepwaterMeltingRateNoiseEnum;
 					break;
 			}
@@ -98,4 +86,5 @@
 				case SMBautoregressionEnum:
 				case FrontalForcingsRignotAutoregressionEnum:
+				case BasalforcingsDeepwaterMeltingRateAutoregressionEnum:
 					/*Already done above*/
 					break;
@@ -185,5 +174,4 @@
 					}
 					break;
-				//VV working(29Nov2021)
 				case FrictionWaterPressureEnum:
 					/*Specify that WaterPressure is stochastic*/ 
@@ -208,27 +196,4 @@
 					}
 					break;
-
-				/*
-				case FrictionEffectivePressureEnum:
-					femmodel->parameters->SetParam(true,StochasticForcingIsEffectivePressureEnum);
-					for(Object* &object:femmodel->elements->objects){
-                  Element* element = xDynamicCast<Element*>(object);
-                  int numvertices  = element->GetNumberOfVertices();
-                  IssmDouble Neff[numvertices];
-						element->GetInputValue(&dimensionid,StochasticForcingDefaultIdEnum);
-						Gauss* gauss=element->NewGauss();
-						Friction* friction = new Friction(element);
-						for(int i=0;i<numvertices;i++){
-							gauss->GaussVertex(i);
-							Neff[i] = friction->EffectivePressure(gauss);
-							Neff[i] = Neff[i]+noisefield[dimensionid];
-						}
-						element->AddInput(FrictionEffectivePressureEnum,Neff,P1DGEnum);
-						delete gauss;
-						delete friction;
-					}
-					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 26836)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 26837)
@@ -73,5 +73,4 @@
 syn keyword cConstant BasalforcingsDeepwaterElevationEnum
 syn keyword cConstant BasalforcingsDeepwaterMeltingRateEnum
-syn keyword cConstant BasalforcingsDeepwaterMeltingRateNoiseEnum
 syn keyword cConstant BasalforcingsDtbgEnum
 syn keyword cConstant BasalforcingsEnum
@@ -603,4 +602,5 @@
 syn keyword cConstant BasalCrevasseEnum
 syn keyword cConstant BasalforcingsDeepwaterMeltingRateAutoregressionEnum
+syn keyword cConstant BasalforcingsDeepwaterMeltingRateNoiseEnum
 syn keyword cConstant BasalforcingsDeepwaterMeltingRateValuesAutoregressionEnum
 syn keyword cConstant BasalforcingsFloatingiceMeltingRateEnum
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 26836)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 26837)
@@ -67,5 +67,4 @@
 	BasalforcingsDeepwaterElevationEnum,
 	BasalforcingsDeepwaterMeltingRateEnum,
-	BasalforcingsDeepwaterMeltingRateNoiseEnum,
 	BasalforcingsDtbgEnum,
 	BasalforcingsEnum,
@@ -599,4 +598,5 @@
 	BasalCrevasseEnum,
 	BasalforcingsDeepwaterMeltingRateAutoregressionEnum,
+	BasalforcingsDeepwaterMeltingRateNoiseEnum,
 	BasalforcingsDeepwaterMeltingRateValuesAutoregressionEnum,
 	BasalforcingsFloatingiceMeltingRateEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 26836)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 26837)
@@ -75,5 +75,4 @@
 		case BasalforcingsDeepwaterElevationEnum : return "BasalforcingsDeepwaterElevation";
 		case BasalforcingsDeepwaterMeltingRateEnum : return "BasalforcingsDeepwaterMeltingRate";
-		case BasalforcingsDeepwaterMeltingRateNoiseEnum : return "BasalforcingsDeepwaterMeltingRateNoise";
 		case BasalforcingsDtbgEnum : return "BasalforcingsDtbg";
 		case BasalforcingsEnum : return "Basalforcings";
@@ -605,4 +604,5 @@
 		case BasalCrevasseEnum : return "BasalCrevasse";
 		case BasalforcingsDeepwaterMeltingRateAutoregressionEnum : return "BasalforcingsDeepwaterMeltingRateAutoregression";
+		case BasalforcingsDeepwaterMeltingRateNoiseEnum : return "BasalforcingsDeepwaterMeltingRateNoise";
 		case BasalforcingsDeepwaterMeltingRateValuesAutoregressionEnum : return "BasalforcingsDeepwaterMeltingRateValuesAutoregression";
 		case BasalforcingsFloatingiceMeltingRateEnum : return "BasalforcingsFloatingiceMeltingRate";
Index: /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim	(revision 26836)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim	(revision 26837)
@@ -66,5 +66,4 @@
 syn keyword juliaConstC BasalforcingsDeepwaterElevationEnum
 syn keyword juliaConstC BasalforcingsDeepwaterMeltingRateEnum
-syn keyword juliaConstC BasalforcingsDeepwaterMeltingRateNoiseEnum
 syn keyword juliaConstC BasalforcingsDtbgEnum
 syn keyword juliaConstC BasalforcingsEnum
@@ -596,4 +595,5 @@
 syn keyword juliaConstC BasalCrevasseEnum
 syn keyword juliaConstC BasalforcingsDeepwaterMeltingRateAutoregressionEnum
+syn keyword juliaConstC BasalforcingsDeepwaterMeltingRateNoiseEnum
 syn keyword juliaConstC BasalforcingsDeepwaterMeltingRateValuesAutoregressionEnum
 syn keyword juliaConstC BasalforcingsFloatingiceMeltingRateEnum
Index: /issm/trunk-jpl/src/m/classes/stochasticforcing.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/stochasticforcing.m	(revision 26836)
+++ /issm/trunk-jpl/src/m/classes/stochasticforcing.m	(revision 26837)
@@ -84,4 +84,10 @@
 					end
 				end
+				if(contains(field,'BasalforcingsDeepwaterMeltingRateAutoregression'))
+					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))));
@@ -97,28 +103,43 @@
             end
 				%Checking for specific dimensions
-				if ~(strcmp(field,'SMBautoregression') || strcmp(field,'FrontalForcingsRignotAutoregression'))
+				if ~(strcmp(field,'SMBautoregression') || strcmp(field,'FrontalForcingsRignotAutoregression') || strcmp(field,'BasalforcingsDeepwaterMeltingRateAutoregression'))
 					checkdefaults = true; %field with non-specific dimensionality
 				end
 			end
 
-			%Retrieve sum of all the field dimensionalities
-			size_tot	= self.defaultdimension*num_fields;
-			indSMBar	= -1; %about to check for index of SMBautoregression
-			indTFar	= -1; %about to check for index of FrontalForcingsRignotAutoregression
+			%Retrieve all the field dimensionalities
+			dimensions = self.defaultdimension*ones(1,num_fields);
+			indSMBar   = -1; %about to check for index of SMBautoregression
+			indTFar	  = -1; %about to check for index of FrontalForcingsRignotAutoregression
+			indBDWar	  = -1; %about to check for index of BasalforcingsDeepwaterMeltingRateAutoregression
 			if any(contains(self.fields,'SMBautoregression'))
-				size_tot = size_tot-self.defaultdimension+md.smb.num_basins;
-				indSMBar = find(contains(self.fields,'SMBautoregression')); %index of SMBar, now check for consistency with TFar timestep (08Nov2021)
+				indSMBar = find(contains(self.fields,'SMBautoregression')); %index of SMBar, now check for consistency with other ar timesteps 
+				dimensions(indSMBar) = md.smb.num_basins;
 			end
 			if any(contains(self.fields,'FrontalForcingsRignotAutoregression'))
-				size_tot	= size_tot-self.defaultdimension+md.frontalforcings.num_basins;
-				indTFar	= find(contains(self.fields,'FrontalForcingsRignotAutoregression')); %index of TFar, now check for consistency with SMBar timestep (08Nov2021)
-			end
+				indTFar	= find(contains(self.fields,'FrontalForcingsRignotAutoregression')); %index of TFar, now check for consistency with other ar timesteps 
+				dimensions(indTFar) = md.frontalforcings.num_basins;
+			end
+			if any(contains(self.fields,'BasalforcingsDeepwaterMeltingRateAutoregression'))
+				indBDWar	= find(contains(self.fields,'BasalforcingsDeepwaterMeltingRateAutoregression')); %index of BDWar, now check for consistency with other ar timesteps 
+				dimensions(indBDWar) = md.basalforcings.num_basins;
+			end
+			size_tot = sum(dimensions);
 
 			if(indSMBar~=-1 && indTFar~=-1) %both autoregressive models are used: check autoregressive time step consistency
-				if((md.smb.ar_timestep~=md.frontalforcings.ar_timestep) && any(self.covariance(1+sum(self.dimensions(1:indSMBar-1)):sum(self.dimensions(1:indSMBar)),1+sum(self.dimensions(1:indTFar-1)):sum(self.dimensions(1:indTFar))))~=0)
+				if((md.smb.ar_timestep~=md.frontalforcings.ar_timestep) && any(self.covariance(1+sum(dimensions(1:indSMBar-1)):sum(dimensions(1:indSMBar)),1+sum(dimensions(1:indTFar-1)):sum(dimensions(1:indTFar))),'all')~=0)
 					error('SMBautoregression and FrontalForcingsRignotAutoregression have different ar_timestep and non-zero covariance');
 				end
 			end
-
+			if(indSMBar~=-1 && indBDWar~=-1) %both autoregressive models are used: check autoregressive time step consistency
+				if((md.smb.ar_timestep~=md.basalforcings.ar_timestep) && any(self.covariance(1+sum(dimensions(1:indSMBar-1)):sum(dimensions(1:indSMBar)),1+sum(dimensions(1:indBDWar-1)):sum(dimensions(1:indBDWar))),'all')~=0)
+					error('SMBautoregression and BasalforcingsDeepwaterMeltingRateAutoregression have different ar_timestep and non-zero covariance');
+				end
+			end
+			if(indTFar~=-1 && indBDWar~=-1) %both autoregressive models are used: check autoregressive time step consistency
+				if((md.frontalforcings.ar_timestep~=md.basalforcings.ar_timestep) && any(self.covariance(1+sum(dimensions(1:indTFar-1)):sum(dimensions(1:indTFar)),1+sum(dimensions(1:indBDWar-1)):sum(dimensions(1:indBDWar))),'all')~=0)
+					error('FrontalForcingsRignotAutoregression and BasalforcingsDeepwaterMeltingRateAutoregression have different ar_timestep and non-zero covariance');
+				end
+			end
 			md = checkfield(md,'fieldname','stochasticforcing.isstochasticforcing','values',[0 1]);
 			md = checkfield(md,'fieldname','stochasticforcing.fields','numel',num_fields,'cell',1,'values',supportedstochforcings());
@@ -164,9 +185,12 @@
 						dimensions(ind) = md.frontalforcings.num_basins;
 					end
+					if(strcmp(field,'BasalforcingsDeepwaterMeltingRateAutoregression'))
+						dimensions(ind) = md.basalforcings.num_basins;
+					end
 					ind = ind+1;
 				end
 
 				%Scaling covariance matrix (scale column-by-column and row-by-row)
-				scaledfields = {'BasalforcingsSpatialDeepwaterMeltingRate','DefaultCalving','FloatingMeltRate','SMBautoregression','SMBforcing'}; %list of fields that need scaling *1/yts
+				scaledfields = {'BasalforcingsDeepwaterMeltingRateAutoregression','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
@@ -185,4 +209,5 @@
 					self.default_id = zeros(md.mesh.numberofelements,1);
 				end
+
 				WriteData(fid,prefix,'data',num_fields,'name','md.stochasticforcing.num_fields','format','Integer');
 				WriteData(fid,prefix,'object',self,'fieldname','fields','format','StringArray');
@@ -207,4 +232,5 @@
 	% supported and corresponding md names
 	structure.fields = {...
+		'BasalforcingsDeepwaterMeltingRateAutoregression',...
 		'BasalforcingsSpatialDeepwaterMeltingRate',...
 		'DefaultCalving',...
@@ -216,4 +242,5 @@
 		};
 	structure.mdnames = {...
+		'autoregressionlinearbasalforcings',...
 		'spatiallinearbasalforcings',...
 		'calving',...
Index: /issm/trunk-jpl/src/m/classes/stochasticforcing.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/stochasticforcing.py	(revision 26836)
+++ /issm/trunk-jpl/src/m/classes/stochasticforcing.py	(revision 26837)
@@ -90,5 +90,9 @@
                 if (type(md.basalforcings).__name__ != mdname):
                     raise TypeError('md.basalforcings does not agree with stochasticforcing field {}'.format(field))
-            if 'BasalforcingsDpatialDeepwaterMeltingRate' in field:
+            if 'BasalforcingsSpatialDeepwaterMeltingRate' in field:
+                mdname = structstoch[field]
+                if (type(md.basalforcings).__name__ != mdname):
+                    raise TypeError('md.basalforcings does not agree with stochasticforcing field {}'.format(field))
+            if 'BasalforcingsDeepwaterMeltingRateAutoregression' in field:
                 mdname = structstoch[field]
                 if (type(md.basalforcings).__name__ != mdname):
@@ -104,21 +108,35 @@
 
             # Checking for specific dimensions
-            if field not in['SMBautoregression', 'FrontalForcingsRignotAutoregression']:
+            if field not in['SMBautoregression', 'FrontalForcingsRignotAutoregression','BasalforcingsDeepwaterMeltingRateAutoregression']:
                 checkdefaults = True  # field with non-specific dimensionality
 
         # Retrieve sum of all the field dimensionalities
-        size_tot = self.defaultdimension * num_fields
-        indSMBar = -1  # About to check for index of SMBautoregression
-        indTFar = -1  # About to check for index of FrontalForcingsRignotAutoregression
+        dimensions = self.defaultdimension*np.ones((num_fields))
+        indSMBar   = -1  # About to check for index of SMBautoregression
+        indTFar    = -1  # About to check for index of FrontalForcingsRignotAutoregression
+        indBDWar   = -1  # About to check for index of BasalforcingsDeepwaterMeltingRateAutoregression
         if ('SMBautoregression' in self.fields):
-            size_tot = size_tot - self.defaultdimension + md.smb.num_basins
-            indSMBar = self.fields.index('SMBautoregression')  # Index of SMBar, now check for consistency with TFar timestep (08Nov2021)
+            indSMBar = self.fields.index('SMBautoregression')  # Index of SMBar, now check for consistency with other timesteps
+            dimensions[indSMBar] = md.smb.num_basins
         if ('FrontalForcingsRignotAutoregression' in self.fields):
-            size_tot = size_tot - self.defaultdimension + md.frontalforcings.num_basins
-            indTFar = self.fields.index('FrontalForcingsRignotAutoregression')  # Index of TFar, now check for consistency with SMBar timestep (08Nov2021)
+            indTFar = self.fields.index('FrontalForcingsRignotAutoregression')  # Index of TFar, now check for consistency with other timesteps
+            dimensions[indTFar] = md.frontalforcings.num_basins
+        if ('BasalforcingsDeepwaterMeltingRateAutoregression' in self.fields):
+            indBDWar = self.fields.index('BasalforcingsDeepwaterMeltingRateAutoregression')  # Index of BDWar, now check for consistency with other timesteps
+            dimensions[indTFar] = md.basalforcings.num_basins
+        size_tot = np.sum(dimensions)
+
         if (indSMBar != -1 and indTFar != -1):  # Both autoregressive models are used: check autoregressive time step consistency
-            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)]
+            covsum = self.covariance[np.sum(dimensions[0:indSMBar]).astype(int):np.sum(dimensions[0:indSMBar + 1]).astype(int), np.sum(dimensions[0:indTFar]).astype(int):np.sum(dimensions[0:indTFar + 1]).astype(int)]
             if((md.smb.ar_timestep != md.frontalforcings.ar_timestep) and np.any(covsum != 0)):
                 raise IOError('SMBautoregression and FrontalForcingsRignotAutoregression have different ar_timestep and non-zero covariance')
+        if (indSMBar != -1 and indBDWar != -1):  # Both autoregressive models are used: check autoregressive time step consistency
+            covsum = self.covariance[np.sum(dimensions[0:indSMBar]).astype(int):np.sum(dimensions[0:indSMBar + 1]).astype(int), np.sum(dimensions[0:indBDWar]).astype(int):np.sum(dimensions[0:indBDWar + 1]).astype(int)]
+            if((md.smb.ar_timestep != md.basalforcings.ar_timestep) and np.any(covsum != 0)):
+                raise IOError('SMBautoregression and BasalforcingsDeepwaterMeltingRateAutoregression have different ar_timestep and non-zero covariance')
+        if (indTFar != -1 and indBDWar != -1):  # Both autoregressive models are used: check autoregressive time step consistency
+            covsum = self.covariance[np.sum(dimensions[0:indTFar]).astype(int):np.sum(dimensions[0:indTFar + 1]).astype(int), np.sum(dimensions[0:indBDWar]).astype(int):np.sum(dimensions[0:indBDWar + 1]).astype(int)]
+            if((md.frontalforcings.ar_timestep != md.basalforcings.ar_timestep) and np.any(covsum != 0)):
+                raise IOError('FrontalForcingsRignotAutoregression and BasalforcingsDeepwaterMeltingRateAutoregression have different ar_timestep and non-zero covariance')
 
         md = checkfield(md, 'fieldname', 'stochasticforcing.isstochasticforcing', 'values', [0, 1])
@@ -153,7 +171,9 @@
                 if (field == 'FrontalForcingsRignotAutoregression'):
                     dimensions[ind] = md.frontalforcings.num_basins
+                if (field == 'BasalforcingsDeepwaterMeltingRateAutoregression'):
+                    dimensions[ind] = md.basalforcings.num_basins
 
             # Scaling covariance matrix (scale column-by-column and row-by-row)
-            scaledfields = ['BasalforcingsSpatialDeepwaterMeltingRate','DefaultCalving', 'FloatingMeltRate', 'SMBautoregression', 'SMBforcing']  # list of fields that need scaling * 1/yts
+            scaledfields = ['BasalforcingsDeepwaterMeltingRateAutoregression','BasalforcingsSpatialDeepwaterMeltingRate','DefaultCalving', 'FloatingMeltRate', 'SMBautoregression', 'SMBforcing']  # list of fields that need scaling * 1/yts
             tempcovariance = np.copy(self.covariance)
             for i in range(num_fields):
@@ -191,5 +211,6 @@
            supported and corresponding md names
         """
-        structure = {'BasalforcingsSpatialDeepwaterMeltingRate': 'spatiallinearbasalforcings',
+        structure = {'BasalforcingsDeepwaterMeltingRateAutoregression': 'autoregressionlinearbasalforcings',
+                     'BasalforcingsSpatialDeepwaterMeltingRate': 'spatiallinearbasalforcings',
                      'DefaultCalving': 'calving',
                      'FloatingMeltRate': 'basalforcings',
Index: /issm/trunk-jpl/test/NightlyRun/test544.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test544.m	(revision 26837)
+++ /issm/trunk-jpl/test/NightlyRun/test544.m	(revision 26837)
@@ -0,0 +1,117 @@
+%Test Name: PigTranAutoregressionAndStochasticforcings 
+md=triangle(model(),'../Exp/Pig.exp',8000.);
+md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+md=parameterize(md,'../Par/Pig.par');
+md=setflowequation(md,'SSA','all');
+md.timestepping.start_time = 0;
+md.timestepping.time_step  = 1;
+md.timestepping.final_time = 10;
+
+%Basin separation
+idb     = zeros(md.mesh.numberofelements,1);
+iid1    = find(md.mesh.x>=-1.6e6);
+for ii=1:md.mesh.numberofelements
+    for vertex=1:3
+        if any(iid1==md.mesh.elements(ii,vertex)) %one vertex in basin 1
+            idb(ii) = 1;
+        end
+    end
+    if idb(ii)==0 %no vertex was found in basin 1
+        idb(ii) = 2;
+    end
+end
+nb_bas = 2;
+
+%SMB
+md.smb                = SMBautoregression();
+md.smb.num_basins     = nb_bas; %number of basins
+md.smb.basin_id       = idb; %prescribe basin ID number to elements
+md.smb.beta0          = [0.5,1.2]; %intercept values of SMB in basins [m ice eq./yr]
+md.smb.beta1          = [0.0,0.01]; %trend values of SMB in basins [m ice eq./yr^2]
+md.smb.ar_initialtime = md.timestepping.start_time;
+md.smb.ar_order       = 4;
+md.smb.ar_timestep    = 2.0; %timestep of the autoregressive model [yr]
+md.smb.phi            = [[0.2,0.1,0.05,0.01];[0.4,0.2,-0.2,0.1]];
+
+%Calving
+md.mask.ice_levelset           = 1e4*(md.mask.ice_levelset + 0.5);
+md.calving.calvingrate         = 0.1*ones(md.mesh.numberofvertices,1);
+md.levelset.spclevelset        = NaN(md.mesh.numberofvertices,1);
+md.levelset.migration_max      = 10.0;
+md.frontalforcings.meltingrate = zeros(md.mesh.numberofvertices,1);
+
+% Basal forcing implementation
+md.basalforcings = autoregressionlinearbasalforcings();
+md.basalforcings.num_basins     = nb_bas; %number of basins
+md.basalforcings.basin_id       = idb; %prescribe basin ID number to elements
+md.basalforcings.beta0          = [1.0,2.50]; %intercept values of DeepwaterMelt in basins [m/yr]
+md.basalforcings.beta1          = [0.2,0.01]; %trend values of DeepwaterMelt in basins [m/yr^2]
+md.basalforcings.ar_initialtime = md.timestepping.start_time;
+md.basalforcings.ar_order       = 1;
+md.basalforcings.ar_timestep    = 1.0; %timestep of the autoregressive model [yr]
+md.basalforcings.phi            = [0.0;0.1];
+md.basalforcings.deepwater_elevation       = [-1000,-1520];
+md.basalforcings.upperwater_elevation      = [0,-50];
+md.basalforcings.upperwater_melting_rate   = [0.0,0.0];
+md.basalforcings.groundedice_melting_rate  = zeros(md.mesh.numberofvertices,1);
+
+% Covariance matrix
+covsmb      = 3*eye(nb_bas);
+covclv      = 1e-1*eye(nb_bas);
+covclv(1,1) = 1/10*covclv(1,1);
+covdwm      = 400*eye(nb_bas);
+covglob     = blkdiag(covsmb,covclv,covdwm);
+
+% Stochastic forcing
+md.stochasticforcing.isstochasticforcing = 1;
+md.stochasticforcing.fields              = [{'SMBautoregression'},{'DefaultCalving'},{'BasalforcingsDeepwaterMeltingRateAutoregression'}];
+md.stochasticforcing.defaultdimension    = 2;
+md.stochasticforcing.default_id          = idb;
+md.stochasticforcing.covariance          = covglob; %global covariance among- and between-fields
+md.stochasticforcing.randomflag          = 0; %determines true/false randomness
+
+md.transient.ismovingfront     = 1;
+md.transient.requested_outputs = {'default','SmbMassBalance','BasalforcingsFloatingiceMeltingRate','BasalforcingsSpatialDeepwaterMeltingRate'};
+md.transient.isstressbalance = 1;
+md.transient.ismasstransport = 1;
+md.transient.issmb           = 1;
+md.transient.isthermal       = 0;
+md.transient.isgroundingline = 1;
+
+md.cluster=generic('name',oshostname(),'np',2);
+md=solve(md,'Transient');
+
+%Fields and tolerances to track changes
+field_names ={...
+   'Vx1' ,'Vy1' ,'Vel1' ,'Thickness1', 'SmbMassBalance1', 'BasalforcingsFloatingiceMeltingRate1', 'BasalforcingsSpatialDeepwaterMeltingRate1',...
+   'Vx2' ,'Vy2' ,'Vel2' ,'Thickness2', 'SmbMassBalance2' ,'BasalforcingsFloatingiceMeltingRate2', 'BasalforcingsSpatialDeepwaterMeltingRate2',...
+   'Vx3' ,'Vy3' ,'Vel3' ,'Thickness3', 'SmbMassBalance3' ,'BasalforcingsFloatingiceMeltingRate3', 'BasalforcingsSpatialDeepwaterMeltingRate3',...
+   };
+field_tolerances={...
+   1e-11,1e-11,2e-11,1e-11,1e-10,1e-9,1e-10,...
+   1e-11,1e-11,2e-11,9e-11,1e-10,1e-9,1e-10,...
+   2e-10,2e-10,2e-10,1e-10,1e-10,1e-9,1e-10,...
+   };
+field_values={...
+   (md.results.TransientSolution(1).Vx),...
+   (md.results.TransientSolution(1).Vy),...
+   (md.results.TransientSolution(1).Vel),...
+   (md.results.TransientSolution(1).Thickness),...
+   (md.results.TransientSolution(1).SmbMassBalance),...
+   (md.results.TransientSolution(1).BasalforcingsFloatingiceMeltingRate),...
+   (md.results.TransientSolution(1).BasalforcingsSpatialDeepwaterMeltingRate),...
+   (md.results.TransientSolution(5).Vx),...
+   (md.results.TransientSolution(5).Vy),...
+   (md.results.TransientSolution(5).Vel),...
+   (md.results.TransientSolution(5).Thickness),...
+   (md.results.TransientSolution(5).SmbMassBalance),...
+   (md.results.TransientSolution(5).BasalforcingsFloatingiceMeltingRate),...
+   (md.results.TransientSolution(5).BasalforcingsSpatialDeepwaterMeltingRate),...
+	(md.results.TransientSolution(10).Vx),...
+	(md.results.TransientSolution(10).Vy),...
+	(md.results.TransientSolution(10).Vel),...
+	(md.results.TransientSolution(10).Thickness),...
+   (md.results.TransientSolution(10).SmbMassBalance),...
+	(md.results.TransientSolution(10).BasalforcingsFloatingiceMeltingRate),...
+   (md.results.TransientSolution(10).BasalforcingsSpatialDeepwaterMeltingRate),...
+	};
Index: /issm/trunk-jpl/test/NightlyRun/test544.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test544.py	(revision 26837)
+++ /issm/trunk-jpl/test/NightlyRun/test544.py	(revision 26837)
@@ -0,0 +1,125 @@
+#Test Name: PigTranAutoregressionAndStochasticforcings
+import numpy as np
+
+from autoregressionlinearbasalforcings import *
+from SMBautoregression import *
+from stochasticforcing import *
+from socket import gethostname
+from model import *
+from parameterize import *
+from setflowequation import *
+from setmask import *
+from solve import *
+from triangle import *
+
+
+md = triangle(model(), '../Exp/Pig.exp', 8000)
+md = setmask(md, '../Exp/PigShelves.exp', '../Exp/PigIslands.exp')
+md = parameterize(md, '../Par/Pig.py')
+md = setflowequation(md, 'SSA', 'all')
+md.timestepping.start_time = 0
+md.timestepping.time_step = 1
+md.timestepping.final_time = 10
+
+# Basin separation
+idb = np.zeros((md.mesh.numberofelements,))
+iid1 = np.where(md.mesh.x >= -1.6e6)[0]
+for ii in range(md.mesh.numberofelements):
+    for vertex in range(3):
+        if md.mesh.elements[ii][vertex] - 1 in iid1:  # one vertex in basin 1; NOTE: offset because of 1-based vertex indexing
+            idb[ii] = 1
+    if idb[ii] == 0:  # no vertex was found in basin 1
+        for vertex in range(3):
+            idb[ii] = 2
+nb_bas = 2
+
+#SMB
+md.smb = SMBautoregression()
+md.smb.num_basins = nb_bas  # number of basins
+md.smb.basin_id = idb - 1  # prescribe basin ID number to elements; # NOTE: offset because of 1-based vertex indexing
+md.smb.beta0 = np.array([[0.5, 1.2]])  # intercept values of SMB in basins [m ice eq./yr]
+md.smb.beta1 = np.array([[0.0, 0.01]])  # trend values of SMB in basins [m ice eq./yr^2]
+md.smb.ar_initialtime = md.timestepping.start_time
+md.smb.ar_order = 4
+md.smb.ar_timestep = 2.0  #timestep of the autoregressive model [yr]
+md.smb.phi = np.array([[0.2, 0.1, 0.05, 0.01], [0.4, 0.2, -0.2, 0.1]])
+
+#Calving
+md.mask.ice_levelset = 1e4*(md.mask.ice_levelset + 0.5)
+md.calving.calvingrate = 0.1*np.ones((md.mesh.numberofvertices,))
+md.levelset.spclevelset = np.full((md.mesh.numberofvertices,), np.nan)
+md.levelset.migration_max = 10.0 
+md.frontalforcings.meltingrate = np.zeros((md.mesh.numberofvertices,))
+
+#Basal forcing implementation
+md.basalforcings = autoregressionlinearbasalforcings()
+md.basalforcings.num_basins     = nb_bas
+md.basalforcings.basin_id       = idb - 1  # NOTE: offset because of 1-based vertex indexing
+md.basalforcings.beta0          = np.array([[1.0, 2.50]])  # intercept values of DeepwaterMelt in basins [m/yr]
+md.basalforcings.beta1          = np.array([[0.2, 0.01]])  # trend values of DeepwaterMelt in basins [m/yr^2]
+md.basalforcings.ar_initialtime = md.timestepping.start_time  # initial time in the AR model parameterization [yr]
+md.basalforcings.ar_order       = 1
+md.basalforcings.ar_timestep    = 1.0  # timestep of the autoregressive model [yr]
+md.basalforcings.phi            = np.array([[0.0], [0.1]])  # autoregressive parameters
+md.basalforcings.deepwater_elevation      = np.array([[-1000, -1520]])
+md.basalforcings.upperwater_elevation     = np.array([[0, -50]])
+md.basalforcings.upperwater_melting_rate  = np.array([[0,0]])
+md.basalforcings.groundedice_melting_rate = np.zeros((md.mesh.numberofvertices,))
+
+#Covariance matrix (hard-coding)
+covglob = np.array([[3.0,0.,0.,0.,0.,0.],[0.,3.0,0.,0.,0.,0.],[0.,0.,0.01,0.,0.,0.],[0.,0.,0.,0.1,0.,0.],[0.,0.,0.,0.,400,0.],[0.,0.,0.,0.,0.,400]])
+
+#Stochastic forcing
+md.stochasticforcing.isstochasticforcing = 1
+md.stochasticforcing.fields = ['SMBautoregression','DefaultCalving','BasalforcingsDeepwaterMeltingRateAutoregression']
+md.stochasticforcing.defaultdimension = 2
+md.stochasticforcing.default_id       = idb-1 #NOTE: offset because of 1-based vertex indexing
+md.stochasticforcing.covariance       = covglob # global covariance among- and between-fields
+md.stochasticforcing.randomflag       = 0 # determines true/false randomness
+
+md.transient.ismovingfront     = 1
+md.transient.requested_outputs = ['default','SmbMassBalance','BasalforcingsFloatingiceMeltingRate','BasalforcingsSpatialDeepwaterMeltingRate']
+md.transient.isstressbalance   = 1
+md.transient.ismasstransport   = 1
+md.transient.issmb             = 1
+md.transient.isthermal         = 0
+md.transient.isgroundingline   = 1
+
+md.cluster = generic('name', gethostname(), 'np', 2)
+md = solve(md, 'Transient')
+
+# Fields and tolerances to track changes
+field_names = [
+    'Vx1','Vy1','Vel1','Thickness1','SmbMassBalance1','BasalforcingsFloatingiceMeltingRate1','BasalforcingsSpatialDeepwaterMeltingRate1',
+    'Vx5','Vy5','Vel5','Thickness5','SmbMassBalance5','BasalforcingsFloatingiceMeltingRate5','BasalforcingsSpatialDeepwaterMeltingRate5',
+    'Vx10','Vy10','Vel10','Thickness10','SmbMassBalance10','BasalforcingsFloatingiceMeltingRate10','BasalforcingsSpatialDeepwaterMeltingRate10'
+]
+
+field_tolerances = [
+    1e-11,1e-11,2e-11,1e-11,1e10,1e-9,1e-10,
+    1e-11,1e-11,2e-11,9e-11,1e10,1e-9,1e-10,
+    2e-10,2e-10,2e-10,1e-10,1e10,1e-9,1e-10
+]
+field_values = [
+    md.results.TransientSolution[0].Vx,
+    md.results.TransientSolution[0].Vy,
+    md.results.TransientSolution[0].Vel,
+    md.results.TransientSolution[0].Thickness,
+    md.results.TransientSolution[0].SmbMassBalance,
+    md.results.TransientSolution[0].BasalforcingsFloatingiceMeltingRate,
+    md.results.TransientSolution[0].BasalforcingsSpatialDeepwaterMeltingRate,
+    md.results.TransientSolution[4].Vx,
+    md.results.TransientSolution[4].Vy,
+    md.results.TransientSolution[4].Vel,
+    md.results.TransientSolution[4].Thickness,
+    md.results.TransientSolution[4].SmbMassBalance,
+    md.results.TransientSolution[4].BasalforcingsFloatingiceMeltingRate,
+    md.results.TransientSolution[4].BasalforcingsSpatialDeepwaterMeltingRate,
+    md.results.TransientSolution[9].Vx,
+    md.results.TransientSolution[9].Vy,
+    md.results.TransientSolution[9].Vel,
+    md.results.TransientSolution[9].Thickness,
+    md.results.TransientSolution[9].SmbMassBalance,
+    md.results.TransientSolution[9].BasalforcingsFloatingiceMeltingRate,
+    md.results.TransientSolution[9].BasalforcingsSpatialDeepwaterMeltingRate
+]
