Index: /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 27509)
+++ /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 27510)
@@ -221,15 +221,15 @@
 			// assign initial SEMIC temperature from initialization class.
 			if(VerboseSolution()) _printf0_("   smb semic: UpdateElements - temperature.\n");
-			iomodel->FetchDataToInput(inputs,elements,"md.initialization.temperature",TemperatureSEMICEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.initialization.temperature",TemperatureEnum);
 
 			iomodel->FindConstant(&ismethod,"md.smb.ismethod");
 			if (ismethod == 1){
-				// initial albedo
-				if(VerboseSolution()) _printf0_("   smb semic: UpdateElements - albedo.\n");
-				iomodel->FetchDataToInput(inputs,elements,"md.smb.albedo",SmbAlbedoEnum);
-				iomodel->FetchDataToInput(inputs,elements,"md.smb.albedo_snow",SmbAlbedoSnowEnum);
+				// initial albedo: TODO: this is not needed.
+				//if(VerboseSolution()) _printf0_("   smb semic: UpdateElements - albedo.\n");
+				iomodel->FetchDataToInput(inputs,elements,"md.smb.albedo",SmbAlbedoInitEnum);
+				iomodel->FetchDataToInput(inputs,elements,"md.smb.albedo_snow",SmbAlbedoSnowInitEnum);
 				if(VerboseSolution()) _printf0_("   smb semic: UpdateElements - Hice/Hsnow.\n");
-				iomodel->FetchDataToInput(inputs,elements,"md.smb.hice",SmbHIceEnum);
-				iomodel->FetchDataToInput(inputs,elements,"md.smb.hsnow",SmbHSnowEnum);
+				iomodel->FetchDataToInput(inputs,elements,"md.smb.hice",SmbHIceInitEnum);
+				iomodel->FetchDataToInput(inputs,elements,"md.smb.hsnow",SmbHSnowInitEnum);
 
 				// initial Temperature amplitude.
@@ -456,4 +456,18 @@
 				parameters->AddObject(iomodel->CopyConstantObject("md.smb.albi",SmbAlbedoIceEnum));
 				parameters->AddObject(iomodel->CopyConstantObject("md.smb.albl",SmbAlbedoLandEnum));
+
+				//albedo parameter - slatter
+				parameters->AddObject(iomodel->CopyConstantObject("md.smb.tmin",SmbSemicTmaxEnum));
+				parameters->AddObject(iomodel->CopyConstantObject("md.smb.tmax",SmbSemicTminEnum));
+
+				//albedo parameter - isba & denby
+				parameters->AddObject(iomodel->CopyConstantObject("md.smb.mcrit",SmbSemicMcritEnum));
+				//albedo parameter - isba
+				parameters->AddObject(iomodel->CopyConstantObject("md.smb.tau_a",SmbSemicTauAEnum)); 
+				parameters->AddObject(iomodel->CopyConstantObject("md.smb.tau_f",SmbSemicTauFEnum));
+				parameters->AddObject(iomodel->CopyConstantObject("md.smb.wcrit",SmbSemicWcritEnum));
+				//albedo parameter - alex
+				parameters->AddObject(iomodel->CopyConstantObject("md.smb.tmid",SmbSemicTmidEnum));
+				parameters->AddObject(iomodel->CopyConstantObject("md.smb.afac",SmbSemicAfacEnum));
 			}
 			/*Nothing to add to parameters*/
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 27509)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 27510)
@@ -30,11 +30,14 @@
 extern "C" void run_semic_(IssmDouble *sf_in, IssmDouble *rf_in, IssmDouble *swd_in, IssmDouble *lwd_in, IssmDouble *wind_in, IssmDouble *sp_in, IssmDouble *rhoa_in,
 			IssmDouble *qq_in, IssmDouble *tt_in, IssmDouble *tsurf_out, IssmDouble *smb_out, IssmDouble *saccu_out, IssmDouble *smelt_out);
+
 extern "C" void run_semic_transient_(IssmDouble *sf_in, IssmDouble *rf_in, IssmDouble *swd_in, IssmDouble *lwd_in, IssmDouble *wind_in, IssmDouble *sp_in, IssmDouble *rhoa_in,
 			IssmDouble *qq_in, IssmDouble *tt_in, IssmDouble *tsurf_in, IssmDouble *tstic,
 			IssmDouble *hcrit, IssmDouble *rcrit,
 			IssmDouble *mask, IssmDouble *hice, IssmDouble *hsnow,
-			IssmDouble *albedo, IssmDouble *albedo_snow, int *alb_scheme, IssmDouble *alb_smax, IssmDouble *alb_smin, IssmDouble *albi, IssmDouble *albl,
+			IssmDouble *albedo_in, IssmDouble *albedo_snow_in,
+			int *alb_scheme, IssmDouble *alb_smax, IssmDouble *alb_smin, IssmDouble *albi, IssmDouble *albl,
 			IssmDouble *Tamp, 
-			IssmDouble *tsurf_out, IssmDouble *smb_out, IssmDouble *saccu_out, IssmDouble *smelt_out, IssmDouble *albedo_out, IssmDouble *albedo_snow_out, IssmDouble *hsnow_out, IssmDouble *hice_out);
+			IssmDouble *tmin, IssmDouble *tmax, IssmDouble *tmid, IssmDouble *mcrit, IssmDouble *wcrit, IssmDouble *tau_a, IssmDouble* tau_f, IssmDouble *afac,
+			IssmDouble *tsurf_out, IssmDouble *smb_out, IssmDouble *smbi_out, IssmDouble *smbs_out, IssmDouble *saccu_out, IssmDouble *smelt_out, IssmDouble *albedo_out, IssmDouble *albedo_snow_out, IssmDouble *hsnow_out, IssmDouble *hice_out);
 #endif
 // _HAVE_SEMIC_
@@ -4254,4 +4257,6 @@
 	IssmDouble* tsurf_out  =xNew<IssmDouble>(NUM_VERTICES); memset(tsurf_out, 0., NUM_VERTICES*sizeof(IssmDouble));
 	IssmDouble* smb_out    =xNew<IssmDouble>(NUM_VERTICES); memset(smb_out, 0., NUM_VERTICES*sizeof(IssmDouble));
