Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 21673)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 21674)
@@ -1585,4 +1585,5 @@
 				name==FrictionPEnum ||
 				name==FrictionQEnum ||
+				name==FrictionCoefficientcoulombEnum ||
 				name==LoadingforceXEnum ||
 				name==LoadingforceYEnum ||
Index: /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 21673)
+++ /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 21674)
@@ -334,4 +334,179 @@
 }  /*}}}*/
 
+/*Specific instantiations for int*: */
+template <> inline GenericExternalResult<int*>::GenericExternalResult(int in_id, int in_enum_type,int* in_values, int in_M,int in_N,int in_step,IssmDouble in_time){/*{{{*/
+
+	id = in_id;
+	M  = in_M;
+	N  = in_N;
+
+	EnumToStringx(&this->result_name,in_enum_type);
+
+	step = in_step;
+	time = in_time;
+
+	/*Copy result in values*/
+	if(M*N){
+		value=xNew<int>(M*N);
+		xMemCpy<int>(value,in_values,M*N);
+	}
+	else value=NULL;
+}
+/*}}}*/
+template <> inline GenericExternalResult<int*>::GenericExternalResult(int in_id,const char* in_result_name,int* in_values, int in_M,int in_N,int in_step,IssmDouble in_time){/*{{{*/
+
+	id = in_id;
+	M  = in_M;
+	N  = in_N;
+
+	/*Copy name*/
+	this->result_name = xNew<char>(strlen(in_result_name)+1);
+	xMemCpy<char>(this->result_name,in_result_name,strlen(in_result_name)+1);
+
+	step = in_step;
+	time = in_time;
+
+	/*Copy result in values*/
+	if(M*N){
+		value=xNew<int>(M*N);
+		xMemCpy<int>(value,in_values,M*N);
+	}
+	else value=NULL;
+}
+/*}}}*/
+template <> inline GenericExternalResult<int*>::GenericExternalResult(int in_id, int in_enum_type,int* in_value,int in_step, IssmDouble in_time){ /*{{{*/
+	_error_("you cannot initialize a GenericExternalResult<int*> without providing the dimensions of the matrix! Please use a more appropriate constructor!");
+} /*}}}*/
+template <> inline GenericExternalResult<int*>::~GenericExternalResult(){ /*{{{*/
+	xDelete<char>(result_name);
+	xDelete<int>(value);
+} /*}}}*/
+template <> inline void GenericExternalResult<int*>::Echo(void){ /*{{{*/
+
+	_printf_("GenericExternalResult<int*>:\n");
+	this->GenericEcho();
+	_printf_("   matrix size: " << this->M << "-" << this->N << "\n");
+
+} /*}}}*/
+template <> inline void GenericExternalResult<int*>::DeepEcho(void){ /*{{{*/
+
+	int i,j;
+
+	_printf_("GenericExternalResult<int*>:\n");
+	this->GenericEcho();
+
+	_printf_("   matrix size: " << this->M << "-" << this->N << "\n");
+	for (i=0;i<this->M;i++){  
+		_printf_("   [ ");
+		for (j=0;j<this->N;j++){
+			_printf_( " " << setw(11) << this->value[i*this->N+j]);
+		}  
+		_printf_(" ]\n");
+	}  
+
+} /*}}}*/
+template <> inline Object* GenericExternalResult<int*>::copy(void){ /*{{{*/
+	return new GenericExternalResult<int*>(this->id,StringToEnumx(this->result_name),this->value,this->M,this->N,this->step,this->time);
+} /*}}}*/
+template <> inline void GenericExternalResult<int*>::WriteData(FILE* fid,bool io_gather){ /*{{{*/
+
+	int     my_rank;
+	int     type;
+	int     rows,cols;
+	char   *name    = NULL;
+	IssmPDouble passiveDouble;
+
+	/*recover my_rank:*/
+	my_rank=IssmComm::GetRank();
+
+	if(io_gather){
+		/*we are gathering the data on cpu 0, don't write on other cpus: */
+		if(my_rank) return;
+	}
+
+	/*First write enum: */
+	int length=(strlen(this->result_name)+1)*sizeof(char);
+	fwrite(&length,sizeof(int),1,fid);
+	fwrite(this->result_name,length,1,fid);
+
+	/*Now write time and step: */
+	passiveDouble=reCast<IssmPDouble>(time);
+	fwrite(&passiveDouble,sizeof(IssmPDouble),1,fid);
+	fwrite(&step,sizeof(int),1,fid);
+
+	/*writing an int array, type is 4 (see parseresultsfromdisk.m):*/
+	type=4;
+	fwrite(&type,sizeof(int),1,fid);
+	rows=this->M;
+	fwrite(&rows,sizeof(int),1,fid);
+	cols=this->N;
+	fwrite(&cols,sizeof(int),1,fid);
+	fwrite(value,cols*rows*sizeof(int),1,fid);
+
+}
+/*}}}*/
+template <> inline int GenericExternalResult<int*>::ObjectEnum(void){ /*{{{*/
+	return IntMatExternalResultEnum;
+} /*}}}*/
+template <> inline void GenericExternalResult<int*>::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
+
+	MARSHALLING_ENUM(this->ObjectEnum());
+
+	MARSHALLING(id);
+	MARSHALLING(result_name);
+	MARSHALLING(M);
+	MARSHALLING(N);
+	MARSHALLING_DYNAMIC(value,int,M*N);
+	MARSHALLING(step);
+	MARSHALLING(time);
+
+}  /*}}}*/
+/*Specific instantiations for int*: */
+#if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)  //We hook off this specific specialization when not running ADOLC, otherwise we get a redeclaration with the next specialization. 
+template <> inline void GenericExternalResult<int*>::WriteData(FILE* fid,bool io_gather){ /*{{{*/
+
+	int     i;
+	int     my_rank;
+	int     type;
+	int     rows,cols;
+	char   *name    = NULL;
+	IssmPDouble passiveDouble;
+	int* passiveInts;
+
+	/*recover my_rank:*/
+	my_rank=IssmComm::GetRank();
+
+	if(io_gather){
+		/*we are gathering the data on cpu 0, don't write on other cpus: */
+		if(my_rank) return;
+	}
+
+	/*First write enum: */
+	int length=(strlen(this->result_name)+1)*sizeof(char);
+	fwrite(&length,sizeof(int),1,fid);
+	fwrite(this->result_name,length,1,fid);
+
+	/*Now write time and step: */
+	passiveDouble=reCast<IssmPDouble>(time);
+	fwrite(&passiveDouble,sizeof(IssmPDouble),1,fid);
+	fwrite(&step,sizeof(int),1,fid);
+
+	/*writing a int array, type is 4 (see parseresultsfromdisk.m):*/
+	type=4;
+	fwrite(&type,sizeof(int),1,fid);
+	rows=this->M;
+	fwrite(&rows,sizeof(int),1,fid);
+	cols=this->N;
+	fwrite(&cols,sizeof(int),1,fid);
+
+	passiveInts=xNew<int>(this->M*this->N);
+	for (i=0;i<this->M*this->N;i++)passiveInts[i]=reCast<int>(value[i]);
+	fwrite(passiveInts,cols*rows*sizeof(int),1,fid);
+	xDelete<int>(int);
+
+}
+/*}}}*/
+#endif
+
 /*Specific instantiations for IssmPDouble*: */
 template <> inline GenericExternalResult<IssmPDouble*>::GenericExternalResult(int in_id, int in_enum_type,IssmPDouble* in_values, int in_M,int in_N,int in_step,IssmDouble in_time){/*{{{*/
Index: /issm/trunk-jpl/src/c/cores/transient_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 21673)
+++ /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 21674)
@@ -26,5 +26,5 @@
 	int        output_frequency;
 	int        recording_frequency;
