Index: /issm/trunk-jpl/src/m/classes/calving.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/calving.m	(revision 19023)
+++ /issm/trunk-jpl/src/m/classes/calving.m	(revision 19024)
@@ -6,32 +6,7 @@
 classdef calving
 	properties (SetAccess=public) 
-		 calvingrate            = NaN;
-		 meltingrate            = NaN;
-	end
-	methods (Static)
-		function obj = loadobj(obj) % {{{
-			% This function is directly called by matlab when a model object is
-			% loaded. If the input is a struct it is an old version of this class and
-			% old fields must be recovered (make sure they are in the deprecated
-			% model properties)
-
-			if verLessThan('matlab','7.9'),
-				disp('Warning: your matlab version is old and there is a risk that load does not work correctly');
-				disp('         if the model is not loaded correctly, rename temporarily loadobj so that matlab does not use it');
-
-				% This is a Matlab bug: all the fields of md have their default value
-				% Example of error message:
-				% Warning: Error loading an object of class 'model':
-				% Undefined function or method 'exist' for input arguments of type 'cell'
-				%
-				% This has been fixed in MATLAB 7.9 (R2009b) and later versions
-			end
-
-			if isstruct(obj)
-				disp('Recovering calving from older version');
-				objstruct = obj;
-				obj = structtoobj(calving(),objstruct);
-			end
-		end% }}}
+		stabilization = 0;
+		calvingrate   = NaN;
+		meltingrate   = NaN;
 	end
 	methods