+	IssmDouble* smbi_out   =xNew<IssmDouble>(NUM_VERTICES); memset(smb_out, 0., NUM_VERTICES*sizeof(IssmDouble));
+	IssmDouble* smbs_out   =xNew<IssmDouble>(NUM_VERTICES); memset(smb_out, 0., NUM_VERTICES*sizeof(IssmDouble));
 	IssmDouble* saccu_out  =xNew<IssmDouble>(NUM_VERTICES); memset(saccu_out, 0., NUM_VERTICES*sizeof(IssmDouble));
 	IssmDouble* smelt_out  =xNew<IssmDouble>(NUM_VERTICES); memset(smelt_out, 0., NUM_VERTICES*sizeof(IssmDouble));
@@ -4263,8 +4268,14 @@
 	IssmDouble rho_water,rho_ice,desfac,desfacElev,rlaps,rdl;
 	IssmDouble alb_smax, alb_smin, albi, albl;
+	IssmDouble hcrit, rcrit; // parameters for ? and refreezing.
 	int alb_scheme;
-	IssmDouble hcrit, rcrit;
-
-	IssmDouble time,yts,time_yr,dt;
+	// albedo parameters - slatter
+	IssmDouble tmin, tmax;
+	// albedo parameters - isba
+	IssmDouble mcrit, tau_a, tau_f, wcrit;
+	// albedo parameters - alex
+	IssmDouble tmid, afac;
+
+	IssmDouble tstart, time,yts,time_yr,dt;
 
 	/* Get time: */
@@ -4272,9 +4283,10 @@
 	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
 	this->parameters->FindParam(&yts,ConstantsYtsEnum);
+	this->parameters->FindParam(&tstart,TimesteppingStartTimeEnum);
 	time_yr=floor(time/yts)*yts;
 	//dt = dt * yts;
 
 	/*Get material parameters :*/
-	rho_water=this->FindParam(MaterialsRhoSeawaterEnum);
+	rho_water=this->FindParam(MaterialsRhoFreshwaterEnum);
 	rho_ice=this->FindParam(MaterialsRhoIceEnum);
 	desfac=this->FindParam(SmbDesfacEnum);
@@ -4290,4 +4302,14 @@
 	albi=this->FindParam(SmbAlbedoIceEnum);
 	albl=this->FindParam(SmbAlbedoLandEnum);
+
+	// albedo parameters
+	this->FindParam(&tmid,SmbSemicTmidEnum);
+	this->FindParam(&tmin,SmbSemicTminEnum);
+	this->FindParam(&tmax,SmbSemicTmaxEnum);
+	this->FindParam(&mcrit,SmbSemicMcritEnum);
+	this->FindParam(&wcrit,SmbSemicWcritEnum);
+	this->FindParam(&tau_a,SmbSemicTauAEnum);
+	this->FindParam(&tau_f,SmbSemicTauFEnum);
+	this->FindParam(&afac,SmbSemicAfacEnum);
 
 	/* Recover info at the vertices: */
@@ -4314,11 +4336,25 @@
 	Input* dailytemperature_input = this->GetInput(SmbDailytemperatureEnum,time); _assert_(dailytemperature_input);
 
-	Input* tsurf_input            = this->GetInput(TemperatureSEMICEnum); _assert_(tsurf_in);
+	/*temporal Enum depending on time*/
+	int enum_temp =TemperatureSEMICEnum;
+	int enum_hice =SmbHIceEnum;
+	int enum_hsnow=SmbHSnowEnum;
+	int enum_albedo=SmbAlbedoEnum;
+	int enum_albedo_snow=SmbAlbedoSnowEnum;
+	if (tstart+dt == time) {
+		/* Load inital value at first time step*/
+		enum_temp=TemperatureEnum;
+		enum_hice=SmbHIceInitEnum;
+		enum_hsnow=SmbHSnowInitEnum;
+		enum_albedo=SmbAlbedoInitEnum;
+		enum_albedo_snow=SmbAlbedoSnowInitEnum;
+	} 
+	Input* tsurf_input       = this->GetInput(enum_temp); _assert_(tsurf_in);
 	Input* mask_input        = this->GetInput(SmbMaskEnum); _assert_(mask_input);
 	Input* Tamp_input        = this->GetInput(SmbTampEnum); _assert_(Tamp_input);
-	Input* albedo_input      = this->GetInput(SmbAlbedoEnum); _assert_(albedo_input);
-	Input* albedo_snow_input = this->GetInput(SmbAlbedoSnowEnum); _assert_(albedo_snow_input);
-	Input* hice_input        = this->GetInput(SmbHIceEnum); _assert_(hice_input);
-	Input* hsnow_input       = this->GetInput(SmbHSnowEnum); _assert_(hsnow_input);
+	Input* albedo_input      = this->GetInput(enum_albedo); _assert_(albedo_input);
+	Input* albedo_snow_input = this->GetInput(enum_albedo_snow); _assert_(albedo_snow_input);
+	Input* hice_input        = this->GetInput(enum_hice); _assert_(hice_input);
+	Input* hsnow_input       = this->GetInput(enum_hsnow); _assert_(hsnow_input);
 
 	if(VerboseSmb() && this->Sid()==0)_printf0_("smb core: assign inputs.\n");
@@ -4338,8 +4374,8 @@
 
 		/* Get Albedo information */
+		albedo_input->GetInputValue(&albedo_in[iv],gauss);
+		albedo_snow_input->GetInputValue(&albedo_snow_in[iv],gauss);
 		mask_input->GetInputValue(&mask_in[iv],gauss);
 		Tamp_input->GetInputValue(&Tamp_in[iv],gauss);
-		albedo_input->GetInputValue(&albedo_in[iv],gauss);
-		albedo_snow_input->GetInputValue(&albedo_snow_in[iv],gauss);
 
 		hsnow_input->GetInputValue(&hsnow_in[iv],gauss);
@@ -4371,4 +4407,5 @@
 		_printf0_("smb core: assign albedo          :" << albedo_in[0] << "\n");
 		_printf0_("smb core: assign albedo_snow     :" << albedo_snow_in[0] << "\n");
+		_printf0_("smb core: assign albedo_scheme   :" << alb_scheme  << "\n");
 	}
 
@@ -4380,19 +4417,34 @@
 				&hcrit, &rcrit, 
 				&mask_in[iv], &hice_in[iv], &hsnow_in[iv], 
