Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 20459)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 20460)
@@ -1049,4 +1049,5 @@
 	LevelsetfunctionSlopeYEnum,
 	LevelsetfunctionPicardEnum,
+	LevelsetReinitFrequencyEnum,
 	/*}}}*/
 	/*Sea Level Rise{{{*/
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 20459)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 20460)
@@ -1003,4 +1003,5 @@
 		case LevelsetfunctionSlopeYEnum : return "LevelsetfunctionSlopeY";
 		case LevelsetfunctionPicardEnum : return "LevelsetfunctionPicard";
+		case LevelsetReinitFrequencyEnum : return "LevelsetReinitFrequency";
 		case SealevelriseSolutionEnum : return "SealevelriseSolution";
 		case SealevelriseAnalysisEnum : return "SealevelriseAnalysis";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 20459)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 20460)
@@ -1027,4 +1027,5 @@
 	      else if (strcmp(name,"LevelsetfunctionSlopeY")==0) return LevelsetfunctionSlopeYEnum;
 	      else if (strcmp(name,"LevelsetfunctionPicard")==0) return LevelsetfunctionPicardEnum;
+	      else if (strcmp(name,"LevelsetReinitFrequency")==0) return LevelsetReinitFrequencyEnum;
 	      else if (strcmp(name,"SealevelriseSolution")==0) return SealevelriseSolutionEnum;
 	      else if (strcmp(name,"SealevelriseAnalysis")==0) return SealevelriseAnalysisEnum;