-	int        domaintype,groundingline_migration,smb_model;
+	int        domaintype,groundingline_migration,smb_model,amr_frequency;
 	int        numoutputs;
 	Analysis  *analysis          = NULL;
@@ -60,8 +60,14 @@
 	femmodel->parameters->FindParam(&isdamageevolution,TransientIsdamageevolutionEnum);
 	femmodel->parameters->FindParam(&ishydrology,TransientIshydrologyEnum);
+	femmodel->parameters->FindParam(&amr_frequency,TransientAmrFrequencyEnum);
 	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
 	if(isgroundingline) femmodel->parameters->FindParam(&groundingline_migration,GroundinglineMigrationEnum);
 	femmodel->parameters->FindParam(&numoutputs,TransientNumRequestedOutputsEnum);
 	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,TransientRequestedOutputsEnum);
+
+	#ifdef _HAVE_NEOPZ_
+	bool ismismip = false;//itapopo testing restart 
+	if(ismismip) femmodel->ReMesh();
+	#endif
 
 	while(time < finaltime - (yts*DBL_EPSILON)){ //make sure we run up to finaltime.
@@ -170,6 +176,6 @@
 		/*Adaptive mesh refinement*/
 		#ifdef _HAVE_NEOPZ_
-		int isamr=true;
-		if(isamr) femmodel->ReMesh();
+		if(save_results) femmodel->WriteMeshInResults();
+		if(step%amr_frequency==0 && time<finaltime) femmodel->ReMesh();//Do not refine the last step
 		#endif
 	
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 21673)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 21674)
@@ -84,6 +84,11 @@
 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.isslr",TransientIsslrEnum));
 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.iscoupler",TransientIscouplerEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.transient.amr_frequency",TransientAmrFrequencyEnum));
 		parameters->AddObject(iomodel->CopyConstantObject("md.materials.rheology_law",MaterialsRheologyLawEnum));
 		parameters->AddObject(iomodel->CopyConstantObject("md.gia.cross_section_shape",GiaCrossSectionShapeEnum));