-				&albedo_in[iv], &albedo_snow_in[iv], &alb_scheme, &alb_smax, &alb_smin, &albi, &albl,
+				&albedo_in[iv], &albedo_snow_in[iv],
+				&alb_scheme, &alb_smax, &alb_smin, &albi, &albl,
 				&Tamp_in[iv],
-				&tsurf_out[iv], &smb_out[iv], &saccu_out[iv], &smelt_out[iv],&albedo_out[iv], &albedo_snow_out[iv], &hsnow_out[iv], &hice_out[iv]);
+				&tmin, &tmax, &tmid, &mcrit, &wcrit, &tau_a, &tau_f, &afac,
+				&tsurf_out[iv], &smb_out[iv], &smbi_out[iv], &smbs_out[iv], &saccu_out[iv], &smelt_out[iv],&albedo_out[iv], &albedo_snow_out[iv], &hsnow_out[iv], &hice_out[iv]);
+
+		/* unit conversion: water -> ice */
+		smbi_out[iv] = smbi_out[iv]*rho_water/rho_ice;
+		smbs_out[iv] = smbs_out[iv]*yts; // m/sec -> m/yr
 	}
 
 	if(VerboseSmb() && this->Sid()==0){
-		_printf0_("smb core: tsurf_out " << tsurf_out[0] << "\n");
+		_printf0_("smb core: tsurf_out[0] " << tsurf_out[0] << "\n");
+		_printf0_("smb core: hice_out[0]  " << hice_out[0] << "\n");
+		_printf0_("smb core: hsnow_out[0] " << hsnow_out[0] << "\n");
+		_printf0_("smb core: smb_ice[0]   " << smbi_out[0]*yts << "\n");
 	}
 
 	switch(this->ObjectEnum()){
 		case TriaEnum:
-			//this->AddInput(TemperatureEnum,&tsurf_out[0],P1Enum); // TODO add TemperatureSEMICEnum to EnumDefinitions
-			this->AddInput(TemperatureSEMICEnum,&tsurf_out[0],P1DGEnum); // TODO add TemperatureSEMICEnum to EnumDefinitions
-			this->AddInput(SmbMassBalanceEnum,&smb_out[0],P1DGEnum);
+			this->AddInput(TemperatureSEMICEnum,&tsurf_out[0],P1DGEnum);
+			// SMBout = SMB_ice + SMB_snow values.
+			//this->AddInput(SmbMassBalanceTotalEnum,&smb_out[0],P1DGEnum);
+			// water equivalent SMB ice to ice equivalent.
+			this->AddInput(SmbMassBalanceEnum,&smbi_out[0],P1DGEnum);
+			this->AddInput(SmbMassBalanceSnowEnum,&smbs_out[0],P1DGEnum);
+			//this->AddInput(SmbMassBalanceSnowEnum,&smbs_out[0],P1DGEnum);
+			// saccu - accumulation of snow.
 			this->AddInput(SmbAccumulationEnum,&saccu_out[0],P1DGEnum);
+			// smelt 
 			this->AddInput(SmbMeltEnum,&smelt_out[0],P1DGEnum);
 			this->AddInput(SmbAlbedoEnum,&albedo_out[0],P1DGEnum);
@@ -4425,4 +4477,6 @@
 	xDelete<IssmDouble>(tsurf_out);
 	xDelete<IssmDouble>(smb_out);
+	xDelete<IssmDouble>(smbi_out);
+	xDelete<IssmDouble>(smbs_out);
 	xDelete<IssmDouble>(saccu_out);
 	xDelete<IssmDouble>(smelt_out);
@@ -4434,6 +4488,6 @@
 	xDelete<IssmDouble>(mask_in);
 	xDelete<IssmDouble>(Tamp_in);
+	xDelete<IssmDouble>(albedo_in);
 	xDelete<IssmDouble>(albedo_snow_in);
-	xDelete<IssmDouble>(albedo_in);
 	xDelete<IssmDouble>(tsurf_in);
 	xDelete<IssmDouble>(s);
Index: /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/run_semic_transient.f90
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/run_semic_transient.f90	(revision 27509)
+++ /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/run_semic_transient.f90	(revision 27510)
@@ -3,7 +3,9 @@
       hcrit, rcrit, &
       mask, hice, hsnow, &
-      albedo, albedo_snow, alb_scheme, alb_smax, alb_smin, albi, albl, &
+      albedo, albedo_snow, &
+      alb_scheme, alb_smax, alb_smin, albi, albl, &
       Tamp, &
-      tsurf_out, smb_out, saccu_out, smelt_out, alb_out, alb_snow_out,hsnow_out,hice_out)
+      tmin, tmax, tmid, mcrit, w_crit, tau_a, tau_f, afac, &
+      tsurf_out, smb_out, smbi_out, smbs_out, saccu_out, smelt_out, alb_out, alb_snow_out,hsnow_out,hice_out)
 
    use utils
@@ -20,5 +22,5 @@
 
    integer, parameter:: dp=kind(0.d0)  !< define precision (machine specific)
-   integer :: i, k, nx, nloop, ntime, year
+   integer :: i, k, nx, nloop, year
    integer :: day=1 !< not used value.
 
@@ -41,4 +43,6 @@
    double precision :: tsurf_out  ! Ice surface Temperature [K]
    double precision :: smb_out    ! surface mass balance=(Accu-Melt) [m/s]
+   double precision :: smbi_out   ! SMB ice  [water equivalent m/s]
+   double precision :: smbs_out   ! SMB snow [water equivalent m/s]
    double precision :: saccu_out  ! accumulation [m/s]
    double precision :: smelt_out  ! ablation [m/s]
@@ -72,17 +76,16 @@
    double precision    :: csh
    double precision    :: clh
-   double precision    :: tmin
-   double precision    :: tmax
+   double precision, intent(in) :: tmin
+   double precision, intent(in) :: tmax
    double precision    :: tsticsub
    ! parameters for isba albedo scheme.
