Index: /issm/trunk-jpl/src/c/cores/transient_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 23473)
+++ /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 23474)
@@ -25,4 +25,5 @@
 	int        timestepping;
 	int        output_frequency;
+	int        sb_coupling_frequency;
 	int        recording_frequency;
 	int        domaintype,groundingline_migration,smb_model,amr_frequency,amr_restart;
@@ -48,4 +49,5 @@
 	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
 	femmodel->parameters->FindParam(&output_frequency,SettingsOutputFrequencyEnum);
+	femmodel->parameters->FindParam(&sb_coupling_frequency,SettingsSbCouplingFrequencyEnum);
 	femmodel->parameters->FindParam(&timestepping,TimesteppingTypeEnum);
 	femmodel->parameters->FindParam(&isstressbalance,TransientIsstressbalanceEnum);
@@ -389,5 +391,5 @@
 		if(ishydrology) hydrology_core(femmodel);
 
-		if(isstressbalance) stressbalance_core(femmodel);
+		if(isstressbalance && (step%sb_coupling_frequency==0 || step==1) ) stressbalance_core(femmodel);
 
 		if(isdamageevolution) damage_core(femmodel);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 23473)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 23474)
@@ -47,4 +47,5 @@
 	parameters->AddObject(iomodel->CopyConstantObject("md.mesh.domain_dimension",DomainDimensionEnum));
 	parameters->AddObject(iomodel->CopyConstantObject("md.settings.output_frequency",SettingsOutputFrequencyEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.settings.sb_coupling_frequency",SettingsSbCouplingFrequencyEnum));
 	parameters->AddObject(iomodel->CopyConstantObject("md.settings.recording_frequency",SettingsRecordingFrequencyEnum));
 	parameters->AddObject(iomodel->CopyConstantObject("md.constants.yts",ConstantsYtsEnum));
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 23473)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 23474)
@@ -269,4 +269,5 @@
 	SettingsIoGatherEnum,
 	SettingsOutputFrequencyEnum,
+	SettingsSbCouplingFrequencyEnum,
 	SettingsRecordingFrequencyEnum,
 	SettingsResultsOnNodesEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 23473)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 23474)
@@ -277,4 +277,5 @@
 		case SettingsIoGatherEnum : return "SettingsIoGather";
 		case SettingsOutputFrequencyEnum : return "SettingsOutputFrequency";
+		case SettingsSbCouplingFrequencyEnum : return "SettingsSbCouplingFrequency";
 		case SettingsRecordingFrequencyEnum : return "SettingsRecordingFrequency";
 		case SettingsResultsOnNodesEnum : return "SettingsResultsOnNodes";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 23473)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 23474)
@@ -283,4 +283,5 @@
 	      else if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum;
 	      else if (strcmp(name,"SettingsOutputFrequency")==0) return SettingsOutputFrequencyEnum;
+	      else if (strcmp(name,"SettingsSbCouplingFrequency")==0) return SettingsSbCouplingFrequencyEnum;
 	      else if (strcmp(name,"SettingsRecordingFrequency")==0) return SettingsRecordingFrequencyEnum;
 	      else if (strcmp(name,"SettingsResultsOnNodes")==0) return SettingsResultsOnNodesEnum;
@@ -382,9 +383,9 @@
 	      else if (strcmp(name,"TransientIshydrology")==0) return TransientIshydrologyEnum;
 	      else if (strcmp(name,"TransientIsmasstransport")==0) return TransientIsmasstransportEnum;
-	      else if (strcmp(name,"TransientIsmovingfront")==0) return TransientIsmovingfrontEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"TransientIsoceancoupling")==0) return TransientIsoceancouplingEnum;
+	      if (strcmp(name,"TransientIsmovingfront")==0) return TransientIsmovingfrontEnum;
+	      else if (strcmp(name,"TransientIsoceancoupling")==0) return TransientIsoceancouplingEnum;
 	      else if (strcmp(name,"TransientIsslr")==0) return TransientIsslrEnum;
 	      else if (strcmp(name,"TransientIssmb")==0) return TransientIssmbEnum;
@@ -505,9 +506,9 @@
 	      else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
 	      else if (strcmp(name,"HydrologyDrainageRate")==0) return HydrologyDrainageRateEnum;
-	      else if (strcmp(name,"Ice")==0) return IceEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"IceMaskNodeActivation")==0) return IceMaskNodeActivationEnum;
+	      if (strcmp(name,"Ice")==0) return IceEnum;
+	      else if (strcmp(name,"IceMaskNodeActivation")==0) return IceMaskNodeActivationEnum;
 	      else if (strcmp(name,"Input")==0) return InputEnum;
 	      else if (strcmp(name,"InversionCostFunctionsCoefficients")==0) return InversionCostFunctionsCoefficientsEnum;