+		/*amr properties*/	
+		parameters->AddObject(iomodel->CopyConstantObject("md.amr.level_max",AmrLevelMaxEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.amr.region_level_1",AmrRegionLevel1Enum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.amr.region_level_max",AmrRegionLevelMaxEnum));
 
 		/*For stress balance only*/
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21673)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21674)
@@ -581,4 +581,5 @@
 	DoubleMatExternalResultEnum,
 	IntExternalResultEnum,
+	IntMatExternalResultEnum,
 	JEnum,
 	StringExternalResultEnum,
@@ -819,4 +820,10 @@
 	EsaNumRequestedOutputsEnum,
 	/*}}}*/
+	/*Adaptive mesh refinement (AMR){{{*/
+	AmrLevelMaxEnum,
+	AmrRegionLevel1Enum,
+	AmrRegionLevelMaxEnum,
+	TransientAmrFrequencyEnum,
+	/*}}}*/
 	ParametersENDEnum,
 	/*Coordinate Systems{{{*/
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21673)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21674)
@@ -577,4 +577,5 @@
 		case DoubleMatExternalResultEnum : return "DoubleMatExternalResult";
 		case IntExternalResultEnum : return "IntExternalResult";
+		case IntMatExternalResultEnum : return "IntMatExternalResult";
 		case JEnum : return "J";
 		case StringExternalResultEnum : return "StringExternalResult";
@@ -796,4 +797,8 @@
 		case EsaRequestedOutputsEnum : return "EsaRequestedOutputs";
 		case EsaNumRequestedOutputsEnum : return "EsaNumRequestedOutputs";
+		case AmrLevelMaxEnum : return "AmrLevelMax";
+		case AmrRegionLevel1Enum : return "AmrRegionLevel1";
+		case AmrRegionLevelMaxEnum : return "AmrRegionLevelMax";
+		case TransientAmrFrequencyEnum : return "TransientAmrFrequency";
 		case ParametersENDEnum : return "ParametersEND";
 		case XYEnum : return "XY";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21673)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21674)
@@ -589,4 +589,5 @@
 	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
 	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
+	      else if (strcmp(name,"IntMatExternalResult")==0) return IntMatExternalResultEnum;
 	      else if (strcmp(name,"J")==0) return JEnum;
 	      else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum;
@@ -628,9 +629,9 @@
 	      else if (strcmp(name,"Outputdefinition30")==0) return Outputdefinition30Enum;
 	      else if (strcmp(name,"Outputdefinition31")==0) return Outputdefinition31Enum;