-   double precision    :: tau_a  !< critical liquide water concent for "isba" albedo scheme [kg/m2]
-   double precision    :: tau_f
-   double precision    :: w_crit
-   double precision    :: mcrit
-   double precision    :: afac !< param
-   double precision    :: tmid !< param for "alex" albedo parameterization [K]
+   double precision, intent(in) :: tau_a  !< critical liquide water concent for "isba" albedo scheme [kg/m2]
+   double precision, intent(in) :: tau_f
+   double precision, intent(in) :: w_crit
+   double precision, intent(in) :: mcrit
+   double precision, intent(in) :: afac !< param
+   double precision, intent(in) :: tmid !< param for "alex" albedo parameterization [K]
 
    nx = 1
-   ntime = 365
    year = 0
 
@@ -95,5 +98,5 @@
    !forc%swd(:,:) = swd_in    ! short radiation
    !forc%lwd(:,:) = lwd_in    ! long radiation downward
-   !forc%wind(:,:) = wind_ina ! wind speed.
+   !forc%wind(:,:) = wind_in  ! wind speed.
    !forc%sp(:,:) = sp_in      ! surface pressure
    !forc%rhoa(:,:) = rhoa_in  ! air density [kg/m3]
@@ -106,12 +109,12 @@
    surface%par%tstic = tstic      !< time step [s]
    surface%par%ceff= 2.0e6_dp     !< surface heat capacity of snow/ice [J/K/m2]
-   surface%par%csh = 2.0e-3_dp
-   surface%par%clh = 5.0e-4_dp    !< latent heat exchange coefficient [no unit]
+   surface%par%csh = 2.0e-3_dp    !< turbulent heat exchange coefficient 
+   surface%par%clh = 5.0e-4_dp    !< turbulent heat exchange coefficient [no unit]
    surface%par%alb_smax = alb_smax !0.79_dp !< max snow albedo
    surface%par%alb_smin = alb_smin !0.6_dp  !< min snow albedo
    surface%par%albi = albi !0.41_dp     !< albedo for ice
    surface%par%albl = albl !0.07_dp     !< albedo for land
-   surface%par%tmin = -999_dp
-   surface%par%tmax = 273.15_dp
+   surface%par%tmin = tmin ! -999_dp
+   surface%par%tmax = tmax ! 273.15_dp
    surface%par%hcrit = hcrit !0.028_dp   !< critical snow height for which grid cell is 50 % snow colvered [m]
    surface%par%rcrit = rcrit !0.85_dp    !< refreezing fraction is 50% [m]
@@ -126,9 +129,12 @@
       surface%par%alb_scheme = "isba"
    end if 
-   surface%par%tau_a = 0.008_dp
-   surface%par%tau_f = 0.24_dp
-   surface%par%w_crit = 15.0_dp
-   surface%par%mcrit = 6.0e-8_dp
+   surface%par%tau_a  = tau_a  !0.008_dp
+   surface%par%tau_f  = tau_f  !0.24_dp
+   surface%par%w_crit = w_crit !15.0_dp ! default value
+   surface%par%mcrit  = mcrit  !6.0e-8_dp
    surface%par%n_ksub = 3.0_dp
+   ! snow albedo of alex
+   surface%par%afac   = afac
+   surface%par%tmid   = tmid
    
    ! initialize sub-daily time step tsticsub
@@ -140,14 +146,11 @@
    ! initialise prognostic variables
    ! these values will be updated through "surface_energy_and_mass_balance" function.
-   surface%now%mask(:)     = mask   ! 2.0_dp  !loi_mask(:nx)
-   surface%now%hsnow(:)    = hsnow  ! 1.0_dp !< snow height...
-   surface%now%hice(:)     = hice   ! 0.0_dp !< ice thickness...
+   surface%now%mask(:)     = mask        ! 2.0_dp  !loi_mask(:nx)
+   surface%now%hsnow(:)    = hsnow       ! initial snow height...
+   surface%now%hice(:)     = hice        ! initial ice height..
    surface%now%tsurf(:)    = tsurf_in
-   surface%now%alb(:)      = albedo ! 0.8_dp   !< initial albedo
-   surface%now%alb_snow(:) = albedo_snow ! 0.8_dp
-   !surface%now%acc(:)   = 0.0_dp
-   !surface%now%smb(:)   = 0.0_dp
-   !surface%now%melt(:)  = 0.0_dp
-   surface%now%qmr_res(:) = 0.0_dp
+   surface%now%alb(:)      = albedo      !< initial albedo for energy balance.
+   surface%now%alb_snow(:) = albedo_snow !< initial albedo for ISBA albedo method.
+   surface%now%qmr_res(:)  = 0.0_dp ! residual heat.
 
    ! initialize with zeros
@@ -155,8 +158,11 @@
 
    tsurf_out = 0.0_dp
-   smb_out = 0.0_dp
+   smb_out   = 0.0_dp
+   smbi_out  = 0.0_dp
+   smbs_out  = 0.0_dp
    saccu_out = 0.0_dp
    smelt_out = 0.0_dp
-   alb_out = 0.0_dp
+   alb_out      = 0.0_dp
+   alb_snow_out = 0.0_dp
 
    ! define boundary conditions (not used, here!)
@@ -164,14 +170,4 @@
    !call print_boundary_opt(surface%bnd)
 
-
-   !surface%now%sf = forc%sf(1,day)
-   !surface%now%rf = forc%rf(1,day)
-   !surface%now%sp = forc%sp(1,day)
-   !surface%now%lwd = forc%lwd(1,day)
-   !surface%now%swd = forc%swd(1,day)
-   !surface%now%wind = forc%wind(1,day)
-   !surface%now%rhoa = forc%rhoa(1,day)
-   !surface%now%t2m = forc%tt(1,day)
-   !surface%now%qq = forc%qq(1,day)
    
    ! input with single value
@@ -194,10 +190,14 @@
    tsurf_out=surface%now%tsurf(1)
    ! melt - potential surface melt [m/s]
