diff --git a/NonLinearSolver/materialLaw/numericalMaterial.cpp b/NonLinearSolver/materialLaw/numericalMaterial.cpp
index 20a558750f0c361a609a2e587ac5b9db78810ae4..f37e879d13ae38166ce91234b24f8a736e88d27e 100644
--- a/NonLinearSolver/materialLaw/numericalMaterial.cpp
+++ b/NonLinearSolver/materialLaw/numericalMaterial.cpp
@@ -155,17 +155,25 @@ nonLinearMechSolver* numericalMaterial::createMicroSolver(const int ele, const i
   std::map<int,int>::const_iterator itm = _meshIdMap.find(type);
   if (itm == _meshIdMap.end() or _allPertMesh.size() ==0){
     /**load model**/
-    if (_microMeshFile.length() >0){
-      Msg::Info("create model from mesh file %s",_microMeshFile.c_str());
-      solver->loadModel(_microMeshFile);
-    }
-    else if (_microGeoFile.length()>0 ){
-      Msg::Info("create model from geometry file %s",_microGeoFile.c_str());
-      solver->createMicroModel(_microGeoFile,_meshDim,_meshOrder,_meshIncomplete);
-    }
-    else{
-      Msg::Fatal("micro model file must be provided: proc %d, ele %d, GP %d",Msg::GetCommRank(),ele,gpt);
-    }
+		std::map<int,std::string>::const_iterator itMestConstraint =  _meshOnIP.find(type);
+		if (itMestConstraint == _meshOnIP.end()){
+			if (_microMeshFile.length() >0){
+				Msg::Info("create model from mesh file %s",_microMeshFile.c_str());
+				solver->loadModel(_microMeshFile);
+			}
+			else if (_microGeoFile.length()>0 ){
+				Msg::Info("create model from geometry file %s",_microGeoFile.c_str());
+				solver->createMicroModel(_microGeoFile,_meshDim,_meshOrder,_meshIncomplete);
+			}
+			else{
+				Msg::Fatal("micro model file must be provided: proc %d, ele %d, GP %d",Msg::GetCommRank(),ele,gpt);
+			}			
+		}
+		else{
+			std::string mshFile = itMestConstraint->second;
+			printf("create model from mesh file %s  \n",mshFile.c_str());
+			solver->loadModel(mshFile);
+		}
   }
   else{
     std::map<int,std::string>::const_iterator itstr = _allPertMesh.find(itm->second);
@@ -329,6 +337,12 @@ void numericalMaterial::addMaterialLaw(materialLaw* mlaw){
   _allMaterialLaw.push_back(mlaw);
 };
 
+void numericalMaterial::addPertutationalMeshIP(const int ele, const int ip, const std::string meshfile){
+	Msg::Info("pert mesh it element %d ip %d",ele,ip);
+	int type = numericalMaterial::createTypeWithTwoInts(ele,ip);
+	_meshOnIP[type] = meshfile;
+};
+
 void numericalMaterial::setPerturbationMaterialLawIP(const int ele, const int ip){
   int num = numericalMaterial::createTypeWithTwoInts(ele,ip);
   _pertMaterialLawIP.insert(num);
diff --git a/NonLinearSolver/materialLaw/numericalMaterial.h b/NonLinearSolver/materialLaw/numericalMaterial.h
index c60b1db2132a878ba4e3887b351f1216b1c4a3b6..f5904d5e31ebbed985e59c26134dbe82d1d032b6 100644
--- a/NonLinearSolver/materialLaw/numericalMaterial.h
+++ b/NonLinearSolver/materialLaw/numericalMaterial.h
@@ -125,6 +125,8 @@ class numericalMaterial : public numericalMaterialBase{
     std::map<int,int> _meshIdMap; // mesh id map,
     std::map<int,std::string>::iterator _idIterator;// iterator to acces meshes
     std::map<int,std::string> _allPertMesh; // all perturbed meshes
+		
+		std::map<int,std::string> _meshOnIP; // constraint mesh on each ip
 
     std::string _microMeshFile;	// micro meshfile
     std::string _microGeoFile; // micro geometry
@@ -183,7 +185,7 @@ class numericalMaterial : public numericalMaterialBase{
 
 		virtual ~numericalMaterial();
     // create micro solver
-    virtual nonLinearMechSolver* createMicroSolver(const int ele=0, const int gpt=0) const;
+    virtual nonLinearMechSolver* createMicroSolver(const int ele, const int gpt) const;
 
 		#endif
 		// set micro meshes
@@ -196,7 +198,8 @@ class numericalMaterial : public numericalMaterialBase{
 		virtual void addDomain(partDomain* domain);
 		// set micro material law
     virtual void addMaterialLaw(materialLaw* mlaw);
-
+		
+		virtual void addPertutationalMeshIP(const int ele, const int ip, const std::string meshfile);
     virtual void setPerturbationMaterialLawIP(const int ele, const int ip);
     virtual void addPerturbationMaterialLaw(materialLaw* mlaw);
 		// set micro periodicity