-	      else if (strcmp(name,"Outputdefinition32")==0) return Outputdefinition32Enum;
          else stage=6;
    }
    if(stage==6){
-	      if (strcmp(name,"Outputdefinition33")==0) return Outputdefinition33Enum;
+	      if (strcmp(name,"Outputdefinition32")==0) return Outputdefinition32Enum;
+	      else if (strcmp(name,"Outputdefinition33")==0) return Outputdefinition33Enum;
 	      else if (strcmp(name,"Outputdefinition34")==0) return Outputdefinition34Enum;
 	      else if (strcmp(name,"Outputdefinition35")==0) return Outputdefinition35Enum;
@@ -751,9 +752,9 @@
 	      else if (strcmp(name,"Regular")==0) return RegularEnum;
 	      else if (strcmp(name,"Scaled")==0) return ScaledEnum;
-	      else if (strcmp(name,"Separate")==0) return SeparateEnum;
          else stage=7;
    }
    if(stage==7){
-	      if (strcmp(name,"Sset")==0) return SsetEnum;
+	      if (strcmp(name,"Separate")==0) return SeparateEnum;
+	      else if (strcmp(name,"Sset")==0) return SsetEnum;
 	      else if (strcmp(name,"Dense")==0) return DenseEnum;
 	      else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
@@ -814,4 +815,8 @@
 	      else if (strcmp(name,"EsaRequestedOutputs")==0) return EsaRequestedOutputsEnum;
 	      else if (strcmp(name,"EsaNumRequestedOutputs")==0) return EsaNumRequestedOutputsEnum;
+	      else if (strcmp(name,"AmrLevelMax")==0) return AmrLevelMaxEnum;
+	      else if (strcmp(name,"AmrRegionLevel1")==0) return AmrRegionLevel1Enum;
+	      else if (strcmp(name,"AmrRegionLevelMax")==0) return AmrRegionLevelMaxEnum;
+	      else if (strcmp(name,"TransientAmrFrequency")==0) return TransientAmrFrequencyEnum;
 	      else if (strcmp(name,"ParametersEND")==0) return ParametersENDEnum;
 	      else if (strcmp(name,"XY")==0) return XYEnum;
@@ -870,13 +875,13 @@
 	      else if (strcmp(name,"SegInput")==0) return SegInputEnum;
 	      else if (strcmp(name,"Tria")==0) return TriaEnum;
-	      else if (strcmp(name,"TriaInput")==0) return TriaInputEnum;
+         else stage=8;
+   }
+   if(stage==8){
+	      if (strcmp(name,"TriaInput")==0) return TriaInputEnum;
 	      else if (strcmp(name,"Tetra")==0) return TetraEnum;
 	      else if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
 	      else if (strcmp(name,"Penta")==0) return PentaEnum;
 	      else if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
-         else stage=8;
-   }
-   if(stage==8){
-	      if (strcmp(name,"Vertex")==0) return VertexEnum;
+	      else if (strcmp(name,"Vertex")==0) return VertexEnum;
 	      else if (strcmp(name,"VertexPId")==0) return VertexPIdEnum;
 	      else if (strcmp(name,"VertexSId")==0) return VertexSIdEnum;
@@ -993,13 +998,13 @@
 	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
 	      else if (strcmp(name,"LATaylorHood")==0) return LATaylorHoodEnum;
-	      else if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum;
+         else stage=9;
+   }
+   if(stage==9){
+	      if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum;
 	      else if (strcmp(name,"OneLayerP4z")==0) return OneLayerP4zEnum;
 	      else if (strcmp(name,"CrouzeixRaviart")==0) return CrouzeixRaviartEnum;
 	      else if (strcmp(name,"LACrouzeixRaviart")==0) return LACrouzeixRaviartEnum;
 	      else if (strcmp(name,"Closed")==0) return ClosedEnum;
-         else stage=9;
-   }
-   if(stage==9){
-	      if (strcmp(name,"Free")==0) return FreeEnum;
+	      else if (strcmp(name,"Free")==0) return FreeEnum;
 	      else if (strcmp(name,"Open")==0) return OpenEnum;
 	      else if (strcmp(name,"Air")==0) return AirEnum;
Index: /issm/trunk-jpl/src/m/classes/amr.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/amr.js	(revision 21674)
+++ /issm/trunk-jpl/src/m/classes/amr.js	(revision 21674)
@@ -0,0 +1,56 @@
+//AMR class definition
+//
+//   Usage:
+//      amr=new amr();
+
+function amr (){
+	//methods
+	this.setdefaultparameters = function(){// {{{
+		//level_max: 2 to 4
+		this.level_max=2;
+
+		//region_level_1: region around (m) the discontinuity (grounding line or ice front) where the mesh will be refined once (h=1).
+		this.region_level_1=20000.;
+
+		//region_level_max: region around (m) the discontinuity (grounding line or ice front) where the mesh will be refined with max level of refinement (h=level_max).
+		this.region_level_max=15000.;
+	}// }}}
+	this.disp= function(){// {{{
+
+		console.log(sprintf('   amr parameters:'));
+		fielddisplay(this,'level_max','maximum refinement level (1, 2, 3 or 4)');
+		fielddisplay(this,'region_level_1','region which will be refined once (level 1) [ m ]');
+		fielddisplay(this,'region_level_max','region which will be refined with level_max [ m ]');
+
+	}// }}}
+	this.classname= function(){// {{{
+		return "amr";
+
+	}// }}}
+		this.checkconsistency = function(md,solution,analyses) { //{{{
+			
+			checkfield(md,'fieldname','amr.level_max','numel',[1],'>=',0,'<=',4);
+			checkfield(md,'fieldname','amr.region_level_1','numel',[1],'>',0,'NaN',1,'Inf',1);
+			checkfield(md,'fieldname','amr.region_level_max','numel',[1],'>',0,'NaN',1,'Inf',1);
+			if (this.region_level_1-this.region_level_max<0.2*this.region_level_1){
+				md.checkmessage('region_level_max should be lower than 80% of region_level_1');
+			}
+		} // }}}
+		this.marshall=function(md,prefix,fid) { //{{{
+
+			WriteData(fid,prefix,'object',this,'fieldname','level_max','format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','region_level_1','format','Double');
+			WriteData(fid,prefix,'object',this,'fieldname','region_level_max','format','Double');
+
+		}//}}}
+		this.fix=function() { //{{{
+		}//}}}
+	//properties 
+	// {{{
+	this.level_max				= 0;
+	this.region_level_1     = 0.;
+	this.region_level_max   = 0.;
+
+	this.setdefaultparameters();
+	//}}}
+}
Index: /issm/trunk-jpl/src/m/classes/amr.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/amr.m	(revision 21674)
+++ /issm/trunk-jpl/src/m/classes/amr.m	(revision 21674)
@@ -0,0 +1,65 @@
+%AMR Class definition
+%
+%   Usage:
+%      amr=amr();
+
+classdef amr
+	properties (SetAccess=public) 
+		level_max			= 0; 
+		region_level_1		= 0;
+		region_level_max	= 0;
+	end
+	methods
+		function self = amr(varargin) % {{{
+			switch nargin
+				case 0
+					self=setdefaultparameters(self);
+				otherwise
+					error('constructor not supported');
+			end
+		end % }}}
+		function self = setdefaultparameters(self) % {{{
+
+			%level_max: 2 to 4
+			self.level_max=2;
+
+			%region_level_1: region around (m) the discontinuity (grounding line or ice front) where the mesh will be refined once (h=1).
+			self.region_level_1=20000.;
+			
+			%region_level_max: region around (m) the discontinuity (grounding line or ice front) where the mesh will be refined with max level of refinement (h=level_max). 
+			self.region_level_max=15000.;
+
+		end % }}}
+		function md = checkconsistency(self,md,solution,analyses) % {{{
+
+			md = checkfield(md,'fieldname','amr.level_max','numel',[1],'>=',0,'<=',4);
+			md = checkfield(md,'fieldname','amr.region_level_1','numel',[1],'>',0,'NaN',1,'Inf',1);
+			md = checkfield(md,'fieldname','amr.region_level_max','numel',[1],'>',0,'NaN',1,'Inf',1);
+			if self.region_level_1-self.region_level_max<0.2*self.region_level_1, %it was adopted 20% of the region_level_1
+				md = checkmessage(md,'region_level_max should be lower than 80% of region_level_1');
+			end 
+		end % }}}
+		function disp(self) % {{{
+			disp(sprintf('   amr parameters:'));
+
+			fielddisplay(self,'level_max',['maximum refinement level (1, 2, 3 or 4)']);
+			fielddisplay(self,'region_level_1',['region which will be refined once (level 1) [ m ]']);
+			fielddisplay(self,'region_level_max',['region which will be refined with level_max [ m ]']);
+
+		end % }}}
+		function marshall(self,prefix,md,fid) % {{{
+
+			scale = md.constants.yts;
+			WriteData(fid,prefix,'object',self,'fieldname','level_max','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','region_level_1','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','region_level_max','format','Double');
+		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejsdouble(fid,[modelname '.amr.level_max'],self.level_max);
+			writejsdouble(fid,[modelname '.amr.region_level_1'],self.region_level_1);
+			writejsdouble(fid,[modelname '.amr.region_level_max'],self.region_level_max);
+
+		end % }}}
+	end
+end
Index: /issm/trunk-jpl/src/m/classes/amr.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/amr.py	(revision 21674)
+++ /issm/trunk-jpl/src/m/classes/amr.py	(revision 21674)
@@ -0,0 +1,58 @@
+from fielddisplay import fielddisplay
+from checkfield import checkfield
+from WriteData import WriteData
+
+class amr(object):
+   """
+   AMR Class definition
+
+      Usage:
+         amr=amr();
+   """
+
+   def __init__(self): # {{{
+      self.level_max      		= 0.
+      self.region_level_1    	= 0.
+      self.region_level_max	= 0.
+
+      #set defaults
+      self.setdefaultparameters()
+
+      #}}}
+   def __repr__(self): # {{{
+      string="   amr parameters:"
+      string="%s\n%s"%(string,fielddisplay(self,"level_max","maximum refinement level (1, 2, 3 or 4)"))
+      string="%s\n%s"%(string,fielddisplay(self,"region_level_1","region which will be refined once (level 1) [ m ]"))
+      string="%s\n%s"%(string,fielddisplay(self,"region_level_max","region which will be refined with level_max [ m ]"))
+      return string
+      #}}}
+   def setdefaultparameters(self): # {{{
+
+ 		#level_max: 2 to 4
+      self.level_max=2
+
+      #region_level_1: region around (m) the discontinuity (grounding line or ice front) where the mesh will be refined once (h=1).
+      self.region_level_1=20000.
+
+      #region_level_max: region around (m) the discontinuity (grounding line or ice front) where the mesh will be refined with max level of refinement (h=level_max).
+      self.region_level_max=15000.
+      
+		return self
+   #}}}
+   def checkconsistency(self,md,solution,analyses):    # {{{
+
+      md = checkfield(md,'fieldname','amr.level_max','numel',[1],'>=',0,'<=',4)
+      md = checkfield(md,'fieldname','amr.region_level_1','numel',[1],'>',0,'NaN',1,'Inf',1)
+      md = checkfield(md,'fieldname','amr.region_level_max','numel',[1],'>',0,'NaN',1,'Inf',1)
+		#it was adopted 20% of the region_level_1
+      if self.region_level_1-self.region_level_max<0.2*self.region_level_1:
+         md.checkmessage("region_level_max should be lower than 80% of region_level_1")
+
+      return md
+   # }}}
+   def marshall(self,prefix,md,fid):    # {{{
+
+      WriteData(fid,prefix,'object',self,'fieldname','level_max','format','Integer')
+      WriteData(fid,prefix,'object',self,'fieldname','region_level_1','format','Double')
+      WriteData(fid,prefix,'object',self,'fieldname','region_level_max','format','Double')
+   # }}}
Index: /issm/trunk-jpl/src/m/classes/model.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/model.js	(revision 21673)
+++ /issm/trunk-jpl/src/m/classes/model.js	(revision 21674)
@@ -41,4 +41,5 @@
 			console.log(sprintf("//19s: //-22s -- //s","inversion"       ,"[1x1 " + typeof(this.inversion) + "]","parameters for inverse methods"));
 			console.log(sprintf("//19s: //-22s -- //s","qmu"             ,"[1x1 " + typeof(this.qmu) + "]","dakota properties"));
+			console.log(sprintf("//19s: //-22s -- //s","amr"             ,"[1x1 " + typeof(this.amr) + "]","adaptive mesh refinement properties"));
 			console.log(sprintf("//19s: //-22s -- //s","outputdefinition","[1x1 " + typeof(this.outputdefinition) + "]","output definition"));
 			console.log(sprintf("//19s: //-22s -- //s","results"         ,"[1x1 " + typeof(this.results) + "]","model results"));
@@ -82,4 +83,5 @@
 			this.inversion        = new inversion();
 			this.qmu              = new qmu();
+			this.amr					 = new amr();
 			this.radaroverlay     = new radaroverlay();
 			this.results          = {};
@@ -612,4 +614,5 @@
 		this.inversion        = 0;
 		this.qmu              = 0;
+		this.amr					 = 0;
 
 		this.results          = 0;
Index: /issm/trunk-jpl/src/m/classes/model.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/model.m	(revision 21673)
+++ /issm/trunk-jpl/src/m/classes/model.m	(revision 21674)
@@ -46,4 +46,5 @@
 		inversion        = 0;
 		qmu              = 0;
+		amr				  = 0;
 
 		results          = 0;
@@ -1124,4 +1125,5 @@
 			md.inversion        = inversion();
 			md.qmu              = qmu();
+			md.amr				  = amr();
 			md.radaroverlay     = radaroverlay();
 			md.results          = struct();
@@ -1296,4 +1298,5 @@
 			disp(sprintf('%19s: %-22s -- %s','inversion'       ,['[1x1 ' class(self.inversion) ']'],'parameters for inverse methods'));
 			disp(sprintf('%19s: %-22s -- %s','qmu'             ,['[1x1 ' class(self.qmu) ']'],'dakota properties'));
+			disp(sprintf('%19s: %-22s -- %s','amr'             ,['[1x1 ' class(self.amr) ']'],'adaptive mesh refinement properties'));
 			disp(sprintf('%19s: %-22s -- %s','outputdefinition',['[1x1 ' class(self.outputdefinition) ']'],'output definition'));
 			disp(sprintf('%19s: %-22s -- %s','results'         ,['[1x1 ' class(self.results) ']'],'model results'));
Index: /issm/trunk-jpl/src/m/classes/model.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/model.py	(revision 21673)
+++ /issm/trunk-jpl/src/m/classes/model.py	(revision 21674)
@@ -50,4 +50,5 @@
 from outputdefinition import outputdefinition
 from qmu import qmu
+from amr import amr
 from results import results
 from radaroverlay import radaroverlay
@@ -112,4 +113,5 @@
 		self.inversion        = inversion()
 		self.qmu              = qmu()
+		self.amr					 = amr()
 
 		self.results          = results()
@@ -154,4 +156,5 @@
 		        'inversion',\
 		        'qmu',\
+		        'amr',\
 		        'outputdefinition',\
 		        'results',\
@@ -194,4 +197,5 @@
 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("inversion","[%s,%s]" % ("1x1",obj.inversion.__class__.__name__),"parameters for inverse methods"))
 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("qmu","[%s,%s]" % ("1x1",obj.qmu.__class__.__name__),"dakota properties"))