-   ! smb
-   smb_out   =surface%now%smb(1) !*1.0_dp/365.0_dp
-   saccu_out =surface%now%acc(1) !*1.0_dp/365.0_dp
-   smelt_out =surface%now%melt(1)!*1.0_dp/365.0_dp
-   alb_out   =surface%now%alb(1)
-   alb_snow_out  =surface%now%alb_snow(1)
+   ! smb = SMB_ice + SMB_snow
+   ! smbi  - SMB_ice  (water equivalent m/sec)
+   ! smbs  - SMB_snow (water equivalent m/sec)
+   smb_out   =surface%now%smb(1)      ! smb = smb_snow + smb_ice
+   smbi_out  =surface%now%smb_ice(1)  ! Csi (snow>ice) - melted_ice + refrezon_rain.
+   smbs_out  =surface%now%smb_snow(1) ! smb_snow = snowfall - sublimiation - melted_snow + refrozen_snow
+   saccu_out =surface%now%acc(1)      ! acc      = snowfall - sublimiation - refreezing 
+   smelt_out =surface%now%melt(1)     ! potential surface melt = melt_ice + melt_snow
+   alb_out      =surface%now%alb(1)      
+   alb_snow_out =surface%now%alb_snow(1)
    qmr_out    =surface%now%qmr(1)
    hsnow_out  =surface%now%hsnow(1)
Index: /issm/trunk-jpl/src/c/shared/Enum/Enum.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 27509)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 27510)
@@ -588,4 +588,12 @@
 syn keyword cConstant SmbSemicHcritEnum
 syn keyword cConstant SmbSemicRcritEnum
+syn keyword cConstant SmbSemicWcritEnum
+syn keyword cConstant SmbSemicMcritEnum
+syn keyword cConstant SmbSemicAfacEnum
+syn keyword cConstant SmbSemicTauAEnum
+syn keyword cConstant SmbSemicTauFEnum
+syn keyword cConstant SmbSemicTminEnum
+syn keyword cConstant SmbSemicTmidEnum
+syn keyword cConstant SmbSemicTmaxEnum
 syn keyword cConstant SmbStepsPerStepEnum
 syn keyword cConstant SmbSwIdxEnum
@@ -1021,5 +1029,7 @@
 syn keyword cConstant SmbAccumulatedRunoffEnum
 syn keyword cConstant SmbAlbedoEnum
+syn keyword cConstant SmbAlbedoInitEnum
 syn keyword cConstant SmbAlbedoSnowEnum
+syn keyword cConstant SmbAlbedoSnowInitEnum
 syn keyword cConstant SmbAEnum
 syn keyword cConstant SmbAdiffEnum
@@ -1070,9 +1080,12 @@
 syn keyword cConstant SmbGspiniEnum
 syn keyword cConstant SmbHIceEnum
+syn keyword cConstant SmbHIceInitEnum
 syn keyword cConstant SmbHSnowEnum
+syn keyword cConstant SmbHSnowInitEnum
 syn keyword cConstant SmbHrefEnum
 syn keyword cConstant SmbIsInitializedEnum
 syn keyword cConstant SmbMAddEnum
 syn keyword cConstant SmbMassBalanceEnum
+syn keyword cConstant SmbMassBalanceSnowEnum
 syn keyword cConstant SmbMassBalanceSubstepEnum
 syn keyword cConstant SmbMassBalanceTransientEnum
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 27509)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 27510)
@@ -582,4 +582,12 @@
 	SmbSemicHcritEnum,
 	SmbSemicRcritEnum,
+	SmbSemicWcritEnum,
+	SmbSemicMcritEnum,
+	SmbSemicAfacEnum,
+	SmbSemicTauAEnum,
+	SmbSemicTauFEnum,
+	SmbSemicTminEnum,
+	SmbSemicTmidEnum,
+	SmbSemicTmaxEnum,
 	SmbStepsPerStepEnum,
 	SmbSwIdxEnum,
@@ -1017,5 +1025,7 @@
 	SmbAccumulatedRunoffEnum,
 	SmbAlbedoEnum,
+	SmbAlbedoInitEnum,
 	SmbAlbedoSnowEnum,
+	SmbAlbedoSnowInitEnum,
 	SmbAEnum,
 	SmbAdiffEnum,
@@ -1066,9 +1076,12 @@
 	SmbGspiniEnum,
 	SmbHIceEnum,
+	SmbHIceInitEnum,
 	SmbHSnowEnum,
+	SmbHSnowInitEnum,
 	SmbHrefEnum,
 	SmbIsInitializedEnum,
 	SmbMAddEnum,
 	SmbMassBalanceEnum,
+	SmbMassBalanceSnowEnum,
    SmbMassBalanceSubstepEnum,
    SmbMassBalanceTransientEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 27509)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 27510)
@@ -590,4 +590,12 @@
 		case SmbSemicHcritEnum : return "SmbSemicHcrit";
 		case SmbSemicRcritEnum : return "SmbSemicRcrit";
+		case SmbSemicWcritEnum : return "SmbSemicWcrit";
+		case SmbSemicMcritEnum : return "SmbSemicMcrit";
+		case SmbSemicAfacEnum : return "SmbSemicAfac";
+		case SmbSemicTauAEnum : return "SmbSemicTauA";
+		case SmbSemicTauFEnum : return "SmbSemicTauF";
+		case SmbSemicTminEnum : return "SmbSemicTmin";
+		case SmbSemicTmidEnum : return "SmbSemicTmid";
+		case SmbSemicTmaxEnum : return "SmbSemicTmax";
 		case SmbStepsPerStepEnum : return "SmbStepsPerStep";
 		case SmbSwIdxEnum : return "SmbSwIdx";
@@ -1023,5 +1031,7 @@
 		case SmbAccumulatedRunoffEnum : return "SmbAccumulatedRunoff";
 		case SmbAlbedoEnum : return "SmbAlbedo";
+		case SmbAlbedoInitEnum : return "SmbAlbedoInit";
 		case SmbAlbedoSnowEnum : return "SmbAlbedoSnow";
+		case SmbAlbedoSnowInitEnum : return "SmbAlbedoSnowInit";
 		case SmbAEnum : return "SmbA";
 		case SmbAdiffEnum : return "SmbAdiff";
@@ -1072,9 +1082,12 @@
 		case SmbGspiniEnum : return "SmbGspini";
 		case SmbHIceEnum : return "SmbHIce";
+		case SmbHIceInitEnum : return "SmbHIceInit";
 		case SmbHSnowEnum : return "SmbHSnow";
+		case SmbHSnowInitEnum : return "SmbHSnowInit";
 		case SmbHrefEnum : return "SmbHref";
 		case SmbIsInitializedEnum : return "SmbIsInitialized";
 		case SmbMAddEnum : return "SmbMAdd";
 		case SmbMassBalanceEnum : return "SmbMassBalance";
