Index: /issm/trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp	(revision 23470)
+++ /issm/trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp	(revision 23471)
@@ -54,4 +54,6 @@
 /*}}}*/
 AdaptiveMeshRefinement::~AdaptiveMeshRefinement(){/*{{{*/
+	int writemesh = 1;//itapopo keep 0
+	if(writemesh) this->WriteMesh();
 	this->CleanUp();
 	gRefDBase.clear();
@@ -856,2 +858,87 @@
 }
 /*}}}*/
+void AdaptiveMeshRefinement::ReadMesh(){/*{{{*/
+
+	std::string fathermeshfile		= "/home/santos/issm_fathermesh.txt";
+	std::string previousmeshfile	= "/home/santos/issm_previousmesh.txt";
+	std::string amrfile				= "/home/santos/issm_amr.txt";
+	std::ifstream amrifstream(amrfile.c_str());				
+	int size,value;
+	
+	TPZPersistenceManager::OpenRead(fathermeshfile);
+	this->fathermesh = dynamic_cast<TPZGeoMesh *>(TPZPersistenceManager::ReadFromFile());
+	TPZPersistenceManager::CloseRead();
+	
+	TPZPersistenceManager::OpenRead(previousmeshfile);
+	this->previousmesh = dynamic_cast<TPZGeoMesh *>(TPZPersistenceManager::ReadFromFile());
+   TPZPersistenceManager::CloseRead();
+
+	if(!amrifstream.is_open()) _error_("amr ifstream is not open!");
+	amrifstream.seekg(0);
+	
+	this->sid2index.clear();
+	this->index2sid.clear();
+	this->specialelementsindex.clear();
+	
+	amrifstream>>size;
+	for(int i=0;i<size;i++){
+		amrifstream>>value;
+		this->sid2index.push_back(value);
+	}
+	
+	amrifstream>>size;
+	for(int i=0;i<size;i++){
+		amrifstream>>value;
+		this->index2sid.push_back(value);
+	}
+	
+	amrifstream>>size;
+	for(int i=0;i<size;i++){
+		amrifstream>>value;
+		this->specialelementsindex.push_back(value);
+	}
+}
+/*}}}*/
+void AdaptiveMeshRefinement::WriteMesh(){/*{{{*/
+
+	std::string fathermeshfile		= "/home/santos/issm_fathermesh.txt";
+	std::string previousmeshfile	= "/home/santos/issm_previousmesh.txt";
+	std::string amrfile				= "/home/santos/issm_amr.txt";
+	std::ofstream amrofstream(amrfile.c_str());				
+
+	if(this->fathermesh){
+		TPZPersistenceManager::OpenWrite(fathermeshfile);
+		TPZPersistenceManager::WriteToFile(this->fathermesh);
+		TPZPersistenceManager::CloseWrite();
+	}
+
+	if(this->previousmesh){
+		TPZPersistenceManager::OpenWrite(previousmeshfile);
+		TPZPersistenceManager::WriteToFile(this->previousmesh);
+		TPZPersistenceManager::CloseWrite();
+	}
+
+	if(this->sid2index.size()>0){
+		amrofstream << this->sid2index.size() << std::endl;
+		for(int i=0;i<this->sid2index.size();i++) {
+			amrofstream << this->sid2index[i] << std::endl;
+		}
+	}
+	
+	if(this->index2sid.size()>0){
+		amrofstream << this->index2sid.size() << std::endl;
+		for(int i=0;i<this->index2sid.size();i++) {
+			amrofstream << this->index2sid[i] << std::endl;
+		}
+	}
+
+	if(this->specialelementsindex.size()){
+		amrofstream << this->specialelementsindex.size() << std::endl;
+		for(int i=0;i<this->specialelementsindex.size();i++) {
+			amrofstream << this->specialelementsindex[i] << std::endl;
+		}
+	}
+	amrofstream.flush();
+	amrofstream.close();
+}
+/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h	(revision 23470)
+++ /issm/trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h	(revision 23471)
@@ -70,4 +70,6 @@
 	void CreateInitialMesh(int &nvertices,int &nelements,double* x,double* y,int* elements);
 	void CheckMesh(int** pdata,double** pxy,int** pelements);
+	void ReadMesh();
+	void WriteMesh();
 	/*}}}*/
 private:
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 23470)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 23471)
@@ -5329,4 +5329,5 @@
 	IssmDouble* z									= NULL;
 	int* elements									= NULL;
+	int amr_restart;
 
 	/*Initialize field as NULL for now*/
@@ -5356,5 +5357,10 @@
 	this->parameters->FindParam(&this->amr->deviatoricerror_maximum,AmrDeviatoricErrorMaximumEnum);
 	if(my_rank==0){
-		this->amr->CreateInitialMesh(numberofvertices,numberofelements,x,y,elements);
+		this->parameters->FindParam(&amr_restart,AmrRestartEnum);
+		if(amr_restart){//experimental
+			this->amr->ReadMesh();
+		} else {//this is the default method
+			this->amr->CreateInitialMesh(numberofvertices,numberofelements,x,y,elements);
+		}
 	}
 