@@ -56,8 +31,13 @@
 		function obj = setdefaultparameters(obj) % {{{
 
+			%stabilization = 2 by default
+			obj.stabilization = 2;
+
 		end % }}}
 		function md = checkconsistency(obj,md,solution,analyses) % {{{
 			%Early return
 			if (solution~=TransientSolutionEnum() | md.transient.iscalving==0), return; end
+
+			md = checkfield(md,'fieldname','calving.stabilization','values',[0 1 2]);
 			md = checkfield(md,'fieldname','calving.calvingrate(1:md.mesh.numberofvertices,:)','>=',0,'forcing',1,'NaN',1);
 			md = checkfield(md,'fieldname','calving.meltingrate(1:md.mesh.numberofvertices,:)','>=',0,'forcing',1,'NaN',1);
@@ -65,4 +45,5 @@
 		function disp(obj) % {{{
 			disp(sprintf('   Calving parameters:'));
+			fielddisplay(obj,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding');
 			fielddisplay(obj,'calvingrate','calving rate at given location [m/a]');
 			fielddisplay(obj,'meltingrate','melting rate at given location [m/a]');
@@ -71,4 +52,5 @@
 			yts=365.0*24.0*3600.0;
 			WriteData(fid,'enum',CalvingLawEnum(),'data',DefaultCalvingEnum(),'format','Integer');
+			WriteData(fid,'enum',LevelsetStabilizationEnum(),'data',obj.stabilization,'format','Integer');
 			WriteData(fid,'object',obj,'fieldname','calvingrate','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1,'scale',1./yts);
 			WriteData(fid,'object',obj,'fieldname','meltingrate','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1,'scale',1./yts);
Index: /issm/trunk-jpl/src/m/classes/calving.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/calving.py	(revision 19023)
+++ /issm/trunk-jpl/src/m/classes/calving.py	(revision 19024)
@@ -14,6 +14,8 @@
 
 	def __init__(self): # {{{
-		self.calvingrate            = float('NaN')
-		self.meltingrate            = float('NaN')
+
+		self.stabilization = 0
+		self.calvingrate   = float('NaN')
+		self.meltingrate   = float('NaN')
 
 		#set defaults
@@ -23,4 +25,5 @@
 	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,'calvingrate','calving rate at given location [m/a]'))
 		string="%s\n%s"%(string,fielddisplay(self,'meltingrate','melting rate at given location [m/a]'))
@@ -29,4 +32,7 @@
 		#}}}
 	def setdefaultparameters(self): # {{{
+
+		#stabilization = 2 by default
+		self.stabilization = 2
 
 		return self
@@ -38,4 +44,5 @@
 			return md
 
+		md = checkfield(md,'fieldname','calving.stabilization','values',[0,1,2]);
 		md = checkfield(md,'fieldname','calving.calvingrate','>=',0,'forcing',1,'NaN',1);
 		md = checkfield(md,'fieldname','calving.meltingrate','>=',0,'forcing',1,'NaN',1);
@@ -48,4 +55,5 @@
 
 		WriteData(fid,'enum',CalvingLawEnum(),'data',DefaultCalvingEnum(),'format','Integer');
+		WriteData(fid,'enum',LevelsetStabilizationEnum(),'data',self.stabilization,'format','Integer');
 		WriteData(fid,'object',self,'fieldname','calvingrate','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1,'scale',1./yts)
 		WriteData(fid,'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 19023)
+++ /issm/trunk-jpl/src/m/classes/calvinglevermann.m	(revision 19024)
@@ -6,6 +6,7 @@
 classdef calvinglevermann
 	properties (SetAccess=public) 
-		 coeff       = NaN;
-		 meltingrate = NaN;
+		stabilization = 0;
+		coeff         = NaN;
+		meltingrate   = NaN;
 	end
 	methods
@@ -29,4 +30,8 @@
 		end % }}}
 		function obj = setdefaultparameters(obj) % {{{
+
+			%stabilization = 2 by default
+			obj.stabilization = 2;
+
 			%Proportionality coefficient in Levermann model
 			obj.coeff=2e13;
@@ -35,4 +40,6 @@
 			%Early return
 			if (solution~=TransientSolutionEnum() | md.transient.iscalving==0), return; end
+
+			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,'size',[md.mesh.numberofvertices 1],'>=',0);
@@ -40,4 +47,5 @@
 		function disp(obj) % {{{
 			disp(sprintf('   Calving Levermann parameters:'));
+			fielddisplay(obj,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding');
 			fielddisplay(obj,'coeff','proportionality coefficient in Levermann model');
 			fielddisplay(obj,'meltingrate','melting rate at given location [m/a]');
@@ -47,4 +55,5 @@
 			yts=365.0*24.0*3600.0;
 			WriteData(fid,'enum',CalvingLawEnum(),'data',CalvingLevermannEnum(),'format','Integer');
+			WriteData(fid,'enum',LevelsetStabilizationEnum(),'data',obj.stabilization,'format','Integer');
 			WriteData(fid,'enum',CalvinglevermannCoeffEnum(),'data',obj.coeff,'format','DoubleMat','mattype',1);
 			WriteData(fid,'object',obj,'fieldname','meltingrate','format','DoubleMat','mattype',1,'forcinglength',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 19023)
+++ /issm/trunk-jpl/src/m/classes/calvinglevermann.py	(revision 19024)
@@ -14,6 +14,7 @@
 
 	def __init__(self): # {{{
-		self.coeff       = float('NaN')
-		self.meltingrate = float('NaN')
+		self.stabilization = 0
+		self.coeff         = float('NaN')
+		self.meltingrate   = float('NaN')
 
 		#set defaults
@@ -23,4 +24,5 @@
 	def __repr__(self): # {{{
 		string='   Calving Levermann parameters:'
+		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]'))
@@ -29,4 +31,7 @@
 		#}}}
 	def setdefaultparameters(self): # {{{
+
+		#stabilization = 2 by default
+		self.stabilization = 2
 
 		#Proportionality coefficient in Levermann model
@@ -39,4 +44,5 @@
 			return md
 
+		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,'size',[md.mesh.numberofvertices],'>=',0)
@@ -46,4 +52,5 @@
 		yts=365.*24.*3600.
 		WriteData(fid,'enum',CalvingLawEnum(),'data',CalvingLevermannEnum(),'format','Integer');
+		WriteData(fid,'enum',LevelsetStabilizationEnum(),'data',self.stabilization,'format','Integer');
 		WriteData(fid,'enum',CalvinglevermannCoeffEnum(),'data',self.coeff,'format','DoubleMat','mattype',1)
 		WriteData(fid,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1,'scale',1./yts)
Index: /issm/trunk-jpl/src/m/classes/calvingpi.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/calvingpi.m	(revision 19023)
+++ /issm/trunk-jpl/src/m/classes/calvingpi.m	(revision 19024)
@@ -6,6 +6,7 @@
 classdef calvingpi
 	properties (SetAccess=public) 
-		 coeff       = NaN;
-		 meltingrate = NaN;
+		stabilization = 0;
+		coeff         = NaN;
+		meltingrate   = NaN;
 	end
 	methods
@@ -29,4 +30,8 @@
 		end % }}}
 		function obj = setdefaultparameters(obj) % {{{
+
+			%stabilization = 2 by default
+			obj.stabilization = 2;
+
 			%Proportionality coefficient in Pi model
 			obj.coeff=2e13;
@@ -35,4 +40,6 @@
 			%Early return
 			if (solution~=TransientSolutionEnum() | md.transient.iscalving==0), return; end
+
+			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,'size',[md.mesh.numberofvertices 1],'>=',0);
@@ -40,4 +47,5 @@
 		function disp(obj) % {{{
 			disp(sprintf('   Calving Pi parameters:'));
+			fielddisplay(obj,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding');
 			fielddisplay(obj,'coeff','proportionality coefficient in Pi model');
 			fielddisplay(obj,'meltingrate','melting rate at given location [m/a]');
@@ -47,4 +55,5 @@
 			yts=365.0*24.0*3600.0;
 			WriteData(fid,'enum',CalvingLawEnum(),'data',CalvingPiEnum(),'format','Integer');
+			WriteData(fid,'enum',LevelsetStabilizationEnum(),'data',obj.stabilization,'format','Integer');
 			WriteData(fid,'enum',CalvingpiCoeffEnum(),'data',obj.coeff,'format','DoubleMat','mattype',1);
 			WriteData(fid,'object',obj,'fieldname','meltingrate','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1,'scale',1./yts);
Index: /issm/trunk-jpl/src/wrappers/M1qn3/M1qn3.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/M1qn3/M1qn3.cpp	(revision 19023)
+++ /issm/trunk-jpl/src/wrappers/M1qn3/M1qn3.cpp	(revision 19024)
@@ -5,5 +5,5 @@
 #include "./M1qn3.h"
 
-#ifndef _HAVE_M1QN3_
+#ifdef _HAVE_M1QN3_
 /*m1qn3 prototypes {{{*/
 extern "C" void *ctonbe_; // DIS mode : Conversion
@@ -38,5 +38,5 @@
 WRAPPER(M1qn3){
 
-#ifndef _HAVE_M1QN3_
+#ifdef _HAVE_M1QN3_
 	/*input: */
 	double* Xs=NULL;
@@ -161,5 +161,5 @@
 
 
-#ifndef _HAVE_M1QN3_
+#ifdef _HAVE_M1QN3_
 void fakesimul(long* indic,long* n,double* X,double* pf,double* G,long izs[1],float rzs[1],void* dzs){
 