+		case SmbMassBalanceSnowEnum : return "SmbMassBalanceSnow";
 		case SmbMassBalanceSubstepEnum : return "SmbMassBalanceSubstep";
 		case SmbMassBalanceTransientEnum : return "SmbMassBalanceTransient";
Index: /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim	(revision 27509)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim	(revision 27510)
@@ -581,4 +581,12 @@
 syn keyword juliaConstC SmbSemicHcritEnum
 syn keyword juliaConstC SmbSemicRcritEnum
+syn keyword juliaConstC SmbSemicWcritEnum
+syn keyword juliaConstC SmbSemicMcritEnum
+syn keyword juliaConstC SmbSemicAfacEnum
+syn keyword juliaConstC SmbSemicTauAEnum
+syn keyword juliaConstC SmbSemicTauFEnum
+syn keyword juliaConstC SmbSemicTminEnum
+syn keyword juliaConstC SmbSemicTmidEnum
+syn keyword juliaConstC SmbSemicTmaxEnum
 syn keyword juliaConstC SmbStepsPerStepEnum
 syn keyword juliaConstC SmbSwIdxEnum
@@ -1014,5 +1022,7 @@
 syn keyword juliaConstC SmbAccumulatedRunoffEnum
 syn keyword juliaConstC SmbAlbedoEnum
+syn keyword juliaConstC SmbAlbedoInitEnum
 syn keyword juliaConstC SmbAlbedoSnowEnum
+syn keyword juliaConstC SmbAlbedoSnowInitEnum
 syn keyword juliaConstC SmbAEnum
 syn keyword juliaConstC SmbAdiffEnum
@@ -1063,9 +1073,12 @@
 syn keyword juliaConstC SmbGspiniEnum
 syn keyword juliaConstC SmbHIceEnum
+syn keyword juliaConstC SmbHIceInitEnum
 syn keyword juliaConstC SmbHSnowEnum
+syn keyword juliaConstC SmbHSnowInitEnum
 syn keyword juliaConstC SmbHrefEnum
 syn keyword juliaConstC SmbIsInitializedEnum
 syn keyword juliaConstC SmbMAddEnum
 syn keyword juliaConstC SmbMassBalanceEnum
+syn keyword juliaConstC SmbMassBalanceSnowEnum
 syn keyword juliaConstC SmbMassBalanceSubstepEnum
 syn keyword juliaConstC SmbMassBalanceTransientEnum
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 27509)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 27510)
@@ -602,4 +602,12 @@
 	      else if (strcmp(name,"SmbSemicHcrit")==0) return SmbSemicHcritEnum;
 	      else if (strcmp(name,"SmbSemicRcrit")==0) return SmbSemicRcritEnum;
+	      else if (strcmp(name,"SmbSemicWcrit")==0) return SmbSemicWcritEnum;
+	      else if (strcmp(name,"SmbSemicMcrit")==0) return SmbSemicMcritEnum;
+	      else if (strcmp(name,"SmbSemicAfac")==0) return SmbSemicAfacEnum;
+	      else if (strcmp(name,"SmbSemicTauA")==0) return SmbSemicTauAEnum;
+	      else if (strcmp(name,"SmbSemicTauF")==0) return SmbSemicTauFEnum;
+	      else if (strcmp(name,"SmbSemicTmin")==0) return SmbSemicTminEnum;
+	      else if (strcmp(name,"SmbSemicTmid")==0) return SmbSemicTmidEnum;
+	      else if (strcmp(name,"SmbSemicTmax")==0) return SmbSemicTmaxEnum;
 	      else if (strcmp(name,"SmbStepsPerStep")==0) return SmbStepsPerStepEnum;
 	      else if (strcmp(name,"SmbSwIdx")==0) return SmbSwIdxEnum;
@@ -621,5 +629,8 @@
 	      else if (strcmp(name,"Steps")==0) return StepsEnum;
 	      else if (strcmp(name,"StressbalanceAbstol")==0) return StressbalanceAbstolEnum;