@@ -628,9 +629,9 @@
 	      else if (strcmp(name,"SmbVmean")==0) return SmbVmeanEnum;
 	      else if (strcmp(name,"SmbTz")==0) return SmbTzEnum;
-	      else if (strcmp(name,"SmbV")==0) return SmbVEnum;
          else stage=6;
    }
    if(stage==6){
-	      if (strcmp(name,"SmbVz")==0) return SmbVzEnum;
+	      if (strcmp(name,"SmbV")==0) return SmbVEnum;
+	      else if (strcmp(name,"SmbVz")==0) return SmbVzEnum;
 	      else if (strcmp(name,"SmbW")==0) return SmbWEnum;
 	      else if (strcmp(name,"SmbWini")==0) return SmbWiniEnum;
@@ -751,9 +752,9 @@
 	      else if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum;
 	      else if (strcmp(name,"DamageEvolutionSolution")==0) return DamageEvolutionSolutionEnum;
-	      else if (strcmp(name,"DataSet")==0) return DataSetEnum;
          else stage=7;
    }
    if(stage==7){
-	      if (strcmp(name,"DatasetInput")==0) return DatasetInputEnum;
+	      if (strcmp(name,"DataSet")==0) return DataSetEnum;
+	      else if (strcmp(name,"DatasetInput")==0) return DatasetInputEnum;
 	      else if (strcmp(name,"DataSetParam")==0) return DataSetParamEnum;
 	      else if (strcmp(name,"DefaultAnalysis")==0) return DefaultAnalysisEnum;
@@ -874,9 +875,9 @@
 	      else if (strcmp(name,"L2ProjectionBaseAnalysis")==0) return L2ProjectionBaseAnalysisEnum;
 	      else if (strcmp(name,"L2ProjectionEPLAnalysis")==0) return L2ProjectionEPLAnalysisEnum;
-	      else if (strcmp(name,"LACrouzeixRaviart")==0) return LACrouzeixRaviartEnum;
          else stage=8;
    }
    if(stage==8){
-	      if (strcmp(name,"LambdaS")==0) return LambdaSEnum;
+	      if (strcmp(name,"LACrouzeixRaviart")==0) return LACrouzeixRaviartEnum;
+	      else if (strcmp(name,"LambdaS")==0) return LambdaSEnum;
 	      else if (strcmp(name,"LATaylorHood")==0) return LATaylorHoodEnum;
 	      else if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum;
@@ -997,9 +998,9 @@
 	      else if (strcmp(name,"Outputdefinition34")==0) return Outputdefinition34Enum;
 	      else if (strcmp(name,"Outputdefinition35")==0) return Outputdefinition35Enum;
-	      else if (strcmp(name,"Outputdefinition36")==0) return Outputdefinition36Enum;
          else stage=9;
    }
    if(stage==9){
-	      if (strcmp(name,"Outputdefinition37")==0) return Outputdefinition37Enum;
+	      if (strcmp(name,"Outputdefinition36")==0) return Outputdefinition36Enum;
+	      else if (strcmp(name,"Outputdefinition37")==0) return Outputdefinition37Enum;
 	      else if (strcmp(name,"Outputdefinition38")==0) return Outputdefinition38Enum;
 	      else if (strcmp(name,"Outputdefinition39")==0) return Outputdefinition39Enum;
@@ -1120,9 +1121,9 @@
 	      else if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum;
 	      else if (strcmp(name,"SigmaVM")==0) return SigmaVMEnum;
-	      else if (strcmp(name,"SmbAnalysis")==0) return SmbAnalysisEnum;
          else stage=10;
    }
    if(stage==10){
-	      if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
+	      if (strcmp(name,"SmbAnalysis")==0) return SmbAnalysisEnum;
+	      else if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
 	      else if (strcmp(name,"SMBd18opdd")==0) return SMBd18opddEnum;
 	      else if (strcmp(name,"SmbDesfac")==0) return SmbDesfacEnum;
Index: /issm/trunk-jpl/src/m/classes/issmsettings.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/issmsettings.m	(revision 23473)
+++ /issm/trunk-jpl/src/m/classes/issmsettings.m	(revision 23474)
@@ -10,4 +10,5 @@
 		lowmem              = 0;
 		output_frequency    = 0;
+		sb_coupling_frequency   = 0;
 		recording_frequency   = 0;
 		waitonlock          = 0;
@@ -39,4 +40,7 @@
 			self.output_frequency=1;
 
+			%coupling frequency of the stress balance solver by default every step
+			self.sb_coupling_frequency=1;
+			
 			%checkpoints frequency, by default never: 
 			self.recording_frequency=0;
@@ -61,4 +65,5 @@
 			md = checkfield(md,'fieldname','settings.lowmem','numel',[1],'values',[0 1]);
 			md = checkfield(md,'fieldname','settings.output_frequency','numel',[1],'>=',1);
+			md = checkfield(md,'fieldname','settings.sb_coupling_frequency','numel',[1],'>=',1);
 			md = checkfield(md,'fieldname','settings.recording_frequency','numel',[1],'>=',0);
 			md = checkfield(md,'fieldname','settings.waitonlock','numel',[1]);
@@ -73,4 +78,5 @@
 			fielddisplay(self,'lowmem','is the memory limited ? (0 or 1)');
 			fielddisplay(self,'output_frequency','frequency at which results are saved in all solutions with multiple time_steps');
+			fielddisplay(self,'sb_coupling_frequency','frequency at which StressBalance solver is coupled (default 1)');
 			fielddisplay(self,'recording_frequency','frequency at which the runs are being recorded, allowing for a restart');
 			fielddisplay(self,'waitonlock','maximum number of minutes to wait for batch results (NaN to deactivate)');
@@ -88,4 +94,5 @@
 			WriteData(fid,prefix,'object',self,'class','settings','fieldname','lowmem','format','Boolean');
 			WriteData(fid,prefix,'object',self,'class','settings','fieldname','output_frequency','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','settings','fieldname','sb_coupling_frequency','format','Integer');
 			WriteData(fid,prefix,'object',self,'class','settings','fieldname','recording_frequency','format','Integer');
 			WriteData(fid,prefix,'object',self,'class','settings','fieldname','waitonlock','data',self.waitonlock>0,'format','Boolean');
@@ -98,4 +105,5 @@
 			writejsdouble(fid,[modelname '.settings.lowmem'],self.lowmem);
 			writejsdouble(fid,[modelname '.settings.output_frequency'],self.output_frequency);
+			writejsdouble(fid,[modelname '.settings.sb_coupling_frequency'],self.sb_coupling_frequency);
 			writejsdouble(fid,[modelname '.settings.recording_frequency'],self.recording_frequency);
 			writejsdouble(fid,[modelname '.settings.waitonlock'],self.waitonlock);
Index: /issm/trunk-jpl/src/m/classes/issmsettings.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/issmsettings.py	(revision 23473)
+++ /issm/trunk-jpl/src/m/classes/issmsettings.py	(revision 23474)
@@ -16,4 +16,5 @@
 		self.lowmem              = 0
 		self.output_frequency    = 0
+		self.coupling_frequency		= 0
 		self.recording_frequency = 0
 		self.waitonlock          = 0
@@ -31,4 +32,5 @@
 		string="%s\n%s"%(string,fielddisplay(self,"lowmem","is the memory limited ? (0 or 1)"))
 		string="%s\n%s"%(string,fielddisplay(self,"output_frequency","frequency at which results are saved in all solutions with multiple time_steps"))
+		string="%s\n%s"%(string,fielddisplay(self,"sb_coupling_frequency","frequency at which StressBalance solver is coupled (default 1)"))
 		string="%s\n%s"%(string,fielddisplay(self,"recording_frequency","frequency at which the runs are being recorded, allowing for a restart"))
 		string="%s\n%s"%(string,fielddisplay(self,"waitonlock","maximum number of minutes to wait for batch results, or return 0"))
@@ -47,4 +49,7 @@
 		self.output_frequency=1
 
+		#coupling frequency of the stress balance solver by default every step
+		self.sb_coupling_frequency=1
+		
 		#checkpoints frequency, by default never: 
 		self.recording_frequency=0
@@ -67,4 +72,5 @@
 		md = checkfield(md,'fieldname','settings.lowmem','numel',[1],'values',[0,1])
 		md = checkfield(md,'fieldname','settings.output_frequency','numel',[1],'>=',1)
+		md = checkfield(md,'fieldname','settings.sb_coupling_frequency','numel',[1],'>=',1)
 		md = checkfield(md,'fieldname','settings.recording_frequency','numel',[1],'>=',0)
 		md = checkfield(md,'fieldname','settings.waitonlock','numel',[1])
@@ -78,4 +84,5 @@
 		WriteData(fid,prefix,'object',self,'class','settings','fieldname','lowmem','format','Boolean')
 		WriteData(fid,prefix,'object',self,'class','settings','fieldname','output_frequency','format','Integer')
+		WriteData(fid,prefix,'object',self,'class','settings','fieldname','sb_coupling_frequency','format','Integer')
 		WriteData(fid,prefix,'object',self,'class','settings','fieldname','recording_frequency','format','Integer')
 		