+		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("amr","[%s,%s]" % ("1x1",obj.amr.__class__.__name__),"adaptive mesh refinement properties"))
 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("outputdefinition","[%s,%s]" % ("1x1",obj.outputdefinition.__class__.__name__),"output definition"))
 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("results","[%s,%s]" % ("1x1",obj.results.__class__.__name__),"model results"))
Index: /issm/trunk-jpl/src/m/classes/trans.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/trans.js	(revision 21673)
+++ /issm/trunk-jpl/src/m/classes/trans.js	(revision 21674)
@@ -20,4 +20,5 @@
 		this.isslr           = 0;
 		this.iscoupler       = 0;
+		this.amr_frequency   = 0;
 
 		//default output
@@ -40,4 +41,5 @@
 		fielddisplay(this,'isslr','indicates whether a sea-level rise model is used');
 		fielddisplay(this,'iscoupler','indicates whether different models are being run with need for coupling');
+		fielddisplay(this,'amr_frequency','frequency at which mesh is refined in simulations with multiple time_steps');
 		fielddisplay(this,'requested_outputs','list of additional outputs requested');
 
@@ -63,4 +65,5 @@
 			checkfield(md,'fieldname','trans.iscoupler','numel',[1],'values',[0 ,1]);
 			checkfield(md,'fieldname','trans.isslr','numel',[1],'values',[0 ,1]);