-	      else if (strcmp(name,"StressbalanceFSreconditioning")==0) return StressbalanceFSreconditioningEnum;
+         else stage=6;
+   }
+   if(stage==6){
+	      if (strcmp(name,"StressbalanceFSreconditioning")==0) return StressbalanceFSreconditioningEnum;
 	      else if (strcmp(name,"StressbalanceIsnewton")==0) return StressbalanceIsnewtonEnum;
 	      else if (strcmp(name,"StressbalanceMaxiter")==0) return StressbalanceMaxiterEnum;
@@ -629,8 +640,5 @@
 	      else if (strcmp(name,"StressbalanceRequestedOutputs")==0) return StressbalanceRequestedOutputsEnum;
 	      else if (strcmp(name,"StressbalanceRestol")==0) return StressbalanceRestolEnum;
-         else stage=6;
-   }
-   if(stage==6){
-	      if (strcmp(name,"StressbalanceRiftPenaltyThreshold")==0) return StressbalanceRiftPenaltyThresholdEnum;
+	      else if (strcmp(name,"StressbalanceRiftPenaltyThreshold")==0) return StressbalanceRiftPenaltyThresholdEnum;
 	      else if (strcmp(name,"StressbalanceShelfDampening")==0) return StressbalanceShelfDampeningEnum;
 	      else if (strcmp(name,"ThermalForcingMonthlyEffects")==0) return ThermalForcingMonthlyEffectsEnum;
@@ -744,5 +752,8 @@
 	      else if (strcmp(name,"BaseOld")==0) return BaseOldEnum;
 	      else if (strcmp(name,"BaseSlopeX")==0) return BaseSlopeXEnum;
-	      else if (strcmp(name,"BaseSlopeY")==0) return BaseSlopeYEnum;
+         else stage=7;
+   }
+   if(stage==7){
+	      if (strcmp(name,"BaseSlopeY")==0) return BaseSlopeYEnum;
 	      else if (strcmp(name,"BaselineBasalforcingsFloatingiceMeltingRate")==0) return BaselineBasalforcingsFloatingiceMeltingRateEnum;
 	      else if (strcmp(name,"BaselineBasalforcingsSpatialDeepwaterMeltingRate")==0) return BaselineBasalforcingsSpatialDeepwaterMeltingRateEnum;
@@ -752,8 +763,5 @@
 	      else if (strcmp(name,"Bed")==0) return BedEnum;
 	      else if (strcmp(name,"BedGRD")==0) return BedGRDEnum;
-         else stage=7;
-   }
-   if(stage==7){
-	      if (strcmp(name,"BedEast")==0) return BedEastEnum;
+	      else if (strcmp(name,"BedEast")==0) return BedEastEnum;
 	      else if (strcmp(name,"BedEastGRD")==0) return BedEastGRDEnum;
 	      else if (strcmp(name,"BedNorth")==0) return BedNorthEnum;
@@ -867,5 +875,8 @@
 	      else if (strcmp(name,"HydrologyBumpSpacing")==0) return HydrologyBumpSpacingEnum;
 	      else if (strcmp(name,"HydrologyChannelConductivity")==0) return HydrologyChannelConductivityEnum;
-	      else if (strcmp(name,"HydrologydcBasalMoulinInput")==0) return HydrologydcBasalMoulinInputEnum;
+         else stage=8;
+   }
+   if(stage==8){
+	      if (strcmp(name,"HydrologydcBasalMoulinInput")==0) return HydrologydcBasalMoulinInputEnum;
 	      else if (strcmp(name,"HydrologydcEplThickness")==0) return HydrologydcEplThicknessEnum;
 	      else if (strcmp(name,"HydrologydcEplThicknessOld")==0) return HydrologydcEplThicknessOldEnum;
@@ -875,8 +886,5 @@
 	      else if (strcmp(name,"HydrologydcMaskEplactiveNode")==0) return HydrologydcMaskEplactiveNodeEnum;
 	      else if (strcmp(name,"HydrologydcMaskThawedElt")==0) return HydrologydcMaskThawedEltEnum;
-         else stage=8;
-   }
-   if(stage==8){
-	      if (strcmp(name,"HydrologydcMaskThawedNode")==0) return HydrologydcMaskThawedNodeEnum;
+	      else if (strcmp(name,"HydrologydcMaskThawedNode")==0) return HydrologydcMaskThawedNodeEnum;
 	      else if (strcmp(name,"HydrologydcSedimentTransmitivity")==0) return HydrologydcSedimentTransmitivityEnum;
 	      else if (strcmp(name,"HydrologyDrainageRate")==0) return HydrologyDrainageRateEnum;
@@ -990,5 +998,8 @@
 	      else if (strcmp(name,"SealevelBarystaticOceanArea")==0) return SealevelBarystaticOceanAreaEnum;
 	      else if (strcmp(name,"SealevelBarystaticOceanLatbar")==0) return SealevelBarystaticOceanLatbarEnum;
-	      else if (strcmp(name,"SealevelBarystaticOceanLongbar")==0) return SealevelBarystaticOceanLongbarEnum;
+         else stage=9;
+   }
+   if(stage==9){
+	      if (strcmp(name,"SealevelBarystaticOceanLongbar")==0) return SealevelBarystaticOceanLongbarEnum;
 	      else if (strcmp(name,"SealevelBarystaticOceanLoad")==0) return SealevelBarystaticOceanLoadEnum;
 	      else if (strcmp(name,"SealevelNEsa")==0) return SealevelNEsaEnum;
@@ -998,8 +1009,5 @@
 	      else if (strcmp(name,"BslcIce")==0) return BslcIceEnum;
 	      else if (strcmp(name,"BslcHydro")==0) return BslcHydroEnum;
-         else stage=9;
-   }
-   if(stage==9){
-	      if (strcmp(name,"BslcOcean")==0) return BslcOceanEnum;
+	      else if (strcmp(name,"BslcOcean")==0) return BslcOceanEnum;
 	      else if (strcmp(name,"BslcRate")==0) return BslcRateEnum;
 	      else if (strcmp(name,"Gmtslc")==0) return GmtslcEnum;
@@ -1047,5 +1055,7 @@
 	      else if (strcmp(name,"SmbAccumulatedRunoff")==0) return SmbAccumulatedRunoffEnum;
 	      else if (strcmp(name,"SmbAlbedo")==0) return SmbAlbedoEnum;
+	      else if (strcmp(name,"SmbAlbedoInit")==0) return SmbAlbedoInitEnum;
 	      else if (strcmp(name,"SmbAlbedoSnow")==0) return SmbAlbedoSnowEnum;
+	      else if (strcmp(name,"SmbAlbedoSnowInit")==0) return SmbAlbedoSnowInitEnum;
 	      else if (strcmp(name,"SmbA")==0) return SmbAEnum;
 	      else if (strcmp(name,"SmbAdiff")==0) return SmbAdiffEnum;
@@ -1096,9 +1106,12 @@
 	      else if (strcmp(name,"SmbGspini")==0) return SmbGspiniEnum;
 	      else if (strcmp(name,"SmbHIce")==0) return SmbHIceEnum;
+	      else if (strcmp(name,"SmbHIceInit")==0) return SmbHIceInitEnum;
 	      else if (strcmp(name,"SmbHSnow")==0) return SmbHSnowEnum;
+	      else if (strcmp(name,"SmbHSnowInit")==0) return SmbHSnowInitEnum;
 	      else if (strcmp(name,"SmbHref")==0) return SmbHrefEnum;
 	      else if (strcmp(name,"SmbIsInitialized")==0) return SmbIsInitializedEnum;
 	      else if (strcmp(name,"SmbMAdd")==0) return SmbMAddEnum;
 	      else if (strcmp(name,"SmbMassBalance")==0) return SmbMassBalanceEnum;
+	      else if (strcmp(name,"SmbMassBalanceSnow")==0) return SmbMassBalanceSnowEnum;
 	      else if (strcmp(name,"SmbMassBalanceSubstep")==0) return SmbMassBalanceSubstepEnum;
 	      else if (strcmp(name,"SmbMassBalanceTransient")==0) return SmbMassBalanceTransientEnum;
@@ -1108,5 +1121,8 @@
 	      else if (strcmp(name,"SmbMeanULW")==0) return SmbMeanULWEnum;
 	      else if (strcmp(name,"SmbMelt")==0) return SmbMeltEnum;
-	      else if (strcmp(name,"SmbMonthlytemperatures")==0) return SmbMonthlytemperaturesEnum;
+         else stage=10;
+   }
+   if(stage==10){
+	      if (strcmp(name,"SmbMonthlytemperatures")==0) return SmbMonthlytemperaturesEnum;
 	      else if (strcmp(name,"SmbMSurf")==0) return SmbMSurfEnum;
 	      else if (strcmp(name,"SmbNetLW")==0) return SmbNetLWEnum;
@@ -1121,8 +1137,5 @@
 	      else if (strcmp(name,"SmbPrecipitationsPresentday")==0) return SmbPrecipitationsPresentdayEnum;
 	      else if (strcmp(name,"SmbPrecipitationsReconstructed")==0) return SmbPrecipitationsReconstructedEnum;
-         else stage=10;
-   }
-   if(stage==10){
-	      if (strcmp(name,"SmbRain")==0) return SmbRainEnum;
+	      else if (strcmp(name,"SmbRain")==0) return SmbRainEnum;
 	      else if (strcmp(name,"SmbRe")==0) return SmbReEnum;
 	      else if (strcmp(name,"SmbRefreeze")==0) return SmbRefreezeEnum;
@@ -1231,5 +1244,8 @@
 	      else if (strcmp(name,"VyDebris")==0) return VyDebrisEnum;
 	      else if (strcmp(name,"Vy")==0) return VyEnum;
-	      else if (strcmp(name,"VyMesh")==0) return VyMeshEnum;
+         else stage=11;
+   }
+   if(stage==11){
+	      if (strcmp(name,"VyMesh")==0) return VyMeshEnum;
 	      else if (strcmp(name,"VyObs")==0) return VyObsEnum;
 	      else if (strcmp(name,"VyShear")==0) return VyShearEnum;
@@ -1244,8 +1260,5 @@
 	      else if (strcmp(name,"WaterfractionDrainage")==0) return WaterfractionDrainageEnum;
 	      else if (strcmp(name,"WaterfractionDrainageIntegrated")==0) return WaterfractionDrainageIntegratedEnum;
-         else stage=11;
-   }
-   if(stage==11){
-	      if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum;
+	      else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum;
 	      else if (strcmp(name,"Waterheight")==0) return WaterheightEnum;
 	      else if (strcmp(name,"WaterPressureArmaPerturbation")==0) return WaterPressureArmaPerturbationEnum;
@@ -1354,5 +1367,8 @@
 	      else if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum;
 	      else if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum;
-	      else if (strcmp(name,"Outputdefinition99")==0) return Outputdefinition99Enum;
+         else stage=12;
+   }
+   if(stage==12){
+	      if (strcmp(name,"Outputdefinition99")==0) return Outputdefinition99Enum;
 	      else if (strcmp(name,"Outputdefinition9")==0) return Outputdefinition9Enum;
 	      else if (strcmp(name,"Outputdefinition100")==0) return Outputdefinition100Enum;
@@ -1367,8 +1383,5 @@
 	      else if (strcmp(name,"AmrBamg")==0) return AmrBamgEnum;
 	      else if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum;
-         else stage=12;
-   }
-   if(stage==12){
-	      if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
+	      else if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
 	      else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
 	      else if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum;
@@ -1477,5 +1490,8 @@
 	      else if (strcmp(name,"GLheightadvectionAnalysis")==0) return GLheightadvectionAnalysisEnum;
 	      else if (strcmp(name,"GaussPenta")==0) return GaussPentaEnum;
-	      else if (strcmp(name,"GaussSeg")==0) return GaussSegEnum;
+         else stage=13;
+   }
+   if(stage==13){
+	      if (strcmp(name,"GaussSeg")==0) return GaussSegEnum;
 	      else if (strcmp(name,"GaussTetra")==0) return GaussTetraEnum;
 	      else if (strcmp(name,"GaussTria")==0) return GaussTriaEnum;
@@ -1490,8 +1506,5 @@
 	      else if (strcmp(name,"GroundedAreaScaled")==0) return GroundedAreaScaledEnum;
 	      else if (strcmp(name,"GroundingOnly")==0) return GroundingOnlyEnum;
-         else stage=13;
-   }
-   if(stage==13){
-	      if (strcmp(name,"GroundinglineMassFlux")==0) return GroundinglineMassFluxEnum;
+	      else if (strcmp(name,"GroundinglineMassFlux")==0) return GroundinglineMassFluxEnum;
 	      else if (strcmp(name,"Gset")==0) return GsetEnum;
 	      else if (strcmp(name,"Gsl")==0) return GslEnum;
@@ -1600,5 +1613,8 @@
 	      else if (strcmp(name,"MinVy")==0) return MinVyEnum;
 	      else if (strcmp(name,"MinVz")==0) return MinVzEnum;
-	      else if (strcmp(name,"MismipFloatingMeltRate")==0) return MismipFloatingMeltRateEnum;
+         else stage=14;
+   }
+   if(stage==14){
+	      if (strcmp(name,"MismipFloatingMeltRate")==0) return MismipFloatingMeltRateEnum;
 	      else if (strcmp(name,"Moulin")==0) return MoulinEnum;
 	      else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
@@ -1613,8 +1629,5 @@
 	      else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
 	      else if (strcmp(name,"None")==0) return NoneEnum;
-         else stage=14;
-   }
-   if(stage==14){
-	      if (strcmp(name,"Numberedcostfunction")==0) return NumberedcostfunctionEnum;
+	      else if (strcmp(name,"Numberedcostfunction")==0) return NumberedcostfunctionEnum;
 	      else if (strcmp(name,"NyeCO2")==0) return NyeCO2Enum;
 	      else if (strcmp(name,"NyeH2O")==0) return NyeH2OEnum;
@@ -1723,5 +1736,8 @@
 	      else if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
 	      else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
-	      else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
+         else stage=15;
+   }
+   if(stage==15){
+	      if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
 	      else if (strcmp(name,"ThicknessErrorEstimator")==0) return ThicknessErrorEstimatorEnum;
 	      else if (strcmp(name,"TotalCalvingFluxLevelset")==0) return TotalCalvingFluxLevelsetEnum;
@@ -1736,8 +1752,5 @@
 	      else if (strcmp(name,"TransientInput")==0) return TransientInputEnum;
 	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
-         else stage=15;
-   }
-   if(stage==15){
-	      if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
+	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
 	      else if (strcmp(name,"Tria")==0) return TriaEnum;
 	      else if (strcmp(name,"TriaInput")==0) return TriaInputEnum;