Index: /issm/trunk-jpl/src/m/classes/calving.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/calving.js	(revision 20459)
+++ /issm/trunk-jpl/src/m/classes/calving.js	(revision 20460)
@@ -8,13 +8,8 @@
 	this.setdefaultparameters = function(){// {{{
 
-		//stabilization = 2 by default
-		this.stabilization = 2;
-	
 	}// }}}
 	this.disp= function(){// {{{
 
 		console.log(sprintf('   Calving parameters:'));
-		fielddisplay(this,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding');
-		fielddisplay(this,'spclevelset','Levelset constraints (NaN means no constraint)');
 		fielddisplay(this,'calvingrate','calving rate at given location [m/a]');
 		fielddisplay(this,'meltingrate','melting rate at given location [m/a]');
@@ -28,6 +23,4 @@
 		if (solution!=TransientSolutionEnum() | md.trans.ismovingfront==0) return;
 
-		checkfield(md,'fieldname','calving.spclevelset','Inf',1,'timeseries',1);
-		checkfield(md,'fieldname','calving.stabilization','values',[0,1,2]);
 		checkfield(md,'fieldname','calving.calvingrate(1:md.mesh.numberofvertices,:)','>=',0,'timeseries',1,'NaN',1,'Inf',1);
 		checkfield(md,'fieldname','calving.meltingrate(1:md.mesh.numberofvertices,:)','>=',0,'timeseries',1,'NaN',1,'Inf',1);
@@ -36,11 +29,8 @@
 			var yts=365.0*24.0*3600.0;
 			WriteData(fid,'enum',CalvingLawEnum(),'data',DefaultCalvingEnum(),'format','Integer');
-			WriteData(fid,'enum',LevelsetStabilizationEnum(),'data',this.stabilization,'format','Integer');
-			WriteData(fid,'enum',SpcLevelsetEnum(),'data',this.spclevelset,'format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
 			WriteData(fid,'object',this,'fieldname','calvingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);
 			WriteData(fid,'object',this,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);
 		}//}}}
 		this.fix=function() { //{{{
-			this.spclevelset=NullFix(this.spclevelset,NaN);
 			this.calvingrate=NullFix(this.calvingrate,NaN);
 			this.meltingrate=NullFix(this.meltingrate,NaN);
@@ -49,6 +39,4 @@
 	// {{{
 
-	this.stabilization = 0;
-	this.spclevelset   = NaN;
 	this.calvingrate   = NaN;
 	this.meltingrate   = NaN;
Index: /issm/trunk-jpl/src/m/classes/calving.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/calving.m	(revision 20459)
+++ /issm/trunk-jpl/src/m/classes/calving.m	(revision 20460)
@@ -6,6 +6,4 @@
 classdef calving
 	properties (SetAccess=public) 
-		stabilization = 0;
-		spclevelset   = NaN;
 		calvingrate   = NaN;
 		meltingrate   = NaN;
@@ -31,12 +29,8 @@
 		end % }}}
 		function self = extrude(self,md) % {{{
-			self.spclevelset=project3d(md,'vector',self.spclevelset,'type','node');
 			self.calvingrate=project3d(md,'vector',self.calvingrate,'type','node');
 			self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node');
 		end % }}}
 		function self = setdefaultparameters(self) % {{{
-
-			%stabilization = 2 by default
-			self.stabilization = 2;
 
 		end % }}}
@@ -45,6 +39,4 @@
 			if (solution~=TransientSolutionEnum() | md.transient.ismovingfront==0), return; end
 
-			md = checkfield(md,'fieldname','calving.spclevelset','Inf',1,'timeseries',1);
-			md = checkfield(md,'fieldname','calving.stabilization','values',[0 1 2]);
 			md = checkfield(md,'fieldname','calving.calvingrate(1:md.mesh.numberofvertices,:)','>=',0,'timeseries',1,'NaN',1,'Inf',1);
 			md = checkfield(md,'fieldname','calving.meltingrate(1:md.mesh.numberofvertices,:)','>=',0,'timeseries',1,'NaN',1,'Inf',1);
@@ -52,6 +44,4 @@
 		function disp(self) % {{{
 			disp(sprintf('   Calving parameters:'));
-			fielddisplay(self,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding');
-			fielddisplay(self,'spclevelset','Levelset constraints (NaN means no constraint)');
 			fielddisplay(self,'calvingrate','calving rate at given location [m/a]');
 			fielddisplay(self,'meltingrate','melting rate at given location [m/a]');
@@ -60,6 +50,4 @@
 			yts=365.0*24.0*3600.0;
 			WriteData(fid,'enum',CalvingLawEnum(),'data',DefaultCalvingEnum(),'format','Integer');
-			WriteData(fid,'enum',LevelsetStabilizationEnum(),'data',self.stabilization,'format','Integer');
-			WriteData(fid,'enum',SpcLevelsetEnum(),'data',self.spclevelset,'format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
 			WriteData(fid,'object',self,'fieldname','calvingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);
 			WriteData(fid,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);
@@ -67,6 +55,4 @@
 		function savemodeljs(self,fid,modelname) % {{{
 		
-			writejsdouble(fid,[modelname '.calving.stabilization'],self.stabilization);
-			writejs1Darray(fid,[modelname '.calving.spclevelset'],self.spclevelset);
 			writejs1Darray(fid,[modelname '.calving.calvingrate'],self.calvingrate);
 			writejs1Darray(fid,[modelname '.calving.meltingrate'],self.meltingrate);
Index: /issm/trunk-jpl/src/m/classes/calving.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/calving.py	(revision 20459)
+++ /issm/trunk-jpl/src/m/classes/calving.py	(revision 20460)
@@ -16,6 +16,4 @@
 	def __init__(self): # {{{
 
-		self.stabilization = 0
-		self.spclevelset   = float('NaN')
 		self.calvingrate   = float('NaN')
 		self.meltingrate   = float('NaN')
@@ -27,6 +25,4 @@
 	def __repr__(self): # {{{
 		string='   Calving parameters:'
-		string="%s\n%s"%(string,fielddisplay(self,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding'))
-		string="%s\n%s"%(string,fielddisplay(self,'spclevelset','levelset constraints (NaN means no constraint)'))
 		string="%s\n%s"%(string,fielddisplay(self,'calvingrate','calving rate at given location [m/a]'))
 		string="%s\n%s"%(string,fielddisplay(self,'meltingrate','melting rate at given location [m/a]'))
@@ -35,5 +31,4 @@
 		#}}}
 	def extrude(self,md): # {{{
-		self.spclevelset=project3d(md,'vector',self.spclevelset,'type','node')
 		self.calvingrate=project3d(md,'vector',self.calvingrate,'type','node')
 		self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node')
@@ -41,7 +36,4 @@
 	#}}}
 	def setdefaultparameters(self): # {{{
-
-		#stabilization = 2 by default
-		self.stabilization = 2
 
 		return self
@@ -53,6 +45,4 @@
 			return md
 
-		md = checkfield(md,'fieldname','calving.spclevelset','Inf',1,'timeseries',1)
-		md = checkfield(md,'fieldname','calving.stabilization','values',[0,1,2]);
 		md = checkfield(md,'fieldname','calving.calvingrate','>=',0,'timeseries',1,'NaN',1,'Inf',1);
 		md = checkfield(md,'fieldname','calving.meltingrate','>=',0,'timeseries',1,'NaN',1,'Inf',1);
@@ -65,6 +55,4 @@
 
 		WriteData(fid,'enum',CalvingLawEnum(),'data',DefaultCalvingEnum(),'format','Integer');
-		WriteData(fid,'enum',LevelsetStabilizationEnum(),'data',self.stabilization,'format','Integer');
-		WriteData(fid,'enum',SpcLevelsetEnum(),'data',self.spclevelset,'format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
 		WriteData(fid,'object',self,'fieldname','calvingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts)
 		WriteData(fid,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts)
Index: /issm/trunk-jpl/src/m/classes/calvingdev.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/calvingdev.m	(revision 20459)
+++ /issm/trunk-jpl/src/m/classes/calvingdev.m	(revision 20460)
@@ -6,6 +6,4 @@
 classdef calvingdev
 	properties (SetAccess=public) 
-		stabilization = 0;
-		spclevelset   = NaN;
 		coeff         = NaN;
 		meltingrate   = NaN;
@@ -31,12 +29,8 @@
 		end % }}}
 		function self = extrude(self,md) % {{{
-			self.spclevelset=project3d(md,'vector',self.spclevelset,'type','node');
 			self.coeff=project3d(md,'vector',self.coeff,'type','node');
 			self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node');
 		end % }}}
 		function self = setdefaultparameters(self) % {{{
-
-			%stabilization = 2 by default
-			self.stabilization = 2;
 
 			%Proportionality coefficient in Pi model
@@ -47,6 +41,4 @@
 			if (solution~=TransientSolutionEnum() | md.transient.ismovingfront==0), return; end
 
-			md = checkfield(md,'fieldname','calving.spclevelset','Inf',1,'timeseries',1);
-			md = checkfield(md,'fieldname','calving.stabilization','values',[0 1 2]);
 			md = checkfield(md,'fieldname','calving.coeff','>',0,'size',[md.mesh.numberofvertices 1]);
 			md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1],'>=',0);
@@ -54,6 +46,4 @@
 		function disp(self) % {{{
 			disp(sprintf('   Calving Pi parameters:'));
-			fielddisplay(self,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding');
-			fielddisplay(self,'spclevelset','Levelset constraints (NaN means no constraint)');
 			fielddisplay(self,'coeff','proportionality coefficient in Pi model');
 			fielddisplay(self,'meltingrate','melting rate at given location [m/a]');
@@ -63,6 +53,4 @@
 			yts=365.0*24.0*3600.0;
 			WriteData(fid,'enum',CalvingLawEnum(),'data',CalvingDevEnum(),'format','Integer');
-			WriteData(fid,'enum',LevelsetStabilizationEnum(),'data',self.stabilization,'format','Integer');
-			WriteData(fid,'enum',SpcLevelsetEnum(),'data',self.spclevelset,'format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
 			WriteData(fid,'enum',CalvingpiCoeffEnum(),'data',self.coeff,'format','DoubleMat','mattype',1);
 			WriteData(fid,'class','calving','object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1,'scale',1./yts);
Index: /issm/trunk-jpl/src/m/classes/calvinglevermann.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/calvinglevermann.m	(revision 20459)
+++ /issm/trunk-jpl/src/m/classes/calvinglevermann.m	(revision 20460)
@@ -6,6 +6,4 @@
 classdef calvinglevermann
 	properties (SetAccess=public) 
-		stabilization = 0;
-		spclevelset   = NaN;
 		coeff         = NaN;
 		meltingrate   = NaN;
@@ -31,12 +29,8 @@
 		end % }}}
 		function self = extrude(self,md) % {{{
-			self.spclevelset=project3d(md,'vector',self.spclevelset,'type','node');
 			self.coeff=project3d(md,'vector',self.coeff,'type','node');
 			self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node');
 		end % }}}
 		function self = setdefaultparameters(self) % {{{
-
-			%stabilization = 2 by default
-			self.stabilization = 2;
 
 			%Proportionality coefficient in Levermann model
@@ -47,6 +41,4 @@
 			if (solution~=TransientSolutionEnum() | md.transient.ismovingfront==0), return; end
 
-			md = checkfield(md,'fieldname','calving.spclevelset','Inf',1,'timeseries',1);
-			md = checkfield(md,'fieldname','calving.stabilization','values',[0 1 2]);
 			md = checkfield(md,'fieldname','calving.coeff','>',0,'size',[md.mesh.numberofvertices 1]);
 			md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1],'>=',0);
@@ -54,6 +46,4 @@
 		function disp(self) % {{{
 			disp(sprintf('   Calving Levermann parameters:'));
-			fielddisplay(self,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding');
-			fielddisplay(self,'spclevelset','Levelset constraints (NaN means no constraint)');
 			fielddisplay(self,'coeff','proportionality coefficient in Levermann model');
 			fielddisplay(self,'meltingrate','melting rate at given location [m/a]');
@@ -63,6 +53,4 @@
 			yts=365.0*24.0*3600.0;
 			WriteData(fid,'enum',CalvingLawEnum(),'data',CalvingLevermannEnum(),'format','Integer');
-			WriteData(fid,'enum',LevelsetStabilizationEnum(),'data',self.stabilization,'format','Integer');
-			WriteData(fid,'enum',SpcLevelsetEnum(),'data',self.spclevelset,'format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
 			WriteData(fid,'enum',CalvinglevermannCoeffEnum(),'data',self.coeff,'format','DoubleMat','mattype',1);
 			WriteData(fid,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);
Index: /issm/trunk-jpl/src/m/classes/calvinglevermann.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/calvinglevermann.py	(revision 20459)
+++ /issm/trunk-jpl/src/m/classes/calvinglevermann.py	(revision 20460)
@@ -15,6 +15,4 @@
 	def __init__(self): # {{{
 
-		self.stabilization = 0
-		self.spclevelset   = float('NaN')
 		self.coeff         = float('NaN')
 		self.meltingrate   = float('NaN')
@@ -26,6 +24,4 @@
 	def __repr__(self): # {{{
 		string='   Calving Levermann parameters:'
-		string="%s\n%s"%(string,fielddisplay(self,'spclevelset','levelset constraints (NaN means no constraint)'))
-		string="%s\n%s"%(string,fielddisplay(self,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding'))
 		string="%s\n%s"%(string,fielddisplay(self,'coeff','proportionality coefficient in Levermann model'))
 		string="%s\n%s"%(string,fielddisplay(self,'meltingrate','melting rate at given location [m/a]'))
@@ -34,5 +30,4 @@
 		#}}}
 	def extrude(self,md): # {{{
-		self.spclevelset=project3d(md,'vector',self.spclevelset,'type','node')
 		self.coeff=project3d(md,'vector',self.coeff,'type','node')
 		self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node')
@@ -40,7 +35,4 @@
 	#}}}
 	def setdefaultparameters(self): # {{{
-
-		#stabilization = 2 by default
-		self.stabilization = 2
 
 		#Proportionality coefficient in Levermann model
@@ -53,6 +45,4 @@
 			return md
 
-		md = checkfield(md,'fieldname','calving.spclevelset','Inf',1,'timeseries',1)
-		md = checkfield(md,'fieldname','calving.stabilization','values',[0,1,2]);
 		md = checkfield(md,'fieldname','calving.coeff','size',[md.mesh.numberofvertices],'>',0)
 		md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices],'>=',0)
@@ -62,6 +52,4 @@
 		yts=365.*24.*3600.
 		WriteData(fid,'enum',CalvingLawEnum(),'data',CalvingLevermannEnum(),'format','Integer');
-		WriteData(fid,'enum',LevelsetStabilizationEnum(),'data',self.stabilization,'format','Integer');
-		WriteData(fid,'enum',SpcLevelsetEnum(),'data',self.spclevelset,'format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
 		WriteData(fid,'enum',CalvinglevermannCoeffEnum(),'data',self.coeff,'format','DoubleMat','mattype',1)
 		WriteData(fid,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts)
Index: /issm/trunk-jpl/src/m/classes/levelset.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/levelset.js	(revision 20460)
+++ /issm/trunk-jpl/src/m/classes/levelset.js	(revision 20460)
@@ -0,0 +1,51 @@
+//LEVELSET class definition
+//
+//   Usage:
+//      levelset=new levelset();
+
+function levelset (){
+	//methods
+	this.setdefaultparameters = function(){// {{{
+
+		//stabilization = 2 by default
+		this.stabilization		= 2;
+		this.reinit_frequency	= NaN;
+	
+	}// }}}
+	this.disp= function(){// {{{
+
+		console.log(sprintf('   Level-set parameters:'));
+		fielddisplay(this,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding');
+		fielddisplay(this,'spclevelset','Levelset constraints (NaN means no constraint)');
+		fielddisplay(this,'reinit_frequency','Amount of time steps after which the levelset function in re-initialized (NaN: no re-initialization).');
+
+	}// }}}
+	this.classname= function(){// {{{
+		return "levelset";
+	}// }}}
+	this.checkconsistency = function(md,solution,analyses) { // {{{
+		//Early return
+		if (solution!=TransientSolutionEnum() | md.trans.ismovingfront==0) return;
+
+		checkfield(md,'fieldname','levelset.spclevelset','Inf',1,'timeseries',1);
+		checkfield(md,'fieldname','levelset.stabilization','values',[0,1,2]);
+	} //}}}
+		this.marshall=function(md,fid) { //{{{
+			WriteData(fid,'object',self,'class','levelset','fieldname','stabilization','format','Integer');
+			WriteData(fid,'enum',SpcLevelsetEnum(),'data',this.spclevelset,'format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,'object',self,'class','levelset','fieldname','reinit_frequency','format','Integer');
+
+		}//}}}
+		this.fix=function() { //{{{
+			this.spclevelset=NullFix(this.spclevelset,NaN);
+		}//}}}
+	//properties 
+	// {{{
+
+	this.stabilization		= 0;
+	this.spclevelset			= NaN;
+	this.reinit_frequency	= NaN;
+
+	this.setdefaultparameters();
+	//}}}
+}
Index: /issm/trunk-jpl/src/m/classes/levelset.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/levelset.m	(revision 20460)
+++ /issm/trunk-jpl/src/m/classes/levelset.m	(revision 20460)
@@ -0,0 +1,69 @@
+%LEVELSET class definition
+%
+%   Usage:
+%      levelset=levelset();
+
+classdef levelset
+	properties (SetAccess=public) 
+		stabilization		= 0;
+		spclevelset			= NaN;
+		reinit_frequency	= NaN;
+	end
+	methods
+		function self = levelset(varargin) % {{{
+			switch nargin
+				case 0
+					self=setdefaultparameters(self);
+				case 1
+					inputstruct=varargin{1};
+					list1 = properties('levelset');
+					list2 = fieldnames(inputstruct);
+					for i=1:length(list1)
+						fieldname = list1{i};
+						if ismember(fieldname,list2),
+							self.(fieldname) = inputstruct.(fieldname);
+						end
+					end
+				otherwise
+					error('constructor not supported');
+			end
+		end % }}}
+		function self = extrude(self,md) % {{{
+
+			self.spclevelset=project3d(md,'vector',self.spclevelset,'type','node');
+		end % }}}
+		function self = setdefaultparameters(self) % {{{
+
+			%stabilization = 2 by default
+			self.stabilization = 2;
+			self.reinit_frequency = NaN;
+
+		end % }}}
+		function md = checkconsistency(self,md,solution,analyses) % {{{
+			%Early return
+			if (solution~=TransientSolutionEnum() | md.transient.ismovingfront==0), return; end
+
+			md = checkfield(md,'fieldname','levelset.spclevelset','Inf',1,'timeseries',1);
+			md = checkfield(md,'fieldname','levelset.stabilization','values',[0 1 2]);
+		end % }}}
+		function disp(self) % {{{
+			disp(sprintf('   Level-set parameters:'));
+			fielddisplay(self,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding');
+			fielddisplay(self,'spclevelset','Levelset constraints (NaN means no constraint)');
+			fielddisplay(self,'reinit_frequency','Amount of time steps after which the levelset function in re-initialized (NaN: no re-initialization).');
+		end % }}}
+		function marshall(self,md,fid) % {{{
+			WriteData(fid,'object',self,'class','levelset','fieldname','stabilization','format','Integer');
+			WriteData(fid,'enum',SpclevelsetEnum(),'data',self.spclevelset,'format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,'object',self,'class','levelset','fieldname','reinit_frequency','format','Integer');
+		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejsdouble(fid,[modelname '.levelset.stabilization'],self.stabilization);
+			writejs1Darray(fid,[modelname '.levelset.spclevelset'],self.spclevelset);
+			writejs1Darray(fid,[modelname '.levelset.reinit_frequency'],self.reinit_frequency);
+
+		end % }}}
+	end
+end
+
Index: /issm/trunk-jpl/src/m/classes/levelset.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/levelset.py	(revision 20460)
+++ /issm/trunk-jpl/src/m/classes/levelset.py	(revision 20460)
@@ -0,0 +1,62 @@
+from fielddisplay import fielddisplay
+from project3d import project3d
+from EnumDefinitions import *
+from StringToEnum import StringToEnum
+from checkfield import checkfield
+from WriteData import WriteData
+
+class levelset(object):
+	"""
+	LEVELSET class definition
+
+	   Usage:
+	      levelset=levelset();
+	"""
+
+	def __init__(self): # {{{
+
+		self.stabilization = 0
+		self.spclevelset   = float('NaN')
+		self.reinit_frequency = float('NaN')
+
+		#set defaults
+		self.setdefaultparameters()
+
+		#}}}
+	def __repr__(self): # {{{
+		string='   Level-set parameters:'
+		string="%s\n%s"%(string,fielddisplay(self,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding'))
+		string="%s\n%s"%(string,fielddisplay(self,'spclevelset','levelset constraints (NaN means no constraint)'))
+		string="%s\n%s"%(string,fielddisplay(self,'reinit_frequency','Amount of time steps after which the levelset function in re-initialized (NaN: no re-initialization).'))
+
+		return string
+		#}}}
+	def extrude(self,md): # {{{
+		self.spclevelset=project3d(md,'vector',self.spclevelset,'type','node')
+		return self
+	#}}}
+	def setdefaultparameters(self): # {{{
+
+		#stabilization = 2 by default
+		self.stabilization = 2
+		self.reinit_frequency = float('NaN')
+
+		return self
+	#}}}
+	def checkconsistency(self,md,solution,analyses):    # {{{
+
+		#Early return
+		if (solution!=TransientSolutionEnum()) or (not md.transient.ismovingfront):
+			return md
+
+		md = checkfield(md,'fieldname','levelset.spclevelset','Inf',1,'timeseries',1)
+		md = checkfield(md,'fieldname','levelset.stabilization','values',[0,1,2]);
+
+		return md
+	# }}}
+	def marshall(self,md,fid):    # {{{
+
+		WriteData(fid,'object',self,'class','levelset','fieldname','stabilization','format','Integer');
+		WriteData(fid,'enum',SpclevelsetEnum(),'data',self.spclevelset,'format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+		WriteData(fid,'object',self,'class','levelset','fieldname','reinit_frequency','format','Integer');
+	# }}}
Index: /issm/trunk-jpl/src/m/classes/model.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/model.js	(revision 20459)
+++ /issm/trunk-jpl/src/m/classes/model.js	(revision 20460)
@@ -35,4 +35,5 @@
 			console.log(sprintf("%19s: %-22s -- %s","steadystate"     ,"[1x1 " + typeof(this.steadystate) + "]","parameters for steadystate solution"));
 			console.log(sprintf("%19s: %-22s -- %s","trans"       ,"[1x1 " + typeof(this.trans) + "]","parameters for trans solution"));
+			console.log(sprintf("%19s: %-22s -- %s","levelset"        ,"[1x1 " + typeof(this.levelset) + "]","parameters for moving boundaries (level-set method)"));
 			console.log(sprintf("%19s: %-22s -- %s","calving"         ,"[1x1 " + typeof(this.calving) + "]","parameters for calving"));
 			console.log(sprintf("%19s: %-22s -- %s","gia"             ,"[1x1 " + typeof(this.gia) + "]","parameters for gia solution"));
@@ -76,4 +77,5 @@
 			this.steadystate      = new steadystate();
 			this.trans            = new trans();
+			this.levelset			 = new levelset();
 			this.calving          = new calving();
 			this.gia              = new gia();
@@ -142,4 +144,5 @@
 		this.steadystate      = 0;
 		this.trans            = 0;
+		this.levelset= 0;
 		this.calving          = 0;
 		this.gia              = 0;
Index: /issm/trunk-jpl/src/m/classes/model.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/model.m	(revision 20459)
+++ /issm/trunk-jpl/src/m/classes/model.m	(revision 20460)
@@ -38,4 +38,5 @@
 		steadystate      = 0;
 		transient        = 0;
+		levelset			  = 0;
 		calving          = 0;
 		gia              = 0;
@@ -127,4 +128,5 @@
 				md.slr=slr();
 			end
+
 		end% }}}
 	end
@@ -752,4 +754,5 @@
 			md.thermal=md.thermal.extrude(md);
 			md.masstransport=md.masstransport.extrude(md);
+			md.levelset=extrude(md.levelset,md);
 			md.calving=extrude(md.calving,md);
 			md.hydrology = extrude(md.hydrology,md);
@@ -1087,4 +1090,5 @@
 			md.steadystate      = steadystate();
 			md.transient        = transient();
+			md.levelset			  = levelset();
 			md.calving          = calving();
 			md.gia              = gia();
@@ -1258,4 +1262,5 @@
 			disp(sprintf('%19s: %-22s -- %s','steadystate'     ,['[1x1 ' class(self.steadystate) ']'],'parameters for steadystate solution'));
 			disp(sprintf('%19s: %-22s -- %s','transient'       ,['[1x1 ' class(self.transient) ']'],'parameters for transient solution'));
+			disp(sprintf('%19s: %-22s -- %s','levelset'         ,['[1x1 ' class(self.levelset) ']'],'parameters for moving boundaries (level-set method)'));
 			disp(sprintf('%19s: %-22s -- %s','calving'         ,['[1x1 ' class(self.calving) ']'],'parameters for calving'));
 			disp(sprintf('%19s: %-22s -- %s','gia'             ,['[1x1 ' class(self.gia) ']'],'parameters for gia solution'));
Index: /issm/trunk-jpl/src/m/classes/model.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/model.py	(revision 20459)
+++ /issm/trunk-jpl/src/m/classes/model.py	(revision 20460)
@@ -16,4 +16,5 @@
 from basalforcings import basalforcings
 from matice import matice
+from levelset import levelset 
 from calving import calving
 from calvinglevermann import calvinglevermann
@@ -103,4 +104,5 @@
 		self.steadystate      = steadystate()
 		self.transient        = transient()
+		self.levelset         = levelset()
 		self.calving          = calving()
 		self.gia              = gia()
@@ -146,4 +148,5 @@
 		        'steadystate',\
 		        'transient',\
+		        'levelset',\
 		        'calving',\
 						'gia',\
@@ -187,4 +190,5 @@
 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("steadystate","[%s,%s]" % ("1x1",obj.steadystate.__class__.__name__),"parameters for steadystate solution"))
 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("transient","[%s,%s]" % ("1x1",obj.transient.__class__.__name__),"parameters for transient solution"))
+		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("levelset","[%s,%s]" % ("1x1",obj.levelset.__class__.__name__),"parameters for moving boundaries (level-set method)"))
 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("calving","[%s,%s]" % ("1x1",obj.calving.__class__.__name__),"parameters for calving"))
 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("autodiff","[%s,%s]" % ("1x1",obj.autodiff.__class__.__name__),"automatic differentiation parameters"))
@@ -624,4 +628,5 @@
 		# Calving variables
 		md.hydrology.extrude(md)
+		md.levelset.extrude(md)
 		md.calving.extrude(md)
 
Index: /issm/trunk-jpl/src/m/enum/EnumDefinitions.js
===================================================================
--- /issm/trunk-jpl/src/m/enum/EnumDefinitions.js	(revision 20459)
+++ /issm/trunk-jpl/src/m/enum/EnumDefinitions.js	(revision 20460)
@@ -988,23 +988,24 @@
 function LevelsetfunctionSlopeYEnum(){ return 984;}
 function LevelsetfunctionPicardEnum(){ return 985;}
-function SealevelriseSolutionEnum(){ return 986;}
-function SealevelriseAnalysisEnum(){ return 987;}
-function SealevelEnum(){ return 988;}
-function SealevelEustaticEnum(){ return 989;}
-function SealevelriseDeltathicknessEnum(){ return 990;}
-function SealevelriseMaxiterEnum(){ return 991;}
-function SealevelriseReltolEnum(){ return 992;}
-function SealevelriseAbstolEnum(){ return 993;}
-function SealevelriseLoveHEnum(){ return 994;}
-function SealevelriseLoveKEnum(){ return 995;}
-function SealevelriseTideLoveHEnum(){ return 996;}
-function SealevelriseTideLoveKEnum(){ return 997;}
-function SealevelriseRigidEnum(){ return 998;}
-function SealevelriseElasticEnum(){ return 999;}
-function SealevelriseRotationEnum(){ return 1000;}
-function SealevelriseGElasticEnum(){ return 1001;}
-function SealevelriseDegaccEnum(){ return 1002;}
-function SealevelriseTransitionsEnum(){ return 1003;}
-function SealevelriseRequestedOutputsEnum(){ return 1004;}
-function SealevelriseNumRequestedOutputsEnum(){ return 1005;}
-function MaximumNumberOfDefinitionsEnum(){ return 1006;}
+function LevelsetReinitFrequencyEnum(){ return 986;}
+function SealevelriseSolutionEnum(){ return 987;}
+function SealevelriseAnalysisEnum(){ return 988;}
+function SealevelEnum(){ return 989;}
+function SealevelEustaticEnum(){ return 990;}
+function SealevelriseDeltathicknessEnum(){ return 991;}
+function SealevelriseMaxiterEnum(){ return 992;}
+function SealevelriseReltolEnum(){ return 993;}
+function SealevelriseAbstolEnum(){ return 994;}
+function SealevelriseLoveHEnum(){ return 995;}
+function SealevelriseLoveKEnum(){ return 996;}
+function SealevelriseTideLoveHEnum(){ return 997;}
+function SealevelriseTideLoveKEnum(){ return 998;}
+function SealevelriseRigidEnum(){ return 999;}
+function SealevelriseElasticEnum(){ return 1000;}
+function SealevelriseRotationEnum(){ return 1001;}
+function SealevelriseGElasticEnum(){ return 1002;}
+function SealevelriseDegaccEnum(){ return 1003;}
+function SealevelriseTransitionsEnum(){ return 1004;}
+function SealevelriseRequestedOutputsEnum(){ return 1005;}
+function SealevelriseNumRequestedOutputsEnum(){ return 1006;}
+function MaximumNumberOfDefinitionsEnum(){ return 1007;}
Index: /issm/trunk-jpl/src/m/enum/EnumDefinitions.py
===================================================================
--- /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 20459)
+++ /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 20460)
@@ -995,4 +995,5 @@
 def LevelsetfunctionSlopeYEnum(): return StringToEnum("LevelsetfunctionSlopeY")[0]
 def LevelsetfunctionPicardEnum(): return StringToEnum("LevelsetfunctionPicard")[0]
+def LevelsetReinitFrequencyEnum(): return StringToEnum("LevelsetReinitFrequency")[0]
 def SealevelriseSolutionEnum(): return StringToEnum("SealevelriseSolution")[0]
 def SealevelriseAnalysisEnum(): return StringToEnum("SealevelriseAnalysis")[0]
Index: /issm/trunk-jpl/src/m/enum/LevelsetReinitFrequencyEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/LevelsetReinitFrequencyEnum.m	(revision 20460)
+++ /issm/trunk-jpl/src/m/enum/LevelsetReinitFrequencyEnum.m	(revision 20460)
@@ -0,0 +1,11 @@
+function macro=LevelsetReinitFrequencyEnum()
+%LEVELSETREINITFREQUENCYENUM - Enum of LevelsetReinitFrequency
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=LevelsetReinitFrequencyEnum()
+
+macro=StringToEnum('LevelsetReinitFrequency');