+			checkfield(md,'fieldname','trans.amr_frequency','numel',[1],'>=',1,'NaN',1,'Inf',1);
 			checkfield(md,'fieldname','trans.requested_outputs','stringrow',1);
 		} // }}}
@@ -79,4 +82,5 @@
 			WriteData(fid,prefix,'object',this,'fieldname','isslr','format','Boolean');
 			WriteData(fid,prefix,'object',this,'fieldname','iscoupler','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','amr_frequency','format','Integer');
 
 			//process requested outputs
@@ -111,4 +115,5 @@
 	this.isslr             = 0;
 	this.iscoupler         = 0;
+	this.amr_frequency	  = 0;
 	this.requested_outputs = [];
 
Index: /issm/trunk-jpl/src/m/classes/transient.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/transient.m	(revision 21673)
+++ /issm/trunk-jpl/src/m/classes/transient.m	(revision 21674)
@@ -18,4 +18,5 @@
 		isslr             = 0;
 		iscoupler         = 0;
+		amr_frequency     = 0;
 		isoceancoupling   = 0;
 		requested_outputs = {};
@@ -46,4 +47,5 @@
 			self.isoceancoupling = 0;
 			self.iscoupler       = 0;
+			self.amr_frequency	= 0;
 
 			%default output
@@ -66,4 +68,5 @@
 			self.isoceancoupling = 0;
 			self.iscoupler       = 0;
