Index: /issm/trunk-jpl/src/m/classes/SMBsemic.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBsemic.m	(revision 27510)
+++ /issm/trunk-jpl/src/m/classes/SMBsemic.m	(revision 27511)
@@ -32,7 +32,7 @@
 
 		% albedo
-		albedo            = 0;
-		albedo_snow       = 0;
-		albedo_scheme     = 0;
+		albedo            = 0; % required for first energy balance calculation of SEMIC.
+		albedo_snow       = 0; % required for ISBA method.
+		albedo_scheme     = 0; 
 		alb_smax = NaN;
 		alb_smin = NaN;
@@ -40,6 +40,23 @@
 		albl = NaN;
 
+		% albedo parameters depending on albedo_scheme
+		% for slater 
+		tmin = NaN;
+		tmax = NaN;
+
+		% for isba & denby method
+		mcrit = NaN;
+
+		% for isba
+		tau_a = NaN;
+		tau_f = NaN;
+		wcrit = NaN;
+
+		% for alex
+		tmid = NaN;
+		afac = NaN;
+
 		% method
-		ismethod          = 0;
+		ismethod  = 0;
 	end
 	methods
@@ -68,4 +85,12 @@
 			list = {'SmbMassBalance'};
 		end % }}}
+		function list = outputlists(self,md) % {{{
+			if self.ismethod == 1
+				list = {'SmbMassBalance','SmbMassBalanceSnow','SmbMelt','SmbAccumulation',...
+					'SmbHIce','SmbHSnow','SmbAlbedo','SmbAlbedoSnow','TemperatureSEMIC'};
+			else
+				list = {'SmbMassBalance'};
+			end
+		end % }}}
 		function self = initialize(self,md) % {{{
 
@@ -75,6 +100,6 @@
 			end
 			self.Tamp       = 3*ones(md.mesh.numberofvertices,1);
-			self.albedo     = 0.8*ones(md.mesh.numberofvertices,1);
-			self.albedo_snow= 0.5*ones(md.mesh.numberofvertices,1);
+			%self.albedo     = 0.8*ones(md.mesh.numberofvertices,1);
+			%self.albedo_snow= 0.5*ones(md.mesh.numberofvertices,1);
 			self.hice       = zeros(md.mesh.numberofvertices,1);
 			self.hsnow      = 5*ones(md.mesh.numberofvertices,1);
@@ -82,4 +107,5 @@
 		function self = setdefaultparameters(self) % {{{
 
+			% albedo parameters
 			self.albedo_scheme   = 0;
 			self.alb_smax = 0.79;
@@ -87,4 +113,18 @@
 			self.albi = 0.41;
 			self.albl = 0.07;
+
+			% albedo parameters for?
+			% for slater
+			self.tmin  = 263.15;
+			self.tmax  = 273.15;
+			% for isba & denby
+			self.mcrit = 6e-8;
+			% for isba
+			self.tau_a = 0.008;
+			self.tau_f = 0.24;
+			self.wcrit = 15.0;
+			% for alex
+			self.tmid  = 273.35;
+			self.afac  = -0.18;
 
 			self.hcrit = 0.028;% from Krapp et al. (2017)
@@ -181,4 +221,30 @@
 				fielddisplay(self,'albi','background albeod for bare ice (default: 0.41)');
 				fielddisplay(self,'albl','background albeod for bare land (default: 0.07)');
+			end
+			% albeod_scheme - 0: none, 1: slater, 2: isba, 3: denby, 4: alex.
+			if self.albedo_scheme == 1
+				disp(sprintf('\n\tSEMIC snow albedo parameters for Slater et al, (1998).'));
+				disp(sprintf('\t   alb = alb_smax - (alb_smax - alb_smin)*tm^(3.0)'))
+				disp(sprintf('\t   tm  = 1 (tsurf > 273.15 K)'));
+				disp(sprintf('\t         tm = f*(tsurf-tmin) (tmin <= tsurf < 273.15)'));
+				disp(sprintf('\t         0 (tsurf < tmin)'));
+				disp(sprintf('\t   f = 1/(273.15-tmin)'));
+				fielddisplay(self,'tmin','minimum temperature for which albedo decline become effective. (default: 263.15 K)[unit: K])');
+				fielddisplay(self,'tmax','maxmium temperature for which albedo decline become effective. This value should be fixed. (default: 273.15 K)[unit: K])');
+			elseif self.albedo_scheme == 2,
+				disp(sprintf('\n\tSEMIC snow albedo parameters for ISBA.? where is citation?'));
+				fielddisplay(self,'mcrit','critical melt rate (defaut: 6e-8) [unit: m/sec]');
+				fielddisplay(self,'wcrit','critical liquid water content (defaut: 15) [unit: kg/m2]');
+				fielddisplay(self,'tau_a','dry albedo decline [unit: 1/day]');
+				fielddisplay(self,'tau_f','wet albedo decline [unit: 1/day]');
+			elseif self.albedo_scheme == 3,
+				disp(sprintf('\n\tSEMIC snow albedo parameters for Denby et al. (2002 Tellus)'));
+				fielddisplay(self,'mcrit','critical melt rate (defaut: 6e-8) [unit: m/sec]');
+			elseif self.albedo_scheme == 4,
+				disp(sprintf('\n\tSEMIC snow albedo parameters for Alex.?'));
+				fielddisplay(self,'afac','[unit: ?]');
+				fielddisplay(self,'tmid','[unit: ?]');
+			else
+				error(sprintf('ERROR: %d is not supported albedom scheme.',self.albedo_scheme))
 			end
 
@@ -229,4 +295,18 @@
 				WriteData(fid,prefix,'object',self,'class','smb','fieldname','alb_smin','format','Double');
 				WriteData(fid,prefix,'object',self,'class','smb','fieldname','alb_smax','format','Double');
+
+				%abledo parameters for ?
+				%for slater
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','tmin','format','Double');
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','tmax','format','Double');
+				%for isba & denby
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','mcrit','format','Double');
+				%for isba
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','wcrit','format','Double');
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','tau_a','format','Double');
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','tau_f','format','Double');
+				%for alex
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','tmid','format','Double');
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','afac','format','Double');
 			end
 