+			self.amr_frequency	= 1;
 
 			%default output
@@ -96,4 +99,5 @@
 			md = checkfield(md,'fieldname','transient.isoceancoupling','numel',[1],'values',[0 1]);
 			md = checkfield(md,'fieldname','transient.iscoupler','numel',[1],'values',[0 1]);
+			md = checkfield(md,'fieldname','transient.amr_frequency','numel',[1],'>=',1,'NaN',1,'Inf',1);
 
 			if (~strcmp(solution,'TransientSolution') & md.transient.iscoupling==1), 
@@ -117,4 +121,5 @@
 			fielddisplay(self,'isoceancoupling','indicates whether a coupling with an ocean model is used in the transient');
 			fielddisplay(self,'iscoupler','indicates whether different models are being run with need for coupling');
+			fielddisplay(self,'amr_frequency','frequency at which mesh is refined in simulations with multiple time_steps');
 			fielddisplay(self,'requested_outputs','list of additional outputs requested');
 
@@ -134,4 +139,5 @@
 			WriteData(fid,prefix,'object',self,'fieldname','isoceancoupling','format','Boolean');
 			WriteData(fid,prefix,'object',self,'fieldname','iscoupler','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','amr_frequency','format','Integer');
 
 			%process requested outputs
@@ -159,4 +165,5 @@
 			writejsdouble(fid,[modelname '.trans.isoceancoupling'],self.isoceancoupling);
 			writejsdouble(fid,[modelname '.trans.iscoupler'],self.iscoupler);
+			writejsdouble(fid,[modelname '.trans.amr_frequency'],self.amr_frequency);
 			writejscellstring(fid,[modelname '.trans.requested_outputs'],self.requested_outputs);
 
Index: /issm/trunk-jpl/src/m/classes/transient.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/transient.py	(revision 21673)
+++ /issm/trunk-jpl/src/m/classes/transient.py	(revision 21674)
@@ -25,4 +25,5 @@
 		self.isoceancoupling   = False
 		self.iscoupler         = False
+		amr_frequency			  = 0
 		self.requested_outputs = []
 
@@ -46,4 +47,5 @@
 		string="%s\n%s"%(string,fielddisplay(self,'isoceancoupling','indicates whether coupling with an ocean model is used in the transient'))
 		string="%s\n%s"%(string,fielddisplay(self,'iscoupler','indicates whether different models are being run with need for coupling'))
+		string="%s\n%s"%(string,fielddisplay(self,'amr_frequency','frequency at which mesh is refined in simulations with multiple time_steps'))
 		string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','list of additional outputs requested'))
 		return string
@@ -73,4 +75,5 @@
 		self.isslr             = False
 		self.iscoupler         = False
+		self.amr_frequency	  = 0
 
 		#default output
@@ -94,4 +97,5 @@
 		self.isoceancoupling = False
 		self.iscoupler       = False
+		self.amr_frequency	= 1
 
 		#default output
@@ -118,4 +122,5 @@
 		md = checkfield(md,'fieldname','transient.isoceancoupling','numel',[1],'values',[0,1])
 		md = checkfield(md,'fieldname','transient.iscoupler','numel',[1],'values',[0,1])
+		md = checkfield(md,'fieldname','transient.amr_frequency','numel',[1],'>=',1,'NaN',1,'Inf',1)
 		md = checkfield(md,'fieldname','transient.requested_outputs','stringrow',1)
 
@@ -139,4 +144,5 @@
 		WriteData(fid,prefix,'object',self,'fieldname','isoceancoupling','format','Boolean')
 		WriteData(fid,prefix,'object',self,'fieldname','iscoupler','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','amr_frequency','format','Integer')
 
 		#process requested outputs
Index: /issm/trunk-jpl/src/m/solve/parseresultsfrombuffer.js
===================================================================
--- /issm/trunk-jpl/src/m/solve/parseresultsfrombuffer.js	(revision 21673)
+++ /issm/trunk-jpl/src/m/solve/parseresultsfrombuffer.js	(revision 21674)
@@ -81,4 +81,8 @@
 			field=fid.fread(N*M,'double');
 		}
+		else if (type==4) {
+			N=fid.fread(1,'int');
+			field=fid.fread(N*M,'int');
+		}
 		else throw Error(sprintf("%s%i",'ReadData error message: cannot read data of type ',type));
 
Index: /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.m
===================================================================
--- /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.m	(revision 21673)
+++ /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.m	(revision 21674)
@@ -154,4 +154,7 @@
 		N=fread(fid,1,'int');
 		field=transpose(fread(fid,[N M],'double'));
+	elseif type==4,
+		N=fread(fid,1,'int');
+		field=transpose(fread(fid,[N M],'int'));
 	else
 		error(['cannot read data of type ' num2str(type) ]);
Index: /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.py
===================================================================
--- /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.py	(revision 21673)
+++ /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.py	(revision 21674)
@@ -162,4 +162,10 @@
 			for i in xrange(M):
 				field[i,:]=struct.unpack('%dd' % N,fid.read(N*struct.calcsize('d')))
+		elif type==4:
+			N=struct.unpack('i',fid.read(struct.calcsize('i')))[0]
+#			field=transpose(fread(fid,[N M],'int'));
+			field=np.zeros(shape=(M,N),dtype=int)
+			for i in xrange(M):
+				field[i,:]=struct.unpack('%ii' % N,fid.read(N*struct.calcsize('i')))
 		else:
 			raise TypeError("cannot read data of type %d" % type)
