diff --git a/NonLinearSolver/BoundaryConditions/nonLinearMicroBC.cpp b/NonLinearSolver/BoundaryConditions/nonLinearMicroBC.cpp
index fd47546606b93ad98c7975e6655adfcfbff27f03..1516f89d0e265bbbc3b0864508c8132c24a7c9ac 100644
--- a/NonLinearSolver/BoundaryConditions/nonLinearMicroBC.cpp
+++ b/NonLinearSolver/BoundaryConditions/nonLinearMicroBC.cpp
@@ -37,6 +37,33 @@ nonLinearMicroBC::nonLinearMicroBC(const nonLinearMicroBC& src):
 
 }
 
+void nonLinearMicroBC::collecDataFromPrevious(const nonLinearMicroBC& src){
+	// only values are transferred
+	_constrainedDofs = src._constrainedDofs;
+	_constrainedMechaDofs = src._constrainedMechaDofs;
+	_constrainedConDofs = src._constrainedConDofs;
+	_constrainedNonConDofs = src._constrainedNonConDofs;
+	_totalMechaDofNumber = src._totalMechaDofNumber;
+	_totalConDofNumber = src._totalConDofNumber;
+	_totalNonConDofNumber = src._totalNonConDofNumber;
+	// previous kinematic variables
+	Fprev = src.Fcur;
+	Gprev = src.Gcur;
+	gradTprev = src.gradTcur;
+	Tprev = src.Tcur;
+	Tinit = src.Tinit;
+  gradVprev = src.gradVcur;
+	FI *= 0.;
+	G *=0.;
+	for (int i=0; i< gradT.size(); i++){
+		gradT[i]*= 0.;
+		T[i] = 0.;
+	}
+	for (int i=0; i< gradV.size(); i++){
+		gradV[i]*=0.;
+	}
+};
+
 nonLinearMicroBC::~nonLinearMicroBC(){
 	for (int i=0; i< _g.size(); i++){
 		if (_g[i]!= NULL) delete _g[i];
@@ -234,11 +261,12 @@ nonLinearPeriodicBC::nonLinearPeriodicBC(const int tag, const int dim):
                           nonLinearMicroBC(tag,dim),_XaddNewVertices(false),_Xdegree(3),
                         _YaddNewVertices(false),_Ydegree(3),
                         _ZaddNewVertices(false),_Zdegree(3),
-                        _wM(nonLinearPeriodicBC::CEM),_forceInterp(false){ }
+                        _wM(nonLinearPeriodicBC::CEM),_forceInterp(false),
+												_isShifted(false),_shiftPBCNormal(0.,0.,0.){ }
 nonLinearPeriodicBC::nonLinearPeriodicBC(const nonLinearPeriodicBC& src):nonLinearMicroBC(src), 
   _wM(src._wM),_Xdegree(src._Xdegree),_XaddNewVertices(src._XaddNewVertices),_Ydegree(src._Ydegree),
   _YaddNewVertices(src._YaddNewVertices),_Zdegree(src._Zdegree),_ZaddNewVertices(src._ZaddNewVertices),
-  _forceInterp(src._forceInterp)
+  _forceInterp(src._forceInterp),_isShifted(src._isShifted),_shiftPBCNormal(src._shiftPBCNormal)
 {
 
 };
@@ -304,6 +332,21 @@ void nonLinearPeriodicBC::setPeriodicBCOptions(const int method, const int seg,
   }
 
 };
+
+void nonLinearPeriodicBC::setShiftedBC(const bool fl){
+	_isShifted = fl;
+}
+void nonLinearPeriodicBC::setShiftPBCNormal(const double n1, const double n2, const double n3){
+	_shiftPBCNormal[0] = n1;
+	_shiftPBCNormal[1] = n2;
+	_shiftPBCNormal[2] = n3;
+	_shiftPBCNormal.normalize();
+};
+void nonLinearPeriodicBC::setShiftPBCNormal(const SVector3& n){
+	this->setShiftPBCNormal(n[0],n[1],n[2]);
+	printf("set Shifted PBC = [%f %f %f]\n",n[0],n[1],n[2]);
+};
+
 												
 nonLinearDisplacementBC::nonLinearDisplacementBC( const int tag, const int dim):
                     nonLinearMicroBC(tag,dim){};
@@ -320,3 +363,85 @@ nonLinearMixedBC::nonLinearMixedBC(const nonLinearMixedBC& src) : nonLinearMicro
   _kPhysical(src._kPhysical),_sPhysical(src._sPhysical),_fixVertices(src._fixVertices),
  _additionalSecondOrderStaticPhysical(src._additionalSecondOrderStaticPhysical),_negativeFactor(src._negativeFactor),
  _periodicNegative(src._periodicNegative),_periodicPositive(src._periodicPositive){} 
+ 
+nonLinearOrthogonalMixedBCDirectionFollowing::nonLinearOrthogonalMixedBCDirectionFollowing(const int tag, const int dim): 
+nonLinearMicroBC(tag,dim){}
+
+nonLinearOrthogonalMixedBCDirectionFollowing::nonLinearOrthogonalMixedBCDirectionFollowing(const nonLinearOrthogonalMixedBCDirectionFollowing& src):
+nonLinearMicroBC(src),_KUBCDirection(src._KUBCDirection),_SUBCDirection(src._SUBCDirection){}
+
+void nonLinearOrthogonalMixedBCDirectionFollowing::setKUBCDirection(const SVector3& dir){
+_KUBCDirection.push_back(dir);
+};
+void nonLinearOrthogonalMixedBCDirectionFollowing::setSUBCDirection(const SVector3& dir){
+_SUBCDirection.push_back(dir);
+};
+
+void nonLinearOrthogonalMixedBCDirectionFollowing::setKUBCDirection(const double nx, const double ny, const double nz){
+	SVector3 n(nx,ny,nz);
+	n.normalize();
+	_KUBCDirection.push_back(n);
+};
+void nonLinearOrthogonalMixedBCDirectionFollowing::setSUBCDirection(const double nx, const double ny, const double nz){
+	SVector3 n(nx,ny,nz);
+	n.normalize();
+	_SUBCDirection.push_back(n);
+};
+
+void nonLinearOrthogonalMixedBCDirectionFollowing::clearDirs(){ _KUBCDirection.clear(); _SUBCDirection.clear();};
+
+
+nonLinearMixedBCDirectionFollowing::nonLinearMixedBCDirectionFollowing(const int tag, const int dim): 
+	nonLinearMicroBC(tag,dim){}
+	
+nonLinearMixedBCDirectionFollowing::nonLinearMixedBCDirectionFollowing(const nonLinearMixedBCDirectionFollowing& src):
+	nonLinearMicroBC(src),_KUBCDirection(src._KUBCDirection),_SUBCDirection(src._SUBCDirection),
+	_PBCNormalDirection(src._PBCNormalDirection), _PBCDirection(src._PBCDirection),
+	_rootPhysical(src._rootPhysical),
+	_interpolationDegree(src._interpolationDegree),
+	_fullConstrained(src._fullConstrained){}
+	
+void nonLinearMixedBCDirectionFollowing::setKUBCDirection(const SVector3& dir){
+	_KUBCDirection.push_back(dir);
+};
+void nonLinearMixedBCDirectionFollowing::setSUBCDirection(const SVector3& dir){
+	_SUBCDirection.push_back(dir);
+};
+
+void nonLinearMixedBCDirectionFollowing::setPBCDirection(const SVector3& dir, const SVector3& norm, const bool full){
+	_PBCDirection.push_back(dir);
+	_PBCNormalDirection.push_back(norm);
+	_fullConstrained.push_back(full);
+};
+	
+void nonLinearMixedBCDirectionFollowing::setKUBCDirection(const double nx, const double ny, const double nz){
+	SVector3 n(nx,ny,nz);
+	n.normalize();
+	_KUBCDirection.push_back(n);
+};
+void nonLinearMixedBCDirectionFollowing::setSUBCDirection(const double nx, const double ny, const double nz){
+	SVector3 n(nx,ny,nz);
+	n.normalize();
+	_SUBCDirection.push_back(n);
+};
+
+void nonLinearMixedBCDirectionFollowing::setPBCDirection(const double nx, const double ny, const double nz,
+					const double tx, const double ty, const double tz, const bool fullConstrained ){
+	SVector3 n(nx,ny,nz);
+	n.normalize();
+	_PBCNormalDirection.push_back(n);
+	
+	SVector3 t(tx,ty,tz);
+	t.normalize();
+	_PBCDirection.push_back(t);
+	
+	_fullConstrained.push_back(fullConstrained);
+};
+
+void nonLinearMixedBCDirectionFollowing::setRootPhysical(const int phy){
+	_rootPhysical.push_back(phy);
+};
+
+void nonLinearMixedBCDirectionFollowing::setInterpolationDegree(const int deg){
+	_interpolationDegree.push_back(deg);
+};
\ No newline at end of file
diff --git a/NonLinearSolver/BoundaryConditions/nonLinearMicroBC.h b/NonLinearSolver/BoundaryConditions/nonLinearMicroBC.h
index 35d28db614be22f1f58cebe2f5c4bbff5e6e8d32..a4785e566e196b0a3c1301f08030cdedbd09bdbb 100644
--- a/NonLinearSolver/BoundaryConditions/nonLinearMicroBC.h
+++ b/NonLinearSolver/BoundaryConditions/nonLinearMicroBC.h
@@ -21,7 +21,7 @@
 class nonLinearMicroBC{
 	
 	public:
-		enum whichBCType{LDBC =0, PBC=1, MKBC=2, MIXBC=3}; // Linear displacement BC, periodic BC, minimal kinematical BC, mixed BC
+		enum whichBCType{LDBC =0, PBC=1, MKBC=2, MIXBC=3, OrthogonalDirectionalMixedBC =4,  DirectionalMIXBC=5}; // Linear displacement BC, periodic BC, minimal kinematical BC, mixed BC
 
 	#ifndef SWIG
 	protected:
@@ -103,6 +103,8 @@ public:
 	#ifndef SWIG
     nonLinearMicroBC(const int tag, const int dim);
     nonLinearMicroBC(const nonLinearMicroBC& src);
+		
+		virtual void collecDataFromPrevious(const nonLinearMicroBC& src);
 
     const STensor3& getPreviousDeformationGradient() const {return Fprev;};
     const STensor3& getCurrentDeformationGradient() const{return Fcur;};
@@ -411,15 +413,20 @@ class nonLinearPeriodicBC: public nonLinearMicroBC{
 
      bool _forceInterp; // true if forcing setting value
                         // false if checking with existing vertex
+			
+		// for shiftedBC
+		 bool _isShifted;
+		 SVector3 _shiftPBCNormal; // by a plane whose normal is _shiftPBCNormal
+			
    public:
      nonLinearPeriodicBC(const int tag, const int dim);
     
     #ifndef SWIG
-     nonLinearPeriodicBC(const nonLinearPeriodicBC& src);
-	   virtual ~nonLinearPeriodicBC(){};
+		nonLinearPeriodicBC(const nonLinearPeriodicBC& src);
+		virtual ~nonLinearPeriodicBC(){};
 
      virtual nonLinearMicroBC::whichBCType getType() const  {return nonLinearMicroBC::PBC;};
-    virtual nonLinearMicroBC* clone() const {return new nonLinearPeriodicBC(*this);};
+		 virtual nonLinearMicroBC* clone() const {return new nonLinearPeriodicBC(*this);};
     
 
 		int getMaxDegree() const{
@@ -456,7 +463,11 @@ class nonLinearPeriodicBC: public nonLinearMicroBC{
       else if (i==2) return _Zdegree;
       else Msg::Fatal("direction must be correctly defined getPBCPolynomialDegree(i)");
     }
-    
+		
+		const SVector3& getShiftPBCNormal() const {return _shiftPBCNormal;};
+    void setShiftPBCNormal(const SVector3& n);
+		bool isShifted() const{return _isShifted;};
+		
     #endif //SWIG
 		
     void setAddNewVertices(const int i, const bool add = true) {
@@ -481,10 +492,12 @@ class nonLinearPeriodicBC: public nonLinearMicroBC{
 		void setPBCMethod(const int i){
       _wM = whichMethod(i);
 		}
-	void setPeriodicBCOptions(const int method, const int seg = 5, const bool addvertex = 0);
-  
+		void setPeriodicBCOptions(const int method, const int seg = 5, const bool addvertex = 0);
+		void setShiftedBC(const bool fl);
+		void setShiftPBCNormal(const double n1, const double n2, const double n3);
 };
 
+
 class nonLinearDisplacementBC : public nonLinearMicroBC{
 
    public:
@@ -571,7 +584,85 @@ class nonLinearMixedBC : public nonLinearMicroBC{
 			_periodicNegative.push_back(std::pair<int,int>(neg,comp));
 			_negativeFactor = negFact;
 		};
+};
+
+class nonLinearOrthogonalMixedBCDirectionFollowing : public nonLinearMicroBC{
+	#ifndef SWIG
+	protected:
+		std::vector<SVector3> _KUBCDirection;
+		std::vector<SVector3> _SUBCDirection;
+	#endif // SWIG
+	
+	public:
+		nonLinearOrthogonalMixedBCDirectionFollowing(const int tag, const int dim);
+		#ifndef SWIG
+		nonLinearOrthogonalMixedBCDirectionFollowing(const nonLinearOrthogonalMixedBCDirectionFollowing& src);
+		virtual ~nonLinearOrthogonalMixedBCDirectionFollowing(){};
+
+		virtual nonLinearMicroBC::whichBCType getType() const{
+			return nonLinearMicroBC::OrthogonalDirectionalMixedBC;
+		};
+		
+		const std::vector<SVector3>& getKUBCDirection() const {return _KUBCDirection;};
+		const std::vector<SVector3>& getSUBCDirection() const {return _SUBCDirection;};
 
+		virtual nonLinearMicroBC* clone() const {return new nonLinearOrthogonalMixedBCDirectionFollowing(*this);}
+		
+		void setKUBCDirection(const SVector3& dir);
+		void setSUBCDirection(const SVector3& dir);
+		void clearDirs();
+		#endif // SWIG
+		void setKUBCDirection(const double nx, const double ny, const double nz);
+		void setSUBCDirection(const double nx, const double ny, const double nz);
 };
 
+class nonLinearMixedBCDirectionFollowing : public nonLinearMicroBC{
+	#ifndef SWIG
+	protected:
+		std::vector<SVector3> _KUBCDirection;
+		std::vector<SVector3> _SUBCDirection;
+		std::vector<SVector3> _PBCDirection;
+		std::vector<SVector3> _PBCNormalDirection; // normal to PBCdir
+		
+		std::vector<int> _rootPhysical; // v1 v2 v4 for 2D and v1 v2 v4 v5 for 3D
+		std::vector<int> _interpolationDegree; // following v1v2, v1v4, v1v5
+		std::vector<bool> _fullConstrained; // true if full, false otherwise
+		
+	#endif // SWIG
+	public:
+		nonLinearMixedBCDirectionFollowing(const int tag, const int dim);
+		#ifndef SWIG
+		nonLinearMixedBCDirectionFollowing(const nonLinearMixedBCDirectionFollowing& src);
+		virtual ~nonLinearMixedBCDirectionFollowing(){};
+
+		virtual nonLinearMicroBC::whichBCType getType() const{
+			return nonLinearMicroBC::DirectionalMIXBC;
+		};
+		
+		virtual nonLinearMicroBC* clone() const {return new nonLinearMixedBCDirectionFollowing(*this);}
+		
+		const std::vector<SVector3>& getKUBCDirection() const {return _KUBCDirection;};
+		const std::vector<SVector3>& getSUBCDirection() const {return _SUBCDirection;};
+		
+		// for PBC
+		const std::vector<SVector3>& getPBCNormalDirection() const {return _PBCNormalDirection;};
+		const std::vector<SVector3>& getPBCDirection() const {return _PBCDirection;};
+		const std::vector<int>& getRootPhysical() const {return _rootPhysical;};
+		const std::vector<int>& getInterpolationDegree() const {return _interpolationDegree;};
+		const std::vector<bool>& getFullConstrainedFlag() const {return _fullConstrained;};
+		
+		void setKUBCDirection(const SVector3& dir);
+		void setSUBCDirection(const SVector3& dir);
+		void setPBCDirection(const SVector3& dir, const SVector3& norm, const bool full);
+		
+		#endif //SWIG
+		
+		void setKUBCDirection(const double nx, const double ny, const double nz);
+		void setSUBCDirection(const double nx, const double ny, const double nz);
+		void setPBCDirection(const double nx, const double ny, const double nz, 
+											const double tx, const double ty, const double tz,
+											const bool fullConstrained);
+		void setRootPhysical(const int phy);
+		void setInterpolationDegree(const int deg);
+};
 #endif // NONLINEARMICROBC_H_
diff --git a/NonLinearSolver/Domain/partDomain.cpp b/NonLinearSolver/Domain/partDomain.cpp
index 606d46bedfdd3ae937e263328b41d01b5528a27b..5dc83c80c9b4013169076c4d5aada173d8d9ab4c 100644
--- a/NonLinearSolver/Domain/partDomain.cpp
+++ b/NonLinearSolver/Domain/partDomain.cpp
@@ -508,6 +508,33 @@ double partDomain::computeVolumeDomain(const IPField* ipf) const{
   return volume;
 };
 
+void partDomain::computeActiveDamageCenter(const IPField* ipf, SPoint3& pos) const{
+	if ((g->size()>0) and (ipf->getNumOfActiveDamageIPs() > 0)){
+		IntPt* GP;
+	// compute from damaging zone
+		for (groupOfElements::elementContainer::iterator it= g->begin(); it!=g->end(); it++){
+			MElement* ele= *it;
+			AllIPState::ipstateElementContainer *vips = ipf->getAips()->getIPstate(ele->getNum());
+			int npts= integBulk->getIntPoints(ele,&GP);
+			for (int i=0; i<npts; i++){
+				const IPStateBase *ips        = (*vips)[i];
+				const ipFiniteStrain *ipv     = static_cast<const ipFiniteStrain*>(ips->getState(IPStateBase::current));
+				const ipFiniteStrain *ipvprev = static_cast<const ipFiniteStrain*>(ips->getState(IPStateBase::previousActiveDamage));
+				if (ipvprev->isActiveDamage()){
+					double weight= GP[i].weight;
+					const double &detJ = ipv->getJacobianDeterminant(ele,GP[i]);
+          double ratio = detJ*weight;
+					SPoint3 P;
+					ele->pnt(GP[i].pt[0],GP[i].pt[1],GP[i].pt[2],P);
+					for (int j=0; j<3; j++){
+						pos[j] += P[j]*ratio;
+					}
+				}
+			};
+		};
+	}
+};
+
 void partDomain::computeActiveDamagingAverageStrainIncrement(const IPField* ipf, STensor3& strain) const{
   // compute average strain on active damaging part
   // damaging volume will besed on ws= current, previous, or initial
diff --git a/NonLinearSolver/Domain/partDomain.h b/NonLinearSolver/Domain/partDomain.h
index 8c69cb29a5558bca99f6de9988f9e6e07d1c1999..ddab9cffc69fcf6ec46b16b2d32406b1512a7c4e 100644
--- a/NonLinearSolver/Domain/partDomain.h
+++ b/NonLinearSolver/Domain/partDomain.h
@@ -263,6 +263,7 @@ public:
   virtual void computeAverageHighOrderStress(const IPField* ipf, STensor33& stress) const;
 	virtual double computeVolumeDomain(const IPField* ipf) const;
 	
+	virtual void computeActiveDamageCenter(const IPField* ipf, SPoint3& pos) const;
 	virtual void computeActiveDamagingAverageStrainIncrement(const IPField* _ipf, STensor3& strain) const;
   virtual double computeVolumeActiveDamageDomain(const IPField* ipf) const;
 	virtual void computeActiveNonlocalDamageIncrement(const IPField* _ipf, double& dD) const; // choose ws between previous or initial
diff --git a/NonLinearSolver/Interface/CMakeLists.txt b/NonLinearSolver/Interface/CMakeLists.txt
index 7f4a42a07631cb25669ca63921809d46dae330e2..6938ee681d3d699c7b8e493d6047d5d67fde6013 100644
--- a/NonLinearSolver/Interface/CMakeLists.txt
+++ b/NonLinearSolver/Interface/CMakeLists.txt
@@ -13,6 +13,7 @@ set(SRC
   MInterfaceTriangleN.cpp
   MInterfaceQuadrangleN.cpp
   InterfaceKeys.cpp
+	interfaceReferenceLocalBasis.cpp
 )
 
 file(GLOB HDR RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h) 
diff --git a/NonLinearSolver/Interface/interfaceReferenceLocalBasis.cpp b/NonLinearSolver/Interface/interfaceReferenceLocalBasis.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..5cd73626afc2823e29cf6521ceed1df846fbe0c0
--- /dev/null
+++ b/NonLinearSolver/Interface/interfaceReferenceLocalBasis.cpp
@@ -0,0 +1,92 @@
+//
+//
+// Description: compute interface localb basis
+//
+//
+// Author:  <Van Dung NGUYEN>, (C) 2017
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#include "interfaceReferenceLocalBasis.h"
+#include "MInterfaceElement.h"
+#include "functionSpace.h"
+
+void computeInterfaceReferenceLocalBasis(const MElement* ele, const IntPt* GP, SVector3& n, SVector3& t, SVector3& b){
+	printf("begin computation local basis \n");
+	
+	const MInterfaceElement *iele = dynamic_cast<const MInterfaceElement*>(ele);
+	int nbvertexInter = iele->getNumVertices();
+	
+	std::vector<TensorialTraits<double>::GradType> Grads;
+	double gradsuvw[256][3];
+	ele->getGradShapeFunctions((*GP).pt[0], (*GP).pt[1], (*GP).pt[2], gradsuvw);
+	for(int i = 0; i < nbvertexInter; ++i){
+		Grads.push_back(TensorialTraits<double>::GradType(gradsuvw[i][0], gradsuvw[i][1], gradsuvw[i][2]));
+	}
+	
+	SVector3 referencePhi0[2];
+	if (ele->getDim() == 2){
+		for(int k=0;k<nbvertexInter;k++)
+		{
+			double x = ele->getVertex(k)->x();
+			double y = ele->getVertex(k)->y();
+			double z = ele->getVertex(k)->z();
+			//evaulate displacements at interface
+			for(int i=0;i<2;i++)
+			{
+			 referencePhi0[i](0) += Grads[k](i)*x;
+			 referencePhi0[i](1) += Grads[k](i)*y;
+			 referencePhi0[i](2) += Grads[k](i)*z;
+			}
+		}
+	}
+	else if (ele->getDim() == 1){
+		for(int k=0;k<nbvertexInter;k++)
+		{
+			double x = ele->getVertex(k)->x();
+			double y = ele->getVertex(k)->y();
+			double z = ele->getVertex(k)->z();
+			 referencePhi0[0](0) += Grads[k](0)*x;
+			 referencePhi0[0](1) += Grads[k](0)*y;
+			 referencePhi0[0](2) += Grads[k](0)*z;
+		}
+
+		SVector3 phi0[2];
+		
+		SPoint3 P;
+		ele->pnt((*GP).pt[0], (*GP).pt[1], (*GP).pt[2],P);		
+		const MElement* em = iele->getElem(0);
+		double uvw[3];
+		em->xyz2uvw(P.data(),uvw);
+		std::vector<TensorialTraits<double>::GradType> gradmUVW;
+		em->getGradShapeFunctions(uvw[0], uvw[1], uvw[2], gradsuvw);
+		int nbFFm = em->getNumShapeFunctions();
+		for(int i = 0; i < nbFFm; ++i){
+			gradmUVW.push_back(TensorialTraits<double>::GradType(gradsuvw[i][0], gradsuvw[i][1], gradsuvw[i][2]));
+		}
+		
+		for(int k=0;k<nbFFm;k++)
+		{
+			double x = em->getVertex(k)->x();
+			double y = em->getVertex(k)->y();
+			double z = em->getVertex(k)->z();
+			//evaulate displacements at interface
+			for(int i=0;i<2;i++)
+			{
+			 phi0[i](0) += gradmUVW[k](i)*x;
+			 phi0[i](1) += gradmUVW[k](i)*y;
+			 phi0[i](2) += gradmUVW[k](i)*z;
+			}
+		}
+		referencePhi0[1] = crossprod(phi0[0],phi0[1]);
+		referencePhi0[1].normalize();
+	}
+	
+	n =  crossprod(referencePhi0[0],referencePhi0[1]); n.normalize();
+	t = referencePhi0[0]; t.normalize();
+	b = crossprod(n,t); b.normalize();
+	
+	printf("local basis em = %d, ep = %d: n = [%e %e %e], t = [%e %e %e] ; b =[%e %e %e]\n",
+				iele->getElem(0)->getNum(),iele->getElem(1)->getNum(),n[0],n[1],n[2],t[0],t[1],t[2],b[0],b[1],b[2]);
+};
\ No newline at end of file
diff --git a/NonLinearSolver/Interface/interfaceReferenceLocalBasis.h b/NonLinearSolver/Interface/interfaceReferenceLocalBasis.h
new file mode 100644
index 0000000000000000000000000000000000000000..feef6848b6d15dad8bf4585636e26ea5ac066377
--- /dev/null
+++ b/NonLinearSolver/Interface/interfaceReferenceLocalBasis.h
@@ -0,0 +1,16 @@
+//
+//
+// Description: compute interface localb basis
+//
+//
+// Author:  <Van Dung NGUYEN>, (C) 2017
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#include "MElement.h"
+#include "SVector3.h"
+
+
+void computeInterfaceReferenceLocalBasis(const MElement* ele, const IntPt* GP, SVector3& n, SVector3& t, SVector3& b);
\ No newline at end of file
diff --git a/NonLinearSolver/field/OneUnknownField.cpp b/NonLinearSolver/field/OneUnknownField.cpp
index 3e8159f1c0af5a553f39b22667ec6c9511d9cfe3..223dfbad627a02de06dd336c732c4f93771c66df 100644
--- a/NonLinearSolver/field/OneUnknownField.cpp
+++ b/NonLinearSolver/field/OneUnknownField.cpp
@@ -1,26 +1,27 @@
 
 #include "OneUnknownField.h"
 #include "partDomain.h"
+#include "nonLinearMechSolver.h"
 
-OneUnknownField::OneUnknownField(dofManager<double> * p, std::vector<partDomain*>* alldom,
+OneUnknownField::OneUnknownField(nonLinearMechSolver* sl,
                 const std::vector<nlsField::dataBuildView> &dbview,
-                const std::string filename): nlsField(filename,100000000,1,dbview),_pAssembler(p), _vdom(alldom),
+                const std::string filename): nlsField(filename,100000000,1,dbview),_solver(sl),
                 _dname("ElementNodeData"){
 
   int totelem = 0;
-  for(std::vector<partDomain*>::const_iterator itdom=_vdom->begin(); itdom!=_vdom->end(); ++itdom){
+  for(std::vector<partDomain*>::const_iterator itdom=_solver->getDomainVector()->begin(); itdom!=_solver->getDomainVector()->end(); ++itdom){
     totelem += (*itdom)->groupOfElementsSize();
   }
 
   this->setTotElem(totelem);
   // save initial values
-  this->buildAllView(*_vdom,0.,0);
+  this->buildAllView(*_solver->getDomainVector(),0.,0);
 }
 
 
 void OneUnknownField::buildData(FILE* myview,const std::vector<partDomain*> &vdom,const int comp,const ElemValue ev) const{
   std::vector<double> fieldData;
-  for(std::vector<partDomain*>::const_iterator itdom=_vdom->begin(); itdom!=_vdom->end(); ++itdom){
+  for(std::vector<partDomain*>::const_iterator itdom=vdom.begin(); itdom!=vdom.end(); ++itdom){
     partDomain *dom = *itdom;
     for (groupOfElements::elementContainer::const_iterator it = dom->g_cbegin(); it != dom->g_cend(); ++it){
       MElement *ele = *it;
@@ -43,7 +44,7 @@ void OneUnknownField::get(partDomain *dom, MElement *ele,std::vector<double> &ud
   int numver = ele->getNumVertices();
   for (int i=0; i< numver; i++){
     double val = 0.;
-    _pAssembler->getDofValue(R[i+comp*numver],val);
+    _solver->getDofManager()->getDofValue(R[i+comp*numver],val);
     udofs.push_back(val);
   }
 
@@ -52,5 +53,5 @@ void OneUnknownField::get(partDomain *dom, MElement *ele,std::vector<double> &ud
 
 void OneUnknownField::archive(const double time, const int step){
   // msh view
-  this->buildAllView(*_vdom,time,step);
+  this->buildAllView(*_solver->getDomainVector(),time,step);
 }
diff --git a/NonLinearSolver/field/OneUnknownField.h b/NonLinearSolver/field/OneUnknownField.h
index 0c0ecf2eeeeb33244253ce58015fd73bdcefa393..9e8211d9e875dda09d1d46bc99f3dead095c1bee 100644
--- a/NonLinearSolver/field/OneUnknownField.h
+++ b/NonLinearSolver/field/OneUnknownField.h
@@ -13,18 +13,18 @@
 #include "nlsField.h"
 #include "dofManager.h"
 
+class nonLinearMechSolver;
 class OneUnknownField : public nlsField{
   protected:
     const std::string _dname;
-    dofManager<double>* _pAssembler; // To access to component of equation system template this
-    std::vector<partDomain*>* _vdom;
-
+    nonLinearMechSolver* _solver;
+		
   protected:
     virtual const std::string& dataname() const {return _dname;};
     virtual void buildData(FILE* myview,const std::vector<partDomain*> &vdom,const int cmp,const ElemValue ev_) const;
 
   public:
-    OneUnknownField(dofManager<double> * p, std::vector<partDomain*>* alldom,
+    OneUnknownField(nonLinearMechSolver* sl,
                 const std::vector<nlsField::dataBuildView> &dbview,
                 const std::string filename ="dispComponent.msh");
     virtual ~OneUnknownField(){}
diff --git a/NonLinearSolver/field/eigenModeView.cpp b/NonLinearSolver/field/eigenModeView.cpp
index 8b666ce21621db39566fb86b40c57d78a7533924..b812f46e1dce647bbb148b453c7295c27f31e1f2 100644
--- a/NonLinearSolver/field/eigenModeView.cpp
+++ b/NonLinearSolver/field/eigenModeView.cpp
@@ -11,23 +11,23 @@
 #include "partDomain.h"
 #include "staticDofManager.h"
 
-eigenVectorField::eigenVectorField(dofManager<double> *pas, std::vector<partDomain*> &elas, std::vector<partDomain*> &gdom,
-                      std::set<contactDomain*> *acontact,const int nc, std::vector<unknownField::archiveNode> &archiving,
+eigenVectorField::eigenVectorField(nonLinearMechSolver* sl, const int nc, 
+											std::vector<unknownField::archiveNode> &archiving,
                       const std::vector<nlsField::dataBuildView> &dbview_,
-                      eigenSolver* eig, int num, const std::string file) : unknownField(pas,elas,gdom,acontact,nc,archiving,dbview_,file+int2str(num)+".msh"), _eigenSolver(eig), _num(num){}
+                      eigenSolver* eig, int num, const std::string file) : unknownField(sl,nc,archiving,dbview_,file+int2str(num)+".msh"), _eigenSolver(eig), _num(num){}
 
 void eigenVectorField::get(Dof &D,double &udof) const{
-	if (pAssembler->isFixed(D)){
-	  pAssembler->getFixedDofValue(D,udof);
+	if (_solver->getDofManager()->isFixed(D)){
+	  _solver->getDofManager()->getFixedDofValue(D,udof);
 	  return;
     };
-	int comp = pAssembler->getDofNumber(D);
+	int comp = _solver->getDofManager()->getDofNumber(D);
 	if (comp>=0){
 		std::complex<double> val = _eigenSolver->getEigenVectorComp(_num,comp);
 		udof = val.real();
 	}
 	else{
-	  std::map<Dof, DofAffineConstraint<double> >& constraints = pAssembler->getAllLinearConstraints();
+	  std::map<Dof, DofAffineConstraint<double> >& constraints = _solver->getDofManager()->getAllLinearConstraints();
 	  std::map<Dof, DofAffineConstraint<double> >::iterator it =constraints.find(D);
       if (it != constraints.end()){
         udof =  it->second.shift;
@@ -67,7 +67,7 @@ void eigenVectorField::get(partDomain *dom, MElement *ele,std::vector<double> &u
 };
 
 void eigenVectorField::archive(const double time,const int step) {
-	this->buildAllView(*_vdom,time,step);
+	this->buildAllView(*_solver->getDomainVector(),time,step);
   if(!_forceView){
     double u;
     for(std::vector<archiveNode>::const_iterator it = varch.begin(); it!=varch.end();++it){
@@ -83,7 +83,7 @@ void eigenVectorField::archive(const double time,const int step) {
 };
 
 void eigenVectorField::setInitial(const std::vector<Dof> &R,const std::vector<double> &disp){
-	staticDofManager<double>* staticAssembler = dynamic_cast<staticDofManager<double>*>(pAssembler);
+	staticDofManager<double>* staticAssembler = _solver->getStaticDofManager();
 	if (staticAssembler)
 		staticAssembler->setInitial(R,disp);
 };
diff --git a/NonLinearSolver/field/eigenModeView.h b/NonLinearSolver/field/eigenModeView.h
index 6884d876f8cd3d3903e4f0eed51472bd91140fe7..c54eec7ee71ed5478d9635c07a9a9cdcadd8cb99 100644
--- a/NonLinearSolver/field/eigenModeView.h
+++ b/NonLinearSolver/field/eigenModeView.h
@@ -19,8 +19,7 @@ class eigenVectorField : public unknownField{
   eigenSolver* _eigenSolver;
   int _num;
  public:
-  eigenVectorField(dofManager<double> *pas, std::vector<partDomain*> &elas, std::vector<partDomain*> &gdom,
-                   std::set<contactDomain*> *acontact,
+  eigenVectorField(nonLinearMechSolver* sl,
                    const int nc, std::vector<unknownField::archiveNode> &archiving,
                    const std::vector<nlsField::dataBuildView> &dbview_,
                    eigenSolver* eig, int num, const std::string file = "mode");
diff --git a/NonLinearSolver/field/energyField.cpp b/NonLinearSolver/field/energyField.cpp
index 3082078bb277830dbb6acdb7ec631ab0d0d04538..cfa7e8ff689c29c272b1d277cf1592de50b655e2 100644
--- a/NonLinearSolver/field/energyField.cpp
+++ b/NonLinearSolver/field/energyField.cpp
@@ -15,6 +15,7 @@
 #include "SVector3.h"
 #include "unknownField.h"
 #include "dofManagerMultiSystems.h"
+#include "nonLinearMechSolver.h"
 double dot(const std::vector<double> &a, const fullVector<dofManager<double>::dataMat> &b){
   double c = 0.;
   for(int i =0; i<a.size(); i++){
@@ -31,148 +32,146 @@ double dot(const std::vector<double> &a, const std::vector<double> &b){
   return c;
 }
 
-energeticField::energeticField(IPField *ipf,unknownField *ufield, dofManager<double> *pAssembler,
-                               std::vector<partDomain*> &domvec, nonLinearMechSolver::contactContainer &vcdom,
-                               const std::vector<dataBuildView> &dbview_,
+energeticField::energeticField(nonLinearMechSolver* sl, const std::vector<dataBuildView> &dbview_,
                                const int energyComp,const int fracComp,
                                nonLinearMechSolver::scheme myscheme) : elementsField("energy.msh",100000000,1,dbview_),
                                                        _dynamics((myscheme == nonLinearMechSolver::StaticLinear ||
                                                                   myscheme == nonLinearMechSolver::StaticNonLinear) ? false : true),
-                                                       _ipf(ipf), _ufield(ufield), _pAssembler(pAssembler),
                                                        _energyComputation(energyComp),_fractureEnergyComputation(fracComp),
-                                                       _sAssembler(dynamic_cast<staticDofManager<double>*>(pAssembler)),
-                                                       _domvec(domvec), _wext(0.),
-                                                       _rigidContactFilter(),fpenergy(NULL), _systemSizeWithoutRigidContact(0), fpfrac(NULL)
+                                                        _wext(0.), _rigidContactFilter(),fpenergy(NULL), _systemSizeWithoutRigidContact(0), fpfrac(NULL),
+																											 _solver(sl)
 {
-    std::string fracname;
-    #if defined(HAVE_MPI)
-    if(Msg::GetCommSize() > 1){
-      std::ostringstream oss;
-      oss << Msg::GetCommRank();
-      _fname = "energy_part" + oss.str() + ".csv";
-      fracname = "fractureEnergy_part" + oss.str() + ".csv";
-    }
-    else
-    #endif // HAVE_MPI
-    {
-      _fname = "energy.csv";
-      fracname = "fractureEnergy.csv";
-    }
-    if(_energyComputation>0)
-    {
-      if(!restartManager::available())
-      {
-        // initialize file to store energy
-        fpenergy = fopen(_fname.c_str(),"w");
-        fprintf(fpenergy,"Time;Kinetic;Deformation;Plastic;Wext;Inversible;Total\n");
-        fprintf(fpenergy,"0.;0.;0.;0.;0.;0.;0.\n"); // false if initial deformation FIX IT HOW ??
-      }
-      else
-      {
-        // open the actual energy file
-        fpenergy = fopen(_fname.c_str(),"a");
-      }
-    }
-    else
-    {
-      // remove file
-      std::string rfname = "rm -rf "+_fname;
-      system(rfname.c_str());
-    }
-    if(_fractureEnergyComputation>0)
-    {
-      if(!restartManager::available())
-      {
-        fpfrac = fopen(fracname.c_str(),"w");
-        fprintf(fpfrac,"Time;Total;Array of value\n");
-      }
-      else
-      {
-        fpfrac = fopen(fracname.c_str(),"a");
-      }
-    }
-    else
-    {
-      std::string rfname = "rm -rf "+fracname;
-      system(rfname.c_str());
-    }
-    // set system size without rigid contact
-    if(_sAssembler !=NULL)
-    {
-      _systemSizeWithoutRigidContact = _sAssembler->getFirstRigidContactUnknowns();
-    }
-    else
-    {
-      _systemSizeWithoutRigidContact = pAssembler->sizeOfR();
-    }
-    // avoid this HOW ??
-    long int nelem=0;
-    for(std::vector<partDomain*>::iterator itdom=_domvec.begin(); itdom!=_domvec.end();++itdom){
-      partDomain *dom = *itdom;
-      nelem+=dom->groupOfElementsSize();
-    }
-    this->setTotElem(nelem);
+	std::vector<partDomain*> &domvec = *(_solver->getDomainVector());
+	nonLinearMechSolver::contactContainer &vcdom = *(_solver->getAllContactDomain());
+	dofManager<double>* pAssembler = _solver->getDofManager();
+	#if defined(HAVE_MPI)
+	if(Msg::GetCommSize() > 1){
+		std::ostringstream oss;
+		oss << Msg::GetCommRank();
+		_fname = "energy_part" + oss.str() + ".csv";
+		_fracname = "fractureEnergy_part" + oss.str() + ".csv";
+	}
+	else
+	#endif // HAVE_MPI
+	{
+		_fname = "energy.csv";
+		_fracname = "fractureEnergy.csv";
+	}
+	if(_energyComputation>0)
+	{
+		if(!restartManager::available())
+		{
+			// initialize file to store energy
+			fpenergy = fopen(_fname.c_str(),"w");
+			fprintf(fpenergy,"Time;Kinetic;Deformation;Plastic;Wext;Inversible;Total\n");
+			fprintf(fpenergy,"0.;0.;0.;0.;0.;0.;0.\n"); // false if initial deformation FIX IT HOW ??
+		}
+		else
+		{
+			// open the actual energy file
+			fpenergy = fopen(_fname.c_str(),"a");
+		}
+	}
+	else
+	{
+		// remove file
+		std::string rfname = "rm -rf "+_fname;
+		system(rfname.c_str());
+	}
+	if(_fractureEnergyComputation>0)
+	{
+		if(!restartManager::available())
+		{
+			fpfrac = fopen(_fracname.c_str(),"w");
+			fprintf(fpfrac,"Time;Total;Array of value\n");
+		}
+		else
+		{
+			fpfrac = fopen(_fracname.c_str(),"a");
+		}
+	}
+	else
+	{
+		std::string rfname = "rm -rf "+_fracname;
+		system(rfname.c_str());
+	}
+	// set system size without rigid contact
+	if(_solver->getStaticDofManager() !=NULL)
+	{
+		_systemSizeWithoutRigidContact = _solver->getStaticDofManager()->getFirstRigidContactUnknowns();
+	}
+	else
+	{
+		_systemSizeWithoutRigidContact = _solver->getDofManager()->sizeOfR();
+	}
+	// avoid this HOW ??
+	long int nelem=0;
+	for(std::vector<partDomain*>::iterator itdom=domvec.begin(); itdom!= domvec.end();++itdom){
+		partDomain *dom = *itdom;
+		nelem+=dom->groupOfElementsSize();
+	}
+	this->setTotElem(nelem);
 
-    // init non linear system to get the external work
-    std::string Aname("A");
-    dofManagerMultiSystems<double>* multiDof = dynamic_cast<dofManagerMultiSystems<double>*>(_pAssembler);
-    linearSystem<double> *lsys;
-    if(multiDof ==NULL)
-    {
-      lsys = _pAssembler->getLinearSystem(Aname);
-    }
-    else
-    {
-      lsys = multiDof->getManager(0)->getLinearSystem(Aname);
-    }
-    _nlsys = dynamic_cast<nonLinearSystem<double>*>(lsys);
-    if(_nlsys!=NULL)
-    {
-      // Wext for prescribed displacement (but without rigid contact body)
-      std::vector<Dof> R;
-      for(nonLinearMechSolver::contactContainer::iterator itC = vcdom.begin(); itC!=vcdom.end();++itC)
-      {
-        contactDomain *cdom = *itC;
-        rigidContactSpaceBase *rspace = static_cast<rigidContactSpaceBase*>(cdom->getSpace());
-        rspace->getKeysOfGravityCenter(R);
-        _rigidContactFilter.addDof(R);
-      }
-      R.clear();
-      _pAssembler->getFixedDof(R);
-      for(int i=0; i<R.size(); i++){
-        if(!_rigidContactFilter(R[i])){
-         #if defined(HAVE_MPI)
-          if(R[i].getType()<0)  // dof another rank
-          {
-            _rigidContactFilter.addDof(R[i]);
-          }
-          else
-         #endif // HAVE_MPI
-          {
-            _fextn.insert(std::pair<Dof,double>(R[i],0.));
-            _dispn.insert(std::pair<Dof,double>(R[i],0.));
-            _fextnp1.insert(std::pair<Dof,double>(R[i],0.));
-            _dispnp1.insert(std::pair<Dof,double>(R[i],0.));
-          }
-        }
-      }
-    }
-    else
-    {
-      Msg::Error("Wext cannot be computed for a linear system! The value will be set to 0");
-    }
+	// init non linear system to get the external work
+	std::string Aname("A");
+	dofManagerMultiSystems<double>* multiDof = dynamic_cast<dofManagerMultiSystems<double>*>(_solver->getDofManager());
+	linearSystem<double> *lsys;
+	if(multiDof ==NULL)
+	{
+		lsys = _solver->getDofManager()->getLinearSystem(Aname);
+	}
+	else
+	{
+		lsys = multiDof->getManager(0)->getLinearSystem(Aname);
+	}
+	nonLinearSystem<double>* nlsys = dynamic_cast<nonLinearSystem<double>*>(lsys);
+	if(nlsys!=NULL)
+	{
+		// Wext for prescribed displacement (but without rigid contact body)
+		std::vector<Dof> R;
+		for(nonLinearMechSolver::contactContainer::iterator itC = vcdom.begin(); itC!=vcdom.end();++itC)
+		{
+			contactDomain *cdom = *itC;
+			rigidContactSpaceBase *rspace = static_cast<rigidContactSpaceBase*>(cdom->getSpace());
+			rspace->getKeysOfGravityCenter(R);
+			_rigidContactFilter.addDof(R);
+		}
+		R.clear();
+		_solver->getDofManager()->getFixedDof(R);
+		for(int i=0; i<R.size(); i++){
+			if(!_rigidContactFilter(R[i])){
+			 #if defined(HAVE_MPI)
+				if(R[i].getType()<0)  // dof another rank
+				{
+					_rigidContactFilter.addDof(R[i]);
+				}
+				else
+			 #endif // HAVE_MPI
+				{
+					_fextn.insert(std::pair<Dof,double>(R[i],0.));
+					_dispn.insert(std::pair<Dof,double>(R[i],0.));
+					_fextnp1.insert(std::pair<Dof,double>(R[i],0.));
+					_dispnp1.insert(std::pair<Dof,double>(R[i],0.));
+				}
+			}
+		}
+	}
+	else
+	{
+		Msg::Error("Wext cannot be computed for a linear system! The value will be set to 0");
+	}
 
-  }
+}
 
 
 double energeticField::kineticEnergy() const {
-  if(_sAssembler == NULL || !_dynamics)  return 0.; // system is not dynamic --> kinetic energy = 0
-  else return _sAssembler->getKineticEnergy(_systemSizeWithoutRigidContact,_rigidContactFilter);
+  if(_solver->getStaticDofManager() == NULL || !_dynamics)  return 0.; // system is not dynamic --> kinetic energy = 0
+  else return _solver->getStaticDofManager()->getKineticEnergy(_systemSizeWithoutRigidContact,_rigidContactFilter);
 }
 
 double energeticField::kineticEnergy(MElement *ele, const partDomain *dom) const{
   double ener=0.;
-  if(_sAssembler != NULL && _dynamics){
+  if(_solver->getStaticDofManager() != NULL && _dynamics){
     // get Dof
     std::vector<Dof> R;
     std::vector<double> velocities;
@@ -180,8 +179,8 @@ double energeticField::kineticEnergy(MElement *ele, const partDomain *dom) const
     FunctionSpaceBase *sp = dom->getFunctionSpace();
     sp->getKeys(ele,R);
     int nkeys = sp->getNumKeys(ele);
-    _sAssembler->getDofValue(R,velocities,nonLinearBoundaryCondition::velocity);
-    _sAssembler->getVertexMass(R,vmass);
+    _solver->getStaticDofManager()->getDofValue(R,velocities,nonLinearBoundaryCondition::velocity);
+    _solver->getStaticDofManager()->getVertexMass(R,vmass);
     for(int i=0; i!=nkeys; i++)
       ener+=vmass[i]*velocities[i]*velocities[i];
     R.clear(); velocities.clear(); vmass.clear();
@@ -190,33 +189,46 @@ double energeticField::kineticEnergy(MElement *ele, const partDomain *dom) const
 }
 
 double energeticField::deformationEnergy(MElement *ele, const partDomain *dom) const{
-  return _ipf->computeBulkDeformationEnergy(ele,dom,IPStateBase::current);
+  return _solver->getIPField()->computeBulkDeformationEnergy(ele,dom,IPStateBase::current);
 }
 
 double energeticField::deformationEnergy() const{
-  return _ipf->computeDeformationEnergy(IPStateBase::current);
+  return _solver->getIPField()->computeDeformationEnergy(IPStateBase::current);
 }
 
 double energeticField::plasticEnergy(MElement *ele, const partDomain *dom) const{
-  return _ipf->computeBulkPlasticEnergy(ele,dom,IPStateBase::current);
+  return _solver->getIPField()->computeBulkPlasticEnergy(ele,dom,IPStateBase::current);
 }
 
 double energeticField::plasticEnergy() const{
-  return _ipf->computePlasticEnergy(IPStateBase::current);
+  return _solver->getIPField()->computePlasticEnergy(IPStateBase::current);
 }
 
 double energeticField::irreversibleEnergy(MElement *ele, const partDomain *dom) const{
-	return _ipf->computeBulkIrreversibleEnergy(ele,dom,IPStateBase::current);
+	return _solver->getIPField()->computeBulkIrreversibleEnergy(ele,dom,IPStateBase::current);
 }
 
 double energeticField::irreversibleEnergy() const{
-	return _ipf->computeIrreversibleEnergy(IPStateBase::current);
+	return _solver->getIPField()->computeIrreversibleEnergy(IPStateBase::current);
 };
 
 void energeticField::externalWork()const{ // for multiSystem takes only the first one (displacement)
   double Deltawext=0.;
-  if(_nlsys!=NULL){
-    Deltawext = 2*_nlsys->getExternalWork(_systemSizeWithoutRigidContact); // as we divided the value by 2 later !!!
+	std::string Aname("A");
+	dofManagerMultiSystems<double>* multiDof = dynamic_cast<dofManagerMultiSystems<double>*>(_solver->getDofManager());
+	linearSystem<double> *lsys;
+	if(multiDof ==NULL)
+	{
+		lsys = _solver->getDofManager()->getLinearSystem(Aname);
+	}
+	else
+	{
+		lsys = multiDof->getManager(0)->getLinearSystem(Aname);
+	}
+	nonLinearSystem<double>* nlsys = dynamic_cast<nonLinearSystem<double>*>(lsys);
+	
+  if(nlsys!=NULL){
+    Deltawext = 2*nlsys->getExternalWork(_systemSizeWithoutRigidContact); // as we divided the value by 2 later !!!
 
     // Now compute the work of external forces due to prescribed displacement (-Wint - Winertia)
     // Do the scalar product on vector (more efficient) TO DO THE SCALAR PRODUCT WITH BLAS HOW ??
@@ -226,12 +238,12 @@ void energeticField::externalWork()const{ // for multiSystem takes only the firs
     std::vector<double> forceval;
     std::vector<Dof> R2;
     std::vector<double> forceval2;
-    if(_sAssembler!=NULL)
-      _sAssembler->getFixedRightHandSide(R2,forceval2);
+    if(_solver->getStaticDofManager()!=NULL)
+      _solver->getStaticDofManager()->getFixedRightHandSide(R2,forceval2);
     else
     {
-      _pAssembler->getFixedDof(R2);
-      _pAssembler->getDofValue(R2,forceval2);
+      _solver->getDofManager()->getFixedDof(R2);
+      _solver->getDofManager()->getDofValue(R2,forceval2);
     }
     std::vector<Dof> R;
     for(int i=0;i<R2.size();i++){
@@ -242,11 +254,11 @@ void energeticField::externalWork()const{ // for multiSystem takes only the firs
     }
     R2.clear();
     forceval2.clear();
-    _ufield->get(R,disp);
+    _solver->getUnknownField()->get(R,disp);
     // Compute inertial forces if needed
-    if(_sAssembler != NULL and _sAssembler->getScheme() == nonLinearMechSolver::Explicit){ // otherwise static cases and no inertial forces
-      _ufield->get(R,acc,nonLinearBoundaryCondition::acceleration);
-      _sAssembler->getVertexMass(R,_mass);
+    if(_solver->getStaticDofManager() != NULL and _solver->getStaticDofManager()->getScheme() == nonLinearMechSolver::Explicit){ // otherwise static cases and no inertial forces
+      _solver->getUnknownField()->get(R,acc,nonLinearBoundaryCondition::acceleration);
+      _solver->getStaticDofManager()->getVertexMass(R,_mass);
       for(int i=0; i<forceval.size(); i++)
         forceval[i] -= _mass[i]*acc[i];
     }
@@ -268,7 +280,7 @@ void energeticField::externalWork()const{ // for multiSystem takes only the firs
 
 int energeticField::fractureEnergy(double*  arrayEnergy) const
 {
-  return _ipf->computeFractureEnergy(arrayEnergy,IPStateBase::current);
+  return _solver->getIPField()->computeFractureEnergy(arrayEnergy,IPStateBase::current);
 }
 
 void energeticField::get(partDomain *dom,MElement *ele,std::vector<double> &ener, const int cc,
@@ -316,7 +328,7 @@ void energeticField::archive(const double time,const int step) {
   if(_energyComputation !=0)
     this->externalWork();
   // msh file
-  this->buildAllView(_domvec,time,step);
+  this->buildAllView(*_solver->getDomainVector(),time,step);
   if((!_forceView) and(_energyComputation>0))
   {
     // txt file
@@ -398,3 +410,27 @@ energeticField::restart()
   restartManager::restart(_dispnp1);
   return;
 }
+
+void energeticField::closeFile(){
+	elementsField::closeFile();
+	if (fpenergy != NULL) {
+		fclose(fpenergy); fpenergy = NULL;
+	}
+	if (fpfrac != NULL){
+		fclose(fpfrac); fpfrac= NULL;
+	}
+};
+
+void energeticField::resetFile(){
+	elementsField::resetFile();
+	if(_energyComputation>0)
+	{
+		fpenergy = fopen(_fname.c_str(),"a");
+		fprintf(fpenergy,"Time;Kinetic;Deformation;Plastic;Wext;Inversible;Total\n");
+	}
+	if(_fractureEnergyComputation>0)
+	{
+		fpfrac = fopen(_fracname.c_str(),"a");
+		fprintf(fpfrac,"Time;Total;Array of value\n");
+	}
+};
\ No newline at end of file
diff --git a/NonLinearSolver/field/energyField.h b/NonLinearSolver/field/energyField.h
index 71e5702cbc47403358d4de2a800d3fc6c4ef002e..8a4ce54c4447a45ca0d0b45238a6cc4eea85cbab 100644
--- a/NonLinearSolver/field/energyField.h
+++ b/NonLinearSolver/field/energyField.h
@@ -13,21 +13,16 @@
 #define ENERGETICFIELD_H_
 
 #include "elementsField.h"
-#include "nonLinearMechSolver.h"
 #include "staticDofManager.h"
 #include "solverAlgorithms.h"
+class nonLinearMechSolver;
 class energeticField : public elementsField{
  protected:
-//  linearSystem<double> *_lsys;
   const bool _dynamics; // account for kinetics energy in the total energy
-  IPField *_ipf;
-  unknownField *_ufield;
-  dofManager<double> *_pAssembler;
-  staticDofManager<double>* _sAssembler; // can be == NULL but stored to avoid multiple dynamic_cast
-  nonLinearSystem<double> *_nlsys; // can be == NULL but stored to avoid multiple dynamic_cast
+	nonLinearMechSolver* _solver;
   std::string _fname; // file to store total energy in function of time (one by part in mpi the sum column by column has to be done in post processing)
-  std::vector<partDomain*> &_domvec;
-  int _energyComputation,_fractureEnergyComputation;
+  std::string _fracname;
+	int _energyComputation,_fractureEnergyComputation;
   int _systemSizeWithoutRigidContact;
   FILE *fpenergy;
   FILE *fpfrac;
@@ -48,10 +43,8 @@ class energeticField : public elementsField{
     total =5
   };
  #ifndef SWIG
-  energeticField(IPField *ipf,
-                 unknownField *ufield, dofManager<double> *pAssembler,
-                 std::vector<partDomain*> &domvec, nonLinearMechSolver::contactContainer &vcdom,
-                 const std::vector<dataBuildView> &dbview_,const int energyComp,const int fracComp,
+  energeticField(nonLinearMechSolver* sl, const std::vector<dataBuildView> &dbview_,
+								 const int energyComp,const int fracComp,
                  nonLinearMechSolver::scheme myscheme);
 
   ~energeticField()
@@ -78,6 +71,9 @@ class energeticField : public elementsField{
   double get(whichEnergy we = total) const;
   void archive(const double time,const int step=1);
   virtual void restart();
+	
+	virtual void closeFile();
+	virtual void resetFile();	
  #endif // SWIG
 };
 #endif // ENERGETICFIELD_H_
diff --git a/NonLinearSolver/field/nlsField.cpp b/NonLinearSolver/field/nlsField.cpp
index cafbf9e3a1e6083bed34bb0753c0a1c79ec0535e..d14f1de4d154e5339db9af61c995a45a2edf0103 100644
--- a/NonLinearSolver/field/nlsField.cpp
+++ b/NonLinearSolver/field/nlsField.cpp
@@ -90,6 +90,13 @@ void nlsField::createFile(){
   }
 }
 
+void nlsField::resetFile(){
+	if(_vBuildView->size() > 0)
+  {
+    this->createFile();
+  }
+};
+
 nlsField::nlsField(const std::string &fnn, const uint32_t fms, const int ncomp,
                    const std::vector<dataBuildView> &dbview_) : numfile(0), fmaxsize(fms),
                                                                 totelem(0), numcomp(ncomp), view(false),
diff --git a/NonLinearSolver/field/nlsField.h b/NonLinearSolver/field/nlsField.h
index 29cdaadc43d173d7d800d8cc38606ec3dd14e7d9..cda8cf10e0537b8b070ef6ad26125813b9dbb916 100644
--- a/NonLinearSolver/field/nlsField.h
+++ b/NonLinearSolver/field/nlsField.h
@@ -93,6 +93,7 @@ class nlsField{
   virtual void onelabView(const std::string &meshFileName, const std::string &fname,
                           const std::vector<partDomain*> &vdom,const std::string &valuename,
                           const int comp,const double time, const int nstep) const;
+	virtual void resetFile();
 #endif // SWIG
 };
 #endif // nlsField_H_
diff --git a/NonLinearSolver/field/unknownField.cpp b/NonLinearSolver/field/unknownField.cpp
index 40669f11d4b98b47430b1ce3ed2f10b12f02e98a..fe14062ce0e21cdc8da181a5fa71c27558a3b39b 100644
--- a/NonLinearSolver/field/unknownField.cpp
+++ b/NonLinearSolver/field/unknownField.cpp
@@ -16,13 +16,14 @@
 #include "MPoint.h"
 // constructor
 
-unknownField::unknownField(dofManager<double> *pas, std::vector<partDomain*> &vdom, std::vector<partDomain*> &vghostdom,
-                           nonLinearMechSolver::contactContainer *acontact,const int nc, std::vector<unknownField::archiveNode> &archiving,
+unknownField::unknownField(nonLinearMechSolver* sl,const int nc, 
+													 std::vector<unknownField::archiveNode> &archiving,
                            const std::vector<nlsField::dataBuildView> &dbview_,
-                           const std::string filen): pAssembler(pas),nodesField(filen,100000000,nc,dbview_),
-                                                     _allContact(acontact), _vdom(&vdom),
-                                                     _dynassembler(dynamic_cast<staticDofManager<double>*>(pAssembler))
+                           const std::string filen): _solver(sl),nodesField(filen,100000000,nc,dbview_)
 {
+	std::vector<partDomain*>& vdom = *_solver->getDomainVector();
+	std::vector<partDomain*>& vghostdom = *_solver->getGhostDomainMPI();
+	
   std::vector<bool> alfind;
   for(int i=0;i<archiving.size(); i++)
     alfind.push_back(false);
@@ -97,7 +98,7 @@ unknownField::unknownField(dofManager<double> *pas, std::vector<partDomain*> &vd
   }
   // increment the total element with rigid contact and add archiving if necessary
 
-  for(nonLinearMechSolver::contactContainer::iterator it = _allContact->begin(); it!=_allContact->end(); ++it){
+  for(nonLinearMechSolver::contactContainer::iterator it = _solver->getAllContactDomain()->begin(); it!=_solver->getAllContactDomain()->end(); ++it){
     contactDomain *cdom = *it;
     if(cdom->isRigid()){
       totelem += cdom->gMaster->size();
@@ -155,7 +156,7 @@ void unknownField::buildData(FILE* myview,const std::vector<partDomain*> &vdom,c
   nodesField::buildData(myview,vdom,cc,ev);
   // add contact domain
   std::vector<double> fieldData;
-  for(nonLinearMechSolver::contactContainer::iterator it=_allContact->begin(); it!=_allContact->end(); ++it){
+  for(nonLinearMechSolver::contactContainer::iterator it=_solver->getAllContactDomain()->begin(); it!=_solver->getAllContactDomain()->end(); ++it){
     contactDomain *cdom = *it;
     if(cdom->isRigid()){
       for (groupOfElements::elementContainer::const_iterator it = cdom->gMaster->begin(); it != cdom->gMaster->end(); ++it){
@@ -186,11 +187,11 @@ unknownField::~unknownField()
 }
 
 void unknownField::get(Dof &D,double &udof) const{
-  pAssembler->getDofValue(D,udof);
+	_solver->getDofManager()->getDofValue(D,udof);
 }
 
 void unknownField::get(Dof &D, double &udof, nonLinearBoundaryCondition::whichCondition wv) const {
-  _dynassembler->getDofValue(D,udof,wv);
+  _solver->getStaticDofManager()->getDofValue(D,udof,wv);
 }
 
 void unknownField::get(std::vector<Dof> &R, std::vector<double> &disp) const{
@@ -244,17 +245,17 @@ void unknownField::get(partDomain *dom, MElement *ele,std::vector<double> &udofs
 void unknownField::archive(const double time,const int step)
 {
   // msh view
-  this->buildAllView(*_vdom,time,step);
+  this->buildAllView(*_solver->getDomainVector(),time,step);
   if(!_forceView)
   {
     double u;
     for(std::vector<archiveNode>::const_iterator it = varch.begin(); it!=varch.end();++it){
       if( step%it->nstep == 0){
         const Dof D = it->D;
-        if(_dynassembler!=NULL)
-          _dynassembler->getDofValue(D,u,it->wc);
+        if(_solver->getStaticDofManager()!=NULL)
+          _solver->getStaticDofManager()->getDofValue(D,u,it->wc);
         else
-          pAssembler->getDofValue(D,u);
+          _solver->getDofManager()->getDofValue(D,u);
         fprintf(it->fp,"%e;%e\n",time,u);
         if( step%(it->nstep*1) == 0) fflush(it->fp);
       }
@@ -273,10 +274,10 @@ void unknownField::valuesForOnelab(fullVector<double> &nodalValues) const
   double u;
   for(std::vector<archiveNode>::const_iterator it = varch.begin(); it!=varch.end();++it,++index){
     const Dof D = it->D;
-    if(_dynassembler!=NULL)
-      _dynassembler->getDofValue(D,u,it->wc);
+    if(_solver->getStaticDofManager()!=NULL)
+      _solver->getStaticDofManager()->getDofValue(D,u,it->wc);
     else
-      pAssembler->getDofValue(D,u);
+      _solver->getDofManager()->getDofValue(D,u);
 
     nodalValues.set(index,u);
   }
@@ -288,3 +289,19 @@ unknownField::restart()
   nodesField::restart();
   return;
 }
+
+void unknownField::closeFile(){
+	nodesField::closeFile();
+	for(int i=0;i<varch.size();i++)
+  {
+    varch[i].closeFile();
+  }
+};
+
+void unknownField::resetFile(){
+	nodesField::resetFile();
+	for(int i=0;i<varch.size();i++)
+  {
+    varch[i].openFile();
+  }
+};
diff --git a/NonLinearSolver/field/unknownField.h b/NonLinearSolver/field/unknownField.h
index 854640683a647474d3c4068e25ac4d1f0a69eaab..529fe5c48c1f30337bc75ceecb498b5475924462 100644
--- a/NonLinearSolver/field/unknownField.h
+++ b/NonLinearSolver/field/unknownField.h
@@ -21,6 +21,7 @@
 #include "nonLinearBC.h"
 #include "MInterfaceElement.h"
 class contactDomain;
+class nonLinearMechSolver;
 template<class T> class staticDofManager;
 class unknownField : public nodesField{
  public:
@@ -41,13 +42,19 @@ class unknownField : public nodesField{
     archiveNode(Dof R, const int pnum, int n, int comp,nonLinearBoundaryCondition::whichCondition wv=nonLinearBoundaryCondition::position,
                 int nstep_=1,bool isc=false) : physnum(pnum),nodenum(n), D(R),_comp(comp), wc(wv), nstep(nstep_), iscontact(isc),fp(NULL)
     {
-       // open File
+      openFile();
+    }
+    archiveNode(const archiveNode &source) : physnum(source.physnum), nodenum(source.nodenum), D(source.D), _comp(source._comp),
+                                             nstep(source.nstep), wc(source.wc), fp(source.fp), iscontact(source.iscontact){}
+    ~archiveNode(){};
+		void openFile(){
+			 // open File
        std::ostringstream oss;
        oss << nodenum;
        std::string s = oss.str();
        // component of displacement
        oss.str("");
-       oss << comp;
+       oss << _comp;
        std::string s2 = oss.str();
        #if defined(HAVE_MPI)
        if(Msg::GetCommSize() != 1){
@@ -69,23 +76,16 @@ class unknownField : public nodesField{
          break;
        }
        fp = fopen(fname.c_str(),"a");
-    }
-    archiveNode(const archiveNode &source) : physnum(source.physnum), nodenum(source.nodenum), D(source.D), _comp(source._comp),
-                                             nstep(source.nstep), wc(source.wc), fp(source.fp), iscontact(source.iscontact){}
-    ~archiveNode(){};
-    void closeFile(){fclose(fp);}
+		};
+    void closeFile(){if (fp!=NULL) {fclose(fp); fp=NULL;};}
   };
- protected:
-  dofManager<double> *pAssembler; // To access to component of equation system template this
-  staticDofManager<double>* _dynassembler; // can be == NULL but avoid multiple dynamic_cast
-  std::vector<archiveNode> varch;
-  std::vector<partDomain*> *_vdom;
-  std::set<contactDomain*> *_allContact;
+	protected:
+	nonLinearMechSolver* _solver;
+	std::vector<archiveNode> varch;
   virtual void buildData(FILE* myview,const std::vector<partDomain*> &vdom,const int cc,const ElemValue ev) const;
  public:
   // update all displacement value
-  unknownField(dofManager<double> *pas, std::vector<partDomain*> &elas, std::vector<partDomain*> &gdom,std::set<contactDomain*> *acontact,
-                      const int nc, std::vector<archiveNode> &archiving,
+  unknownField(nonLinearMechSolver* s, const int nc, std::vector<archiveNode> &archiving,
                       const std::vector<nlsField::dataBuildView> &dbview_, const std::string="disp.msh");
   virtual ~unknownField();
   // get Operation
@@ -102,5 +102,8 @@ class unknownField : public nodesField{
   virtual void archive(const double time,const int step=1);
   virtual void valuesForOnelab(fullVector<double> &nodalValues) const;
   virtual void restart();
+	
+	virtual void closeFile();
+	virtual void resetFile();
 };
 #endif // _UNKNOWNFIELD_H_
diff --git a/NonLinearSolver/internalPoints/ipAnisotropicStoch.cpp b/NonLinearSolver/internalPoints/ipAnisotropicStoch.cpp
index 55cc611d4a6a328fbfa03c6781ab05ef417826d0..15a27cb7e852dc31ea8e24d0c249c32ab4ba72a3 100644
--- a/NonLinearSolver/internalPoints/ipAnisotropicStoch.cpp
+++ b/NonLinearSolver/internalPoints/ipAnisotropicStoch.cpp
@@ -95,6 +95,119 @@ IPAnisotropicStoch::IPAnisotropicStoch(const SVector3 &GaussP, const fullMatrix<
      MUxz = MUxzMat(nx,ny);
      MUyz = MUyzMat(nx,ny);
    }
+
+  else if (intpl == 3 ){
+     double alpha = 0.1;
+     double min = 0.001;
+     double max = 0.999;
+     if(x > 0.5){nx=nx+1;}
+     if(y > 0.5){ny=ny+1;}
+
+     if (x <=min or x >= max){
+         if (y <=min or y >= max){
+            Ex = ExMat(nx,ny);
+            Ey = EyMat(nx,ny);
+            Ez = EzMat(nx,ny);
+
+            Vxy = VxyMat(nx,ny);
+            Vxz = VxzMat(nx,ny);
+            Vyz = VyzMat(nx,ny);
+
+            MUxy = MUxyMat(nx,ny);
+            MUxz = MUxzMat(nx,ny);
+            MUyz = MUyzMat(nx,ny);
+         }
+         else{
+             int ny0; 
+             if( y >0.5 ){
+                 ny0 = ny-1;
+                 if(ny0 < 0){ny0=0;}
+              }
+             if( y <=0.5){
+                 ny0 = ny;
+                 ny = ny+1;
+              }   
+            double coef = 0.5*(1.0+tanh((y-0.5)/alpha));
+            Ex = ExMat(nx,ny0) + (ExMat(nx,ny)-ExMat(nx,ny0))*coef;
+            Ey = EyMat(nx,ny0) + (EyMat(nx,ny)-EyMat(nx,ny0))*coef;
+            Ez = EzMat(nx,ny0) + (EzMat(nx,ny)-EzMat(nx,ny0))*coef;
+
+            Vxy = VxyMat(nx,ny0) + (VxyMat(nx,ny)-VxyMat(nx,ny0))*coef;
+            Vxz = VxzMat(nx,ny0) + (VxyMat(nx,ny)-VxyMat(nx,ny0))*coef;
+            Vyz = VyzMat(nx,ny0) + (VyzMat(nx,ny)-VyzMat(nx,ny0))*coef;
+
+            MUxy = MUxyMat(nx,ny0) + (MUxyMat(nx,ny)-MUxyMat(nx,ny0))*coef;
+            MUxz = MUxzMat(nx,ny0) + (MUxzMat(nx,ny)-MUxzMat(nx,ny0))*coef;
+            MUyz = MUyzMat(nx,ny0) + (MUyzMat(nx,ny)-MUyzMat(nx,ny0))*coef;
+         }
+     }
+     else{
+         if (y <=min or y >= max){
+            int nx0;
+            if( x >0.5 ){
+                nx0 = nx-1;
+                if(nx0 < 0){nx0=0;}
+            }
+            if( x <=0.5){
+                nx0 = nx;
+                nx = nx+1;
+            } 
+            double coef = 0.5*(1.0+tanh((x-0.5)/alpha));
+            Ex = ExMat(nx0,ny) + (ExMat(nx,ny)-ExMat(nx0,ny))*coef;
+            Ey = EyMat(nx0,ny) + (EyMat(nx,ny)-EyMat(nx0,ny))*coef;
+            Ez = EzMat(nx0,ny) + (EzMat(nx,ny)-EzMat(nx0,ny))*coef;
+
+            Vxy = VxyMat(nx0,ny) + (VxyMat(nx,ny)-VxyMat(nx0,ny))*coef;
+            Vxz = VxzMat(nx0,ny) + (VxyMat(nx,ny)-VxyMat(nx0,ny))*coef;
+            Vyz = VyzMat(nx0,ny) + (VyzMat(nx,ny)-VyzMat(nx0,ny))*coef;
+
+            MUxy = MUxyMat(nx0,ny) + (MUxyMat(nx,ny)-MUxyMat(nx0,ny))*coef;
+            MUxz = MUxzMat(nx0,ny) + (MUxzMat(nx,ny)-MUxzMat(nx0,ny))*coef;
+            MUyz = MUyzMat(nx0,ny) + (MUyzMat(nx,ny)-MUyzMat(nx0,ny))*coef;
+         }
+         else{  
+            int nx0, ny0;
+            if( x >0.5 ){
+                nx0 = nx-1;
+                if(nx0 < 0){nx0=0;}
+            }
+            if( x <=0.5){
+                nx0 = nx;
+                nx = nx+1;
+            } 
+            if( y >0.5 ){
+                ny0 = ny-1;
+                if(ny0 < 0){ny0=0;}
+            }
+            if( y <=0.5){
+                ny0 = ny;
+                ny = ny+1;
+            }  
+            double cx,cy,s,t;
+            cx = 0.5*(1.0+tanh((x-0.5)/alpha));
+            cy = 0.5*(1.0+tanh((y-0.5)/alpha));
+            s = (x-min)/(max-min); 
+            t = (y-min)/(max-min); 
+            double c00 = (1.0-cx)*(1.0-t) + (1.0-cy)*(1.0-s) - (1.0-s)*(1.0-t);
+            double c01 = (1.0-cx)*t + cy*(1.0-s) - (1.0-s)*t;
+            double c10 = cx*(1.0-t) + (1.0-cy)*s - s*(1.0-t);
+            double c11 = cx*t + cy*s - s*t;
+
+            Ex = c00*ExMat(nx0,ny0) + c01*ExMat(nx0,ny) + c10*ExMat(nx,ny0) + c11*ExMat(nx,ny);
+            Ey = c00*EyMat(nx0,ny0) + c01*EyMat(nx0,ny) + c10*EyMat(nx,ny0) + c11*EyMat(nx,ny);
+            Ez = c00*EzMat(nx0,ny0) + c01*EzMat(nx0,ny) + c10*EzMat(nx,ny0) + c11*EzMat(nx,ny);
+
+            Vxy = c00*VxyMat(nx0,ny0) + c01*VxyMat(nx0,ny) + c10*VxyMat(nx,ny0) + c11*VxyMat(nx,ny);
+            Vxz = c00*VxzMat(nx0,ny0) + c01*VxzMat(nx0,ny) + c10*VxzMat(nx,ny0) + c11*VxzMat(nx,ny);
+            Vyz = c00*VyzMat(nx0,ny0) + c01*VyzMat(nx0,ny) + c10*VyzMat(nx,ny0) + c11*VyzMat(nx,ny);
+
+            MUxy = c00*MUxyMat(nx0,ny0) + c01*MUxyMat(nx0,ny) + c10*MUxyMat(nx,ny0) + c11*MUxyMat(nx,ny);
+            MUxz = c00*MUxzMat(nx0,ny0) + c01*MUxzMat(nx0,ny) + c10*MUxzMat(nx,ny0) + c11*MUxzMat(nx,ny);
+            MUyz = c00*MUyzMat(nx0,ny0) + c01*MUyzMat(nx0,ny) + c10*MUyzMat(nx,ny0) + c11*MUyzMat(nx,ny);
+         }
+     }
+   }
+
    else {
      printf("Unknown interpolation method: %d\n", intpl);
    }			
diff --git a/NonLinearSolver/internalPoints/ipCohesive.h b/NonLinearSolver/internalPoints/ipCohesive.h
index 4d57216a128409ae497c739f4e45fad734316b5c..9707044e001d74046c35144d1bbb73aa5c38ae83 100644
--- a/NonLinearSolver/internalPoints/ipCohesive.h
+++ b/NonLinearSolver/internalPoints/ipCohesive.h
@@ -226,6 +226,7 @@ class IPTransverseIsoCurvatureCohesive : public IPTransverseIsotropicCohesive{
           N_local.normalize();
           _A = Proj_A + tan(init_Angle*3.14159/180.)*N_local;
        }
+       _A.normalize();
     }
     IPTransverseIsoCurvatureCohesive(const IPTransverseIsoCurvatureCohesive& src): IPTransverseIsotropicCohesive(src)
     {
diff --git a/NonLinearSolver/internalPoints/ipField.cpp b/NonLinearSolver/internalPoints/ipField.cpp
index 7ae01dbc70af63991ecd96ab4a390ca3fc4af91a..2f1b91a97b5ab4db4705b2ab4551e734b3beedb0 100644
--- a/NonLinearSolver/internalPoints/ipField.cpp
+++ b/NonLinearSolver/internalPoints/ipField.cpp
@@ -18,17 +18,19 @@
 #include "numericalMaterial.h"
 
 void IPField::compute1state(IPStateBase::whichState ws, bool stiff){
-  for(std::vector<partDomain*>::iterator itdom=_efield->begin(); itdom!=_efield->end(); ++itdom){
+	std::vector<partDomain*>* domainVector = _solver->getDomainVector();
+	unknownField* ufield = _solver->getUnknownField();
+  for(std::vector<partDomain*>::iterator itdom=domainVector->begin(); itdom!=domainVector->end(); ++itdom){
     partDomain *dom = *itdom;
-    dom->computeIPVariable(_AIPS,_ufield,ws,stiff);
+    dom->computeIPVariable(_AIPS,ufield,ws,stiff);
   }
 }
 
 void IPField::nextStep(const double time){
-	
+	std::vector<partDomain*>* domainVector = _solver->getDomainVector();
   // check failure, cohesive insertion at current time step
-  for (int idom=0; idom < _efield->size(); idom++){
-    partDomain* dom = (*_efield)[idom];
+  for (int idom=0; idom < domainVector->size(); idom++){
+    partDomain* dom = (*domainVector)[idom];
     dom->checkFailure(_AIPS);
   }
 
@@ -44,9 +46,9 @@ void IPField::nextStep(const double time){
 			if (otherRanks.size() > 0){
 				std::vector<int> brokenIPs;
 				std::vector<int> blockDamageIPs;
-				for (int idom=0; idom< _efield->size(); idom++){
-					(*_efield)[idom]->getBrokenIPs(brokenIPs);
-					(*_efield)[idom]->getBlockDamageIps(blockDamageIPs);
+				for (int idom=0; idom< domainVector->size(); idom++){
+					(*domainVector)[idom]->getBrokenIPs(brokenIPs);
+					(*domainVector)[idom]->getBlockDamageIps(blockDamageIPs);
 				}
 				// send data
 				for (std::set<int>::const_iterator it = otherRanks.begin(); it != otherRanks.end(); it++){
@@ -160,12 +162,13 @@ void IPField::initialBroken(MElement *iele, materialLaw* mlaw ){
 }
 
 void IPField::initialBroken(GModel* pModel, std::vector<int> &vnumphys){
+	std::vector<partDomain*>* domainVector = _solver->getDomainVector();
   std::vector<MVertex*> vv;
   for(int i=0;i<vnumphys.size();i++){
     // get the vertex associated to the physical entities LINES ONLY !!
     pModel->getMeshVerticesForPhysicalGroup(1,vnumphys[i],vv);
     // find the InterfaceElement associated to these vertex (identify interior node as degree 2 min)
-    for(std::vector<partDomain*>::iterator itfield = _efield->begin(); itfield != _efield->end(); ++itfield){
+    for(std::vector<partDomain*>::iterator itfield = domainVector->begin(); itfield != domainVector->end(); ++itfield){
       if((*itfield)->IsInterfaceTerms())
       {
         dgPartDomain *dgdom = static_cast<dgPartDomain*>(*itfield);
@@ -183,9 +186,11 @@ void IPField::initialBroken(GModel* pModel, std::vector<int> &vnumphys){
   }
 }
 
+const std::vector<partDomain*>& IPField::getDomainVector() const {return *_solver->getDomainVector();};
+
 void IPField::archive(const double time, const int step){
   // msh view
-  this->buildAllView(*_efield,time,step);
+  this->buildAllView(*_solver->getDomainVector(),time,step);
   if(!_forceView)
   {
     // txt archive
@@ -353,8 +358,9 @@ double IPField::computeInterfaceDeformationEnergy(MElement *ele, const dgPartDom
 }
 
 double IPField::computeDeformationEnergy(const IPStateBase::whichState ws) const{
+	const std::vector<partDomain*>* domainVector = _solver->getDomainVector();
 	double ener=0.;
-	for(std::vector<partDomain*>::const_iterator itdom=_efield->begin(); itdom!=_efield->end(); ++itdom){
+	for(std::vector<partDomain*>::const_iterator itdom=domainVector->begin(); itdom!=domainVector->end(); ++itdom){
 		partDomain *dom = *itdom;
 		for(groupOfElements::elementContainer::const_iterator it=dom->g_cbegin(); it!=dom->g_cend(); ++it){
 			MElement *ele = *it;
@@ -432,8 +438,9 @@ double IPField::computeBulkPlasticEnergy(MElement *ele, const partDomain *dom, c
 }
 
 double IPField::computePlasticEnergy(const IPStateBase::whichState ws) const{
+	const std::vector<partDomain*>* domainVector = _solver->getDomainVector();
 	double ener=0.;
-	for(std::vector<partDomain*>::const_iterator itdom=_efield->begin(); itdom!=_efield->end(); ++itdom){
+	for(std::vector<partDomain*>::const_iterator itdom=domainVector->begin(); itdom!=domainVector->end(); ++itdom){
 		partDomain *dom = *itdom;
 		for(groupOfElements::elementContainer::const_iterator it=dom->g_cbegin(); it!=dom->g_cend(); ++it){
 			MElement *ele = *it;
@@ -534,8 +541,9 @@ double IPField::computeInterfaceIrreversibleEnergy(MElement *ele, const dgPartDo
 };
 
 double IPField::computeIrreversibleEnergy(const IPStateBase::whichState ws) const{
+	const std::vector<partDomain*>* domainVector = _solver->getDomainVector();
 	double ener=0.;
-	for(std::vector<partDomain*>::const_iterator itdom=_efield->begin(); itdom!=_efield->end(); ++itdom){
+	for(std::vector<partDomain*>::const_iterator itdom=domainVector->begin(); itdom!=domainVector->end(); ++itdom){
 		partDomain *dom = *itdom;
 		for(groupOfElements::elementContainer::const_iterator it=dom->g_cbegin(); it!=dom->g_cend(); ++it){
 			MElement *ele = *it;
@@ -573,8 +581,10 @@ double IPField::computeIrreversibleEnergy(const IPStateBase::whichState ws) cons
 };
 
 double IPField::computeInterfaceIrreversibleEnergy(const IPStateBase::whichState ws) const{
+		const std::vector<partDomain*>* domainVector = _solver->getDomainVector();
+
 	double ener=0.;
-	for(std::vector<partDomain*>::const_iterator itdom=_efield->begin(); itdom!=_efield->end(); ++itdom){
+	for(std::vector<partDomain*>::const_iterator itdom=domainVector->begin(); itdom!=domainVector->end(); ++itdom){
 		partDomain *dom = *itdom;
 		
 		// interface energy
@@ -657,22 +667,74 @@ int IPField::computeFractureEnergy(MElement *ele, const dgPartDomain *dom,double
   return ncomp;
 }
 
+int IPField::computeFractureEnergy(double * arrayEnergy,const IPStateBase::whichState ws) const
+{
+	static double tmpArray[10];
+	int maxcomp = 0;
+	for(int i=0;i<10;i++){
+		arrayEnergy[i]=0.;
+		tmpArray[i]=0.;
+	}
+	const std::vector<partDomain*>* domainVector =  _solver->getDomainVector();
+	for(std::vector<partDomain*>::const_iterator itdom=domainVector->begin(); itdom!=domainVector->end(); ++itdom){
+		const partDomain *dom = *itdom;
+		if(dom->IsInterfaceTerms()) // otherwise no fracture
+		{
+			const dgPartDomain* dgdom = static_cast<const dgPartDomain*>(dom);
+			if((dgdom->getMaterialLawMinus()->getType() == materialLaw::fracture) and (dgdom->getMaterialLawPlus()->getType() == materialLaw::fracture))//comment it to get H1 norm in the interface  e.g. LinearThermoMech
+			{
+				for(groupOfElements::elementContainer::const_iterator it=dgdom->gi->begin(); it!=dgdom->gi->end(); ++it)
+				{
+					MElement *ele = *it;
+				 #if defined(HAVE_MPI)
+					if(Msg::GetCommSize()>1)
+					{
+						MInterfaceElement *iele = dynamic_cast<MInterfaceElement*>(ele);
+						if(iele->getElem(0)->getPartition()==0 or iele->getElem(0)->getPartition() == Msg::GetCommRank()+1) // if - element is ghost not computed to avoid to count twice the contribution
+						{
+							int ncomp = this->computeFractureEnergy(ele,dgdom,tmpArray,ws);
+							for(int i=0;i<ncomp;i++){
+								arrayEnergy[i]+=tmpArray[i];
+								tmpArray[i]=0.;
+							}
+							if(ncomp>maxcomp)
+								maxcomp = ncomp;
+						}
+					}
+					else
+				 #endif // HAVE_MPI
+					{
+						int ncomp = this->computeFractureEnergy(ele,dgdom,tmpArray,ws);
+						for(int i=0;i<ncomp;i++){
+							arrayEnergy[i]+=tmpArray[i];
+							tmpArray[i]=0.;
+						}
+						if(ncomp>maxcomp)
+							maxcomp = ncomp;
+					}
+				}
+			}
+		}
+	}
+	return maxcomp;
+}
+
 
-IPField::IPField(nonLinearMechSolver* sl, std::vector<partDomain*> *ef,dofManager<double>* pa,
-          unknownField* uf, std::vector<ip2archive> &vaip,
+IPField::IPField(nonLinearMechSolver* sl, std::vector<ip2archive> &vaip,
           const std::vector<dataBuildView> &dbview_, std::string filename): 
-					_solver(sl),_efield(ef), _dm(pa),_ufield(uf), elementsField(filename,100000000,1,dbview_),
+					_solver(sl),elementsField(filename,100000000,1,dbview_),
 					_numOfActiveDamageIPs(0),_numOfActiveDamageIPsReached(0){
   // Creation of storage for IP data
-  _AIPS = new AllIPState(*_efield);
+	std::vector<partDomain*>* domainVector = _solver->getDomainVector();
+  _AIPS = new AllIPState(*domainVector);
   // compute the number of element
   long int nelem=0;
-  for(std::vector<partDomain*>::iterator itdom=_efield->begin(); itdom!=_efield->end(); ++itdom){
+  for(std::vector<partDomain*>::iterator itdom=domainVector->begin(); itdom!=domainVector->end(); ++itdom){
     partDomain *dom = *itdom;
     nelem+= dom->groupOfElementsSize();
   }
   this->setTotElem(nelem);
-  this->buildAllView(*_efield,0.,0);
+  this->buildAllView(*domainVector,0.,0);
 
   // Build the viparch vector (find the nearest ipvariable to each given vertex)
   for(std::vector<ip2archive>::iterator ita=vaip.begin(); ita!=vaip.end(); ++ita){
@@ -684,7 +746,7 @@ IPField::IPField(nonLinearMechSolver* sl, std::vector<partDomain*> *ef,dofManage
     if (dim == -1){
       if (aip.plusNum == aip.minusNum){
         // bulk case
-        for(std::vector<partDomain*>::iterator itdom=_efield->begin(); itdom!=_efield->end(); ++itdom)
+        for(std::vector<partDomain*>::iterator itdom=domainVector->begin(); itdom!=domainVector->end(); ++itdom)
         {
           partDomain *dom = *itdom;
           for (groupOfElements::elementContainer::iterator ite = dom->g_cbegin(); ite!= dom->g_cend(); ite++){
@@ -705,7 +767,7 @@ IPField::IPField(nonLinearMechSolver* sl, std::vector<partDomain*> *ef,dofManage
       }
       else{
         // interface case
-        for(std::vector<partDomain*>::iterator itdom=_efield->begin(); itdom!=_efield->end(); ++itdom)
+        for(std::vector<partDomain*>::iterator itdom=domainVector->begin(); itdom!=domainVector->end(); ++itdom)
         {
           partDomain *dom = *itdom;
           dgPartDomain* dgDom = dynamic_cast<dgPartDomain*>(dom);
@@ -741,7 +803,7 @@ IPField::IPField(nonLinearMechSolver* sl, std::vector<partDomain*> *ef,dofManage
       MVertex *ver = *itv;
       dgPartDomain *dgdom;
       bool samedim = false;
-      for(std::vector<partDomain*>::iterator itdom=_efield->begin(); itdom!=_efield->end(); ++itdom)
+      for(std::vector<partDomain*>::iterator itdom=domainVector->begin(); itdom!=domainVector->end(); ++itdom)
       {
         partDomain *dom = *itdom;
         if(dom->IsInterfaceTerms())
@@ -835,7 +897,7 @@ IPField::IPField(nonLinearMechSolver* sl, std::vector<partDomain*> *ef,dofManage
       {
         dgPartDomain *dgdom;
         bool samedim = false;
-        for(std::vector<partDomain*>::iterator itdom=_efield->begin(); itdom!=_efield->end(); ++itdom){
+        for(std::vector<partDomain*>::iterator itdom=domainVector->begin(); itdom!=domainVector->end(); ++itdom){
           partDomain *dom = *itdom;
           if(dom->IsInterfaceTerms())
           { // otherwise the domain doesn't contain interface element
@@ -1006,17 +1068,6 @@ double IPField::getIPcompAndVolume(const partDomain *ef,MElement *ele, const IPS
   }
 }
 
-void IPField::resetUnknownField(unknownField *uf)
-{
-  _ufield = uf;
-  // reset archiving file if needed
-  if(_vBuildView->size() > 0)
-  {
-//    FILE *fp = fopen(this->fileName.c_str(),"w"); WHY ??
-    this->createFile();
-  }
-}
-
 void IPField::setFactorOnArchivingFiles(const int fact)
 {
   for(int i=0;i<viparch.size();i++)
@@ -1046,11 +1097,6 @@ void IPField::closeFile()
     }
   };
 }
-void IPField::openArchivingFiles()
-{
-  for(int i=0;i<viparch.size();i++)
-    viparch[i].openFile();
-}
 
 void IPField::blockDamage(const IPStateBase::whichState ws, const bool fl){
   AllIPState::ipstateContainer& allMap =*(_AIPS->getAIPSContainer());
@@ -1081,4 +1127,11 @@ void IPField::checkCritialInterfaceIP(){
 		
 	}
 	
+};
+
+void IPField::resetFile(){
+	elementsField::resetFile();
+	for(int i=0;i<viparch.size();i++){
+    viparch[i].openFile();
+	}
 };
\ No newline at end of file
diff --git a/NonLinearSolver/internalPoints/ipField.h b/NonLinearSolver/internalPoints/ipField.h
index f6dd83845c6eb589bad003ed40c64127362ca20d..3164f3a8810641c04bd0a7916bc31626d89e1343 100644
--- a/NonLinearSolver/internalPoints/ipField.h
+++ b/NonLinearSolver/internalPoints/ipField.h
@@ -177,23 +177,19 @@ class IPField : public elementsField {
 
     };
   protected :
-    std::vector<partDomain*>* _efield;
-    dofManager<double> *_dm;
     AllIPState *_AIPS;
-    unknownField *_ufield;
     std::vector<ip2archive> viparch;
 		nonLinearMechSolver* _solver; // solver to which ipField belongs
 		int _numOfActiveDamageIPs;
 		int _numOfActiveDamageIPsReached;
 
  public :
-  IPField(nonLinearMechSolver* sl, std::vector<partDomain*> *ef,dofManager<double>* pa,
-          unknownField* uf, std::vector<ip2archive> &vaip,
+  IPField(nonLinearMechSolver* sl, std::vector<ip2archive> &vaip,
           const std::vector<dataBuildView> &dbview_,std::string filename = "stress.msh");
   void archive(const double time,const int step=1);
 
   AllIPState* getAips() const {return _AIPS;}
-	const std::vector<partDomain*>& getDomainVector() const {return *_efield;};
+	const std::vector<partDomain*>& getDomainVector() const;
 	
   virtual ~IPField(){delete _AIPS;}
   void compute1state(IPStateBase::whichState ws, bool stiff);
@@ -220,15 +216,11 @@ class IPField : public elementsField {
   // initial broken
   void initialBroken(GModel* pModel, std::vector<int> &vnumphys);
   void initialBroken(MElement *iele, materialLaw *mlaw);
-  // used in case of switch between scheme
-  void resetUnknownField(unknownField *uf);
   void setFactorOnArchivingFiles(const int fact);
 
   // close all files
-  void closeFile();
-  // open all files (used after switch between scheme otherwise open in constructor)
-  void openArchivingFiles();
-
+  virtual void closeFile();
+ 
   template<class T> void getIPv(const MElement *ele,const T** vipv, const IPStateBase::whichState ws= IPStateBase::current) const
   {
     AllIPState::ipstateElementContainer* vips = _AIPS->getIPstate(ele->getNum());
@@ -361,62 +353,16 @@ class IPField : public elementsField {
   double computeInterfaceIrreversibleEnergy(const IPStateBase::whichState ws) const;
 
   int computeFractureEnergy(MElement *ele,const dgPartDomain *dom,double* arrayEnergy, const IPStateBase::whichState ws) const;
-  int computeFractureEnergy(double * arrayEnergy,const IPStateBase::whichState ws) const
-  {
-    static double tmpArray[10];
-    int maxcomp = 0;
-    for(int i=0;i<10;i++){
-      arrayEnergy[i]=0.;
-      tmpArray[i]=0.;
-    }
-    for(std::vector<partDomain*>::const_iterator itdom=_efield->begin(); itdom!=_efield->end(); ++itdom){
-      const partDomain *dom = *itdom;
-      if(dom->IsInterfaceTerms()) // otherwise no fracture
-      {
-        const dgPartDomain* dgdom = static_cast<const dgPartDomain*>(dom);
-        if((dgdom->getMaterialLawMinus()->getType() == materialLaw::fracture) and (dgdom->getMaterialLawPlus()->getType() == materialLaw::fracture))//comment it to get H1 norm in the interface  e.g. LinearThermoMech
-        {
-          for(groupOfElements::elementContainer::const_iterator it=dgdom->gi->begin(); it!=dgdom->gi->end(); ++it)
-          {
-            MElement *ele = *it;
-           #if defined(HAVE_MPI)
-            if(Msg::GetCommSize()>1)
-            {
-              MInterfaceElement *iele = dynamic_cast<MInterfaceElement*>(ele);
-              if(iele->getElem(0)->getPartition()==0 or iele->getElem(0)->getPartition() == Msg::GetCommRank()+1) // if - element is ghost not computed to avoid to count twice the contribution
-              {
-                int ncomp = this->computeFractureEnergy(ele,dgdom,tmpArray,ws);
-                for(int i=0;i<ncomp;i++){
-                  arrayEnergy[i]+=tmpArray[i];
-                  tmpArray[i]=0.;
-                }
-                if(ncomp>maxcomp)
-                  maxcomp = ncomp;
-              }
-            }
-            else
-           #endif // HAVE_MPI
-            {
-              int ncomp = this->computeFractureEnergy(ele,dgdom,tmpArray,ws);
-              for(int i=0;i<ncomp;i++){
-                arrayEnergy[i]+=tmpArray[i];
-                tmpArray[i]=0.;
-              }
-              if(ncomp>maxcomp)
-                maxcomp = ncomp;
-            }
-          }
-        }
-      }
-    }
-    return maxcomp;
-  }
+  int computeFractureEnergy(double * arrayEnergy,const IPStateBase::whichState ws) const;
+	
   // store all IPVariable values
   virtual void restart();
   // block damage of problem
   virtual void blockDamage(const IPStateBase::whichState ws, const bool fl);
 	
 	virtual void checkCritialInterfaceIP();
+	
+	virtual void resetFile();
 #endif // swig
 };
 #endif // IPField
diff --git a/NonLinearSolver/internalPoints/ipTransverseIsoCurvature.cpp b/NonLinearSolver/internalPoints/ipTransverseIsoCurvature.cpp
index 1c8de0707b9d95b7b567b1190ca9689bd3764398..64d9505baae4ecbd2314a2e0c17682e3e5d8dbde 100644
--- a/NonLinearSolver/internalPoints/ipTransverseIsoCurvature.cpp
+++ b/NonLinearSolver/internalPoints/ipTransverseIsoCurvature.cpp
@@ -44,5 +44,6 @@ IPTransverseIsoCurvature::IPTransverseIsoCurvature(const SVector3 &GaussP, const
     N_local.normalize();
     _A = Proj_A + tan(init_Angle*3.14159/180.)*N_local;
   }
+  _A.normalize();
 }
 
diff --git a/NonLinearSolver/materialLaw/mlaw.h b/NonLinearSolver/materialLaw/mlaw.h
index 0b15aa6d0918e10ad9fdafe6062c3aaab6c87470..6f2c67960cd170b9a76cfc661c49ad07075e0561 100644
--- a/NonLinearSolver/materialLaw/mlaw.h
+++ b/NonLinearSolver/materialLaw/mlaw.h
@@ -68,7 +68,7 @@ class materialLaw{
   virtual double getExtraDofStoredEnergyPerUnitField(double T) const {return 0.;}
   virtual double getCharacteristicLength() const {return 0.;};
 	
-	virtual void setSolver(nonLinearMechSolver* sv){_solver = sv;};
+	virtual void setSolver(const nonLinearMechSolver* sv){_solver = sv;};
 	virtual const nonLinearMechSolver* getSolver() const {return _solver;};
  
   virtual bool withDamage() const {return false;};
diff --git a/NonLinearSolver/materialLaw/mlawAnIsotropicTherMech.cpp b/NonLinearSolver/materialLaw/mlawAnIsotropicTherMech.cpp
index 604d08d3da46b5aad8603be5d41b2af09194b4d7..7db2a689686ac7039582046b67ff50a79a4526db 100644
--- a/NonLinearSolver/materialLaw/mlawAnIsotropicTherMech.cpp
+++ b/NonLinearSolver/materialLaw/mlawAnIsotropicTherMech.cpp
@@ -156,6 +156,7 @@ void mlawAnIsotropicTherMech::constitutive(
   mlawTransverseIsotropic::constitutive( F0, Fn,P,(const IPTransverseIsotropic *)q0, (IPTransverseIsotropic *)q1,Tangent,stiff) ;
   SVector3 A;
   getTransverseDirection( A, q0);
+  A.normalize();
 
   static STensor3 C;
   C*=0.;
diff --git a/NonLinearSolver/materialLaw/mlawSMP.cpp b/NonLinearSolver/materialLaw/mlawSMP.cpp
index 831ac38a63095ff8be2c889263888b0d4edfec3e..b51929f3d912fec3cc31c8296c5a9e95990b523b 100644
--- a/NonLinearSolver/materialLaw/mlawSMP.cpp
+++ b/NonLinearSolver/materialLaw/mlawSMP.cpp
@@ -2156,16 +2156,16 @@ void mlawSMP::tangent2(STensor43 &Tangent2,/*STensor43 &dFp2invdF,*/ const STens
 			      Tangent2(i,A,j,C)-=Fn(i,W)*Fp2inv(W,D)*2./3.* SP2(D,B)*Fninv(C,j)*Fp2inv(A,B);
 			      }}}}}}} 
 			      
-	 	 for( int i=0; i<3; i++){
-		  for( int A=0; A<3; A++){
-		    for( int j=0; j<3; j++){
-		      for( int C=0; C<3; C++){
-			for( int W=0; W<3; W++){
-			  for( int B=0; B<3; B++){
-			    for( int D=0; D<3; D++){
-			      Tangent2(i,A,j,C)-=Fn(i,W)*Fp2inv(W,D)*2.*tracCebar2/(3.*_Im2)* (1./(1.-((tracCebar2-3.)/_Im2)))
-			      *SP2(D,B)*Fninv(C,j)*Fp2inv(A,B);
-			      }}}}}}} 
+	 	 //for( int i=0; i<3; i++){
+		  //for( int A=0; A<3; A++){
+		   // for( int j=0; j<3; j++){
+		    //  for( int C=0; C<3; C++){
+		//	for( int W=0; W<3; W++){
+		//	  for( int B=0; B<3; B++){
+		//	    for( int D=0; D<3; D++){
+		//	      Tangent2(i,A,j,C)-=Fn(i,W)*Fp2inv(W,D)*2.*tracCebar2/(3.*_Im2)* (1./(1.-((tracCebar2-3.)/_Im2)))
+		//	      *SP2(D,B)*Fninv(C,j)*Fp2inv(A,B);
+		//	      }}}}}}} 
 			      
 	     }
 	     else
diff --git a/NonLinearSolver/materialLaw/mlawTransverseIsotropic.cpp b/NonLinearSolver/materialLaw/mlawTransverseIsotropic.cpp
index 0464d5d389631ce5d9b16e5466d51a66b59d5183..b4125a808f70123204d3f30bd1aea35865863fb7 100644
--- a/NonLinearSolver/materialLaw/mlawTransverseIsotropic.cpp
+++ b/NonLinearSolver/materialLaw/mlawTransverseIsotropic.cpp
@@ -88,6 +88,7 @@ void mlawTransverseIsotropic::constitutive(const STensor3& F0,const STensor3& Fn
 
   static SVector3 A;
   getTransverseDirection( A, q0);
+  A.normalize();
 
   /* compute gradient of deformation */
   double Jac= (Fn(0,0) * (Fn(1,1) * Fn(2,2) - Fn(1,2) * Fn(2,1)) -
diff --git a/NonLinearSolver/nlsolver/CMakeLists.txt b/NonLinearSolver/nlsolver/CMakeLists.txt
index 26a8769ebc42176f39253a3aa8ea2162d88f0320..99e39cfb119fbb3d76bab3744e4f330aed2c498f 100644
--- a/NonLinearSolver/nlsolver/CMakeLists.txt
+++ b/NonLinearSolver/nlsolver/CMakeLists.txt
@@ -22,7 +22,8 @@ set(SRC
   currentConfig.h
   nonLinearSystems.h
   dofManagerMultiSystems.h 
-  imperfectionToMesh.cpp 
+  imperfectionToMesh.cpp
+  homogenizedData.cpp
 )
 
 file(GLOB HDR RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h) 
diff --git a/NonLinearSolver/nlsolver/homogenizedData.cpp b/NonLinearSolver/nlsolver/homogenizedData.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b735846c7d8f5223be50f48cf20df3d13e59bbf1
--- /dev/null
+++ b/NonLinearSolver/nlsolver/homogenizedData.cpp
@@ -0,0 +1,554 @@
+//
+//
+// Description: store homogenized data
+//
+// Author:  <Van Dung NGUYEN>, (C) 2013
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#include "homogenizedData.h"
+#include "nonLinearMechSolver.h"
+
+homogenizedData::homogenizedData(const nonLinearMechSolver* solver, const bool failureExtr, const bool irrEnergExtract): _isBroken(false),deformationEnergy(0.),plasticEnergy(0.),
+irreversibleEnergyExtraction(irrEnergExtract), cohesiveLawExtraction(failureExtr),irreversibleEnergy(0.){
+	int numMecaDof = solver->getMicroBC()->getTotalNumberOfMechanicalDofs();
+	int numConDof = solver->getMicroBC()->getTotalNumberOfConDofs();
+	int numNonConDof = solver->getMicroBC()->getTotalNumberOfNonConDofs();
+	
+	if (numMecaDof > 0){
+		for (int i=0; i< numConDof; i++){
+			dPdgradT.push_back(STensor33(0.));
+			dPdT.push_back(STensor3(0.));
+			if (solver->getMicroBC()->getOrder() == 2){
+				dQdgradT.push_back(STensor43(0.));
+				dQdT.push_back(STensor33(0.));
+			}
+			if (cohesiveLawExtraction){
+				dCohesivejumpdgradT.push_back(STensor3(0.));
+				dCohesivejumpdT.push_back(SVector3(0.));
+				
+				dFdamdgradT.push_back(STensor33(0.));
+				dFdamdT.push_back(STensor3(0.));
+			}
+			
+			if (irreversibleEnergyExtraction){
+				dIrreversibleEnergydgradT.push_back(SVector3(0.));
+				dIrreversibleEnergydT.push_back(0.);
+			}
+			
+		}
+		for (int i=0; i< numNonConDof; i++){
+			dPdgradV.push_back(STensor33(0.));
+			if (solver->getMicroBC()->getOrder() == 2){
+				dQdgradV.push_back(STensor43(0.));
+			}
+			if (cohesiveLawExtraction){
+				dCohesivejumpdgradV.push_back(STensor3(0.));
+				dFdamdgradV.push_back(STensor33(0.));
+			}
+			
+			if (irreversibleEnergyExtraction){
+				dIrreversibleEnergydgradV.push_back(SVector3(0.));
+			}
+		}
+	}
+	
+	if (numConDof > 0){
+		for (int index=0; index< numConDof; index++){
+			fluxT.push_back(SVector3(0.));
+			eT.push_back(0.);
+			srcT.push_back(0.);
+			Cp.push_back(0.);
+			
+			if (numMecaDof > 0){
+				dfluxTdF.push_back(STensor33(0.));
+				dsrcTdF.push_back(STensor3(0.));
+				
+				if (solver->getMicroBC()->getOrder() == 2){
+					dfluxTdG.push_back(STensor43(0.));
+					dsrcTdG.push_back(STensor33(0.));
+				}
+			}
+			
+			std::vector<STensor3> vecSTensor3;
+			std::vector<SVector3> vecSVector3;
+			std::vector<double> vecValue;
+			for (int fieldIndex=0; fieldIndex< numConDof; fieldIndex++){
+				vecSTensor3.push_back(STensor3(0.));
+				vecSVector3.push_back(SVector3(0.));
+				vecValue.push_back(0.);
+			}
+			dfluxTdgradT.push_back(vecSTensor3);
+			dfluxTdT.push_back(vecSVector3);
+			dsrcTdgradT.push_back(vecSVector3);
+			dsrcTdT.push_back(vecValue);
+			
+			if (numNonConDof > 0){
+				vecSTensor3.clear();
+				vecSVector3.clear();
+				for (int fieldIndex=0; fieldIndex< numNonConDof; fieldIndex++){
+					vecSTensor3.push_back(STensor3(0.));
+					vecSVector3.push_back(SVector3(0.));
+				};
+				dfluxTdgradV.push_back(vecSTensor3);
+				dsrcTdgradV.push_back(vecSVector3);
+				
+			}
+		}
+		
+	}
+	
+	if (numNonConDof > 0){
+		for (int index=0; index< numNonConDof; index++){
+			fluxV.push_back(SVector3(0.));
+			if (numMecaDof > 0){
+				dfluxVdF.push_back(STensor33(0.));
+				if (solver->getMicroBC()->getOrder() == 2){
+					dfluxVdG.push_back(STensor43(0.));
+				}
+			}
+			if (numConDof > 0){
+				std::vector<STensor3> vecSTensor3;
+				std::vector<SVector3> vecSVector3;
+				for (int fieldIndex = 0; fieldIndex < numConDof; fieldIndex++){
+					vecSTensor3.push_back(STensor3(0.));
+					vecSVector3.push_back(SVector3(0.));
+				}
+				dfluxVdgradT.push_back(vecSTensor3);
+				dfluxVdT.push_back(vecSVector3);
+			}
+			std::vector<STensor3> vecSTensor3;
+			for (int fieldIndex = 0; fieldIndex < numNonConDof; fieldIndex++){
+				vecSTensor3.push_back(STensor3(0.));
+			}
+			dfluxVdgradV.push_back(vecSTensor3);
+		}
+	}
+};
+homogenizedData::homogenizedData(const homogenizedData& src):
+P(src.P),Q(src.Q),fluxT(src.fluxT),eT(src.eT),srcT(src.srcT),Cp(src.Cp),fluxV(src.fluxV),
+dPdF(src.dPdF),dPdG(src.dPdG),dPdgradT(src.dPdgradT),dPdT(src.dPdT),dPdgradV(src.dPdgradV),
+dQdF(src.dQdF),dQdG(src.dQdG),dQdgradT(src.dQdgradT),dQdT(src.dQdT),dQdgradV(src.dQdgradV),
+dfluxTdF(src.dfluxTdF),dfluxTdG(src.dfluxTdG),dfluxTdgradT(src.dfluxTdgradT),dfluxTdT(src.dfluxTdT),dfluxTdgradV(src.dfluxTdgradV),
+dfluxVdF(src.dfluxVdF),dfluxVdG(src.dfluxVdG),dfluxVdgradT(src.dfluxVdgradT),dfluxVdT(src.dfluxVdT),dfluxVdgradV(src.dfluxVdgradV),
+dsrcTdF(src.dsrcTdF),dsrcTdG(src.dsrcTdG),dsrcTdgradT(src.dsrcTdgradT),dsrcTdT(src.dsrcTdT),dsrcTdgradV(src.dsrcTdgradV),
+_cohesiveJump(src._cohesiveJump),_cohesiveTraction(src._cohesiveTraction),_lostSolutionUniquenssCriterion(src._lostSolutionUniquenssCriterion),
+_isBroken(src._isBroken),_damageVolume(src._damageVolume),_Fdam(src._Fdam),_stressDam(src._stressDam),
+_averageCohesiveBandWidth(src._averageCohesiveBandWidth),_DamageActiveZone(src._DamageActiveZone),
+dCohesivejumpdF(src.dCohesivejumpdF),dCohesivejumpdG(src.dCohesivejumpdG),dCohesivejumpdgradT(src.dCohesivejumpdgradT),
+dCohesivejumpdT(src.dCohesivejumpdT),dCohesivejumpdgradV(src.dCohesivejumpdgradV),
+dFdamdF(src.dFdamdF),dFdamdG(src.dFdamdG),dFdamdgradT(src.dFdamdgradT),dFdamdT(src.dFdamdT),dFdamdgradV(src.dFdamdgradV),
+deformationEnergy(src.deformationEnergy),plasticEnergy(src.plasticEnergy),irreversibleEnergy(src.irreversibleEnergy),
+dIrreversibleEnergydF(src.dIrreversibleEnergydF), dIrreversibleEnergydG(src.dIrreversibleEnergydG),
+dIrreversibleEnergydgradT(src.dIrreversibleEnergydgradT),dIrreversibleEnergydT(src.dIrreversibleEnergydT),
+dIrreversibleEnergydgradV(src.dIrreversibleEnergydgradV),irreversibleEnergyExtraction(src.irreversibleEnergyExtraction),
+cohesiveLawExtraction(src.cohesiveLawExtraction)
+{};
+homogenizedData& homogenizedData::operator = (const homogenizedData& src){
+	P = src.P;
+	Q = src.Q;
+	fluxT = src.fluxT;
+	eT = src.eT;
+	srcT = src.srcT;
+	Cp = src.Cp;
+	fluxV = src.fluxV;
+	dPdF = src.dPdF;
+	dPdG = src.dPdG;
+	dPdgradT = src.dPdgradT;
+	dPdT = src.dPdT;
+	dPdgradV = src.dPdgradV;
+	dQdF = src.dQdF;
+	dQdG =src.dQdG;
+	dQdgradT = src.dQdgradT;
+	dQdT = src.dQdT;
+	dQdgradV = src.dQdgradV;
+	dfluxTdF = src.dfluxTdF;
+	dfluxTdG = src.dfluxTdG;
+	dfluxTdgradT = src.dfluxTdgradT;
+	dfluxTdT = src.dfluxTdT;
+	dfluxTdgradV = src.dfluxTdgradV;
+	dfluxVdF = src.dfluxVdF;
+	dfluxVdG = src.dfluxVdG;
+	dfluxVdgradT = src.dfluxVdgradT;
+	dfluxVdT = src.dfluxVdT;
+	dfluxVdgradV = src.dfluxVdgradV;
+	dsrcTdF = src.dsrcTdF;
+	dsrcTdG = src.dsrcTdG;
+	dsrcTdgradT = src.dsrcTdgradT;
+	dsrcTdT = src.dsrcTdT;
+	dsrcTdgradV = src.dsrcTdgradV;
+	_cohesiveJump = src._cohesiveJump;
+	_cohesiveTraction = src._cohesiveTraction;
+	_lostSolutionUniquenssCriterion = src._lostSolutionUniquenssCriterion;
+	_isBroken = src._isBroken;
+	_damageVolume = src._damageVolume;
+	_Fdam = src._Fdam;
+	_stressDam = src._stressDam;
+	_averageCohesiveBandWidth = src._averageCohesiveBandWidth;
+	_DamageActiveZone = src._DamageActiveZone;
+	dCohesivejumpdF = src.dCohesivejumpdF;
+	dCohesivejumpdG = src.dCohesivejumpdG;
+	dCohesivejumpdgradT = src.dCohesivejumpdgradT;
+	dCohesivejumpdT = src.dCohesivejumpdT;
+	dCohesivejumpdgradV = src.dCohesivejumpdgradV;
+	dFdamdF = src.dFdamdF;
+	dFdamdG = src.dFdamdG;
+	dFdamdgradT = src.dFdamdgradT;
+	dFdamdT = src.dFdamdT;
+	dFdamdgradV = src.dFdamdgradV;
+	deformationEnergy = src.deformationEnergy;
+	plasticEnergy = src.plasticEnergy;
+	irreversibleEnergy = src.irreversibleEnergy;
+	dIrreversibleEnergydF = src.dIrreversibleEnergydF;
+	dIrreversibleEnergydG = src.dIrreversibleEnergydG;
+	dIrreversibleEnergydgradT = src.dIrreversibleEnergydgradT;
+	dIrreversibleEnergydT = src.dIrreversibleEnergydT;
+	dIrreversibleEnergydgradV = src.dIrreversibleEnergydgradV;
+	
+	irreversibleEnergyExtraction = src.irreversibleEnergyExtraction;
+	cohesiveLawExtraction = src.cohesiveLawExtraction;
+	return *this;
+};
+
+void allFirstOrderMechanicsFiles::openFiles(const int elnum, const int gnum, const nonLinearMechSolver* solver,const bool strainToFile, const bool stressToFile, const bool failureToFile){
+	if (strainToFile){
+		std::string filename  = "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_strain.csv";
+		F_File = Tensor23::createFile(filename);
+	}
+	if (stressToFile){
+		std::string filename =  "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_stress.csv";
+		P_File= Tensor23::createFile(filename);
+
+		filename = "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_tangent.csv";
+		dPdF_File = Tensor43::createFile(filename);
+		
+		filename = "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_defoEnergy.csv";
+		defoEnerg_File = Tensor11::createFile(filename);
+		
+		filename = "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_plasticEnergy.csv";
+		plasticEnerg_File = Tensor11::createFile(filename);
+		
+		filename = "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_irreversibleEnergy.csv";
+		irreversibleEnergFile =Tensor11::createFile(filename);
+		
+		filename = "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_lostSolutionUniquenssCriterion.csv";
+		lostSolutionUniquenssCriterion_File = Tensor11::createFile(filename);
+	}
+};
+void allFirstOrderMechanicsFiles::dataToFile(const double time, const nonLinearMechSolver* solver, const homogenizedData* data){
+	if (F_File!=NULL){
+		Tensor23::writeData(F_File,solver->getMicroBC()->getFirstOrderKinematicalVariable(),time);
+	}
+	if (P_File !=NULL){
+		Tensor23::writeData(P_File,data->getHomogenizedStress(),time);
+	}
+	if (dPdF_File !=NULL){
+		Tensor43::writeData(dPdF_File,data->getHomogenizedTangentOperator_F_F(),time);
+	}
+	if (defoEnerg_File != NULL){
+		Tensor11::writeData(defoEnerg_File,data->getDeformationEnergy(),time);
+	}
+	if (plasticEnerg_File !=NULL){
+		Tensor11::writeData(plasticEnerg_File,data->getPlasticEnergy(),time);
+	}
+	if (irreversibleEnergFile!=NULL){
+		Tensor11::writeData(irreversibleEnergFile,data->getIrreversibleEnergy(),time);
+	}
+	if (lostSolutionUniquenssCriterion_File!=NULL){
+		Tensor11::writeData(lostSolutionUniquenssCriterion_File,data->getLostOfSolutionUniquenessCriterion(),time);
+	};
+}
+
+void allFailureFiles::openFiles(const int _enum, const int _gnum, const nonLinearMechSolver* solver,const bool strainToFile, const bool stressToFile, const bool failureToFile){
+	if (failureToFile){
+		std::string filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_cohesiveJump.csv";
+		cohesiveJump_File = Tensor13::createFile(filename);
+		
+		filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_damageVolume.csv";
+		damageVolume_File = Tensor11::createFile(filename);
+
+		filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_cohesiveTraction.csv";
+		cohesiveTraction_File = Tensor13::createFile(filename);
+
+		filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_averageCohesiveBandWidth.csv";
+		averageCohesiveBandWidth_File = Tensor11::createFile(filename);
+		
+		filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_Fdam.csv";
+		FDam_File = Tensor11::createFile(filename);
+
+		filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_DamageActiveZone.csv";
+		DamageActiveZone_File = Tensor11::createFile(filename);
+		
+		filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_tangentCohesiveJumpDF.csv";
+		dCohesiveJumpDF_File = Tensor33::createFile(filename);
+	}
+};
+void allFailureFiles::dataToFile(const double time, const nonLinearMechSolver* solver, const homogenizedData* data){
+	if (cohesiveJump_File!=NULL){
+		Tensor13::writeData(cohesiveJump_File,data->getHomogenizedCohesiveJump(),time);
+	};
+	
+	if (damageVolume_File!=NULL){
+		Tensor11::writeData(damageVolume_File,data->getActiveDamageVolume(),time);
+	};
+	if (cohesiveTraction_File!=NULL){
+		Tensor13::writeData(cohesiveTraction_File,data->getHomogenizedCohesiveTraction(),time);
+	};
+	if (averageCohesiveBandWidth_File!=NULL) {
+		Tensor11::writeData(averageCohesiveBandWidth_File,data->getAverageLocalizationBandWidth(),time);
+	};
+	if (FDam_File != NULL){
+		Tensor23::writeData(FDam_File,data->getHomogenizedActiveDamageDeformationGradient(),time);
+	}
+	if (DamageActiveZone_File!=NULL){
+		Tensor11::writeData(DamageActiveZone_File,data->getActiveDamage(),time);
+	};
+	if (dCohesiveJumpDF_File!=NULL){
+		Tensor33::writeData(dCohesiveJumpDF_File,data->getHomogenizedTangentOperator_CohesiveJump_F(),time);
+	}
+};
+
+void allSecondOrderMechanicsFiles::openFiles(const int elnum, const int gnum, const nonLinearMechSolver* solver,const bool strainToFile, const bool stressToFile, const bool failureToFile){
+	if (strainToFile){
+		std::string filename = "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_second_strain.csv";
+		G_File = Tensor33::createFile(filename);
+	}
+	
+	if (stressToFile){
+		std::string filename = "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_second_stress.csv";
+		Q_File = Tensor33::createFile(filename);
+
+		filename = "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_firstsecond_tangent.csv";
+		dPdG_File = Tensor53::createFile(filename);
+
+		filename = "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_secondfirst_tangent.csv";
+		dQdF_File = Tensor53::createFile(filename);
+
+		filename = "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_second_tangent.csv";
+		dQdG_File = Tensor63::createFile(filename);
+	}
+};
+
+void allSecondOrderMechanicsFiles::dataToFile(const double time, const nonLinearMechSolver* solver, const homogenizedData* data){
+	if (G_File!=NULL){
+		Tensor33::writeData(G_File,solver->getMicroBC()->getSecondOrderKinematicalVariable(),time);
+	}
+	if (Q_File!=NULL){
+		Tensor33::writeData(Q_File,data->getHomogenizedSecondOrderStress(),time);
+	}
+	if (dPdG_File!=NULL){
+		Tensor53::writeData(dPdG_File,data->getHomogenizedTangentOperator_F_G(),time);
+	}
+	if (dQdF_File!=NULL){
+		Tensor53::writeData(dQdF_File,data->getHomogenizedTangentOperator_G_F(),time);
+	}
+	if (dQdG_File!=NULL){
+		Tensor63::writeData(dQdF_File,data->getHomogenizedTangentOperator_G_G(),time);
+	}
+};
+
+void allConExtraDofFiles::openFiles(const int _enum, const int _gnum, const nonLinearMechSolver* solver,const bool strainToFile, const bool stressToFile, const bool failureToFile){
+	if (solver->getMicroBC()->getTotalNumberOfConDofs() > 1){
+		if (strainToFile){
+			std::string filename  = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_gradExtraDof_"+int2str(fieldIndex)+".csv";
+			gradT_File = Tensor13::createFile(filename);
+			
+			filename  = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_ExtraDofValue_"+int2str(fieldIndex)+".csv";
+			T_File = Tensor11::createFile(filename);
+		};
+		if (stressToFile){
+			std::string filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_ExtraDofFlux_"+int2str(fieldIndex)+".csv";
+			fluxT_File = Tensor13::createFile(filename);
+			
+			filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_InternalEnergyExtraDof_"+int2str(fieldIndex)+".csv";
+			eT_File = Tensor11::createFile(filename);
+			
+			filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentFluxF_"+int2str(fieldIndex)+".csv";
+			dFluxTdF_File = Tensor33::createFile(filename);
+			
+			filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentFluxGradExtraDof_"+int2str(fieldIndex)+".csv";
+			dFluxTdGradT_File = Tensor23::createFile(filename);
+			
+			filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentFluxExtraDof_"+int2str(fieldIndex)+".csv";
+			dFluxTdT_File = Tensor13::createFile(filename);
+			
+			filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentStressGradExtraDof_"+int2str(fieldIndex)+".csv";
+			dPdGradT_File = Tensor33::createFile(filename);
+			
+			filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentStressExtraDofValue_"+int2str(fieldIndex)+".csv";
+			dPdT_File = Tensor23::createFile(filename);
+
+			filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_mechanicalSource_"+int2str(fieldIndex)+".csv";
+			mecaSource_File = Tensor11::createFile(filename);
+			
+			filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_fieldCapacity_"+int2str(fieldIndex)+".csv";
+			Cp_File = Tensor11::createFile(filename);
+		}
+	}
+	else if (solver->getMicroBC()->getTotalNumberOfConDofs() == 1){
+		if (strainToFile){
+			std::string filename  = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_gradExtraDof.csv";
+			gradT_File = Tensor13::createFile(filename);
+			
+			filename  = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_ExtraDofValue.csv";
+			T_File = Tensor11::createFile(filename);
+		};
+		if (stressToFile){
+			std::string filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_ExtraDofFlux.csv";
+			fluxT_File = Tensor13::createFile(filename);
+			
+			filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_InternalEnergyExtraDof.csv";
+			eT_File = Tensor11::createFile(filename);
+			
+			filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentFluxF.csv";
+			dFluxTdF_File = Tensor33::createFile(filename);
+			
+			filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentFluxGradExtraDof.csv";
+			dFluxTdGradT_File = Tensor23::createFile(filename);
+			
+			filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentFluxExtraDof.csv";
+			dFluxTdT_File = Tensor13::createFile(filename);
+			
+			filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentStressGradExtraDof.csv";
+			dPdGradT_File = Tensor33::createFile(filename);
+			
+			filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentStressExtraDofValue.csv";
+			dPdT_File = Tensor23::createFile(filename);
+
+			filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_mechanicalSource.csv";
+			mecaSource_File = Tensor11::createFile(filename);
+			
+			filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_fieldCapacity.csv";
+			Cp_File = Tensor11::createFile(filename);
+		}
+	}
+};
+void allConExtraDofFiles::dataToFile(const double time, const nonLinearMechSolver* solver, const homogenizedData* data){
+	if (gradT_File !=NULL){
+		Tensor13::writeData(gradT_File,solver->getMicroBC()->getConstitutiveExtraDofDiffusionKinematicalVariable(fieldIndex),time);
+	};
+	if (T_File!=NULL){
+		Tensor11::writeData(T_File,solver->getMicroBC()->getConstitutiveExtraDofDiffusionConstantVariable(fieldIndex),time);
+	};
+	if (fluxT_File!=NULL){
+		Tensor13::writeData(fluxT_File,data->getHomogenizedConstitutiveExtraDofFlux(fieldIndex),time);
+	};
+	if (eT_File!=NULL){
+		Tensor11::writeData(eT_File,data->getHomogenizedConstitutiveExtraDofInternalEnergy(fieldIndex),time);
+	};
+	if (dFluxTdGradT_File!=NULL){
+		Tensor23::writeData(dFluxTdGradT_File,data->getHomogenizedTangentOperator_gradT_gradT(fieldIndex,fieldIndex),time);
+	}
+	if (dFluxTdT_File!=NULL) {
+		Tensor13::writeData(dFluxTdT_File,data->getHomogenizedTangentOperator_gradT_T(fieldIndex,fieldIndex),time);
+	};
+	if (dPdGradT_File!=NULL) {
+		Tensor33::writeData(dPdGradT_File,data->getHomogenizedTangentOperator_F_gradT(fieldIndex),time);
+	};
+	if (dFluxTdF_File!=NULL) {
+		Tensor33::writeData(dFluxTdF_File,data->getHomogenizedTangentOperator_gradT_F(fieldIndex),time);
+	};
+	if (dPdT_File !=NULL){
+		Tensor23::writeData(dPdT_File,data->getHomogenizedTangentOperator_F_T(fieldIndex),time);
+	};
+	if (mecaSource_File!=NULL){
+		Tensor11::writeData(mecaSource_File,data->getHomogenizedConstitutiveExtraDofMechanicalSource(fieldIndex),time);
+	}
+	if (Cp_File!=NULL){
+		Tensor11::writeData(Cp_File,data->getHomogenizedConstitutiveExtraDofFieldCapacityPerUnitField(fieldIndex),time);
+	}
+};
+
+void allNonConExtraDofFiles::openFiles(const int _enum, const int _gnum, const nonLinearMechSolver* solver, const bool strainToFile, const bool stressToFile, const bool failureToFile){
+	if (solver->getMicroBC()->getTotalNumberOfNonConDofs() > 1){
+		if (strainToFile){
+			std::string filename  = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_gradNonConExtraDof_"+int2str(fieldIndex)+".csv";
+			gradV_File = Tensor13::createFile(filename);			
+		};
+		if (stressToFile){
+			std::string filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_NonConExtraDofFlux_"+int2str(fieldIndex)+".csv";
+			fluxV_File = Tensor13::createFile(filename);
+			
+			filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentNonConFluxGradNonConExtraDof_"+int2str(fieldIndex)+".csv";
+			dfluxVdgradV_File = Tensor23::createFile(filename);
+		}
+		
+	}
+	else if (solver->getMicroBC()->getTotalNumberOfNonConDofs() == 1){
+		if (strainToFile){
+			std::string filename  = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_gradNonConExtraDof.csv";
+			gradV_File = Tensor13::createFile(filename);			
+		};
+		if (stressToFile){
+			std::string filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_NonConExtraDofFlux.csv";
+			fluxV_File = Tensor13::createFile(filename);
+			
+			filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentNonConFluxGradNonConExtraDof.csv";
+			dfluxVdgradV_File = Tensor23::createFile(filename);
+		}
+		
+
+	}
+};
+
+void allNonConExtraDofFiles::dataToFile(const double time, const nonLinearMechSolver* solver, const homogenizedData* data){
+	if (gradV_File!=NULL){
+		Tensor13::writeData(gradV_File,solver->getMicroBC()->getNonConstitutiveExtraDofDiffusionKinematicalVariable(fieldIndex),time);
+	};
+	if (fluxV_File!=NULL){
+		Tensor13::writeData(fluxV_File,data->getHomogenizedNonConstitutiveExtraDofFlux(fieldIndex),time);
+	};
+	if (dfluxVdgradV_File!=NULL){
+		Tensor23::writeData(dfluxVdgradV_File,data->getHomogenizedTangentOperator_gradV_gradV(fieldIndex,fieldIndex),time);
+	};
+};
+
+
+homogenizedDataFiles::homogenizedDataFiles(const nonLinearMechSolver* solver): _allFirstOrderFiles(), _allSecondOrderFiles(),_allFailureFiles(){
+	for (int index=0; index< solver->getMicroBC()->getTotalNumberOfConDofs(); index++){
+		_allConFiles.push_back(allConExtraDofFiles(index));
+	}
+	for (int index=0; index< solver->getMicroBC()->getTotalNumberOfNonConDofs(); index++){
+		_allNonConFiles.push_back(allNonConExtraDofFiles(index));
+	}
+	
+};
+
+void homogenizedDataFiles::openFiles(const int elnum, const int gnum, const nonLinearMechSolver* solver,
+                  const bool strainToFile, const bool stressToFile, const bool failureToFile){
+	if (solver->getMicroBC()->getTotalNumberOfMechanicalDofs()>0){
+		_allFirstOrderFiles.openFiles(elnum,gnum,solver,strainToFile,stressToFile,failureToFile);
+		if (solver->getMicroBC()->getOrder()==2){
+			_allSecondOrderFiles.openFiles(elnum,gnum,solver,strainToFile,stressToFile,failureToFile);
+		}
+		if (failureToFile){
+			_allFailureFiles.openFiles(elnum,gnum,solver,strainToFile,stressToFile,failureToFile);
+		}
+	}
+	if (solver->getMicroBC()->getTotalNumberOfConDofs()>0){
+		for (int index=0; index < solver->getMicroBC()->getTotalNumberOfConDofs(); index++){
+			_allConFiles[index].openFiles(elnum,gnum,solver,strainToFile,stressToFile,failureToFile);
+		}
+	}
+	if (solver->getMicroBC()->getTotalNumberOfNonConDofs()>0){
+		for (int index=0; index < solver->getMicroBC()->getTotalNumberOfNonConDofs(); index++){
+			_allNonConFiles[index].openFiles(elnum,gnum,solver,strainToFile,stressToFile,failureToFile);
+		}
+	}
+};
+
+void homogenizedDataFiles::dataToFile(const double time, const nonLinearMechSolver* solver, const homogenizedData* data){			
+	_allFirstOrderFiles.dataToFile(time,solver,data);
+	_allSecondOrderFiles.dataToFile(time,solver,data);
+	_allFailureFiles.dataToFile(time,solver,data);
+
+	for (int index=0; index <_allConFiles.size(); index++){
+		_allConFiles[index].dataToFile(time,solver,data);
+	}
+
+	for (int index=0; index < _allNonConFiles.size(); index++){
+		_allNonConFiles[index].dataToFile(time,solver,data);
+	}
+	
+};
\ No newline at end of file
diff --git a/NonLinearSolver/nlsolver/homogenizedData.h b/NonLinearSolver/nlsolver/homogenizedData.h
index e2b5bb791f018e3dfe1cf1d09c9936cadd6c3e51..ab108393f834f9ef7534f2891c272e81b5fe7020 100644
--- a/NonLinearSolver/nlsolver/homogenizedData.h
+++ b/NonLinearSolver/nlsolver/homogenizedData.h
@@ -27,6 +27,8 @@
 // P, Q, fluxT, fluxV, mecaSourceT
 // fieldCapacity, _internalEnergyExtraDof are assumed to be constant in current time step
 
+class nonLinearMechSolver;
+
 class homogenizedData {
 	friend class homogenizedDataFiles;
   private:
@@ -111,206 +113,9 @@ class homogenizedData {
 		std::vector<SVector3> dIrreversibleEnergydgradV;
 
   public:
-    homogenizedData(nonLinearMicroBC* mbc, const bool failureExtr, const bool irrEnergExtract): _isBroken(false),deformationEnergy(0.),plasticEnergy(0.),
-		irreversibleEnergyExtraction(irrEnergExtract), cohesiveLawExtraction(failureExtr),irreversibleEnergy(0.){
-			int numMecaDof = mbc->getTotalNumberOfMechanicalDofs();
-			int numConDof = mbc->getTotalNumberOfConDofs();
-			int numNonConDof = mbc->getTotalNumberOfNonConDofs();
-			
-			if (numMecaDof > 0){
-				for (int i=0; i< numConDof; i++){
-					dPdgradT.push_back(STensor33(0.));
-					dPdT.push_back(STensor3(0.));
-					if (mbc->getOrder() == 2){
-						dQdgradT.push_back(STensor43(0.));
-						dQdT.push_back(STensor33(0.));
-					}
-					if (cohesiveLawExtraction){
-						dCohesivejumpdgradT.push_back(STensor3(0.));
-						dCohesivejumpdT.push_back(SVector3(0.));
-						
-						dFdamdgradT.push_back(STensor33(0.));
-						dFdamdT.push_back(STensor3(0.));
-					}
-					
-					if (irreversibleEnergyExtraction){
-						dIrreversibleEnergydgradT.push_back(SVector3(0.));
-						dIrreversibleEnergydT.push_back(0.);
-					}
-					
-				}
-				for (int i=0; i< numNonConDof; i++){
-					dPdgradV.push_back(STensor33(0.));
-					if (mbc->getOrder() == 2){
-						dQdgradV.push_back(STensor43(0.));
-					}
-					if (cohesiveLawExtraction){
-						dCohesivejumpdgradV.push_back(STensor3(0.));
-						dFdamdgradV.push_back(STensor33(0.));
-					}
-					
-					if (irreversibleEnergyExtraction){
-						dIrreversibleEnergydgradV.push_back(SVector3(0.));
-					}
-				}
-			}
-			
-			if (numConDof > 0){
-				for (int index=0; index< numConDof; index++){
-					fluxT.push_back(SVector3(0.));
-					eT.push_back(0.);
-					srcT.push_back(0.);
-					Cp.push_back(0.);
-					
-					if (numMecaDof > 0){
-						dfluxTdF.push_back(STensor33(0.));
-						dsrcTdF.push_back(STensor3(0.));
-						
-						if (mbc->getOrder() == 2){
-							dfluxTdG.push_back(STensor43(0.));
-							dsrcTdG.push_back(STensor33(0.));
-						}
-					}
-					
-					std::vector<STensor3> vecSTensor3;
-					std::vector<SVector3> vecSVector3;
-					std::vector<double> vecValue;
-					for (int fieldIndex=0; fieldIndex< numConDof; fieldIndex++){
-						vecSTensor3.push_back(STensor3(0.));
-						vecSVector3.push_back(SVector3(0.));
-						vecValue.push_back(0.);
-					}
-					dfluxTdgradT.push_back(vecSTensor3);
-					dfluxTdT.push_back(vecSVector3);
-					dsrcTdgradT.push_back(vecSVector3);
-					dsrcTdT.push_back(vecValue);
-					
-					if (numNonConDof > 0){
-						vecSTensor3.clear();
-						vecSVector3.clear();
-						for (int fieldIndex=0; fieldIndex< numNonConDof; fieldIndex++){
-							vecSTensor3.push_back(STensor3(0.));
-							vecSVector3.push_back(SVector3(0.));
-						};
-						dfluxTdgradV.push_back(vecSTensor3);
-						dsrcTdgradV.push_back(vecSVector3);
-						
-					}
-				}
-				
-			}
-			
-			if (numNonConDof > 0){
-				for (int index=0; index< numNonConDof; index++){
-					fluxV.push_back(SVector3(0.));
-					if (numMecaDof > 0){
-						dfluxVdF.push_back(STensor33(0.));
-						if (mbc->getOrder() == 2){
-							dfluxVdG.push_back(STensor43(0.));
-						}
-					}
-					if (numConDof > 0){
-						std::vector<STensor3> vecSTensor3;
-						std::vector<SVector3> vecSVector3;
-						for (int fieldIndex = 0; fieldIndex < numConDof; fieldIndex++){
-							vecSTensor3.push_back(STensor3(0.));
-							vecSVector3.push_back(SVector3(0.));
-						}
-						dfluxVdgradT.push_back(vecSTensor3);
-						dfluxVdT.push_back(vecSVector3);
-					}
-					std::vector<STensor3> vecSTensor3;
-					for (int fieldIndex = 0; fieldIndex < numNonConDof; fieldIndex++){
-						vecSTensor3.push_back(STensor3(0.));
-					}
-					dfluxVdgradV.push_back(vecSTensor3);
-				}
-			}
-		};
-    homogenizedData(const homogenizedData& src):
-		P(src.P),Q(src.Q),fluxT(src.fluxT),eT(src.eT),srcT(src.srcT),Cp(src.Cp),fluxV(src.fluxV),
-		dPdF(src.dPdF),dPdG(src.dPdG),dPdgradT(src.dPdgradT),dPdT(src.dPdT),dPdgradV(src.dPdgradV),
-		dQdF(src.dQdF),dQdG(src.dQdG),dQdgradT(src.dQdgradT),dQdT(src.dQdT),dQdgradV(src.dQdgradV),
-		dfluxTdF(src.dfluxTdF),dfluxTdG(src.dfluxTdG),dfluxTdgradT(src.dfluxTdgradT),dfluxTdT(src.dfluxTdT),dfluxTdgradV(src.dfluxTdgradV),
-		dfluxVdF(src.dfluxVdF),dfluxVdG(src.dfluxVdG),dfluxVdgradT(src.dfluxVdgradT),dfluxVdT(src.dfluxVdT),dfluxVdgradV(src.dfluxVdgradV),
-		dsrcTdF(src.dsrcTdF),dsrcTdG(src.dsrcTdG),dsrcTdgradT(src.dsrcTdgradT),dsrcTdT(src.dsrcTdT),dsrcTdgradV(src.dsrcTdgradV),
-		_cohesiveJump(src._cohesiveJump),_cohesiveTraction(src._cohesiveTraction),_lostSolutionUniquenssCriterion(src._lostSolutionUniquenssCriterion),
-		_isBroken(src._isBroken),_damageVolume(src._damageVolume),_Fdam(src._Fdam),_stressDam(src._stressDam),
-		_averageCohesiveBandWidth(src._averageCohesiveBandWidth),_DamageActiveZone(src._DamageActiveZone),
-		dCohesivejumpdF(src.dCohesivejumpdF),dCohesivejumpdG(src.dCohesivejumpdG),dCohesivejumpdgradT(src.dCohesivejumpdgradT),
-		dCohesivejumpdT(src.dCohesivejumpdT),dCohesivejumpdgradV(src.dCohesivejumpdgradV),
-		dFdamdF(src.dFdamdF),dFdamdG(src.dFdamdG),dFdamdgradT(src.dFdamdgradT),dFdamdT(src.dFdamdT),dFdamdgradV(src.dFdamdgradV),
-		deformationEnergy(src.deformationEnergy),plasticEnergy(src.plasticEnergy),irreversibleEnergy(src.irreversibleEnergy),
-		dIrreversibleEnergydF(src.dIrreversibleEnergydF), dIrreversibleEnergydG(src.dIrreversibleEnergydG),
-		dIrreversibleEnergydgradT(src.dIrreversibleEnergydgradT),dIrreversibleEnergydT(src.dIrreversibleEnergydT),
-		dIrreversibleEnergydgradV(src.dIrreversibleEnergydgradV),irreversibleEnergyExtraction(src.irreversibleEnergyExtraction),
-		cohesiveLawExtraction(src.cohesiveLawExtraction)
-    {};
-    homogenizedData& operator = (const homogenizedData& src){
-			P = src.P;
-			Q = src.Q;
-			fluxT = src.fluxT;
-			eT = src.eT;
-			srcT = src.srcT;
-			Cp = src.Cp;
-			fluxV = src.fluxV;
-			dPdF = src.dPdF;
-			dPdG = src.dPdG;
-			dPdgradT = src.dPdgradT;
-			dPdT = src.dPdT;
-			dPdgradV = src.dPdgradV;
-			dQdF = src.dQdF;
-			dQdG =src.dQdG;
-			dQdgradT = src.dQdgradT;
-			dQdT = src.dQdT;
-			dQdgradV = src.dQdgradV;
-			dfluxTdF = src.dfluxTdF;
-			dfluxTdG = src.dfluxTdG;
-			dfluxTdgradT = src.dfluxTdgradT;
-			dfluxTdT = src.dfluxTdT;
-			dfluxTdgradV = src.dfluxTdgradV;
-			dfluxVdF = src.dfluxVdF;
-			dfluxVdG = src.dfluxVdG;
-			dfluxVdgradT = src.dfluxVdgradT;
-			dfluxVdT = src.dfluxVdT;
-			dfluxVdgradV = src.dfluxVdgradV;
-			dsrcTdF = src.dsrcTdF;
-			dsrcTdG = src.dsrcTdG;
-			dsrcTdgradT = src.dsrcTdgradT;
-			dsrcTdT = src.dsrcTdT;
-			dsrcTdgradV = src.dsrcTdgradV;
-			_cohesiveJump = src._cohesiveJump;
-			_cohesiveTraction = src._cohesiveTraction;
-			_lostSolutionUniquenssCriterion = src._lostSolutionUniquenssCriterion;
-			_isBroken = src._isBroken;
-			_damageVolume = src._damageVolume;
-			_Fdam = src._Fdam;
-			_stressDam = src._stressDam;
-			_averageCohesiveBandWidth = src._averageCohesiveBandWidth;
-			_DamageActiveZone = src._DamageActiveZone;
-			dCohesivejumpdF = src.dCohesivejumpdF;
-			dCohesivejumpdG = src.dCohesivejumpdG;
-			dCohesivejumpdgradT = src.dCohesivejumpdgradT;
-			dCohesivejumpdT = src.dCohesivejumpdT;
-			dCohesivejumpdgradV = src.dCohesivejumpdgradV;
-			dFdamdF = src.dFdamdF;
-			dFdamdG = src.dFdamdG;
-			dFdamdgradT = src.dFdamdgradT;
-			dFdamdT = src.dFdamdT;
-			dFdamdgradV = src.dFdamdgradV;
-			deformationEnergy = src.deformationEnergy;
-			plasticEnergy = src.plasticEnergy;
-			irreversibleEnergy = src.irreversibleEnergy;
-			dIrreversibleEnergydF = src.dIrreversibleEnergydF;
-			dIrreversibleEnergydG = src.dIrreversibleEnergydG;
-			dIrreversibleEnergydgradT = src.dIrreversibleEnergydgradT;
-			dIrreversibleEnergydT = src.dIrreversibleEnergydT;
-			dIrreversibleEnergydgradV = src.dIrreversibleEnergydgradV;
-			
-			irreversibleEnergyExtraction = src.irreversibleEnergyExtraction;
-			cohesiveLawExtraction = src.cohesiveLawExtraction;
-      return *this;
-    };
+    homogenizedData(const nonLinearMechSolver* solver, const bool failureExtr, const bool irrEnergExtract);
+    homogenizedData(const homogenizedData& src);
+    homogenizedData& operator = (const homogenizedData& src);
 		
 		bool getIrreversibleEnergyExtractionFlag() const {return irreversibleEnergyExtraction;};
 		bool getCohesiveLawExtractionFlag() const {return cohesiveLawExtraction;};
@@ -497,54 +302,8 @@ class allFirstOrderMechanicsFiles{
 	allFirstOrderMechanicsFiles():F_File(NULL),P_File(NULL),dPdF_File(NULL),defoEnerg_File(NULL),plasticEnerg_File(NULL),
 	irreversibleEnergFile(NULL),lostSolutionUniquenssCriterion_File(NULL){};
 	~allFirstOrderMechanicsFiles(){};
-	void openFiles(const int elnum, const int gnum, const nonLinearMicroBC* mbc,const bool strainToFile, const bool stressToFile, const bool failureToFile){
-		if (strainToFile){
-			std::string filename  = "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_strain.csv";
-			F_File = Tensor23::createFile(filename);
-		}
-		if (stressToFile){
-			std::string filename =  "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_stress.csv";
-			P_File= Tensor23::createFile(filename);
-
-			filename = "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_tangent.csv";
-      dPdF_File = Tensor43::createFile(filename);
-			
-			filename = "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_defoEnergy.csv";
-			defoEnerg_File = Tensor11::createFile(filename);
-			
-			filename = "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_plasticEnergy.csv";
-			plasticEnerg_File = Tensor11::createFile(filename);
-			
-			filename = "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_irreversibleEnergy.csv";
-			irreversibleEnergFile =Tensor11::createFile(filename);
-			
-			filename = "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_lostSolutionUniquenssCriterion.csv";
-			lostSolutionUniquenssCriterion_File = Tensor11::createFile(filename);
-		}
-	};
-	void dataToFile(const double time, const nonLinearMicroBC* mbc, const homogenizedData* data){
-		if (F_File!=NULL){
-			Tensor23::writeData(F_File,mbc->getFirstOrderKinematicalVariable(),time);
-		}
-		if (P_File !=NULL){
-			Tensor23::writeData(P_File,data->getHomogenizedStress(),time);
-		}
-		if (dPdF_File !=NULL){
-			Tensor43::writeData(dPdF_File,data->getHomogenizedTangentOperator_F_F(),time);
-		}
-		if (defoEnerg_File != NULL){
-			Tensor11::writeData(defoEnerg_File,data->getDeformationEnergy(),time);
-		}
-		if (plasticEnerg_File !=NULL){
-			Tensor11::writeData(plasticEnerg_File,data->getPlasticEnergy(),time);
-		}
-		if (irreversibleEnergFile!=NULL){
-			Tensor11::writeData(irreversibleEnergFile,data->getIrreversibleEnergy(),time);
-		}
-		if (lostSolutionUniquenssCriterion_File!=NULL){
-			Tensor11::writeData(lostSolutionUniquenssCriterion_File,data->getLostOfSolutionUniquenessCriterion(),time);
-		};
-	}
+	void openFiles(const int elnum, const int gnum, const nonLinearMechSolver* solver,const bool strainToFile, const bool stressToFile, const bool failureToFile);
+	void dataToFile(const double time, const nonLinearMechSolver* solver, const homogenizedData* data);
 	void closeFiles(){
 		if (F_File!=NULL) {fclose(F_File); F_File = NULL;};
 		if (P_File!=NULL) {fclose(P_File); P_File = NULL;};
@@ -569,54 +328,8 @@ class allFailureFiles{
 						damageVolume_File(NULL),cohesiveTraction_File(NULL),averageCohesiveBandWidth_File(NULL), FDam_File(NULL),
 						DamageActiveZone_File(NULL),dCohesiveJumpDF_File(NULL){};
 		~allFailureFiles(){};
-		void openFiles(const int _enum, const int _gnum, const nonLinearMicroBC* mbc,const bool strainToFile, const bool stressToFile, const bool failureToFile){
-			if (failureToFile){
-				std::string filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_cohesiveJump.csv";
-				cohesiveJump_File = Tensor13::createFile(filename);
-				
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_damageVolume.csv";
-				damageVolume_File = Tensor11::createFile(filename);
-
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_cohesiveTraction.csv";
-				cohesiveTraction_File = Tensor13::createFile(filename);
-
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_averageCohesiveBandWidth.csv";
-				averageCohesiveBandWidth_File = Tensor11::createFile(filename);
-				
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_Fdam.csv";
-				FDam_File = Tensor11::createFile(filename);
-
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_DamageActiveZone.csv";
-				DamageActiveZone_File = Tensor11::createFile(filename);
-				
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_tangentCohesiveJumpDF.csv";
-				dCohesiveJumpDF_File = Tensor33::createFile(filename);
-			}
-		};
-		void dataToFile(const double time, const nonLinearMicroBC* mbc, const homogenizedData* data){
-			if (cohesiveJump_File!=NULL){
-				Tensor13::writeData(cohesiveJump_File,data->getHomogenizedCohesiveJump(),time);
-			};
-			
-			if (damageVolume_File!=NULL){
-				Tensor11::writeData(damageVolume_File,data->getActiveDamageVolume(),time);
-			};
-			if (cohesiveTraction_File!=NULL){
-				Tensor13::writeData(cohesiveTraction_File,data->getHomogenizedCohesiveTraction(),time);
-			};
-			if (averageCohesiveBandWidth_File!=NULL) {
-				Tensor11::writeData(averageCohesiveBandWidth_File,data->getAverageLocalizationBandWidth(),time);
-			};
-			if (FDam_File != NULL){
-				Tensor23::writeData(FDam_File,data->getHomogenizedActiveDamageDeformationGradient(),time);
-			}
-			if (DamageActiveZone_File!=NULL){
-				Tensor11::writeData(DamageActiveZone_File,data->getActiveDamage(),time);
-			};
-			if (dCohesiveJumpDF_File!=NULL){
-				Tensor33::writeData(dCohesiveJumpDF_File,data->getHomogenizedTangentOperator_CohesiveJump_F(),time);
-			}
-		};
+		void openFiles(const int _enum, const int _gnum, const nonLinearMechSolver* solver,const bool strainToFile, const bool stressToFile, const bool failureToFile);
+		void dataToFile(const double time, const nonLinearMechSolver* solver, const homogenizedData* data);
 		void closeFiles(){
 			if (cohesiveJump_File!=NULL){fclose(cohesiveJump_File);cohesiveJump_File=NULL;};
 			if (damageVolume_File!=NULL){fclose(damageVolume_File);damageVolume_File=NULL;};
@@ -638,44 +351,9 @@ class allSecondOrderMechanicsFiles{
 					*dQdF_File;
 		allSecondOrderMechanicsFiles():G_File(NULL),Q_File(NULL),dQdG_File(NULL),dPdG_File(NULL),dQdF_File(NULL){};
 		~allSecondOrderMechanicsFiles(){};
-		void openFiles(const int elnum, const int gnum, const nonLinearMicroBC* mbc,const bool strainToFile, const bool stressToFile, const bool failureToFile){
-			if (strainToFile){
-				std::string filename = "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_second_strain.csv";
-				G_File = Tensor33::createFile(filename);
-			}
-			
-			if (stressToFile){
-				std::string filename = "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_second_stress.csv";
-				Q_File = Tensor33::createFile(filename);
-
-				filename = "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_firstsecond_tangent.csv";
-				dPdG_File = Tensor53::createFile(filename);
-
-				filename = "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_secondfirst_tangent.csv";
-				dQdF_File = Tensor53::createFile(filename);
-
-				filename = "E_"+int2str(elnum)+"_GP_"+int2str(gnum)+"_second_tangent.csv";
-				dQdG_File = Tensor63::createFile(filename);
-			}
-		};
+		void openFiles(const int elnum, const int gnum, const nonLinearMechSolver* solver,const bool strainToFile, const bool stressToFile, const bool failureToFile);
 		
-		void dataToFile(const double time, nonLinearMicroBC* mbc, const homogenizedData* data){
-			if (G_File!=NULL){
-				Tensor33::writeData(G_File,mbc->getSecondOrderKinematicalVariable(),time);
-			}
-			if (Q_File!=NULL){
-				Tensor33::writeData(Q_File,data->getHomogenizedSecondOrderStress(),time);
-			}
-			if (dPdG_File!=NULL){
-				Tensor53::writeData(dPdG_File,data->getHomogenizedTangentOperator_F_G(),time);
-			}
-			if (dQdF_File!=NULL){
-				Tensor53::writeData(dQdF_File,data->getHomogenizedTangentOperator_G_F(),time);
-			}
-			if (dQdG_File!=NULL){
-				Tensor63::writeData(dQdF_File,data->getHomogenizedTangentOperator_G_G(),time);
-			}
-		};
+		void dataToFile(const double time, const nonLinearMechSolver* solver, const homogenizedData* data);
 		void closeFiles(){
 			if (G_File!=NULL){fclose(G_File); G_File=NULL;};
 			if (Q_File!=NULL){fclose(Q_File); Q_File=NULL;};
@@ -702,117 +380,8 @@ class allConExtraDofFiles{
 	allConExtraDofFiles(const int index):fieldIndex(index), gradT_File(NULL),T_File(NULL),fluxT_File(NULL),eT_File(NULL),dFluxTdF_File(NULL),dFluxTdGradT_File(NULL),
 								dFluxTdT_File(NULL),dPdGradT_File(NULL),dPdT_File(NULL),mecaSource_File(NULL),Cp_File(NULL){};
 	~allConExtraDofFiles(){};
-	void openFiles(const int _enum, const int _gnum, const nonLinearMicroBC* mbc,const bool strainToFile, const bool stressToFile, const bool failureToFile){
-		if (mbc->getTotalNumberOfConDofs() > 1){
-			if (strainToFile){
-				std::string filename  = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_gradExtraDof_"+int2str(fieldIndex)+".csv";
-				gradT_File = Tensor13::createFile(filename);
-				
-				filename  = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_ExtraDofValue_"+int2str(fieldIndex)+".csv";
-				T_File = Tensor11::createFile(filename);
-			};
-			if (stressToFile){
-				std::string filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_ExtraDofFlux_"+int2str(fieldIndex)+".csv";
-				fluxT_File = Tensor13::createFile(filename);
-				
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_InternalEnergyExtraDof_"+int2str(fieldIndex)+".csv";
-				eT_File = Tensor11::createFile(filename);
-				
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentFluxF_"+int2str(fieldIndex)+".csv";
-				dFluxTdF_File = Tensor33::createFile(filename);
-				
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentFluxGradExtraDof_"+int2str(fieldIndex)+".csv";
-				dFluxTdGradT_File = Tensor23::createFile(filename);
-				
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentFluxExtraDof_"+int2str(fieldIndex)+".csv";
-				dFluxTdT_File = Tensor13::createFile(filename);
-				
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentStressGradExtraDof_"+int2str(fieldIndex)+".csv";
-				dPdGradT_File = Tensor33::createFile(filename);
-				
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentStressExtraDofValue_"+int2str(fieldIndex)+".csv";
-				dPdT_File = Tensor23::createFile(filename);
-
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_mechanicalSource_"+int2str(fieldIndex)+".csv";
-				mecaSource_File = Tensor11::createFile(filename);
-				
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_fieldCapacity_"+int2str(fieldIndex)+".csv";
-				Cp_File = Tensor11::createFile(filename);
-			}
-		}
-		else if (mbc->getTotalNumberOfConDofs() == 1){
-			if (strainToFile){
-				std::string filename  = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_gradExtraDof.csv";
-				gradT_File = Tensor13::createFile(filename);
-				
-				filename  = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_ExtraDofValue.csv";
-				T_File = Tensor11::createFile(filename);
-			};
-			if (stressToFile){
-				std::string filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_ExtraDofFlux.csv";
-				fluxT_File = Tensor13::createFile(filename);
-				
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_InternalEnergyExtraDof.csv";
-				eT_File = Tensor11::createFile(filename);
-				
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentFluxF.csv";
-				dFluxTdF_File = Tensor33::createFile(filename);
-				
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentFluxGradExtraDof.csv";
-				dFluxTdGradT_File = Tensor23::createFile(filename);
-				
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentFluxExtraDof.csv";
-				dFluxTdT_File = Tensor13::createFile(filename);
-				
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentStressGradExtraDof.csv";
-				dPdGradT_File = Tensor33::createFile(filename);
-				
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentStressExtraDofValue.csv";
-				dPdT_File = Tensor23::createFile(filename);
-
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_mechanicalSource.csv";
-				mecaSource_File = Tensor11::createFile(filename);
-				
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_fieldCapacity.csv";
-				Cp_File = Tensor11::createFile(filename);
-			}
-		}
-	};
-	void dataToFile(const double time, nonLinearMicroBC* mbc, const homogenizedData* data){
-		if (gradT_File !=NULL){
-			Tensor13::writeData(gradT_File,mbc->getConstitutiveExtraDofDiffusionKinematicalVariable(fieldIndex),time);
-		};
-		if (T_File!=NULL){
-			Tensor11::writeData(T_File,mbc->getConstitutiveExtraDofDiffusionConstantVariable(fieldIndex),time);
-		};
-		if (fluxT_File!=NULL){
-			Tensor13::writeData(fluxT_File,data->getHomogenizedConstitutiveExtraDofFlux(fieldIndex),time);
-		};
-		if (eT_File!=NULL){
-			Tensor11::writeData(eT_File,data->getHomogenizedConstitutiveExtraDofInternalEnergy(fieldIndex),time);
-		};
-		if (dFluxTdGradT_File!=NULL){
-			Tensor23::writeData(dFluxTdGradT_File,data->getHomogenizedTangentOperator_gradT_gradT(fieldIndex,fieldIndex),time);
-		}
-		if (dFluxTdT_File!=NULL) {
-			Tensor13::writeData(dFluxTdT_File,data->getHomogenizedTangentOperator_gradT_T(fieldIndex,fieldIndex),time);
-		};
-		if (dPdGradT_File!=NULL) {
-			Tensor33::writeData(dPdGradT_File,data->getHomogenizedTangentOperator_F_gradT(fieldIndex),time);
-		};
-		if (dFluxTdF_File!=NULL) {
-			Tensor33::writeData(dFluxTdF_File,data->getHomogenizedTangentOperator_gradT_F(fieldIndex),time);
-		};
-		if (dPdT_File !=NULL){
-			Tensor23::writeData(dPdT_File,data->getHomogenizedTangentOperator_F_T(fieldIndex),time);
-		};
-		if (mecaSource_File!=NULL){
-			Tensor11::writeData(mecaSource_File,data->getHomogenizedConstitutiveExtraDofMechanicalSource(fieldIndex),time);
-		}
-		if (Cp_File!=NULL){
-			Tensor11::writeData(Cp_File,data->getHomogenizedConstitutiveExtraDofFieldCapacityPerUnitField(fieldIndex),time);
-		}
-	};
+	void openFiles(const int _enum, const int _gnum, const nonLinearMechSolver* solver,const bool strainToFile, const bool stressToFile, const bool failureToFile);
+	void dataToFile(const double time, const nonLinearMechSolver* solver, const homogenizedData* data);
 	void closeFiles(){
 		if (gradT_File !=NULL){ fclose(gradT_File);gradT_File=NULL;};
 		if (T_File!=NULL){fclose(T_File); T_File = NULL;};
@@ -838,49 +407,8 @@ class allNonConExtraDofFiles{
 	allNonConExtraDofFiles(const int index):fieldIndex(index),gradV_File(NULL),fluxV_File(NULL),dfluxVdgradV_File(NULL){};
 	~allNonConExtraDofFiles(){};
 	
-	void openFiles(const int _enum, const int _gnum, const nonLinearMicroBC* mbc,const bool strainToFile, const bool stressToFile, const bool failureToFile){
-		if (mbc->getTotalNumberOfNonConDofs() > 1){
-			if (strainToFile){
-				std::string filename  = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_gradNonConExtraDof_"+int2str(fieldIndex)+".csv";
-				gradV_File = Tensor13::createFile(filename);			
-			};
-			if (stressToFile){
-				std::string filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_NonConExtraDofFlux_"+int2str(fieldIndex)+".csv";
-				fluxV_File = Tensor13::createFile(filename);
-				
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentNonConFluxGradNonConExtraDof_"+int2str(fieldIndex)+".csv";
-				dfluxVdgradV_File = Tensor23::createFile(filename);
-			}
-			
-		}
-		else if (mbc->getTotalNumberOfNonConDofs() == 1){
-			if (strainToFile){
-				std::string filename  = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_gradNonConExtraDof.csv";
-				gradV_File = Tensor13::createFile(filename);			
-			};
-			if (stressToFile){
-				std::string filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_NonConExtraDofFlux.csv";
-				fluxV_File = Tensor13::createFile(filename);
-				
-				filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_TangentNonConFluxGradNonConExtraDof.csv";
-				dfluxVdgradV_File = Tensor23::createFile(filename);
-			}
-			
-
-		}
-	};
-	
-	void dataToFile(const double time, nonLinearMicroBC* mbc, const homogenizedData* data){
-		if (gradV_File!=NULL){
-			Tensor13::writeData(gradV_File,mbc->getNonConstitutiveExtraDofDiffusionKinematicalVariable(fieldIndex),time);
-		};
-		if (fluxV_File!=NULL){
-			Tensor13::writeData(fluxV_File,data->getHomogenizedNonConstitutiveExtraDofFlux(fieldIndex),time);
-		};
-		if (dfluxVdgradV_File!=NULL){
-			Tensor23::writeData(dfluxVdgradV_File,data->getHomogenizedTangentOperator_gradV_gradV(fieldIndex,fieldIndex),time);
-		};
-	};
+	void openFiles(const int _enum, const int _gnum, const nonLinearMechSolver* solver,const bool strainToFile, const bool stressToFile, const bool failureToFile);
+	void dataToFile(const double time, const nonLinearMechSolver* solver, const homogenizedData* data);
 	void closeFiles(){
 		if (gradV_File!=NULL){fclose(gradV_File);gradV_File=NULL;};
 		if (fluxV_File!=NULL){fclose(fluxV_File);fluxV_File=NULL;};
@@ -898,53 +426,11 @@ class homogenizedDataFiles{
 		std::vector<allNonConExtraDofFiles> _allNonConFiles;
 					 
   public:
-    homogenizedDataFiles(const nonLinearMicroBC* mbc): _allFirstOrderFiles(), _allSecondOrderFiles(),_allFailureFiles(){
-			for (int index=0; index< mbc->getTotalNumberOfConDofs(); index++){
-				_allConFiles.push_back(allConExtraDofFiles(index));
-			}
-			for (int index=0; index< mbc->getTotalNumberOfNonConDofs(); index++){
-				_allNonConFiles.push_back(allNonConExtraDofFiles(index));
-			}
-			
-		};
+    homogenizedDataFiles(const nonLinearMechSolver* solver),
     ~homogenizedDataFiles(){}
-    void openFiles(const int elnum, const int gnum, nonLinearMicroBC* mbc,
-                  const bool strainToFile, const bool stressToFile, const bool failureToFile){
-      if (mbc->getTotalNumberOfMechanicalDofs()>0){
-				_allFirstOrderFiles.openFiles(elnum,gnum,mbc,strainToFile,stressToFile,failureToFile);
-				if (mbc->getOrder()==2){
-					_allSecondOrderFiles.openFiles(elnum,gnum,mbc,strainToFile,stressToFile,failureToFile);
-				}
-				if (failureToFile){
-					_allFailureFiles.openFiles(elnum,gnum,mbc,strainToFile,stressToFile,failureToFile);
-				}
-			}
-			if (mbc->getTotalNumberOfConDofs()>0){
-				for (int index=0; index < mbc->getTotalNumberOfConDofs(); index++){
-					_allConFiles[index].openFiles(elnum,gnum,mbc,strainToFile,stressToFile,failureToFile);
-				}
-			}
-			if (mbc->getTotalNumberOfNonConDofs()>0){
-				for (int index=0; index < mbc->getTotalNumberOfNonConDofs(); index++){
-					_allNonConFiles[index].openFiles(elnum,gnum,mbc,strainToFile,stressToFile,failureToFile);
-				}
-			}
-    };
-
-		void dataToFile(const double time, nonLinearMicroBC* mbc, const homogenizedData* data){			
-			_allFirstOrderFiles.dataToFile(time,mbc,data);
-			_allSecondOrderFiles.dataToFile(time,mbc,data);
-			_allFailureFiles.dataToFile(time,mbc,data);
-		
-			for (int index=0; index <_allConFiles.size(); index++){
-				_allConFiles[index].dataToFile(time,mbc,data);
-			}
-		
-			for (int index=0; index < _allNonConFiles.size(); index++){
-				_allNonConFiles[index].dataToFile(time,mbc,data);
-			}
-			
-		};
+    void openFiles(const int elnum, const int gnum, const nonLinearMechSolver* solver,
+                  const bool strainToFile, const bool stressToFile, const bool failureToFile);
+		void dataToFile(const double time, const nonLinearMechSolver* solver, const homogenizedData* data);
 
     void closeFiles(){
 			_allFirstOrderFiles.closeFiles();
diff --git a/NonLinearSolver/nlsolver/nonLinearMechSolver.cpp b/NonLinearSolver/nlsolver/nonLinearMechSolver.cpp
index 8c12efcbca49c940d1ad82b70d03a7a6dd8fccaf..92267bb8baf0d5331bd4bf5b1e7c30242ad4b21e 100644
--- a/NonLinearSolver/nlsolver/nonLinearMechSolver.cpp
+++ b/NonLinearSolver/nlsolver/nonLinearMechSolver.cpp
@@ -65,6 +65,9 @@
 #include "failureDetection.h"
 //#include "linearSystemGMRESk.h"
 #include "restartManager.h"
+#include "geometryRotation.h"
+#include "interfaceReferenceLocalBasis.h"
+#include "numericalMaterial.h"
 
 #if defined(HAVE_POST)
 #include "PView.h"
@@ -121,7 +124,10 @@
 																																			_pathFollowingLocation(BULK_INTERFACE),
 																																			_homogenizedStressLastActiveDamage(0.),_homogenizedStrainLastActiveDamage(0.),
 																																			_homogenizedCohesiveJumpLastActiveDamage(0.),
-																																			_lostSolutionUniquenssTolerance(0.)
+																																			_lostSolutionUniquenssTolerance(0.), _voidPartInLocalizationBand(0.),
+																																			_GModelIsRotated(false), _checkFailureOnset(false),
+																																			_damageVolumeCenter(0.,0.,0.),_homogenizedCrackSurface(0.),
+																																			_microBCOld(NULL),_microFailureBC(NULL), _failureBCIsSwitched(false)
 {
   // check parallelization of dofManager
  #if defined(HAVE_MPI)
@@ -174,19 +180,17 @@ nonLinearMechSolver::~nonLinearMechSolver()
 			delete _microBC;
 			_microBC = NULL;
 		}
+		if (_microBCOld) delete _microBCOld;
+		if (_microFailureBC) delete _microFailureBC;
 
 		if (_erosionGlobalCriterion!=NULL){
 			delete _erosionGlobalCriterion;
 		}
-//    if(_ipf != NULL) delete _ipf;
-//    for(std::map<int,materialLaw*>::iterator it = maplaw.begin(); it!=maplaw.end();++it){ delete it->second;}
-    // I can't delete otherwise problem at the end since swig.
-//    for(std::vector<partDomain*>::iterator it = domainVector.begin(); it!=domainVector.end(); ++it){delete *it;}
-  // proper finalize?
-  if(!_microFlag) // only on the master solver?
+    if(_ipf != NULL) delete _ipf;
+		
+  if(!_microFlag) // only on the master solver? -->ok, we need to pass once only to finish everything (PETSc, SLEPc, ...)
     Msg::Exit(0);
-
-  }
+}
 
 void nonLinearMechSolver::createRestartByTime(const int day,const int hour,const int minute,const int second)
 {
@@ -246,9 +250,12 @@ void nonLinearMechSolver::loadModel(const std::string &meshFileName)
   if(restartManager::available())
   {
     pModel = new GModel();
+    pModel->setFileName(meshFileName);
     pModel->setAsCurrent();
     pModel->readMSH(_restartMshFileName.c_str());
     _dim = pModel->getNumRegions() ? 3 : 2;
+    pModel->setFileName(meshFileName);
+    pModel->setName(SplitFileName(meshFileName)[1]);
     return;
   }
 
@@ -256,6 +263,8 @@ void nonLinearMechSolver::loadModel(const std::string &meshFileName)
   pModel->setAsCurrent();
   pModel->readMSH(meshFileName.c_str());
   _meshFileName = meshFileName;
+  pModel->setFileName(meshFileName);
+  pModel->setName(SplitFileName(meshFileName)[1]);
   this->commonModel();
 }
 
@@ -465,6 +474,30 @@ bool nonLinearMechSolver::isDgDomain() const{
   return false;
 };
 
+IPField* nonLinearMechSolver::getIPField() {return _ipf;};
+const IPField* nonLinearMechSolver::getIPField() const {return _ipf;};
+
+unknownField* nonLinearMechSolver::getUnknownField() {return _ufield;};
+const unknownField* nonLinearMechSolver::getUnknownField() const {return _ufield;};
+
+dofManager<double>* nonLinearMechSolver::getDofManager() {return pAssembler;};
+const dofManager<double>* nonLinearMechSolver::getDofManager() const {return pAssembler;};
+
+staticDofManager<double>* nonLinearMechSolver::getStaticDofManager() {return dynamic_cast<staticDofManager<double>*>(pAssembler);};
+const staticDofManager<double>* nonLinearMechSolver::getStaticDofManager() const {return dynamic_cast<const staticDofManager<double>*>(pAssembler);};
+
+std::vector<partDomain*>* nonLinearMechSolver::getDomainVector() {return &domainVector;}
+const std::vector<partDomain*>* nonLinearMechSolver::getDomainVector() const {return &domainVector;}
+
+std::vector<partDomain*>* nonLinearMechSolver::getGhostDomainMPI(){return &_ghostDomainMPI;};
+const std::vector<partDomain*>* nonLinearMechSolver::getGhostDomainMPI() const {return &_ghostDomainMPI;};
+
+nonLinearMechSolver::contactContainer* nonLinearMechSolver::getAllContactDomain(){return &_allContact;};
+const nonLinearMechSolver::contactContainer* nonLinearMechSolver::getAllContactDomain() const{return &_allContact;};
+
+GModel* nonLinearMechSolver::getGModel(){return pModel;};
+const GModel* nonLinearMechSolver::getGModel() const {return pModel;};
+
 void nonLinearMechSolver::init(){
 
   if(!_previousInit)
@@ -524,12 +557,113 @@ void nonLinearMechSolver::init(){
 			// set Solver
 			dom->setSolver(this); // some options in domaian come from solver
     }
+		
+		// add create new material cerate inside solver
+		for(std::vector<partDomain*>::iterator it = domainVector.begin(); it!=domainVector.end(); ++it){
+			dgPartDomain *dom = dynamic_cast<dgPartDomain*>(*it);
+			if (dom != NULL){
+				materialLaw* mlawMinus = dom->getMaterialLawMinus();
+				if (maplaw.find(mlawMinus->getNum()) == maplaw.end()){
+					maplaw[mlawMinus->getNum()] = mlawMinus;
+				}
+				
+				materialLaw* mlawPlus = dom->getMaterialLawPlus();
+				if (maplaw.find(mlawPlus->getNum()) == maplaw.end()){
+					maplaw[mlawPlus->getNum()] = mlawPlus;
+				}
+			}
+		};
 
 		for (std::map<int,materialLaw*>::iterator it = maplaw.begin(); it!= maplaw.end(); it++){
 			it->second->setSolver(this);
 		}
 
     if (isMultiscale() and isDgDomain()){
+			// full all interface local basis
+			this->fillLocalReferenceBasisForAllInterfaceElement();
+			
+			
+			#if defined(HAVE_MPI)
+			int rank = Msg::GetCommRank();
+			if (_mapRanks.find(rank) != _mapRanks.end()){
+				const std::set<int>& otherRanks = _mapRanks[rank];
+				// set data
+				// fill to send
+				if (otherRanks.size() > 0){
+					int bufferSize = 10*allInterfaceLocalBasis.size();
+					double* buffer = NULL;
+					if (bufferSize > 0){
+						buffer= new double[bufferSize];
+						int row =0;
+						for (std::map<int,STensor3>::const_iterator it = allInterfaceLocalBasis.begin(); it != allInterfaceLocalBasis.end(); it++){
+							double type = (double)it->first;
+							const STensor3& mat = it->second;
+							buffer[row] = type; row++;
+							for (int index = 0; index< 9; index++){
+								int i,j;
+								Tensor23::getIntsFromIndex(index,i,j);
+								buffer[row] = mat(i,j); row++;
+							}
+						}
+					}
+					for (std::set<int>::const_iterator itrank = otherRanks.begin(); itrank != otherRanks.end(); itrank++){
+						int rRank = *itrank;
+						int tag = numericalMaterialBase::createTypeWithTwoInts(rRank,0);
+						MPI_Send(&bufferSize, 1, MPI_INT, rRank , tag, MPI_COMM_WORLD);
+						
+						if (bufferSize > 0){
+							tag = numericalMaterialBase::createTypeWithTwoInts(rRank,1);
+							MPI_Send(buffer, bufferSize, MPI_DOUBLE, rRank , tag, MPI_COMM_WORLD);
+						}
+					}
+					
+					if (bufferSize > 0){
+						delete buffer;
+					}
+					
+				}
+			}
+			else{
+				// receive data
+				int rootRank = -1;
+				for (std::map<int, std::set<int> >::const_iterator it = _mapRanks.begin(); it != _mapRanks.end(); it++){
+					const std::set<int> otherRanks = it->second;
+					if (otherRanks.find(rank) != otherRanks.end()){
+						rootRank = it->first;
+						break;
+					}
+				}
+				
+				if (rootRank == -1) Msg::Fatal("init map is wrong");
+				
+				MPI_Status status;
+				
+				int bufferSize = 0;
+				int tag = numericalMaterialBase::createTypeWithTwoInts(rank,0);
+				MPI_Recv(&bufferSize,1,MPI_INT,rootRank,tag,MPI_COMM_WORLD,&status);
+				
+				if (bufferSize > 0){
+					double* buffer = new double[bufferSize];
+					tag = numericalMaterialBase::createTypeWithTwoInts(rank,1);
+					MPI_Recv(buffer,bufferSize,MPI_DOUBLE,rootRank,tag,MPI_COMM_WORLD,&status);
+					
+					for (int idx = 0; idx < bufferSize; idx+=10){
+						int firstRow = idx;
+						int type = (int)(buffer[idx]);
+						STensor3 mat(0.);
+						for (int index = 0; index< 9; index++){
+							int i,j;
+							Tensor23::getIntsFromIndex(index,i,j);
+							mat(i,j) = buffer[firstRow+index+1];
+						}
+						
+						allInterfaceLocalBasis[type] = mat;
+					}
+				}
+			}
+			#endif //HAVE_MPI
+			
+			// extract interface element
 			int totalInterfaceElem = 0;
 			for(std::vector<partDomain*>::iterator it = domainVector.begin(); it!=domainVector.end(); ++it){
 				dgPartDomain *dom = dynamic_cast<dgPartDomain*>(*it);
@@ -622,7 +756,7 @@ void nonLinearMechSolver::init(){
        }
        if(firsthostname)
        {
-         Msg::Error("File are moved on rank %d, hostname %s",Msg::GetCommRank(),vhostname[Msg::GetCommRank()]);
+         Msg::Warning("File are moved on rank %d, hostname %s",Msg::GetCommRank(),vhostname[Msg::GetCommRank()]);
          system("rm -rf previousScheme"); // reserved name folder ?
          system("mkdir previousScheme");
          system("mv *.csv previousScheme"); // no support for other format for now
@@ -636,7 +770,7 @@ void nonLinearMechSolver::init(){
        }
        else
        {
-         Msg::Error("Nothing moved on rank %d, hostname %s",Msg::GetCommRank(),vhostname[Msg::GetCommRank()]);
+         Msg::Warning("Nothing moved on rank %d, hostname %s",Msg::GetCommRank(),vhostname[Msg::GetCommRank()]);
        }
        Msg::Barrier();
        // delete array
@@ -708,7 +842,7 @@ void nonLinearMechSolver::initAllBCsOnDofs(){
 
 };
 
-void nonLinearMechSolver::init2(unknownField* &ufield, energeticField* &efield)
+void nonLinearMechSolver::init2()
 {
   // initialize the system and dofManager
   this->createSystem();
@@ -762,25 +896,26 @@ void nonLinearMechSolver::init2(unknownField* &ufield, energeticField* &efield)
   }
   #endif // HAVE_MPI
 
-  /* fields creation */
-  if(ufield) delete ufield;
-  ufield = new unknownField(pAssembler,domainVector,_ghostDomainMPI,&_allContact,3,anoded,unknownView);
-  //  this->restart(ufield); // CHANGE THIS
-
-  if (OneUnknownView.size() > 0){
-    _oneUnknownField = new OneUnknownField(pAssembler,&domainVector,OneUnknownView);
-  }
 
   bool stiffcomputation=true;
   if(whatScheme==Explicit) stiffcomputation=false;
   if(!_previousInit){
+		/* fields creation */
+		if(_ufield) delete _ufield;
+		_ufield = new unknownField(this,3,anoded,unknownView);
+		//  this->restart(ufield); // CHANGE THIS
+
+		if (OneUnknownView.size() > 0){
+			if (_oneUnknownField) delete _oneUnknownField;
+			_oneUnknownField = new OneUnknownField(this,OneUnknownView);
+		}
+		
     Msg::Info("Creation of IPVariable");
-    _ipf = new IPField(this,&domainVector,pAssembler,ufield,vaip,ipView); // Field for GaussPoint
+    _ipf = new IPField(this,vaip,ipView); // Field for GaussPoint
     Msg::Info("IPVariable are created");
-
+   
     _ipf->compute1state(IPStateBase::initial,stiffcomputation);
     _ipf->initialBroken(pModel, initbrokeninter);
-
     if(whatScheme==StaticNonLinear)
       _ipf->copy(IPStateBase::initial,IPStateBase::previous);
     else
@@ -796,21 +931,44 @@ void nonLinearMechSolver::init2(unknownField* &ufield, energeticField* &efield)
 
       }
     }
-
+		
+		if(_energField) delete _energField;
+		_energField = new energeticField(this, energyView,_energyComputation,_fractureEnergyComputation,getScheme());
   }
   else{ // as nextStep is performed at the end of previous scheme the last step is in previous (and not in current) !!
-    _ipf->resetUnknownField(ufield);
+    // all files are closed from previous scheme
+		// archived files need to be reopenned
+		_ipf->resetFile();
     _ipf->copy(IPStateBase::previous,IPStateBase::initial);
     _ipf->copy(IPStateBase::previous,IPStateBase::current); // same value to avois initialization problem ??
-    _ipf->openArchivingFiles();
+		
+		if (_unresetUnknowns){
+			_ufield->resetFile();
+			if (_energField){
+				_energField->resetFile();
+			}
+			if (_oneUnknownField){
+				_oneUnknownField->resetFile();
+			}
+		}
+		else{
+			// recreate fields as unknowns are changed
+			if(_ufield) delete _ufield;
+			_ufield = new unknownField(this,3,anoded,unknownView);
+			//  this->restart(ufield); // CHANGE THIS
+
+			if (OneUnknownView.size() > 0){
+				if (_oneUnknownField) delete _oneUnknownField;
+				_oneUnknownField = new OneUnknownField(this,OneUnknownView);
+			}
+		
+			if(_energField) delete _energField;
+			_energField = new energeticField(this, energyView,_energyComputation,_fractureEnergyComputation,getScheme());
+		}
   }
 
-  if(efield) delete efield;
-  efield = new energeticField(_ipf,ufield,pAssembler,domainVector,_allContact,
-                              energyView,_energyComputation,_fractureEnergyComputation,getScheme());
-
   /* terms initialization */
-  this->initTerms(ufield,_ipf);
+  this->initTerms(_ufield,_ipf);
   _previousInit = true;
   Msg::Info("End of initialization");
  #if defined(HAVE_MPI) && defined(_DEBUG)
@@ -847,6 +1005,7 @@ void nonLinearMechSolver::endOfScheme(unknownField *ufield,energeticField *efiel
   if (_oneUnknownField!= NULL){
     _oneUnknownField->forceView();
     _oneUnknownField->archive(curtime,step);
+		_oneUnknownField->closeFile();
   }
 
    _ipf->forceView();
@@ -953,7 +1112,7 @@ void nonLinearMechSolver::oneStepPostSolve(const double curtime, const int numst
   }
 
   if (_pbcGroup != NULL){
-    homogenizedData homoData(_microBC,false,false);
+    homogenizedData homoData(this,false,false);
     this->extractAverageStressByVolumeIntegral(&homoData);
     homoData.getHomogenizedStress().print("average stress");
     if (_homogenizedStressPBC != NULL){
@@ -2487,6 +2646,13 @@ void nonLinearMechSolver::createInterfaceElement_2()
   }*/
 }
 
+void nonLinearMechSolver::rotateModel(const SVector3& n1, const SVector3& n2, const SVector3& n3){
+  if (!_GModelIsRotated){
+    _GModelIsRotated = true;
+    GeometryRotation::rotateGModel(_enum,_gnum,pModel,n1,n2,n3);
+  }
+};
+
 void nonLinearMechSolver::initTerms(unknownField *ufield, IPField *ipf){
   // resize _vterm in NeumannBC
   if(_previousInit){ // if previous computation delete first the terms
@@ -2544,11 +2710,10 @@ double nonLinearMechSolver::solveStaticLinear()
 {
   /* init data */
   this->init();
-  unknownField *ufield=NULL;
-  energeticField *efield=NULL;
-  this->init2(ufield,efield);
-  delete efield; efield=NULL; // energy cannot be computed with this scheme as the system does not computed the forces of fixed ddl!!
-
+  this->init2();
+	if (_energField != NULL){
+		delete _energField; _energField=NULL; // energy cannot be computed with this scheme as the system does not computed the forces of fixed ddl!!
+	}
 
   /* time initialization */
   double curtime = 1.;
@@ -2558,7 +2723,7 @@ double nonLinearMechSolver::solveStaticLinear()
   /* solving */
   this->setTimeForLaw(curtime,timestep);
   std::cout <<  "Neumann BC"<< std::endl;
-  this->computeExternalForces(ufield);
+  this->computeExternalForces(_ufield);
   this->computeStiffMatrix(pAssembler);
   printf("-- done assembling!\n");
   pAssembler->systemSolve();
@@ -2567,7 +2732,7 @@ double nonLinearMechSolver::solveStaticLinear()
   /* compute stress after solve */
   _ipf->compute1state(IPStateBase::current,true);
   /* end of scheme */
-  this->endOfScheme(ufield,efield,curtime,step);
+  this->endOfScheme(_ufield,_energField,curtime,step);
   Msg::Info("StaticLinear OK");
   return curtime;
 }
@@ -2576,11 +2741,10 @@ double nonLinearMechSolver::solveEigen()
 {
    /* init data */
    this->init();
-   unknownField *ufield=NULL;
-   energeticField *efield=NULL;
-   this->init2(ufield,efield);
-   delete efield; efield=NULL; // energy cannot be computed with this scheme as the system does not computed the forces of fixed ddl!!
-
+   this->init2();
+	 if (_energField){
+		delete _energField; _energField=NULL; // energy cannot be computed with this scheme as the system does not computed the forces of fixed ddl!!
+	 }
 
    /* time initialization */
    double curtime = 1.;
@@ -2660,7 +2824,7 @@ double nonLinearMechSolver::solveEigen()
    printf("-- done solving!\n");
 
    /* end of scheme */
-   this->endOfScheme(ufield,efield,curtime,step);
+   this->endOfScheme(_ufield,_energField,curtime,step);
    Msg::Info("EigenSolve OK");
    return curtime;
 }
@@ -3356,7 +3520,7 @@ void nonLinearMechSolver::initArchiveForce(){
         }
       }
       else {
-        for(nonLinearMechSolver::contactContainer::const_iterator itc = _allContact.begin(); itc!=_allContact.end(); ++itc){  
+        for(nonLinearMechSolver::contactContainer::const_iterator itc = _allContact.begin(); itc!=_allContact.end(); ++itc){
           contactDomain *cdom = *itc;
           if(cdom->getPhys() != af.numphys)
             continue;
@@ -4931,7 +5095,7 @@ void nonLinearMechSolver::initializeExplicitScheme()
 
   /* init data */
   this->init();
-  this->init2(_ufield,_energField);
+  this->init2();
   staticDofManager<double> *sAssembler = static_cast<staticDofManager<double>*>(pAssembler);
 
   /* mass matrix computation outside the loop */
@@ -5022,7 +5186,7 @@ void nonLinearMechSolver::initializeStaticScheme()
   Msg::Info("SNL Data : nstep =%d endtime=%f",_numstepImpl,this->getEndTime());
   /* init data */
   this->init();
-  this->init2(_ufield,_energField);
+  this->init2();
   // iterative scheme (loop on timestep)
   staticDofManager<double> *sAssembler = static_cast<staticDofManager<double>*>(pAssembler);
 
@@ -6206,7 +6370,7 @@ double nonLinearMechSolver::solveMulti()
   // set the first time step to 1 if previous computation to avoid initialization problem
   int step = 0; // iteration counter
   if(_previousInit) step = 1;
-  this->init2(_ufield,_energField);
+  this->init2();
   // iterative scheme (loop on timestep)
 
   staticDofManager<double> *sAssembler = static_cast<staticDofManager<double>*>(pAssembler);
@@ -7449,6 +7613,53 @@ void nonLinearMechSolver::fillMapOfInterfaceElementsInOneDomain(MElement *e, std
     }
 }
 
+void nonLinearMechSolver::fillLocalReferenceBasisForAllInterfaceElement(){
+	printf("begin filling reference local basis\n");
+	for (int idom= 0; idom < domainVector.size(); idom++){
+		const dgPartDomain* dgdom = dynamic_cast<const dgPartDomain*>(domainVector[idom]);
+		if (dgdom != NULL){
+			IntPt* GP;
+			for (groupOfElements::elementContainer::iterator ite = dgdom->gi->begin(); ite != dgdom->gi->end(); ite++){
+				MElement* ele = *ite;
+				int npts  = dgdom->getInterfaceGaussIntegrationRule()->getIntPoints(ele,&GP);
+				for (int i=0; i< npts; i++){
+					int type = numericalMaterialBase::createTypeWithTwoInts(ele->getNum(), i);
+					SVector3 n, b, t;
+					computeInterfaceReferenceLocalBasis(ele,&GP[i],n,t,b);
+					
+					STensor3 mat;
+					mat(0,0) = n(0); mat(1,0) = n(1);  mat(2,0) = n(2); 
+					mat(0,1) = t(0); mat(1,1) = t(1);  mat(2,1) = t(2); 
+					mat(0,2) = b(0); mat(1,2) = b(1);  mat(2,2) = b(2); 
+					
+					allInterfaceLocalBasis[type] = mat; // negative
+					type = numericalMaterialBase::createTypeWithTwoInts(ele->getNum(), i+npts);
+					allInterfaceLocalBasis[type] = mat; // positive
+				}
+			}
+		}
+	}
+	printf("done filling reference local basis size = %d\n",allInterfaceLocalBasis.size());
+};
+
+void nonLinearMechSolver::getLocalBasis(const MElement* ele, const int gpt, SVector3& n, SVector3& t, SVector3& b) const {
+	int type = numericalMaterialBase::createTypeWithTwoInts(ele->getNum(), gpt);
+	std::map<int,STensor3>::const_iterator itfind = allInterfaceLocalBasis.find(type);
+	if ( itfind == allInterfaceLocalBasis.end()){
+		Msg::Fatal(" rank %d local basis at interface element %d gpt %d does not exist",Msg::GetCommRank(), ele->getNum(),gpt);
+	}
+	else{
+		const STensor3& mat = itfind->second;
+		n(0) = mat(0,0); n(1) = mat(1,0);  n(2) = mat(2,0); 
+		t(0) = mat(0,1); t(1) = mat(1,1);  t(2) = mat(2,1); 
+		b(0) = mat(0,2); b(1) = mat(1,2);  b(2) = mat(2,2); 
+		
+		mat.print("found basis");
+	}
+};
+
+
+
 void nonLinearMechSolver::createStrainMapping(const std::string  filename){
   if (_strainMap) delete _strainMap;
   _strainMap = new strainMapping(domainVector);
@@ -7503,7 +7714,7 @@ void nonLinearMechSolver::microNumberDof(){
   else{
     if (_controlType == LOAD_CONTROL){
     // number normally dof
-    _pAl->numberDof(_systemType);
+			_pAl->numberDof(_systemType);
     // allocate micro system
     }
     else if (_controlType == ARC_CONTROL_EULER){
@@ -7648,9 +7859,36 @@ void nonLinearMechSolver::setPeriodicity(const SVector3& xd, const SVector3& yd,
 
 void nonLinearMechSolver::addMicroBC(const nonLinearMicroBC* bc){
   _microFlag = true;
-	if (_microBC !=NULL) delete _microBC;
+	if (_microBCOld) delete _microBCOld;
+	_microBCOld = _microBC;
   _microBC = bc->clone();
-}
+	if (_microBCOld != NULL){
+		_microBC->collecDataFromPrevious(*_microBCOld);
+	}
+	
+	// set highorder flag
+	if (_microBC->getOrder() >1){
+		_highOrderFlag = true;
+	}
+	else{
+		_highOrderFlag = false;
+	}
+		
+	// add BC suppport
+	std::vector<groupOfElements*>& bgroup  = _microBC->getBoundaryGroupOfElements();
+	const std::vector<int>& bphysical = _microBC->getBoundaryPhysicals();
+	bgroup.clear();
+	for (int i=0; i< bphysical.size(); i++){
+		groupOfElements* gr = new groupOfElements(_dim-1,bphysical[i]);
+		bgroup.push_back(gr);
+	}
+};
+void nonLinearMechSolver::addMicroBCForFailure(const nonLinearMicroBC* mbc){
+	// this BC sleeps util failure
+	// once failure occurs, _microBC is replaced by _microFailureBC using addMicroBC
+	if (_microFailureBC!=NULL) delete _microFailureBC;
+	_microFailureBC = mbc->clone();
+};
 
 double nonLinearMechSolver::getRVEVolume() const{
 	return _rveVolume;
@@ -7730,6 +7968,20 @@ const SVector3& nonLinearMechSolver::getLostSolutionUniquenssNormal() const{
 	return _lostSolutionUniquenssNormal;
 };
 
+SPoint3& nonLinearMechSolver::getHomogenizedDamageVolumeCenter(){
+	return _damageVolumeCenter;
+}; 
+const SPoint3& nonLinearMechSolver::getHomogenizedDamageVolumeCenter() const{
+	return _damageVolumeCenter;
+}; 
+
+double& nonLinearMechSolver::getHomogenizedCrackFace(){
+	return _homogenizedCrackSurface;
+};
+const double& nonLinearMechSolver::getHomogenizedCrackFace() const{
+	return _homogenizedCrackSurface;
+};
+
 STensor3& nonLinearMechSolver::getFdamOnset() {return _FdamOnset;};
 const STensor3& nonLinearMechSolver::getFdamOnset() const {return _FdamOnset;};
 
@@ -7742,6 +7994,10 @@ bool nonLinearMechSolver::isDamage() const{
 	return false;
 };
 
+bool nonLinearMechSolver::checkFailureOnset() const{
+	return _checkFailureOnset;
+};
+
 const elementErosionFilter& nonLinearMechSolver::getElementErosionFilter() const{
 	return _elementErosionFilter;
 };
@@ -7781,8 +8037,24 @@ void nonLinearMechSolver::extractAverageStressByVolumeIntegral(homogenizedData*
 			for (int i=0; i<domainVector.size(); i++){
 				damageVolume += domainVector[i]->computeVolumeActiveDamageDomain(_ipf);
 			}
-			double trueDamageVolume = (damageVolume/_surfaceReductionRatio); // in order to take into account void part
-			clength = _RVELengthInCohesiveNormal*trueDamageVolume*volumeRVEInv;
+			
+			// active damage center
+			_damageVolumeCenter *= 0.;
+			if (damageVolume > 0.){
+				for (int i=0; i<domainVector.size(); i++){
+					domainVector[i]->computeActiveDamageCenter(_ipf,_damageVolumeCenter);
+				}
+				_damageVolumeCenter *= (1./damageVolume);
+				
+				Msg::Info("center of active damage zone : %f %f %f \n",_damageVolumeCenter[0],_damageVolumeCenter[1],_damageVolumeCenter[2]);
+				
+				// compute homogenized crack length
+				this->computeHomogenizedCrackFace();
+				
+				double trueDamageVolume = ((damageVolume+ _voidPartInLocalizationBand) /_surfaceReductionRatio); // in order to take into account void part
+				//clength = _RVELengthInCohesiveNormal*trueDamageVolume*volumeRVEInv;
+				clength = trueDamageVolume/_homogenizedCrackSurface;
+			}
 		}
 
 		STensor3& P = homoData->getHomogenizedStress();
@@ -7935,7 +8207,7 @@ void nonLinearMechSolver::extractAverageStressByVolumeIntegral(homogenizedData*
 void nonLinearMechSolver::homogenizedDataToFile(const double time){
   homogenizedData* data = this->getHomogenizationState(IPStateBase::current);
 
-  _homogenizedFiles->dataToFile(time, _microBC, data);
+  _homogenizedFiles->dataToFile(time, this, data);
 };
 
 void nonLinearMechSolver::extractAverageStressByCondensation(homogenizedData* homoData){
@@ -8751,7 +9023,7 @@ stiffnessCondensation* nonLinearMechSolver::createStiffnessCondensation(const bo
 
   /**condensation require **/
   if (_pAl == NULL){
-    _pAl = new pbcAlgorithm(_microBC,domainVector,pAssembler);
+    _pAl = new pbcAlgorithm(this);
   };
   if (!_pAl->isSplittedDof()) _pAl->splitDofs();
 
@@ -9342,6 +9614,84 @@ void nonLinearMechSolver::checkFailureOnset_withNormalVector(){
 	}
 };
 
+void nonLinearMechSolver::computeHomogenizedCrackFace(){
+	if (_pAl == NULL){
+		Msg::Fatal("pbcAlgorithm object must be created");
+	}
+	
+	if (_lostSolutionUniquenssNormal.norm() < 1e-6){
+		// normally, _lostSolutionUniquenssNormal.norm() == 1
+		_homogenizedCrackSurface = std::max(_Lx.norm(),_Ly.norm()); // nothing to do
+		return;
+	}
+	
+	SPoint3 v1 = _pAl->getPBCConstraintGroup()->getRootPoint();
+	Msg::Info("rootPoint %f %f %f ",v1[0],v1[1],v1[2]);
+	
+	_homogenizedCrackSurface = 0.;
+
+	if (getDim() == 2){
+		SPoint3 v2(v1); 
+		v2 += (_Lx.point());
+		SPoint3 v4(v1); 
+		v4 += (_Ly.point());
+		SPoint3 v3(v1); 
+		v3 += (_Lx.point()); 
+		v3 += (_Ly.point());
+		
+		if (dot(_lostSolutionUniquenssNormal,_Lx)/(_Lx.norm()) < 1e-8){
+			_homogenizedCrackSurface = _Lx.norm();
+			Msg::Info("_homogenizedCrackSurface following Lx = %f",_homogenizedCrackSurface);
+		}
+		else if (dot(_lostSolutionUniquenssNormal,_Ly)/(_Ly.norm()) < 1e-8){
+			_homogenizedCrackSurface = _Ly.norm();
+			Msg::Info("_homogenizedCrackSurface following Ly = %f",_homogenizedCrackSurface);
+		}
+		else{
+			std::vector<SPoint3> twoPoint;
+			SPoint3 prCenterTo12 = planeDirProject(_damageVolumeCenter,v1,v2,_lostSolutionUniquenssNormal);
+			if (inside(prCenterTo12,v1,v2)){
+				twoPoint.push_back(prCenterTo12);
+			}
+			SPoint3 prCenterTo41 = planeDirProject(_damageVolumeCenter,v1,v4,_lostSolutionUniquenssNormal);
+			if (inside(prCenterTo41,v1,v4)){
+				twoPoint.push_back(prCenterTo41);
+			}
+			if (twoPoint.size() < 2){
+			SPoint3 prCenterTo23 = planeDirProject(_damageVolumeCenter,v2,v3,_lostSolutionUniquenssNormal);
+				if (inside(prCenterTo23,v2,v3)){
+					twoPoint.push_back(prCenterTo23);
+				}
+			}
+			if (twoPoint.size() < 2){
+				SPoint3 prCenterTo34 = planeDirProject(_damageVolumeCenter,v3,v4,_lostSolutionUniquenssNormal);
+				if (inside(prCenterTo34,v3,v4)){
+					twoPoint.push_back(prCenterTo34);
+				}
+			}
+			
+			if (twoPoint.size() == 2){
+				_homogenizedCrackSurface = twoPoint[0].distance(twoPoint[1]);
+				Msg::Info("_homogenizedCrackSurface = %f ",_homogenizedCrackSurface);
+			}
+			else{
+				Msg::Error("computeHomogenizedCrackLength is wrong ele %d, gp %d _lostSolutionUniquenssNormal = [%f %f %f]",_enum,_gnum,
+								_lostSolutionUniquenssNormal[0],_lostSolutionUniquenssNormal[1],_lostSolutionUniquenssNormal[2]);
+			}
+			
+		}
+		_homogenizedCrackSurface *= (_Lz.norm()); // generally, _LzNorm = 1
+		
+	}
+	else if (getDim() == 3){
+		
+	}
+	else{
+		Msg::Fatal("computeHomogenizedCrackLength has not been implemented for %d D problems");
+		
+	}
+};
+
 
 void nonLinearMechSolver::setMessageView(const bool view){
   _messageView = view;
@@ -9370,26 +9720,30 @@ void nonLinearMechSolver::createEigenvalueSolver(){
 	  linearSystem<double>* lsysB = pAssembler->getLinearSystem(strB);
 	  linearSystemPETSc<double>* lpetB = dynamic_cast<linearSystemPETSc<double>*>(lsysB);
 
-      if (lpetA != NULL ){
-        if (lpetB)
-          _eigenSolver = new eigenSolver(lpetA,lpetB);
-        else
-          _eigenSolver = new eigenSolver(lpetA);
+		if (lpetA != NULL ){
+			if (lpetB)
+				_eigenSolver = new eigenSolver(lpetA,lpetB);
+			else
+				_eigenSolver = new eigenSolver(lpetA);
 
       // for eigen mode view
-      _eigfield.clear();
+			if (_eigfield.size() > 0){
+				for (int i= 0; i< _eigfield.size(); i++){
+					delete _eigfield[i];
+				}
+				_eigfield.clear();
+			}
       for (int i=0; i<_modeview.size(); i++){
         std::string modefilename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_mode";
-        unknownField* field = new eigenVectorField(pAssembler,domainVector,_ghostDomainMPI,
-                                                   &_allContact,3,anoded,_eigview[i],_eigenSolver,_modeview[i],modefilename);
+        unknownField* field = new eigenVectorField(this,3,anoded,_eigview[i],_eigenSolver,_modeview[i],modefilename);
         _eigfield.push_back(field);
       };
       std::string eigfilename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_eigenValue.csv";
         _eigenValueFile = fopen(eigfilename.c_str(),"w");
 	  }
-	else{
-      Msg::Fatal("eigensolver requires PETSc");
-	}
+		else{
+				Msg::Fatal("eigensolver requires PETSc");
+		}
   };
 };
 
@@ -9497,9 +9851,27 @@ void nonLinearMechSolver::closeAllFile(){
 
 void nonLinearMechSolver::nextStep(){
   // in microBC
-	if (_microBC!=NULL){
+	bool BCIsChanged = false;
+	if (_failureBCIsSwitched){
+		
+		if (_microFailureBC == NULL) {
+			Msg::Error("_microFailureBC is null in nonLinearMechSolver::nextStep");
+		}
+		else{
+			const homogenizedData* homodataPrev = this->getHomogenizationState(IPStateBase::initial);
+			const homogenizedData* homodata = this->getHomogenizationState(IPStateBase::current);
+			if ((!homodataPrev->getBrokenFlag()) and (homodata->getBrokenFlag())){
+				this->switchMicroBC(_microFailureBC);				
+				printf("ranks %d microBC has just been changed \n",Msg::GetCommRank());
+				BCIsChanged = true;
+			}
+		}
+	}
+	
+	if (!BCIsChanged){
 		_microBC->nextStep();
 	}
+	
   // archive data
   this->archiveData(0.,0.);
 
@@ -9678,132 +10050,116 @@ linearSystem<double>* nonLinearMechSolver::createMicroSNLSystem(){
 };
 
 void nonLinearMechSolver::createMicroSystem(){
-  if (!_previousInit){
-    linearSystem<double>* lsys = createMicroSNLSystem();
-    if (_controlType == ARC_CONTROL_EULER or whatScheme == StaticLinear)
-      pAssembler = new dofManager<double>(lsys);
-    else
-      pAssembler = new staticDofManager<double>(lsys,whatScheme,false,false);
-  };
+	linearSystem<double>* lsys = createMicroSNLSystem();
+	dofManager<double>* oldManager = pAssembler; // store old manager
+	
+	// create a new one
+	if (_controlType == ARC_CONTROL_EULER or whatScheme == StaticLinear){
+		pAssembler = new dofManager<double>(lsys,false);
+	}
+	else{
+		pAssembler = new staticDofManager<double>(lsys,whatScheme,false,false);
+	}
+	
+	// transfer data if needed
+	if (oldManager != NULL){
+		staticDofManager<double>* oldSmanager = dynamic_cast<staticDofManager<double>*>(oldManager);
+		if (oldSmanager != NULL){
+			staticDofManager<double>* sAssembler = dynamic_cast<staticDofManager<double>*>(pAssembler);
+			if (sAssembler != NULL){
+				sAssembler->collecDataFromPrevious(oldSmanager);
+			}
+			delete oldSmanager;
+		}
+	}
 };
 
-void nonLinearMechSolver::initMicroSolver(){
-  if (_messageView){
-    std::string filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_out.txt";
-    _outputFile = fopen(filename.c_str(),"w");
-
-    fprintf(_outputFile,"Initializing on processor %d of %d \nMicro-problem: element %d, gauss point %d \nMicro SNL Data : nstep =%d  endtime = %f\n",
-        Msg::GetCommRank(),Msg::GetCommSize(),this->getElementSolverNumber(),this->getGaussPointSolverNumber(),
-        _numstepImpl,endtime);
-  }
-
-  // read mesh file
-  this->init();
-
-
+void nonLinearMechSolver::init2Micro(){
 	// get quantities for micro BC
 	if (_microBC == NULL){
-		Msg::Fatal("Microscopic BC must be specified nonLinearMechSolver::initMicroSolver");
-	}
-
-  if (_microBC->getOrder() >1)
-    _highOrderFlag = true;
-  else
-    _highOrderFlag = false;
-
-
-
-	// add BC suppport
-	std::vector<groupOfElements*>& bgroup  = _microBC->getBoundaryGroupOfElements();
-	const std::vector<int>& bphysical = _microBC->getBoundaryPhysicals();
-	bgroup.clear();
-	for (int i=0; i< bphysical.size(); i++){
-		groupOfElements* gr = new groupOfElements(_dim-1,bphysical[i]);
-		bgroup.push_back(gr);
+		Msg::Fatal("Microscopic BC must be specified nonLinearMechSolver::init2Micro");
 	}
-
+	
   // create system, dofManager
   this->createMicroSystem();
+	
+	// init all other BC
+  this->initAllBCsOnDofs();
 
   // create periodic algorithm
-  if (_pAl) delete _pAl;
-	_pAl = new pbcAlgorithm(_microBC,domainVector,pAssembler);
-
-	//pbc data from file
-	if (bgroup.size() == 0){
-    _pAl->getPBCConstraintGroup()->createPBCFromFile(_pbcNodeData,pModel);
+  if (_pAl != NULL){
+		delete _pAl; Msg::Info("pbcAlgorithm is deleted");
 	}
-
-  // set initial time for micro BC
-  this->setTimeForBC(0.);
-  double dtInit = endtime/double(_numstepImpl);
-  this->setTimeForLaw(0.,dtInit);
-
-  // init all other BC
-  this->initAllBCsOnDofs();
-
-	// split dofs
-  if (!_pAl->isSplittedDof()) _pAl->splitDofs();
-
+	_pAl = new pbcAlgorithm(this); // create all constraints, etc
+	
   // number Dof and allocate the system
   this->microNumberDof();
+	
+	if (_previousInit){
+    staticDofManager<double>* sAssembler = static_cast<staticDofManager<double>*>(pAssembler);
+    sAssembler->updateFromPrevious();
+  }
 
   /* initialization of Dof value */
   this->setInitialCondition();
+	
+	if (!_archive){
+		unknownView.clear();
+		ipView.clear();
+		energyView.clear();
+		OneUnknownView.clear();
+	}
+	
+	if (_ufield) delete _ufield;
+	std::string dispfile ="E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_disp.msh";
+	_ufield = new unknownField(this,3,anoded,unknownView,dispfile); // 3 components by nodes User choice ??
+
+	if (OneUnknownView.size() > 0){
+		std::string Onedispfile ="E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_dispComponent.msh";
+		if (_oneUnknownField) delete _oneUnknownField;
+		_oneUnknownField = new OneUnknownField(this,OneUnknownView,Onedispfile);
+	}
+	
+	if (!_previousInit){
+		if (_ipf) delete _ipf;
+		std::string ipfile = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_stress.msh";
+		_ipf = new IPField(this,vaip,ipView,ipfile); // Field for GaussPoint
+		
+		_ipf->compute1state(IPStateBase::current,true);
+		_ipf->copy(IPStateBase::current,IPStateBase::previous);
+		_ipf->copy(IPStateBase::current,IPStateBase::initial);
+
+		_ipf->initialBroken(pModel, initbrokeninter);
+		// initially broken on whole domain
+		for (int idom=0; idom< domainVector.size(); idom++){
+			dgPartDomain* dgdom = dynamic_cast<dgPartDomain*>(domainVector[idom]);
+			if (dgdom != NULL) {
+				if (dgdom->allInterfaceIPsAreBrokenFromBeginning()){
+					dgdom->initiallyBreakAllInterfaceIP(_ipf->getAips());
+				}
 
-  // create ufield, ipfield
-  if (_ufield) delete _ufield;
-  if (_ipf) delete _ipf;
-  if (_energField) delete _energField;
-  // clear all view if non archive
-  if (!_archive){
-    unknownView.clear();
-    ipView.clear();
-    energyView.clear();
-  }
-
-  std::string dispfile ="E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_disp.msh";
-  _ufield = new unknownField(pAssembler,domainVector,_ghostDomainMPI,&_allContact,3,anoded,unknownView,dispfile); // 3 components by nodes User choice ??
-
-
-  if (OneUnknownView.size() > 0){
-    std::string Onedispfile ="E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_dispComponent.msh";
-    _oneUnknownField = new OneUnknownField(pAssembler,&domainVector,OneUnknownView,Onedispfile);
-  }
-
-  std::string ipfile = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_stress.msh";
-  _ipf = new IPField(this,&domainVector,pAssembler,_ufield,vaip,ipView,ipfile); // Field for GaussPoint
-
-  _energyComputation = 0;
-  _fractureEnergyComputation = 0;
-  _energField = new energeticField(_ipf,_ufield,pAssembler,domainVector,_allContact,energyView,
-                                   _energyComputation,_fractureEnergyComputation,getScheme());
-
-
-  if (_eigflag){
-    if (_outputFile)
-      fprintf(_outputFile,"Create EigenSolver \n");
-    createEigenvalueSolver();
-    if (_outputFile)
-      fprintf(_outputFile,"EigenSolver created \n");
-  };
-
-  _ipf->compute1state(IPStateBase::current,true);
-	_ipf->copy(IPStateBase::current,IPStateBase::previous);
-  _ipf->copy(IPStateBase::current,IPStateBase::initial);
-
-  _ipf->initialBroken(pModel, initbrokeninter);
-  // initially broken on whole domain
-  for (int idom=0; idom< domainVector.size(); idom++){
-    dgPartDomain* dgdom = dynamic_cast<dgPartDomain*>(domainVector[idom]);
-    if (dgdom != NULL) {
-      if (dgdom->allInterfaceIPsAreBrokenFromBeginning()){
-        dgdom->initiallyBreakAllInterfaceIP(_ipf->getAips());
-      }
-
-    }
-  }
+			}
+		}
+	}
+	else{
+		_ipf->resetFile();
+    _ipf->copy(IPStateBase::current,IPStateBase::initial);
+    _ipf->copy(IPStateBase::current,IPStateBase::previous); 
+	}
+	
+	if (_energField) delete _energField;
+	_energyComputation = 0;
+	_fractureEnergyComputation = 0;
+	_energField = new energeticField(this,energyView,_energyComputation,_fractureEnergyComputation,getScheme());
 
+	if (_eigflag){
+		if (_outputFile)
+			fprintf(_outputFile,"Create EigenSolver \n");
+		createEigenvalueSolver();
+		if (_outputFile)
+			fprintf(_outputFile,"EigenSolver created \n");
+	};
+		
   // init terms
   this->initTerms(_ufield,_ipf);
 
@@ -9813,62 +10169,110 @@ void nonLinearMechSolver::initMicroSolver(){
 
   if (_stabilityCriterionFollowing == true){
     std::string filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_stabilityCriterion.csv";
+		if (_criterionFile != NULL) fclose(_criterionFile);
     _criterionFile = fopen(filename.c_str(),"w");
   }
   // rve_volume from periodicity
-  if (_rveVolume <= 0.){
-    SVector3 vec = crossprod(_Lx,_Ly);
-    _rveVolume = dot(vec,_Lz);
-	}
+	if (!_previousInit){
+		if (_rveVolume <= 0.){
+			SVector3 vec = crossprod(_Lx,_Ly);
+			_rveVolume = dot(vec,_Lz);
+		}
+		// compute density
+		this->computeDensity();
+		if (_isHommProSaveToFile){
+			std::string denfile = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_density.csv";
+			FILE* fileden = fopen(denfile.c_str(),"w");
+			fprintf(fileden,"%e",this->_rho);
+			fclose(fileden);
+		}	
+	
+
+		_initialState = new homogenizedData(this,_damageToCohesiveJump,_extractIrreversibleEnergy);
+		_currentState = new homogenizedData(this,_damageToCohesiveJump,_extractIrreversibleEnergy);;
 
-  // compute density
-  this->computeDensity();
-  if (_isHommProSaveToFile){
-    std::string denfile = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_density.csv";
-    FILE* fileden = fopen(denfile.c_str(),"w");
-    fprintf(fileden,"%e",this->_rho);
-    fclose(fileden);
-  }
+    /** initial tangent**/
 
-	_initialState = new homogenizedData(_microBC,_damageToCohesiveJump,_extractIrreversibleEnergy);
-	_currentState = new homogenizedData(_microBC,_damageToCohesiveJump,_extractIrreversibleEnergy);;
+		this->extractAverageProperties(_tangentflag);
 
-    /** initial tangent**/
+		(*_initialState) = (*_currentState);
 
-  this->extractAverageProperties(_tangentflag);
+		if (_multiscaleFlag == false){
+			if (_microBC->getTotalNumberOfMechanicalDofs() > 0) {
+				_currentState->getHomogenizedStress().print("stress");
+				if (_tangentflag){
+					_currentState->getHomogenizedTangentOperator_F_F().print("tangent");
+				}
+				if (_microBC->getOrder() == 2)
+					_currentState->getHomogenizedSecondOrderStress().print("ho stress");
+			}
 
-  (*_initialState) = (*_currentState);
+			for (int index=0; index< _microBC->getTotalNumberOfConDofs(); index++){
+				_currentState->getHomogenizedConstitutiveExtraDofFlux(index).print("ConExtraDof flux");
+				printf("_currentState constitutive extra dof %d internal energy: %f \n", index, _currentState->getHomogenizedConstitutiveExtraDofInternalEnergy(index));
+			}
 
-  if (_multiscaleFlag == false){
-		if (_microBC->getTotalNumberOfMechanicalDofs() > 0) {
-			_currentState->getHomogenizedStress().print("stress");
-			if (_tangentflag){
-				_currentState->getHomogenizedTangentOperator_F_F().print("tangent");
+			for (int index=0; index< _microBC->getTotalNumberOfNonConDofs(); index++){
+				_currentState->getHomogenizedNonConstitutiveExtraDofFlux(index).print("nonConExtraDof flux");
 			}
-			if (_microBC->getOrder() == 2)
-				_currentState->getHomogenizedSecondOrderStress().print("ho stress");
 		}
 
-		for (int index=0; index< _microBC->getTotalNumberOfConDofs(); index++){
-			_currentState->getHomogenizedConstitutiveExtraDofFlux(index).print("ConExtraDof flux");
-			printf("_currentState constitutive extra dof %d internal energy: %f \n", index, _currentState->getHomogenizedConstitutiveExtraDofInternalEnergy(index));
-		}
+		_homogenizedFiles = new homogenizedDataFiles(this);
+		bool saveCohesiveLawFile = (_isHommProSaveToFile and _damageToCohesiveJump);
+		_homogenizedFiles->openFiles(_enum,_gnum,this,_isHommStrainSaveToFile,_isHommProSaveToFile,saveCohesiveLawFile);
+		this->homogenizedDataToFile(0.);
+		
+	}
+	else{
+		// extract with new BC
+		this->extractAverageProperties(_tangentflag); 
+		if (_multiscaleFlag == false){
+			if (_microBC->getTotalNumberOfMechanicalDofs() > 0) {
+				_currentState->getHomogenizedStress().print("stress");
+				if (_tangentflag){
+					_currentState->getHomogenizedTangentOperator_F_F().print("tangent");
+				}
+				if (_microBC->getOrder() == 2)
+					_currentState->getHomogenizedSecondOrderStress().print("ho stress");
+			}
 
-		for (int index=0; index< _microBC->getTotalNumberOfNonConDofs(); index++){
-			_currentState->getHomogenizedNonConstitutiveExtraDofFlux(index).print("nonConExtraDof flux");
+			for (int index=0; index< _microBC->getTotalNumberOfConDofs(); index++){
+				_currentState->getHomogenizedConstitutiveExtraDofFlux(index).print("ConExtraDof flux");
+				printf("_currentState constitutive extra dof %d internal energy: %f \n", index, _currentState->getHomogenizedConstitutiveExtraDofInternalEnergy(index));
+			}
+
+			for (int index=0; index< _microBC->getTotalNumberOfNonConDofs(); index++){
+				_currentState->getHomogenizedNonConstitutiveExtraDofFlux(index).print("nonConExtraDof flux");
+			}
 		}
-  }
+		
+		bool saveCohesiveLawFile = (_isHommProSaveToFile and _damageToCohesiveJump);
+		_homogenizedFiles->openFiles(_enum,_gnum,this,_isHommStrainSaveToFile,_isHommProSaveToFile,saveCohesiveLawFile);
+		this->homogenizedDataToFile(0.);
+	}
+	
+	_previousInit = true;
+	
+};
 
-	_homogenizedFiles = new homogenizedDataFiles(_microBC);
-	bool saveCohesiveLawFile = (_isHommProSaveToFile and _damageToCohesiveJump);
-  _homogenizedFiles->openFiles(_enum,_gnum,_microBC,_isHommStrainSaveToFile,_isHommProSaveToFile,saveCohesiveLawFile);
-  this->homogenizedDataToFile(0.);
-  _previousInit = true;
+void nonLinearMechSolver::initMicroSolver(){
+  if (_messageView){
+    std::string filename = "E_"+int2str(_enum)+"_GP_"+int2str(_gnum)+"_out.txt";
+		if (_outputFile != NULL) fclose(_outputFile);
+    _outputFile = fopen(filename.c_str(),"w");
 
-  if (_outputFile) {
-    fprintf(_outputFile,"---------End of initialization-------- \n");
-    fflush(_outputFile);
+    fprintf(_outputFile,"Initializing on processor %d of %d \nMicro-problem: element %d, gauss point %d \nMicro SNL Data : nstep =%d  endtime = %f\n",
+        Msg::GetCommRank(),Msg::GetCommSize(),this->getElementSolverNumber(),this->getGaussPointSolverNumber(),
+        _numstepImpl,endtime);
   }
+  // read mesh file
+  this->init();
+	this->init2Micro();
+	
+	if (_outputFile) {
+		fprintf(_outputFile,"---------End of initialization-------- \n");
+		fflush(_outputFile);
+	}
 };
 
 double nonLinearMechSolver::microSolve(){
@@ -10899,7 +11303,7 @@ void nonLinearMechSolver::constraint_test(const double time){
 
 
     FunctionSpaceBase* lagspace = domainVector[0]->getFunctionSpace();
-    _pbcGroup = new pbcConstraintElementGroup(_microBC,domainVector,lagspace,NULL);
+    _pbcGroup = new pbcConstraintElementGroup(this,lagspace,NULL);
     /*create all linear constraints*/
     _pbcGroup->createConstraintForTest();
     /*enforce constraints to system*/
@@ -10954,6 +11358,10 @@ void nonLinearMechSolver::setRVELengthInNormalDirection(const double l, const do
 	_surfaceReductionRatio = sfR;
 };
 
+void nonLinearMechSolver::setVoidPartInLocalizationBand(const double vp){
+	_voidPartInLocalizationBand = vp;
+};
+
 
 void nonLinearMechSolver::setLocationForStressExtraction(const int loc){
 	_stressExtractLocation = (STRESS_EXTRACT_LOCATION)loc;
@@ -10970,3 +11378,37 @@ void nonLinearMechSolver::setLocationForStressExtraction(const int loc){
 		Msg::Fatal("cohesive traction location %d has not been implemeneted",loc);
 	}
 };
+
+void nonLinearMechSolver::setCheckFailureOnset(const bool fl){
+	_checkFailureOnset = fl;
+};
+
+void nonLinearMechSolver::switchMicroBC(const nonLinearMicroBC* mbc){
+	this->addMicroBC(mbc);
+	// recreate system, 
+  this->createMicroSystem();
+	
+	// init all other BC, fixed DOf, etc
+  this->initAllBCsOnDofs();
+
+  // create new pbcAlgorithm
+  if (_pAl != NULL){
+		delete _pAl; 
+	}
+	_pAl = new pbcAlgorithm(this); // create all constraints, etc
+	
+  // renumber Dof and reallocate the system
+  this->microNumberDof();
+	
+	// update unknown from previous system
+	staticDofManager<double>* sAssembler = this->getStaticDofManager();
+	if (sAssembler != NULL){
+		sAssembler->updateFromPrevious();
+	}
+	_ipf->copy(IPStateBase::current,IPStateBase::initial);
+	_ipf->copy(IPStateBase::current,IPStateBase::previous); 
+};
+
+void nonLinearMechSolver::setSwitchMicroBCFlag(const bool fl){
+	_failureBCIsSwitched = fl;
+};
\ No newline at end of file
diff --git a/NonLinearSolver/nlsolver/nonLinearMechSolver.h b/NonLinearSolver/nlsolver/nonLinearMechSolver.h
index 770fc7faf5d997cfe733fb7cea46858209c39e65..660bd9cd6f4fc304e90c35d5ad3ba6232ad56741 100644
--- a/NonLinearSolver/nlsolver/nonLinearMechSolver.h
+++ b/NonLinearSolver/nlsolver/nonLinearMechSolver.h
@@ -178,7 +178,13 @@ class nonLinearMechSolver
   dofManager<double> *pAssembler;
   // IPField declared here to allow to pass it from one scheme to an other scheme
   IPField* _ipf;
-
+	// unknown field
+  unknownField* _ufield;
+  //
+  OneUnknownField* _oneUnknownField; // for viewer
+  // energetic field
+  energeticField* _energField;
+	
 //  dgGroupCollection _groups;
   // specific data
   int _numstepImpl, _numstepExpl; // Number of step not used for StaticLinearScheme and number of step between time step evaluation for Explicit Scheme
@@ -326,11 +332,15 @@ class nonLinearMechSolver
 	bool _globalCheckFlag; // true if global verification based on _erosionGlobalCriterion
 	elementErosionFilter _elementErosionFilter; // a set consists of all erosion elements
 
+	//
+	bool _GModelIsRotated; //
+	std::map<int, STensor3> allInterfaceLocalBasis; // ele+ gp, [n b t]
+
 #ifndef SWIG
   void commonModel(); // common operation for loadModel and createModel
   void initMapRanks(const std::set<int>& parts);
   void init();
-  void init2(unknownField* &ufield, energeticField* &efield); // Has to be regrouped with init() Van Dung ??
+  void init2(); // Has to be regrouped with init() Van Dung ??
 	void initAllBCsOnDofs();
   void initTerms(unknownField *ufield, IPField *ipf);
   void endOfScheme(unknownField *ufield,energeticField *efield,const double endtime, const int endstep); // common operation at the end of a scheme
@@ -340,6 +350,10 @@ class nonLinearMechSolver
   void computeIPCompDamageZoneAveraging(const double time);
   void fillMapOfInterfaceElementsInOneDomain(MElement *e, std::vector<MElement*> &eleFound,
                                 const groupOfElements *g) const;
+																
+	void fillLocalReferenceBasisForAllInterfaceElement();
+	
+	
   void setPairSpaceElementForBoundaryConditions(); // new implementation
 
   // Function used by non linear solver (return the number of iteration to converge)
@@ -420,6 +434,7 @@ class nonLinearMechSolver
 	bool isMultiscale() const;
   bool isDgDomain() const;
 	bool isDamage() const;
+	void getLocalBasis(const MElement* ele, const int gpt, SVector3& n, SVector3& t, SVector3& b) const;
 
   int getDim() const {return _dim;};
   int getStepBetweenArchiving() const{return nsba;}
@@ -442,6 +457,34 @@ class nonLinearMechSolver
   virtual bool mustRestart(const int numstep);
 	pathFollowingLocalIncrementType getPathFollowingLocalIncrementType() const{return _pathFollowingIncrementType;};
 	pathFollowingLocation getPathFollowingLocation() const {return _pathFollowingLocation;};
+
+	void rotateModel(const SVector3& n1, const SVector3& n2, const SVector3& n3);
+  bool GModelIsRotated() const {return _GModelIsRotated;}
+	
+	IPField* getIPField();
+	const IPField* getIPField() const ;
+	
+	unknownField* getUnknownField();
+	const unknownField* getUnknownField() const;
+	
+	dofManager<double>* getDofManager() ;
+	const dofManager<double>* getDofManager() const;
+	
+	staticDofManager<double>* getStaticDofManager();
+	const staticDofManager<double>* getStaticDofManager() const ;
+	
+	std::vector<partDomain*>* getDomainVector();
+	const std::vector<partDomain*>* getDomainVector() const;
+	
+	std::vector<partDomain*>* getGhostDomainMPI();
+	const std::vector<partDomain*>* getGhostDomainMPI() const;
+	
+	contactContainer* getAllContactDomain();
+	const contactContainer* getAllContactDomain() const;
+	
+	GModel* getGModel();
+	const GModel* getGModel() const;
+	
 #endif
   virtual double solveStaticLinear();
   virtual double solveSNL();
@@ -635,6 +678,8 @@ class nonLinearMechSolver
   SVector3  _Lx, _Ly, _Lz;
   //micro BC
   nonLinearMicroBC* _microBC;
+	nonLinearMicroBC* _microBCOld;
+	nonLinearMicroBC* _microFailureBC;
   //stress flag and tangent flag
   bool _stressflag, _tangentflag;
   // homogenized density
@@ -652,12 +697,6 @@ class nonLinearMechSolver
   pbcAlgorithm* _pAl;
   // for tangent estimation
   stiffnessCondensation* _condensation;
-  // unknown field
-  unknownField* _ufield;
-  //
-  OneUnknownField* _oneUnknownField; // for viewer
-  // energetic field
-  energeticField* _energField;
   // eigensolver using for stability analysis
   bool _eigflag;
   eigenSolver* _eigenSolver;
@@ -701,7 +740,7 @@ class nonLinearMechSolver
   FILE* _homogenizedStressPBC;
 
 	bool _damageIsBlocked;
-
+	bool _checkFailureOnset;
 	bool _damageToCohesiveJump; // true if extracting cohsive law
 
   STensor3 _FdamOnset; // average damage deformation at failure onset
@@ -711,6 +750,7 @@ class nonLinearMechSolver
 
   double _maximalLostEllipticityCriterion; // maximal value
 	double _lostSolutionUniquenssTolerance;
+	double _voidPartInLocalizationBand; // void part in localization band
 
 	bool _extractIrreversibleEnergy; // flag
 	STRESS_EXTRACT_LOCATION _stressExtractLocation;
@@ -719,13 +759,18 @@ class nonLinearMechSolver
 	STensor3 _homogenizedStressLastActiveDamage;
 	STensor3 _homogenizedStrainLastActiveDamage;
 	SVector3 _homogenizedCohesiveJumpLastActiveDamage;
-
+	SPoint3 _damageVolumeCenter;
+	double _homogenizedCrackSurface;
   bool _useMatMatSolveToInvertMatrix;
-
+	
+	// 
+	bool _failureBCIsSwitched; // true if FailureBC is switsched after failure, 
 
  #endif //SWIG
  protected:
  #ifndef SWIG
+	void init2Micro();
+	void switchMicroBC(const nonLinearMicroBC* mbc);
   void setTimeForMicroBC(const double time);
   void microNumberDof();
 
@@ -790,12 +835,18 @@ class nonLinearMechSolver
 
 	nonLinearMicroBC* getMicroBC() {return _microBC;};
 	const nonLinearMicroBC* getMicroBC() const {return _microBC;};
+	
+	nonLinearMicroBC* getMicroBCFailure() {return _microFailureBC;};
+	const nonLinearMicroBC* getMicroBCFailure() const {return _microFailureBC;};
+	
 
   void resetSolverToInitialStep();
   void closeAllFile();
 
 	void checkFailureOnset_withoutNormalVector();
 	void checkFailureOnset_withNormalVector();
+	
+	void computeHomogenizedCrackFace();
 
 	double getConstitutiveExtraDofEquationRatio(const int index) const;
 	double getNonConstitutiveExtraDofEquationRatio(const int index) const;
@@ -810,10 +861,18 @@ class nonLinearMechSolver
 
 	SVector3& getLostSolutionUniquenssNormal();
 	const SVector3& getLostSolutionUniquenssNormal() const;
+	
+	SPoint3& getHomogenizedDamageVolumeCenter(); 
+	const SPoint3& getHomogenizedDamageVolumeCenter() const;
+
+	double& getHomogenizedCrackFace();
+	const double& getHomogenizedCrackFace() const;
 
 	STensor3& getFdamOnset();
 	const STensor3& getFdamOnset() const;
-
+	bool checkFailureOnset() const;
+	
+	FILE * getPBCFile() {return _pbcNodeData;};
 
  #endif // SWIG
   void createMicroModel(const std::string geoFile, const int dim, const int order, const bool incomplte  = false);
@@ -827,6 +886,7 @@ class nonLinearMechSolver
   void setMessageView(const bool view);
   void setPeriodicity(const double x, const double y, const double z, const std::string direction);
   void addMicroBC(const nonLinearMicroBC* bc);
+	void addMicroBCForFailure(const nonLinearMicroBC* bc);
   // for instability
   void eigenValueSolver(const int num = 10, const bool fl = true); // number of eigenvalue
   void setEigenSolverParamerters(const int type, const int numiter, const std::string method, const double tol, const bool mktofile = false);
@@ -881,8 +941,13 @@ class nonLinearMechSolver
 	void setLocalizationNormal(const SVector3& normal);
 	void setLocalizationNormal(const double n1, const double n2, const double n3);
 	void setRVELengthInNormalDirection(const double l, const double surfaceReductionRatio=1.); // surface ratio
+	void setVoidPartInLocalizationBand(const double vp);
 
 	void setLocationForStressExtraction(const int loc);
+	void setCheckFailureOnset(const bool fl);
+	
+
+	void setSwitchMicroBCFlag(const bool fl);
 };
 
 #endif //_NONLINEARMECHSOLVER_H_
diff --git a/NonLinearSolver/periodicBC/CMakeLists.txt b/NonLinearSolver/periodicBC/CMakeLists.txt
index b01a762fb346e6285ddb766e3f2e7710615fbb2c..f35e67d09af2574281bb5c076d66b4e3d1154c54 100644
--- a/NonLinearSolver/periodicBC/CMakeLists.txt
+++ b/NonLinearSolver/periodicBC/CMakeLists.txt
@@ -32,6 +32,7 @@ set(SRC
 	pbcVertex.cpp
   pbcSupplementConstraintExtraDofDiffusion.cpp
   geometryRotation.cpp
+  directionalConstraintElement.cpp
 )
 
 file(GLOB HDR RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h) 
diff --git a/NonLinearSolver/periodicBC/directionalConstraintElement.cpp b/NonLinearSolver/periodicBC/directionalConstraintElement.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8ecaf5d5b65ce018b99d3c8060717a0f2ab3f101
--- /dev/null
+++ b/NonLinearSolver/periodicBC/directionalConstraintElement.cpp
@@ -0,0 +1,1018 @@
+//
+//
+// Description: directional mixed BC
+//
+// Author:  <Van Dung NGUYEN>, (C) 2017
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#include "directionalConstraintElement.h"
+#include "pbcConstraintElement.h"
+#include "pbcSupplementConstraint.h"
+
+directionalPeriodicMeshConstraint::directionalPeriodicMeshConstraint(nonLinearMicroBC* mbc,FunctionSpaceBase* spacePlus, FunctionSpaceBase* spaceMinus, FunctionSpaceBase* multspace, 
+													 MVertex* vp, MVertex* vn, const SVector3& dir): constraintElement(mbc,-1),_periodicSpacePlus(spacePlus),
+													 _periodicSpaceMinus(spaceMinus), _multSpace(multspace),_vp(vp),_vn(vn){
+	
+	if (_mbc->getOrder() == 2){
+		Msg::Fatal("directionalPeriodicMeshConstraint has not been implemented for SecondOrder");	
+	}
+		
+	const std::vector<int>& comp = this->getComp();
+	SVector3 L(0.);
+	if (_vn){
+		L(0) = _vp->x() - _vn->x();
+		L(1) = _vp->y() - _vn->y();
+		L(2) = _vp->z() - _vn->z();
+		
+		_C.resize(1,2*_ndofs);
+		_C.setAll(0.0);
+		for (int i=0; i< _ndofs; i++){
+			_C(0,i) = dir[i];
+			_C(0,i+_ndofs) = -dir[i];
+		}
+		
+	}
+	else{
+		L(0) = _vp->x();
+		L(1) = _vp->y();
+		L(2) = _vp->z();
+		_C.resize(1,_ndofs);
+		_C.setAll(0.0);
+		for (int i=0; i< _ndofs; i++){
+			_C(0,i) = dir[i];
+		}
+	}
+		
+	// find maximal value for 
+	_positive = -1;
+	double maxCoeff = 0.;
+	bool found = false;
+	std::vector<Dof> keys;
+	getKeysFromVertex(_periodicSpacePlus,_vp, getComp(),keys); // all keys
+	// find all in positive Dofs
+	for (int i=0; i< _ndofs; i++){
+		if ((fabs(_C(0,i)) > fabs(maxCoeff)) and 
+				(constraintElement::allPositiveDof.find(keys[i]) == constraintElement::allPositiveDof.end())){
+			maxCoeff = _C(0,i);
+			_positive = i;
+			found = true;
+		}
+	}
+	if (found){
+		constraintElement::allPositiveDof.insert(keys[_positive]);
+	}
+	else{
+		Msg::Fatal("all positive vertex is considered");
+	}
+	_C.scale(1./maxCoeff);
+	
+	_Cbc.resize(1,_C.size2()-1);
+	_Cbc.setAll(0.);
+	int colCbc = 0;
+	for (int i=0; i<_C.size2(); i++){
+		if (i !=_positive){
+			_Cbc(0,colCbc) = -_C(0,i);
+			colCbc++;
+		}
+	};
+		
+	_S.resize(1,9);
+	_S.scale(0.);
+	for (int i=0; i<3; i++){
+		for (int j=0; j<3; j++){
+			int index = Tensor23::getIndex(i,j);
+			_S(0,index) = dir[i]*L(j)/maxCoeff;
+		}
+	}
+};
+
+void directionalPeriodicMeshConstraint::print() const{
+	if (_vn)
+		printf("directional constraint Postive = %d, negative = %d \n", _vp->getNum(), _vn->getNum());
+	else{
+		printf("directional constraint Periodic point = %d \n", _vp->getNum());
+	}
+};
+
+void directionalPeriodicMeshConstraint::getConstraintKeys(std::vector<Dof>& key) const{
+	getKeysFromVertex(_periodicSpacePlus,_vp, getComp(),key);
+	if (_vn) getKeysFromVertex(_periodicSpaceMinus,_vn,getComp(),key);
+};
+
+void directionalPeriodicMeshConstraint::getMultiplierKeys(std::vector<Dof>& key) const{
+	std::vector<int> comp;
+	comp.push_back(_positive);
+	getKeysFromVertex(_multSpace,_vp, comp,key);
+};
+void directionalPeriodicMeshConstraint::getConstraintMatrix(fullMatrix<double>& m) const{
+	m = _C;
+};
+
+void directionalPeriodicMeshConstraint::getDependentMatrix(fullMatrix<double>& m) const{
+  m = _Cbc;
+};
+
+void directionalPeriodicMeshConstraint::getDependentKeys(std::vector<Dof>& key) const{
+	std::vector<Dof> allkeys;
+	getConstraintKeys(allkeys);
+	key.push_back(allkeys[_positive]);
+};
+
+void directionalPeriodicMeshConstraint::getIndependentKeys(std::vector<Dof>& key) const{
+  std::vector<Dof> allkeys;
+	getConstraintKeys(allkeys);
+	for (int i=0; i< allkeys.size(); i++){
+		if (i != _positive){
+			key.push_back(allkeys[i]);
+		}
+	}
+};
+
+bool directionalPeriodicMeshConstraint::isDirect() const {
+	return false;
+}
+
+void directionalPeriodicMeshConstraint::getLinearConstraints(const fullVector<double>& g,
+                   std::map<Dof,DofAffineConstraint<double> >& con) const
+{
+  std::vector<Dof> kP, kN;
+  getDependentKeys(kP);
+	getIndependentKeys(kN);
+	
+  DofAffineConstraint<double> cons;
+	for (int i=0; i< kN.size(); i++){
+		cons.linear.push_back(std::pair<Dof,double>(kN[i],_Cbc(0,i)));
+	}
+	cons.shift=g(0);
+	con[kP[0]] = cons;
+}
+
+void directionalPeriodicMeshConstraint::getLinearConstraintsByVertices(std::map<Dof,DofAffineConstraint<double> >& con) const{
+	Msg::Fatal("this function is not used for directionalPeriodicMeshConstraint::getLinearConstraintsByVertices");
+};
+
+void directionalPeriodicMeshConstraint::getKinematicalVector(fullVector<double>& m) const{
+	fullVector<double> kinVec;
+	_mbc->getKinematicalVector(kinVec);
+	m.resize(1);
+	m.setAll(0.);
+	_S.mult(kinVec,m);
+};
+void directionalPeriodicMeshConstraint::getKinematicalMatrix(fullMatrix<double>& m) const{
+  m = _S;
+};
+void directionalPeriodicMeshConstraint::getLinearConstraints(std::map<Dof,DofAffineConstraint<double> >& con) const{
+  fullVector<double> g;
+  getKinematicalVector(g);
+  getLinearConstraints(g, con);
+};
+
+directionalSupplementConstraint::directionalSupplementConstraint(nonLinearMicroBC* mbc, FunctionSpaceBase* space, FunctionSpaceBase* mspace,
+												groupOfElements* g, const SVector3& dir): constraintElement(mbc,-1), _periodicSpace(space),_multSpace(mspace),_g(g){
+  
+	if (_mbc->getOrder() == 2){
+		Msg::Fatal("directionalPeriodicMeshConstraint has not been implemented for SecondOrder");	
+	}
+	int sizever = _g->vsize();
+	fullVector<double> weight;
+	supplementConstraint::computeWeight(_g,_v,weight);
+
+	SVector3 Xmean(0.);
+  for (int i=0; i<_v.size();i++){
+    MVertex* v = _v[i];
+    SPoint3 pnt = v->point();
+    for( int j=0; j<3; j++){
+      Xmean[j] += weight(i)*pnt[j];
+    }
+  }
+	//
+	_C.resize(1,sizever*_ndofs);
+	_C.setAll(0.);
+	int colC = 0;
+	for (int i=0; i< sizever; i++){
+		for (int j=0; j<_ndofs; j++){
+			_C(0,colC) = weight(i)*dir(j);
+			colC++;
+		}
+	}
+	
+	// find positive in order to obatain a good positive vertex
+	std::vector<Dof> keys;
+	for (int i=0; i<_v.size(); i++){
+		getKeysFromVertex(_periodicSpace,_v[i],getComp(),keys);
+	}
+			
+  _positive = -1;
+	double maxVal = 0.;
+	bool found = false;
+  for (int i=0; i<keys.size(); i++){
+    if ((fabs(_C(0,i))> fabs(maxVal)) && 
+				(constraintElement::allPositiveDof.find(keys[i]) == constraintElement::allPositiveDof.end())){
+      _positive = i;
+			maxVal = _C(0,i);
+			found = true;
+			_positiveVertex = i/_ndofs;
+			_positiveComp = i - _positiveVertex*_ndofs;
+    }
+  };
+	if (!found){
+		Msg::Fatal("All Dof are numerated as positive dof in other constraints supplementConstraint::supplementConstraint");
+	}
+	else{
+		constraintElement::allPositiveDof.insert(keys[_positive]);
+	}
+	
+	//Msg::Info("positive vertex %d positive comp %d",_positiveVertex,_positiveComp);
+
+  
+  double invs = 1./maxVal;
+  _C.scale(invs);
+	
+	_Cbc.resize(1, keys.size() -1);
+	_Cbc.setAll(0.);
+
+	int colCbc = 0;
+	for (int i=0; i<keys.size(); i++){
+		if (i !=_positive){
+			_Cbc(0,colCbc) = -_C(0,i);
+			colCbc++;
+		}
+	};
+	
+	_S.resize(1,9);
+	_S.scale(0.);
+	for (int i=0; i<3; i++){
+		for (int j=0; j<3; j++){
+			int index = Tensor23::getIndex(i,j);
+			_S(0,index) = dir[i]*Xmean(j)*invs;
+		}
+	}
+	
+	//_C.print("C");
+	//_Cbc.print("CBC");
+	//_S.print("S");
+};
+
+
+void directionalSupplementConstraint::getConstraintKeys(std::vector<Dof>& key) const {
+  for (int i=0; i<_v.size(); i++)
+		getKeysFromVertex(_periodicSpace,_v[i],getComp(),key);
+}
+void directionalSupplementConstraint::getMultiplierKeys(std::vector<Dof>& key) const{
+  std::vector<int> comp;
+	comp.push_back(_positiveComp);
+	getKeysFromVertex(_multSpace,_v[_positiveVertex], comp,key);
+}
+void directionalSupplementConstraint::getConstraintMatrix(fullMatrix<double>& m) const {
+  m = _C;
+};		// matrix C
+void directionalSupplementConstraint::getDependentMatrix(fullMatrix<double>& m) const{
+  m = _Cbc;
+}
+
+void directionalSupplementConstraint::getDependentKeys(std::vector<Dof>& key) const{
+	std::vector<Dof> allkeys;
+	getConstraintKeys(allkeys);
+	key.push_back(allkeys[_positive]);
+};
+
+void directionalSupplementConstraint::getIndependentKeys(std::vector<Dof>& key) const{
+  std::vector<Dof> allkeys;
+	getConstraintKeys(allkeys);
+	for (int i=0; i< allkeys.size(); i++){
+		if (i != _positive){
+			key.push_back(allkeys[i]);
+		}
+	}
+};
+
+
+void directionalSupplementConstraint::getLinearConstraints(const fullVector<double>& g,
+                   std::map<Dof,DofAffineConstraint<double> >& con) const
+{
+	std::vector<Dof> kP, kN;
+  getDependentKeys(kP);
+	getIndependentKeys(kN);
+	
+  DofAffineConstraint<double> cons;
+	for (int i=0; i< kN.size(); i++){
+		cons.linear.push_back(std::pair<Dof,double>(kN[i],_Cbc(0,i)));
+	}
+	cons.shift=g(0);
+	con[kP[0]] = cons;
+};
+
+void directionalSupplementConstraint::print() const{
+  Msg::Info("directional constraint Positive = %d",_v[_positiveVertex]->getNum());
+  for (int i=0; i<_v.size(); i++){
+    printf("%d \t",_v[i]->getNum());
+  }
+  printf("\n");
+};
+
+void directionalSupplementConstraint::getKinematicalVector(fullVector<double>& m) const{
+  fullVector<double> kinVec;
+	_mbc->getKinematicalVector(kinVec);
+	m.resize(1);
+	m.setAll(0.);
+	_S.mult(kinVec,m);
+};
+void directionalSupplementConstraint::getKinematicalMatrix(fullMatrix<double>& m) const{
+  m = _S;
+};
+void directionalSupplementConstraint::getLinearConstraints(std::map<Dof,DofAffineConstraint<double> >& con) const{
+
+  fullVector<double> g;
+  getKinematicalVector(g);
+  getLinearConstraints(g, con);
+};
+
+directionalPBCSupplementConstraint::directionalPBCSupplementConstraint(nonLinearMicroBC* mbc, FunctionSpaceBase* space, FunctionSpaceBase* mspace,
+												groupOfElements* gPlus, groupOfElements* gMinus, const SVector3& dir):
+ constraintElement(mbc,-1), _periodicSpace(space),_multSpace(mspace),_gPlus(gPlus),_gMinus(gMinus){
+  
+	if (_mbc->getOrder() == 2){
+		Msg::Fatal("directionalPBCSupplementConstraint has not been implemented for SecondOrder");	
+	}
+	
+	fullVector<double> weightPlus, weightMinus;
+	supplementConstraint::computeWeight(_gPlus,_vPlus,weightPlus);
+	supplementConstraint::computeWeight(_gMinus,_vMinus,weightMinus);
+	
+	SVector3 XmeanPlus(0.);
+  for (int i=0; i<_vPlus.size();i++){
+    MVertex* vv = _vPlus[i];
+    SPoint3 pnt = vv->point();
+    for( int j=0; j<3; j++){
+      XmeanPlus[j] += weightPlus(i)*pnt[j];
+    }
+  }
+	SVector3 XmeanMinus(0.);
+  for (int i=0; i<_vMinus.size();i++){
+    MVertex* vv = _vMinus[i];
+    SPoint3 pnt = vv->point();
+    for( int j=0; j<3; j++){
+      XmeanMinus[j] += weightMinus(i)*pnt[j];
+    }
+  }
+	
+	int csize = (_vPlus.size() + _vMinus.size())*_ndofs;
+	//
+	_C.resize(1,csize);
+	_C.setAll(0.);
+	int colC = 0;
+	for (int i=0; i< _vPlus.size(); i++){
+		for (int j=0; j<_ndofs; j++){
+			_C(0,colC) = weightPlus(i)*dir(j);
+			colC++;
+		}
+	}
+	for (int i=0; i< _vMinus.size(); i++){
+		for (int j=0; j<_ndofs; j++){
+			_C(0,colC) = -weightMinus(i)*dir(j);
+			colC++;
+		}
+	}
+	
+	
+	// find positive in order to obatain a good positive vertex
+	std::vector<Dof> keys;
+	for (int i=0; i<_vPlus.size(); i++){
+		getKeysFromVertex(_periodicSpace,_vPlus[i],getComp(),keys);
+	}
+	
+  _positive = -1;
+	double maxVal = 0.;
+	bool found = false;
+  for (int i=0; i<keys.size(); i++){
+    if ((fabs(_C(0,i))> fabs(maxVal)) && 
+				(constraintElement::allPositiveDof.find(keys[i]) == constraintElement::allPositiveDof.end())){
+      _positive = i;
+			maxVal = _C(0,i);
+			found = true;
+			_positiveVertex = i/_ndofs;
+			_positiveComp = i - _positiveVertex*_ndofs;
+    }
+  };
+	if (!found){
+		Msg::Fatal("All Dof are numerated as positive dof in other constraints directionalPBCSupplementConstraint::directionalPBCSupplementConstraint");
+	}
+	else{
+		constraintElement::allPositiveDof.insert(keys[_positive]);
+	}
+	
+	//Msg::Info("positive vertex %d positive comp %d",_positiveVertex,_positiveComp);
+
+
+  double invs = 1./maxVal;
+  _C.scale(invs);
+	
+	_Cbc.resize(1, csize -1);
+	_Cbc.setAll(0.);
+
+	int colCbc = 0;
+	for (int i=0; i<csize; i++){
+		if (i !=_positive){
+			_Cbc(0,colCbc) = -_C(0,i);
+			colCbc++;
+		}
+	};
+	
+	_S.resize(1,9);
+	_S.scale(0.);
+	for (int i=0; i<3; i++){
+		for (int j=0; j<3; j++){
+			int index = Tensor23::getIndex(i,j);
+			_S(0,index) = dir[i]*(XmeanPlus(j) - XmeanMinus(j))*invs;
+		}
+	}
+	
+	//_C.print("C");
+	//_Cbc.print("CBC");
+	//_S.print("S");
+};
+
+
+void directionalPBCSupplementConstraint::getConstraintKeys(std::vector<Dof>& key) const {
+  for (int i=0; i<_vPlus.size(); i++)
+		getKeysFromVertex(_periodicSpace,_vPlus[i],getComp(),key);
+	for (int i=0; i<_vMinus.size(); i++)
+		getKeysFromVertex(_periodicSpace,_vMinus[i],getComp(),key);
+}
+void directionalPBCSupplementConstraint::getMultiplierKeys(std::vector<Dof>& key) const{
+  std::vector<int> comp;
+	comp.push_back(_positiveComp);
+	getKeysFromVertex(_multSpace,_vPlus[_positiveVertex], comp,key);
+}
+void directionalPBCSupplementConstraint::getConstraintMatrix(fullMatrix<double>& m) const {
+  m = _C;
+};		// matrix C
+void directionalPBCSupplementConstraint::getDependentMatrix(fullMatrix<double>& m) const{
+  m = _Cbc;
+}
+
+void directionalPBCSupplementConstraint::getDependentKeys(std::vector<Dof>& key) const{
+	std::vector<Dof> allkeys;
+	getConstraintKeys(allkeys);
+	key.push_back(allkeys[_positive]);
+};
+
+void directionalPBCSupplementConstraint::getIndependentKeys(std::vector<Dof>& key) const{
+  std::vector<Dof> allkeys;
+	getConstraintKeys(allkeys);
+	for (int i=0; i< allkeys.size(); i++){
+		if (i != _positive){
+			key.push_back(allkeys[i]);
+		}
+	}
+};
+
+
+void directionalPBCSupplementConstraint::getLinearConstraints(const fullVector<double>& g,
+                   std::map<Dof,DofAffineConstraint<double> >& con) const
+{
+	std::vector<Dof> kP, kN;
+  getDependentKeys(kP);
+	getIndependentKeys(kN);
+	
+  DofAffineConstraint<double> cons;
+	for (int i=0; i< kN.size(); i++){
+		cons.linear.push_back(std::pair<Dof,double>(kN[i],_Cbc(0,i)));
+	}
+	cons.shift=g(0);
+	con[kP[0]] = cons;
+};
+
+void directionalPBCSupplementConstraint::print() const{
+  Msg::Info("directional constraint Positive = %d",_vPlus[_positiveVertex]->getNum());
+  for (int i=0; i<_vPlus.size(); i++){
+    printf("%d \t",_vPlus[i]->getNum());
+  }
+	for (int i=0; i<_vMinus.size(); i++){
+    printf("%d \t",_vMinus[i]->getNum());
+  }
+  printf("\n");
+};
+
+void directionalPBCSupplementConstraint::getKinematicalVector(fullVector<double>& m) const{
+  fullVector<double> kinVec;
+	_mbc->getKinematicalVector(kinVec);
+	m.resize(1);
+	m.setAll(0.);
+	_S.mult(kinVec,m);
+};
+void directionalPBCSupplementConstraint::getKinematicalMatrix(fullMatrix<double>& m) const{
+  m = _S;
+};
+void directionalPBCSupplementConstraint::getLinearConstraints(std::map<Dof,DofAffineConstraint<double> >& con) const{
+
+  fullVector<double> g;
+  getKinematicalVector(g);
+  getLinearConstraints(g, con);
+};
+
+directionalPBCLagrangeConstraintElement::directionalPBCLagrangeConstraintElement(nonLinearMicroBC* mbc, FunctionSpaceBase* space, FunctionSpaceBase* mspace, 
+															MVertex* v1, std::vector<MVertex*>& vlist, const SVector3& dir):
+															constraintElement(mbc,-1), _periodicSpace(space),_multSpace(mspace),
+															_vp(v1),_vn(vlist){
+	if (_mbc->getOrder() == 2){
+		Msg::Fatal("directionalPBCLagrangeConstraintElement has not been implemented for SecondOrder");	
+	}
+	for (int i=0; i<_vn.size(); i++){
+		double dist = _vn[i]->distance(_vn[0]);
+		_distance.push_back(dist);
+	};				
+	
+	SPoint3 pp = _vp->point();
+	SPoint3 np1 = _vn[0]->point();
+	SPoint3 np2 = _vn[_vn.size()-1]->point();
+	SPoint3 point = planeDirProject(pp,np1,np2,dir);
+	
+	SVector3 VecFollowed(pp,point);
+	
+	_s = point.distance(np1);
+	
+	int csize = (_vn.size()+1)*_ndofs;
+	
+	_C.resize(1.,csize); _C.setAll(0.0);
+	int col = 0;
+	for (int i=0; i<_ndofs; i++){
+		_C(0,col) = 1.0*VecFollowed[i];
+		col++;
+	};
+	lagrangeConstraintElement::getFF(_s,_distance,_FF);
+	for (int i=0; i<_FF.size(); i++){
+		for (int j=0; j<_ndofs; j++){
+			_C(0,col) = -1.*_FF(i)*VecFollowed[j];
+			col++;
+		};
+	};
+	
+	// find maximal value for 
+	_positiveComp = -1;
+	double maxCoeff = 0.;
+	bool found = false;
+	std::vector<Dof> keys;
+	getKeysFromVertex(_periodicSpace,_vp, getComp(),keys); // all keys
+	// find all in positive Dofs
+	for (int i=0; i< _ndofs; i++){
+		if ((fabs(_C(0,i)) > fabs(maxCoeff)) and 
+				(constraintElement::allPositiveDof.find(keys[i]) == constraintElement::allPositiveDof.end())){
+			maxCoeff = _C(0,i);
+			_positiveComp = i;
+			found = true;
+		}
+	}
+	if (found){
+		constraintElement::allPositiveDof.insert(keys[_positiveComp]);
+	}
+	else{
+		Msg::Fatal("all positive vertex is considered directionalPBCLagrangeConstraintElement vp = %d",_vp->getNum());
+	}
+	_C.scale(1./maxCoeff);
+	
+	_Cbc.resize(1,_C.size2()-1);
+	_Cbc.setAll(0.);
+	int colCbc = 0;
+	for (int i=0; i<_C.size2(); i++){
+		if (i !=_positiveComp){
+			_Cbc(0,colCbc) = -_C(0,i);
+			colCbc++;
+		}
+	};
+	
+	// periodic vector
+	for (int j=0; j<3; j++){
+		_L[j] = pp[j];
+		for (int i=0; i<_FF.size(); i++){
+			SPoint3 pt = _vn[i]->point();
+			_L[j] -= _FF(i)*pt[j];
+		}
+	}
+	
+	_S.resize(1,9);
+	_S.scale(0.);
+	for (int i=0; i<3; i++){
+		for (int j=0; j<3; j++){
+			int index = Tensor23::getIndex(i,j);
+			_S(0,index) = VecFollowed[i]*_L[j]/maxCoeff;
+		}
+	}
+};
+
+void directionalPBCLagrangeConstraintElement::getConstraintKeys(std::vector<Dof>& keys) const{
+	getKeysFromVertex(_periodicSpace,_vp, getComp(), keys);
+	for (int i=0; i<_vn.size(); i++){
+		getKeysFromVertex(_periodicSpace,_vn[i], getComp(), keys);
+	};
+};
+
+void directionalPBCLagrangeConstraintElement::getConstraintMatrix(fullMatrix<double>& m)const{
+	m = _C;
+};
+void directionalPBCLagrangeConstraintElement::getDependentMatrix(fullMatrix<double>& m) const{
+  m = _Cbc;
+};
+
+void directionalPBCLagrangeConstraintElement::print() const{
+    printf("Directional Lagrange constraint element \n");
+    printf("Directional Positive = %d\n",_vp->getNum());
+    for (int i=0; i<_vn.size(); i++){
+      printf("%d \t", _vn[i]->getNum());
+    }
+    printf("\n");
+};
+
+void directionalPBCLagrangeConstraintElement::getMultiplierKeys(std::vector<Dof>& key) const{
+	std::vector<int> comp;
+	comp.push_back(_positiveComp);
+	getKeysFromVertex(_multSpace,_vp, comp,key);
+};
+
+void directionalPBCLagrangeConstraintElement::getDependentKeys(std::vector<Dof>& key) const{
+	std::vector<Dof> allkeys;
+	getConstraintKeys(allkeys);
+	key.push_back(allkeys[_positiveComp]);
+};
+
+void directionalPBCLagrangeConstraintElement::getIndependentKeys(std::vector<Dof>& key) const{
+  std::vector<Dof> allkeys;
+	getConstraintKeys(allkeys);
+	for (int i=0; i< allkeys.size(); i++){
+		if (i != _positiveComp){
+			key.push_back(allkeys[i]);
+		}
+	}
+};
+
+void directionalPBCLagrangeConstraintElement::getLinearConstraints(const fullVector<double>& g,
+                   std::map<Dof,DofAffineConstraint<double> >& con) const
+{
+  std::vector<Dof> kP, kN;
+  getDependentKeys(kP);
+	getIndependentKeys(kN);
+	
+  DofAffineConstraint<double> cons;
+	for (int i=0; i< kN.size(); i++){
+		cons.linear.push_back(std::pair<Dof,double>(kN[i],_Cbc(0,i)));
+	}
+	cons.shift=g(0);
+	con[kP[0]] = cons;
+}
+
+void directionalPBCLagrangeConstraintElement::getLinearConstraintsByVertices(std::map<Dof,DofAffineConstraint<double> >& con) const{
+	Msg::Fatal("this function is not used for directionalPeriodicMeshConstraint::getLinearConstraintsByVertices");
+};
+
+void directionalPBCLagrangeConstraintElement::getKinematicalVector(fullVector<double>& m) const{
+	fullVector<double> kinVec;
+	_mbc->getKinematicalVector(kinVec);
+	m.resize(1);
+	m.setAll(0.);
+	_S.mult(kinVec,m);
+};
+void directionalPBCLagrangeConstraintElement::getKinematicalMatrix(fullMatrix<double>& m) const{
+  m = _S;
+};
+void directionalPBCLagrangeConstraintElement::getLinearConstraints(std::map<Dof,DofAffineConstraint<double> >& con) const{
+  fullVector<double> g;
+  getKinematicalVector(g);
+  getLinearConstraints(g, con);
+};
+
+
+directionalFormLagrangeConstraintElement::directionalFormLagrangeConstraintElement(nonLinearMicroBC* mbc, FunctionSpaceBase* space, FunctionSpaceBase* mspace, 
+															MVertex* v1, std::vector<MVertex*>& vlist, const SVector3& dir):
+															constraintElement(mbc,-1), _periodicSpace(space),_multSpace(mspace),
+															_vp(v1),_vn(vlist){
+	if (_mbc->getOrder() == 2){
+		Msg::Fatal("directionalPBCLagrangeConstraintElement has not been implemented for SecondOrder");	
+	}
+	for (int i=0; i<_vn.size(); i++){
+		double dist = _vn[i]->distance(_vn[0]);
+		_distance.push_back(dist);
+	};				
+	_s = _vp->distance(_vn[0]);
+	
+	int csize = (_vn.size()+1)*_ndofs;
+	
+	_C.resize(1.,csize); _C.setAll(0.0);
+	int col = 0;
+	for (int i=0; i<_ndofs; i++){
+		_C(0,col) = 1.0*dir[i];
+		col++;
+	};
+	lagrangeConstraintElement::getFF(_s,_distance,_FF);
+	for (int i=0; i<_FF.size(); i++){
+		for (int j=0; j<_ndofs; j++){
+			_C(0,col) = -1.*_FF(i)*dir[j];
+			col++;
+		};
+	};
+	
+	// find maximal value for 
+	_positiveComp = -1;
+	double maxCoeff = 0.;
+	bool found = false;
+	std::vector<Dof> keys;
+	getKeysFromVertex(_periodicSpace,_vp, getComp(),keys); // all keys
+	// find all in positive Dofs
+	for (int i=0; i< _ndofs; i++){
+		if ((fabs(_C(0,i)) > fabs(maxCoeff)) and 
+			(constraintElement::allPositiveDof.find(keys[i]) == constraintElement::allPositiveDof.end())){
+			maxCoeff = _C(0,i);
+			_positiveComp = i;
+			found = true;
+		}
+	}
+	if (found){
+		constraintElement::allPositiveDof.insert(keys[_positiveComp]);
+	}
+	else{
+		Msg::Fatal("all positive vertex is considered directionalFormLagrangeConstraintElement vp = %d",_vp->getNum());
+	}
+	_C.scale(1./maxCoeff);
+	
+	_Cbc.resize(1,_C.size2()-1);
+	_Cbc.setAll(0.);
+	int colCbc = 0;
+	for (int i=0; i<_C.size2(); i++){
+		if (i !=_positiveComp){
+			_Cbc(0,colCbc) = -_C(0,i);
+			colCbc++;
+		}
+	};
+	
+	// periodic vector
+	SPoint3 pp = _vp->point();
+	for (int j=0; j<3; j++){
+		_L[j] = pp[j];
+		for (int i=0; i<_FF.size(); i++){
+			SPoint3 pt = _vn[i]->point();
+			_L[j] -= _FF(i)*pt[j];
+		}
+	}
+	
+	_S.resize(1,9);
+	_S.scale(0.);
+	for (int i=0; i<3; i++){
+		for (int j=0; j<3; j++){
+			int index = Tensor23::getIndex(i,j);
+			_S(0,index) = dir[i]*_L[j]/maxCoeff;
+		}
+	}
+};
+
+void directionalFormLagrangeConstraintElement::getConstraintKeys(std::vector<Dof>& keys) const{
+	getKeysFromVertex(_periodicSpace,_vp, getComp(), keys);
+	for (int i=0; i<_vn.size(); i++){
+		getKeysFromVertex(_periodicSpace,_vn[i], getComp(), keys);
+	};
+};
+
+void directionalFormLagrangeConstraintElement::getConstraintMatrix(fullMatrix<double>& m)const{
+	m = _C;
+};
+void directionalFormLagrangeConstraintElement::getDependentMatrix(fullMatrix<double>& m) const{
+  m = _Cbc;
+};
+
+void directionalFormLagrangeConstraintElement::print() const{
+    printf("Directional Lagrange constraint element \n");
+    printf("Directional Positive = %d\n",_vp->getNum());
+    for (int i=0; i<_vn.size(); i++){
+      printf("%d \t", _vn[i]->getNum());
+    }
+    printf("\n");
+};
+
+void directionalFormLagrangeConstraintElement::getMultiplierKeys(std::vector<Dof>& key) const{
+	std::vector<int> comp;
+	comp.push_back(_positiveComp);
+	getKeysFromVertex(_multSpace,_vp, comp,key);
+};
+
+void directionalFormLagrangeConstraintElement::getDependentKeys(std::vector<Dof>& key) const{
+	std::vector<Dof> allkeys;
+	getConstraintKeys(allkeys);
+	key.push_back(allkeys[_positiveComp]);
+};
+
+void directionalFormLagrangeConstraintElement::getIndependentKeys(std::vector<Dof>& key) const{
+  std::vector<Dof> allkeys;
+	getConstraintKeys(allkeys);
+	for (int i=0; i< allkeys.size(); i++){
+		if (i != _positiveComp){
+			key.push_back(allkeys[i]);
+		}
+	}
+};
+
+void directionalFormLagrangeConstraintElement::getLinearConstraints(const fullVector<double>& g,
+                   std::map<Dof,DofAffineConstraint<double> >& con) const
+{
+  std::vector<Dof> kP, kN;
+  getDependentKeys(kP);
+	getIndependentKeys(kN);
+	
+  DofAffineConstraint<double> cons;
+	for (int i=0; i< kN.size(); i++){
+		cons.linear.push_back(std::pair<Dof,double>(kN[i],_Cbc(0,i)));
+	}
+	cons.shift=g(0);
+	con[kP[0]] = cons;
+}
+
+void directionalFormLagrangeConstraintElement::getLinearConstraintsByVertices(std::map<Dof,DofAffineConstraint<double> >& con) const{
+	Msg::Fatal("this function is not used for directionalPeriodicMeshConstraint::getLinearConstraintsByVertices");
+};
+
+void directionalFormLagrangeConstraintElement::getKinematicalVector(fullVector<double>& m) const{
+	fullVector<double> kinVec;
+	_mbc->getKinematicalVector(kinVec);
+	m.resize(1);
+	m.setAll(0.);
+	_S.mult(kinVec,m);
+};
+void directionalFormLagrangeConstraintElement::getKinematicalMatrix(fullMatrix<double>& m) const{
+  m = _S;
+};
+void directionalFormLagrangeConstraintElement::getLinearConstraints(std::map<Dof,DofAffineConstraint<double> >& con) const{
+  fullVector<double> g;
+  getKinematicalVector(g);
+  getLinearConstraints(g, con);
+};
+
+shiftedLagrangeConstraintElement::shiftedLagrangeConstraintElement(nonLinearMicroBC* mbc, FunctionSpaceBase* space, FunctionSpaceBase* mspace, 
+															const int c, MVertex* v1, std::vector<MVertex*>& vlist, const SVector3& normal):
+															constraintElement(mbc,c), _periodicSpace(space),_multSpace(mspace),
+															_vp(v1),_vn(vlist){
+    
+		std::vector<Dof> Keys;
+    getKeysFromVertex(_periodicSpace,_vp, getComp(),Keys);
+    for (int ik=0; ik < Keys.size(); ik++){
+      if (constraintElement::allPositiveDof.find(Keys[ik]) == constraintElement::allPositiveDof.end()){
+        constraintElement::allPositiveDof.insert(Keys[ik]);
+      }
+			else{
+				Msg::Fatal("shiftedLagrangeConstraintElement Dof on vertex was chosen as positive one in other constraint element: vp = %d",_vp->getNum());
+			}
+    }
+
+    for (int i=0; i<vlist.size(); i++){
+      double dist = _vn[i]->distance(_vn[0]);
+      _distance.push_back(dist);
+    };
+    SPoint3 pp = _vp->point();
+    SPoint3 np1 = _vn[0]->point();
+    SPoint3 np2 = _vn[_vn.size()-1]->point();
+    SPoint3 point = planeDirProject(pp,np1,np2,normal);
+		
+		SVector3 pnp1(point,np1);
+		SVector3 pnp2(point,np2);
+		if (dot(pnp1,pnp2)  >= 0.){
+			if (pnp2.norm() > pnp1.norm()){
+				for (int i=0; i<3; i++){
+					point[i] += (np2[i] - np1[i]);
+				}
+			}
+			else{
+				for (int i=0; i<3; i++){
+					point[i] += (np1[i] - np2[i]);
+				}
+			}
+		}
+		_s = point.distance(np1);
+    
+    int size = _vn.size();
+    _C.resize(_ndofs,(1+size)*_ndofs); _C.setAll(0.0);
+    int col = 0;
+    for (int i=0; i<_ndofs; i++){
+        _C(i,col) = 1.0;
+        col++;
+    };
+    lagrangeConstraintElement::getFF(_s,_distance,_FF);
+    _Cbc.resize(_ndofs,size*_ndofs);
+    _Cbc.setAll(0.);
+    for (int i=0; i<_FF.size(); i++){
+        for (int j=0; j<_ndofs; j++){
+            _C(j,col) = -1.*_FF(i);
+            _Cbc(j,col-_ndofs) = _FF(i);
+            col++;
+        };
+    };
+    for (int j=0; j<3; j++){
+       _L[j] = pp[j];
+       for (int i=0; i<_FF.size(); i++){
+          SPoint3 pt = _vn[i]->point();
+          _L[j] -= _FF(i)*pt[j];
+       }
+    }
+		
+		if (_mbc->getOrder() == 2){
+			SPoint3 positive = _vp->point();
+			SPoint3 np1 = _vn[0]->point();
+			SPoint3 np2 = _vn[_vn.size()-1]->point();
+			SPoint3 negative = project(positive,np1,np2);
+
+			for (int i=0; i<3; i++)
+				for (int j=0; j<3; j++)
+					_XX(i,j) = 0.5*(positive[i]*positive[j]);
+
+			for (int k=0; k<_FF.size(); k++){
+				SPoint3 pt = _vn[k]->point();
+				for (int i=0; i<3; i++)
+					for (int j=0; j<3; j++)
+						_XX(i,j) -= _FF(k)*0.5*(pt[i]*pt[j]);
+			}
+		}
+		
+		getPBCKinematicMatrix(_L,_XX,_S);
+};
+
+void shiftedLagrangeConstraintElement::getConstraintKeys(std::vector<Dof>& keys) const{
+	getKeysFromVertex(_periodicSpace,_vp, getComp(), keys);
+	for (int i=0; i<_vn.size(); i++){
+		getKeysFromVertex(_periodicSpace,_vn[i], getComp(), keys);
+	};
+};
+
+void shiftedLagrangeConstraintElement::getMultiplierKeys(std::vector<Dof>& keys) const{
+	getKeysFromVertex(_multSpace,_vp, getComp(), keys);
+};
+
+void shiftedLagrangeConstraintElement::getConstraintMatrix(fullMatrix<double>& m)const{
+	m = _C;
+};
+void shiftedLagrangeConstraintElement::getDependentMatrix(fullMatrix<double>& m) const{
+  m = _Cbc;
+};
+
+void shiftedLagrangeConstraintElement::print() const{
+    printf("Lagrange constraint element \n");
+    printf("Positive = %d\n",_vp->getNum());
+    for (int i=0; i<_vn.size(); i++){
+      printf("%d \t", _vn[i]->getNum());
+    }
+    printf("\n");
+};
+
+
+
+void shiftedLagrangeConstraintElement::getDependentKeys(std::vector<Dof>& keys) const{
+  getKeysFromVertex(_periodicSpace,_vp, getComp(),keys);
+}; // left real dofs
+
+void shiftedLagrangeConstraintElement::getIndependentKeys(std::vector<Dof>& keys) const{
+  for (int i=0; i<_vn.size(); i++){
+		getKeysFromVertex(_periodicSpace,_vn[i], getComp(), keys);
+	};
+};
+
+void shiftedLagrangeConstraintElement::getLinearConstraints(const fullVector<double>& g,
+                   std::map<Dof,DofAffineConstraint<double> >& con) const
+{
+  std::vector<std::vector<Dof> > k;
+  for (int i=0; i<_vn.size(); i++){
+    std::vector<Dof> ktemp;
+    getKeysFromVertex(_periodicSpace,_vn[i], getComp(),ktemp);
+    k.push_back(ktemp);
+  };
+
+  std::vector<Dof> kp;
+  getKeysFromVertex(_periodicSpace,_vp, getComp(),kp);
+
+  DofAffineConstraint<double> cons;
+  for (int i=0; i<_ndofs; i++){
+    for (int j=0; j<_vn.size(); j++){
+      cons.linear.push_back(std::pair<Dof,double>(k[j][i],_FF(j)));
+    };
+    cons.shift=g(i);
+    con[kp[i]] = cons;
+    cons.linear.clear();
+  };
+};
+
+void shiftedLagrangeConstraintElement::getLinearConstraintsByVertices(std::map<Dof,DofAffineConstraint<double> >& con) const{
+	Msg::Error("the root vertices are not defined shiftedLagrangeConstraintElement::getLinearConstraintsByVertices");
+	return;
+};
+
+void shiftedLagrangeConstraintElement::getKinematicalVector(fullVector<double>& m) const{
+	fullVector<double> kinVec;
+	_mbc->getKinematicalVector(kinVec);
+	m.resize(_ndofs);
+	m.setAll(0.);
+	_S.mult(kinVec,m);
+};
+void shiftedLagrangeConstraintElement::getKinematicalMatrix(fullMatrix<double>& m) const{
+  m = _S;
+};
+void shiftedLagrangeConstraintElement::getLinearConstraints(std::map<Dof,DofAffineConstraint<double> >& con) const{
+  fullVector<double> g;
+  getKinematicalVector(g);
+  getLinearConstraints(g, con);
+};
\ No newline at end of file
diff --git a/NonLinearSolver/periodicBC/directionalConstraintElement.h b/NonLinearSolver/periodicBC/directionalConstraintElement.h
new file mode 100644
index 0000000000000000000000000000000000000000..160283e529927294f099996567956188451b9f9e
--- /dev/null
+++ b/NonLinearSolver/periodicBC/directionalConstraintElement.h
@@ -0,0 +1,262 @@
+//
+//
+// Description: directional mixed BC
+//
+// Author:  <Van Dung NGUYEN>, (C) 2017
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#include "pbcConstraintElementBase.h"
+#include "pbcCreateConstraints.h"
+
+class directionalPeriodicMeshConstraint : public constraintElement{
+  protected:
+    MVertex* _vp, *_vn;		// two periodic vertex
+    fullMatrix<double> _C, _S, _Cbc; // all constraint matrix
+		FunctionSpaceBase* _periodicSpacePlus, *_periodicSpaceMinus, *_multSpace;
+		int _positive;
+	
+  public:
+    directionalPeriodicMeshConstraint(nonLinearMicroBC* mbc,FunctionSpaceBase* spacePlus, FunctionSpaceBase* spaceMinus, FunctionSpaceBase* multspace, 
+													 MVertex* vp, MVertex* vn, const SVector3& dir);
+													 
+    virtual ~directionalPeriodicMeshConstraint(){};
+    virtual void getConstraintKeys(std::vector<Dof>& key) const;
+    virtual void getMultiplierKeys(std::vector<Dof>& key) const;
+    virtual void getConstraintMatrix(fullMatrix<double>& m) const;
+    virtual void getDependentMatrix(fullMatrix<double>& m) const;
+    virtual void print() const;
+    virtual void getDependentKeys(std::vector<Dof>& keys) const; // left real dofs
+    virtual void getIndependentKeys(std::vector<Dof>& keys) const;
+    virtual void getLinearConstraints(const fullVector<double>& g,
+                   std::map<Dof,DofAffineConstraint<double> >& con) const;
+    virtual void getLinearConstraintsByVertices(std::map<Dof,DofAffineConstraint<double> >& con) const;
+    virtual constraintElement::ElementType getType() const {
+			return constraintElement::DirectionalPeriodic;
+    };
+    virtual bool isActive(const MVertex* v) const {
+      if (_vp->getNum() == v->getNum()) return true;
+      if (_vn) {
+        if (_vn->getNum() == v->getNum()) return true;
+      }
+      return false;
+    };
+
+    virtual bool isDirect() const;
+
+    virtual void getKinematicalVector(fullVector<double>& m) const;
+		virtual void getKinematicalMatrix(fullMatrix<double>& m) const;
+		virtual void getLinearConstraints(std::map<Dof,DofAffineConstraint<double> >& con) const;
+};
+
+class directionalSupplementConstraint : public constraintElement{
+	protected:
+		FunctionSpaceBase* _periodicSpace, *_multSpace;
+    groupOfElements* _g;
+    fullMatrix<double>  _C, _S, _Cbc; // constraint matrix
+    std::vector<MVertex*> _v; // all Vertex
+    int _positive; // positive position
+		int _positiveComp;
+		int _positiveVertex;
+    
+  public:
+    directionalSupplementConstraint(nonLinearMicroBC* Mbc, FunctionSpaceBase* space, FunctionSpaceBase* mspace,
+																	groupOfElements* g, const SVector3& dir);
+    virtual ~directionalSupplementConstraint(){
+    }
+    virtual void getConstraintKeys(std::vector<Dof>& key) const ; // real dofs on constraint elements
+    virtual void getMultiplierKeys(std::vector<Dof>& key) const ;	// multiplier dof on constraint element
+    virtual void getConstraintMatrix(fullMatrix<double>& m) const ;		// matrix C
+    virtual void getDependentMatrix(fullMatrix<double>& m) const;
+    virtual void getDependentKeys(std::vector<Dof>& keys) const; // left real dofs
+    virtual void getIndependentKeys(std::vector<Dof>& keys) const; // for spline interpolation
+    virtual void getLinearConstraints(const fullVector<double>& g,
+                   std::map<Dof,DofAffineConstraint<double> >& con) const;
+    virtual constraintElement::ElementType getType() const{return constraintElement::Supplement;};
+    virtual void print() const;
+	
+    virtual bool isActive(const MVertex* v) const {
+      for (int i=0; i<_v.size(); i++){
+        if (_v[i]->getNum() == v->getNum()) return true;
+      }
+      return false;
+    };
+
+    virtual void getKinematicalVector(fullVector<double>& m) const;
+		virtual void getKinematicalMatrix(fullMatrix<double>& m) const;
+		virtual void getLinearConstraints(std::map<Dof,DofAffineConstraint<double> >& con) const;
+};
+
+class directionalPBCSupplementConstraint : public constraintElement{
+	protected:
+		FunctionSpaceBase* _periodicSpace, *_multSpace;
+    groupOfElements* _gPlus, *_gMinus;
+    fullMatrix<double>  _C, _S, _Cbc; // constraint matrix
+    std::vector<MVertex*> _vPlus, _vMinus; // all Vertex
+    int _positive; // positive position
+		int _positiveComp;
+		int _positiveVertex;
+      
+	public:
+    directionalPBCSupplementConstraint(nonLinearMicroBC* Mbc, FunctionSpaceBase* space, FunctionSpaceBase* mspace,
+																	groupOfElements* gplus, groupOfElements* gMinus, const SVector3& dir);
+    virtual ~directionalPBCSupplementConstraint(){
+    }
+    virtual void getConstraintKeys(std::vector<Dof>& key) const ; // real dofs on constraint elements
+    virtual void getMultiplierKeys(std::vector<Dof>& key) const ;	// multiplier dof on constraint element
+    virtual void getConstraintMatrix(fullMatrix<double>& m) const ;		// matrix C
+    virtual void getDependentMatrix(fullMatrix<double>& m) const;
+    virtual void getDependentKeys(std::vector<Dof>& keys) const; // left real dofs
+    virtual void getIndependentKeys(std::vector<Dof>& keys) const; // for spline interpolation
+    virtual void getLinearConstraints(const fullVector<double>& g,
+                   std::map<Dof,DofAffineConstraint<double> >& con) const;
+    virtual constraintElement::ElementType getType() const{return constraintElement::Supplement;};
+    virtual void print() const;
+	
+    virtual bool isActive(const MVertex* v) const {
+      for (int i=0; i<_vPlus.size(); i++){
+        if (_vPlus[i]->getNum() == v->getNum()) return true;
+      }
+			for (int i=0; i<_vMinus.size(); i++){
+        if (_vMinus[i]->getNum() == v->getNum()) return true;
+      }
+      return false;
+    };
+
+    virtual void getKinematicalVector(fullVector<double>& m) const;
+		virtual void getKinematicalMatrix(fullMatrix<double>& m) const;
+		virtual void getLinearConstraints(std::map<Dof,DofAffineConstraint<double> >& con) const;
+};
+
+class directionalPBCLagrangeConstraintElement : public constraintElement{
+	protected:
+		MVertex* _vp;
+		std::vector<MVertex*> _vn;  // sequence vertices
+		SVector3 _L;
+		std::vector<double> _distance;
+		double _s;
+		fullMatrix<double> _C, _S, _Cbc;
+		fullVector<double> _FF;
+		
+		FunctionSpaceBase* _periodicSpace, *_multSpace;
+		int _positiveComp;
+		 
+	public:
+		// "dir" is the projection vector
+		// the periodic BC is applied in the direction perpendicular to "dir"
+		// this direction is given by the v1 and the projected node --> VecFollowed
+		directionalPBCLagrangeConstraintElement(nonLinearMicroBC* mbc, FunctionSpaceBase* space, FunctionSpaceBase* mspace, 
+															MVertex* v1, std::vector<MVertex*>& vlist, const SVector3& dir);
+		
+		virtual ~directionalPBCLagrangeConstraintElement(){};
+		virtual void getConstraintKeys(std::vector<Dof>& key) const; // real dofs on constraint elements
+		virtual void getMultiplierKeys(std::vector<Dof>& key) const;	// multiplier dof on constraint element
+		virtual void getConstraintMatrix(fullMatrix<double>& m) const;		// matrix C
+		virtual void getDependentMatrix(fullMatrix<double>& m) const;
+		virtual void print() const;
+		virtual void getDependentKeys(std::vector<Dof>& keys) const; // left real dofs
+		virtual void getIndependentKeys(std::vector<Dof>& keys) const; // left real dofs
+    virtual void getLinearConstraints(const fullVector<double>& g,
+                   std::map<Dof,DofAffineConstraint<double> >& con) const;
+    virtual void getLinearConstraintsByVertices(std::map<Dof,DofAffineConstraint<double> >& con) const;
+    virtual constraintElement::ElementType getType() const { return constraintElement::Lagrange;};
+    virtual bool isActive(const MVertex* v) const {
+      if (_vp->getNum() == v->getNum()) return true;
+      for (int i=0; i<_vn.size(); i++){
+        if (_vn[i]->getNum() == v->getNum()) return true;
+      }
+      return false;
+    };
+
+    virtual void getKinematicalVector(fullVector<double>& m) const;
+		virtual void getKinematicalMatrix(fullMatrix<double>& m) const;
+		virtual void getLinearConstraints(std::map<Dof,DofAffineConstraint<double> >& con) const;
+};
+
+class directionalFormLagrangeConstraintElement : public constraintElement{
+	protected:
+		MVertex* _vp;
+		std::vector<MVertex*> _vn;  // sequence vertices
+		SVector3 _L;
+		std::vector<double> _distance;
+		double _s;
+		fullMatrix<double> _C, _S, _Cbc;
+		fullVector<double> _FF;
+		
+		FunctionSpaceBase* _periodicSpace, *_multSpace;
+		int _positiveComp;
+		 
+public:
+		// the periodic BC is applied following "dir"
+		// this direction is given by the v1 and the projected node --> VecFollowed
+		directionalFormLagrangeConstraintElement(nonLinearMicroBC* mbc, FunctionSpaceBase* space, FunctionSpaceBase* mspace, 
+															MVertex* v1, std::vector<MVertex*>& vlist, const SVector3& dir);
+		
+		virtual ~directionalFormLagrangeConstraintElement(){};
+		virtual void getConstraintKeys(std::vector<Dof>& key) const; // real dofs on constraint elements
+		virtual void getMultiplierKeys(std::vector<Dof>& key) const;	// multiplier dof on constraint element
+		virtual void getConstraintMatrix(fullMatrix<double>& m) const;		// matrix C
+		virtual void getDependentMatrix(fullMatrix<double>& m) const;
+		virtual void print() const;
+		virtual void getDependentKeys(std::vector<Dof>& keys) const; // left real dofs
+		virtual void getIndependentKeys(std::vector<Dof>& keys) const; // left real dofs
+    virtual void getLinearConstraints(const fullVector<double>& g,
+                   std::map<Dof,DofAffineConstraint<double> >& con) const;
+    virtual void getLinearConstraintsByVertices(std::map<Dof,DofAffineConstraint<double> >& con) const;
+    virtual constraintElement::ElementType getType() const { return constraintElement::Lagrange;};
+    virtual bool isActive(const MVertex* v) const {
+      if (_vp->getNum() == v->getNum()) return true;
+      for (int i=0; i<_vn.size(); i++){
+        if (_vn[i]->getNum() == v->getNum()) return true;
+      }
+      return false;
+    };
+
+    virtual void getKinematicalVector(fullVector<double>& m) const;
+		virtual void getKinematicalMatrix(fullMatrix<double>& m) const;
+		virtual void getLinearConstraints(std::map<Dof,DofAffineConstraint<double> >& con) const;
+};
+
+class shiftedLagrangeConstraintElement : public constraintElement{
+	protected:
+		MVertex* _vp;
+		std::vector<MVertex*> _vn;  // sequence vertices
+		SVector3 _L;
+		STensor3 _XX;
+		std::vector<double> _distance;
+		double _s;
+		fullMatrix<double> _C, _S, _Cbc;
+		fullVector<double> _FF;
+		
+		FunctionSpaceBase* _periodicSpace, *_multSpace;
+		 
+	public:
+		shiftedLagrangeConstraintElement(nonLinearMicroBC* mbc, FunctionSpaceBase* space, FunctionSpaceBase* mspace, 
+															const int c, MVertex* v1, std::vector<MVertex*>& vlist, const SVector3& normal);
+		
+		virtual ~shiftedLagrangeConstraintElement(){};
+		virtual void getConstraintKeys(std::vector<Dof>& key) const; // real dofs on constraint elements
+		virtual void getMultiplierKeys(std::vector<Dof>& key) const;	// multiplier dof on constraint element
+		virtual void getConstraintMatrix(fullMatrix<double>& m) const;		// matrix C
+		virtual void getDependentMatrix(fullMatrix<double>& m) const;
+		virtual void print() const;
+		virtual void getDependentKeys(std::vector<Dof>& keys) const; // left real dofs
+		virtual void getIndependentKeys(std::vector<Dof>& keys) const; // left real dofs
+    virtual void getLinearConstraints(const fullVector<double>& g,
+                   std::map<Dof,DofAffineConstraint<double> >& con) const;
+    virtual void getLinearConstraintsByVertices(std::map<Dof,DofAffineConstraint<double> >& con) const;
+    virtual constraintElement::ElementType getType() const { return constraintElement::Lagrange;};
+    virtual bool isActive(const MVertex* v) const {
+      if (_vp->getNum() == v->getNum()) return true;
+      for (int i=0; i<_vn.size(); i++){
+        if (_vn[i]->getNum() == v->getNum()) return true;
+      }
+      return false;
+    };
+
+    virtual void getKinematicalVector(fullVector<double>& m) const;
+		virtual void getKinematicalMatrix(fullMatrix<double>& m) const;
+		virtual void getLinearConstraints(std::map<Dof,DofAffineConstraint<double> >& con) const;
+};
\ No newline at end of file
diff --git a/NonLinearSolver/periodicBC/geometryRotation.cpp b/NonLinearSolver/periodicBC/geometryRotation.cpp
index abf4e77e0bd075f2992a5ab60a4aefb9e92ea81a..fb91b3243e033b0f4ea4a047420ca2b83dcebeba 100644
--- a/NonLinearSolver/periodicBC/geometryRotation.cpp
+++ b/NonLinearSolver/periodicBC/geometryRotation.cpp
@@ -11,42 +11,18 @@
 #include "geometryRotation.h"
 #include "SVector3.h"
 #include "Context.h"
+#include <sstream>
 
+GeometryRotation::GeometryRotation(){
 
-GeometryRotation::GeometryRotation(){}
+}
 GeometryRotation::~GeometryRotation(){
 };
 
-void GeometryRotation::exportRotatedModel(const double e1x, const double e1y, const double e1z,
-                                  const double e2x, const double e2y, const double e2z,
-                                  const double e3x, const double e3y, const double e3z,
-                                  const std::string inMeshFile,
-                                  const double n1x, const double n1y, const double n1z,
-                                  const double n2x, const double n2y, const double n2z,
-                                  const double n3x, const double n3y, const double n3z,
-                                  const std::string outMeshFile) const {
-  SVector3 e1(e1x,e1y,e1z);
-  SVector3 e2(e2x,e2y,e2z);
-  SVector3 e3(e3x,e3y,e3z);
-
-  SVector3 n1(n1x,n1y,n1z);
-  SVector3 n2(n2x,n2y,n2z);
-  SVector3 n3(n3x,n3y,n3z);
-
-  e1.normalize();
-  e2.normalize();
-  e3.normalize();
-  n1.normalize();
-  n2.normalize();
-  n3.normalize();
-
-  exportRotatedModel(e1,e2,e3,inMeshFile,n1,n2,n3,outMeshFile);
-};
-
 void GeometryRotation::exportRotatedModel(const SVector3& e1, const SVector3& e2, const SVector3& e3, // reference coordinate system
-                                  const std::string inputMeshFile,
-                                  const SVector3& n1, const SVector3& n2, const SVector3& n3, // rotated coordinate system
-                                  const std::string outputMeshFile) const{
+                                  GModel* pModel, const int elenum, const int gpt,
+                                  const SVector3& n1, const SVector3& n2, const SVector3& n3 // rotated coordinate system
+                                  ){
   STensor3 LeftHS(0.);
   STensor3 RightHS(0.);
 
@@ -79,9 +55,6 @@ void GeometryRotation::exportRotatedModel(const SVector3& e1, const SVector3& e2
   R.print("Rotation tensor");
   */
 
-  Msg::Info("Begin writing rotated mesh");
-  GModel* pModel = new GModel();
-  pModel->readMSH(inputMeshFile.c_str());
 
   std::vector<GEntity*> entities;
   pModel->getEntities(entities);
@@ -107,9 +80,69 @@ void GeometryRotation::exportRotatedModel(const SVector3& e1, const SVector3& e2
     v->z() = newP(2);
   }
 
+  std::string newFileName = "";
+  if (pModel->getFileName() != ""){
+    std::string modelName = pModel->getFileName();
+    size_t ext_pos = modelName.find_last_of('.');
+    std::string newname(modelName,0,ext_pos);
+    newFileName += newname;
+  }
+  newFileName += "Rotated_ELE";
+  std::ostringstream oss;
+  oss << elenum;
+  newFileName += oss.str();
+  oss.str("");
+  newFileName += "GP";
+  oss << gpt;
+  newFileName += oss.str();
+  newFileName += ".msh";
+
   // write deformed mesh to file
-  pModel->writeMSH(outputMeshFile, CTX::instance()->mesh.mshFileVersion,CTX::instance()->mesh.binary, CTX::instance()->mesh.saveAll,
+  printf("Begin writing rotated mesh ele %d gpt %d\n",elenum,gpt);
+  pModel->writeMSH(newFileName, CTX::instance()->mesh.mshFileVersion,CTX::instance()->mesh.binary, CTX::instance()->mesh.saveAll,
                   CTX::instance()->mesh.saveParametric, CTX::instance()->mesh.scalingFactor);
+	printf("End writing rotated mesh ele %d gpt %d \n",elenum,gpt);
+};
+
+void GeometryRotation::exportRotatedModel(const double e1x, const double e1y, const double e1z,
+                                  const double e2x, const double e2y, const double e2z,
+                                  const double e3x, const double e3y, const double e3z,
+                                  const std::string inMeshFile,
+                                  const double n1x, const double n1y, const double n1z,
+                                  const double n2x, const double n2y, const double n2z,
+                                  const double n3x, const double n3y, const double n3z) {
+  SVector3 e1(e1x,e1y,e1z);
+  SVector3 e2(e2x,e2y,e2z);
+  SVector3 e3(e3x,e3y,e3z);
+
+  SVector3 n1(n1x,n1y,n1z);
+  SVector3 n2(n2x,n2y,n2z);
+  SVector3 n3(n3x,n3y,n3z);
+
+  e1.normalize();
+  e2.normalize();
+  e3.normalize();
+  n1.normalize();
+  n2.normalize();
+  n3.normalize();
+
+  GModel* pModel = new GModel();
+  pModel->readMSH(inMeshFile.c_str());
+  pModel->setFileName(inMeshFile);
+
+  exportRotatedModel(e1,e2,e3,pModel,0,0,n1,n2,n3);
+
   delete pModel;
-	Msg::Info("End writing rotated mesh");
+};
+
+
+void GeometryRotation::rotateGModel(const int elenum, const int gpt,
+                            GModel* pModel,
+                            const SVector3& n1, const SVector3& n2, const SVector3& n3){
+  SVector3 e1(1.,0.,0.);
+  SVector3 e2(0.,1.,0.);
+  SVector3 e3(0.,0.,1.);
+
+  GeometryRotation obj;
+  obj.exportRotatedModel(e1,e2,e3,pModel,elenum,gpt,n1,n2,n3);
 };
diff --git a/NonLinearSolver/periodicBC/geometryRotation.h b/NonLinearSolver/periodicBC/geometryRotation.h
index 627d289095a5384b92387c6e45fceb815dc9a516..576364a605880783954f567f57efa0f57c1ae94b 100644
--- a/NonLinearSolver/periodicBC/geometryRotation.h
+++ b/NonLinearSolver/periodicBC/geometryRotation.h
@@ -17,7 +17,10 @@
 class GeometryRotation{
   #ifndef SWIG
   protected:
-
+    virtual void exportRotatedModel(const SVector3& e1, const SVector3& e2, const SVector3& e3, // reference coordinate system
+                                  GModel* pModel, const int elenum, const int gpt,
+                                  const SVector3& n1, const SVector3& n2, const SVector3& n3 // rotated coordinate system
+                                  );
   #endif // SWIG
   public:
     GeometryRotation();
@@ -27,14 +30,13 @@ class GeometryRotation{
                                   const std::string inMeshFile,
                                   const double n1x, const double n1y, const double n1z,
                                   const double n2x, const double n2y, const double n2z,
-                                  const double n3x, const double n3y, const double n3z,
-                                  const std::string outMeshFile) const;
+                                  const double n3x, const double n3y, const double n3z);
     #ifndef SWIG
     virtual ~GeometryRotation();
-    virtual void exportRotatedModel(const SVector3& e1, const SVector3& e2, const SVector3& e3, // reference coordinate system
-                                  const std::string inputMeshFile,
-                                  const SVector3& n1, const SVector3& n2, const SVector3& n3, // rotated coordinate system
-                                  const std::string outputMeshFile) const;
+
+    static void rotateGModel(const int elenum, const int gpt,
+                            GModel* pModel,
+                            const SVector3& n1, const SVector3& n2, const SVector3& n3);
     #endif // SWIG
 };
 #endif // GEOMETRYROTATION_H_INCLUDED
diff --git a/NonLinearSolver/periodicBC/numericalFunctions.h b/NonLinearSolver/periodicBC/numericalFunctions.h
index a2af6b92d1593fff07b055475beecb6115ee18ea..8908cbf961e6cd65cfd1482a80acd033eb82224a 100644
--- a/NonLinearSolver/periodicBC/numericalFunctions.h
+++ b/NonLinearSolver/periodicBC/numericalFunctions.h
@@ -19,7 +19,7 @@
 #include "STensor53.h"
 #include "STensor63.h"
 
-inline void computeSurface(SPoint3 A, SPoint3 B, SPoint3 C,double &a, double& b, double &c, double &d){
+inline void computeSurface(const SPoint3& A, const SPoint3& B, const SPoint3& C,double &a, double& b, double &c, double &d){
   SVector3 AB(A,B);
   SVector3 AC(A,C);
   SVector3 normal = crossprod(AB,AC);
@@ -30,16 +30,24 @@ inline void computeSurface(SPoint3 A, SPoint3 B, SPoint3 C,double &a, double& b,
   d = a*A[0]+b*A[1]+c*A[2];
 };
 
-inline SPoint3 project(SPoint3 P, SPoint3 A, SPoint3 B){
-  SPoint3 root(0,0,0);
+inline SPoint3 project(const SPoint3& P, const SPoint3& A, const SPoint3& B){
   SVector3 u(A,B);
   SVector3 Xpa(A,P);
   double t=dot(u,Xpa)/dot(u,u);
   SPoint3 temp(A.x()+t*u.x(),A.y()+t*u.y(),A.z()+t*u.z());
   return temp;
 };
+
+inline SPoint3 planeDirProject(const SPoint3& P, const SPoint3& A, const SPoint3& B, const SVector3& n){
+	// n is normal of plane
+  SVector3 u(A,B);
+  SVector3 AP(A,P);
+  double t=dot(AP,n)/dot(u,n);
+  SPoint3 temp(A.x()+t*u.x(),A.y()+t*u.y(),A.z()+t*u.z());
+  return temp;
+};
 
-inline SPoint3 project(SPoint3 P, SPoint3 A, SPoint3 B, SPoint3 C){
+inline SPoint3 project(const SPoint3 &P, const SPoint3 &A, const SPoint3& B, const SPoint3 & C){
   SVector3 vec1(A,B);
   SVector3 vec2(A,C);
   SVector3 normal=crossprod(vec1,vec2);
@@ -49,26 +57,26 @@ inline SPoint3 project(SPoint3 P, SPoint3 A, SPoint3 B, SPoint3 C){
   return temp;
 };
 
-inline double distance(SPoint3 P, SPoint3 A, SPoint3 B){
+inline double distance(const SPoint3& P, const SPoint3 &A, const SPoint3&  B){
   SPoint3 H=project(P,A,B);
   double temp=P.distance(H);
   return temp;
 };
 
-inline double distance(SPoint3 P, SPoint3 A, SPoint3 B, SPoint3 C){
+inline double distance(const SPoint3& P, const SPoint3 & A, const SPoint3 &B, const SPoint3 & C){
   SPoint3 H=project(P,A,B,C);
   double temp=P.distance(H);
   return temp;
 };
 
 // check P inside A, B
-inline bool inside(SPoint3 P, SPoint3 A, SPoint3 B){
+inline bool inside(const SPoint3 &P, const SPoint3& A, const SPoint3 &B){
   SVector3 PA(P,A);SVector3 PB(P,B);
   if (dot(PA,PB)<=0) return true;
   else return false;
 };
 
-inline SPoint3 midpoint(SPoint3 A, SPoint3 B){
+inline SPoint3 midpoint(const SPoint3& A, const SPoint3& B){
   double x = (A.x()+B.x())/2;
   double y = (A.y()+B.y())/2;
   double z = (A.z()+B.z())/2;
@@ -77,7 +85,7 @@ inline SPoint3 midpoint(SPoint3 A, SPoint3 B){
 }
 
 // check same side P, Q via A, B
-inline bool sameSide(SPoint3 P, SPoint3 Q, SPoint3 A, SPoint3 B){
+inline bool sameSide(const SPoint3& P, const SPoint3 &Q, const SPoint3& A, const SPoint3& B){
   SVector3 PA(P,A);SVector3 PB(P,B);
   SVector3 n1=crossprod(PA,PB);
 
@@ -108,7 +116,7 @@ inline void getKeysFromVertex(FunctionSpaceBase* space, MVertex* v, const std::v
 	}
 };
 
-inline double norm(STensor3& ten){
+inline double norm(const STensor3& ten){
 	double temp = 0;
 	for (int i=0; i<3; i++){
 		for (int j=0; j<3; j++){
diff --git a/NonLinearSolver/periodicBC/pbcAlgorithm.cpp b/NonLinearSolver/periodicBC/pbcAlgorithm.cpp
index 2cfeb573d0296edcc5ed05861ddbbd157c824e41..c8e943641e10154aec7fd39aa3dbef1d7b02fbf6 100644
--- a/NonLinearSolver/periodicBC/pbcAlgorithm.cpp
+++ b/NonLinearSolver/periodicBC/pbcAlgorithm.cpp
@@ -16,30 +16,31 @@
 
 void pbcAlgorithm::__int__(){
   // create function space within microscopic boundary condition
+	const std::vector<partDomain*>& allDomain = *(_solver->getDomainVector());
 	bool fullDG = false;
-  for (int idom = 0; idom< _allDomain.size(); idom++){
-    if (_allDomain[idom]->getFormulation()){
+  for (int idom = 0; idom< allDomain.size(); idom++){
+    if (allDomain[idom]->getFormulation()){
       fullDG = true;
-			if (_allDomain[idom]->groupOfElementsSize() > 0) Msg::Fatal("The pbcAlgorithm is only implemented for interDomain");
+			if (allDomain[idom]->groupOfElementsSize() > 0) Msg::Fatal("The pbcAlgorithm is only implemented for interDomain");
       break;
     }
   }
 
 	if (!fullDG){
-		_space= _allDomain[0]->getFunctionSpace();
+		_space= allDomain[0]->getFunctionSpace();
 		int lagtag = _space->getId()+1; // to make sure lagtag and microtag are different
 	// create mspace from space
 		_mspace = _space->clone(lagtag);
-		if (_mspace == NULL) Msg::Fatal("FunctionSpaceBase::clone must be defined for the function space considering in domain %d",_allDomain[0]->getPhysical());
+		if (_mspace == NULL) Msg::Fatal("FunctionSpaceBase::clone must be defined for the function space considering in domain %d",allDomain[0]->getPhysical());
   }
   else{
     _space = NULL;
     int maxTag = 0;
     partDomain* oneDom = NULL;
-		for (int i=0; i< _allDomain.size(); i++){
-			if ((maxTag< _allDomain[i]->getFunctionSpace()->getId()) and (_allDomain[i]->groupOfElementsSize()>0)){
-				maxTag = _allDomain[i]->getFunctionSpace()->getId();
-        oneDom = _allDomain[i];
+		for (int i=0; i< allDomain.size(); i++){
+			if ((maxTag< allDomain[i]->getFunctionSpace()->getId()) and (allDomain[i]->groupOfElementsSize()>0)){
+				maxTag = allDomain[i]->getFunctionSpace()->getId();
+        oneDom = allDomain[i];
 			}
 		}
 		maxTag ++; // to create a diffrent id for multspace
@@ -50,9 +51,15 @@ void pbcAlgorithm::__int__(){
 
 
   // create PBC group constraint
-  _pbcConstraint  = new pbcConstraintElementGroup(_mbc,_allDomain,_space,_mspace);
+  _pbcConstraint  = new pbcConstraintElementGroup(_solver,_space,_mspace);
   // create constraint elements within pbcConstraintElementGroup
-  _pbcConstraint->createConstraintGroup();
+	const std::vector<groupOfElements*>& gr = _solver->getMicroBC()->getBoundaryGroupOfElements();
+	if (gr.size() >0){
+		_pbcConstraint->createConstraintGroup();
+	}
+	else{
+		_pbcConstraint->createPBCFromFile(_solver->getPBCFile(),_solver->getGModel());
+	}
   #ifdef _DEBUG
   _pbcConstraint->print();
   #endif
@@ -75,15 +82,14 @@ void pbcAlgorithm::__int__(){
         length = pow(volume,1.0/3.0);
       };
     };
-    _scale = _allDomain[0]->getMaterialLaw()->scaleFactor()*length;
+    _scale = allDomain[0]->getMaterialLaw()->scaleFactor()*length;
 	}
 	#ifdef _DEBUG
 	printf("scale = %f\n",_scale);
 	#endif
 };
 
-pbcAlgorithm::pbcAlgorithm(nonLinearMicroBC* bc,std::vector<partDomain*>& d, dofManager<double>*p)
-									: _mbc(bc),_allDomain(d), _space(NULL),_mspace(NULL),_pAssembler(p),
+pbcAlgorithm::pbcAlgorithm(nonLinearMechSolver* solver): _solver(solver), _space(NULL),_mspace(NULL),
                   _pbcConstraint(NULL),_splittedDofs(NULL),
 									_isSplitted(false),_scale(1.), _isModifiedConstraintMatrix(true){
   this->__int__();
@@ -96,6 +102,30 @@ pbcAlgorithm::~pbcAlgorithm(){
   _isSplitted = false;
 };
 
+nonLinearMicroBC* pbcAlgorithm::getMBC(){
+	return _solver->getMicroBC();
+};
+
+int pbcAlgorithm::getSystemDofNumber(const Dof& key) {return _solver->getDofManager()->getDofNumber(key);};
+int pbcAlgorithm::getNumberOfMacroToMicroKinematicVariables() const {return _solver->getMicroBC()->getNumberOfMacroToMicroKinematicVariables();};
+int pbcAlgorithm::getNumberMicroToMacroHomogenizedVariables() const{
+	// get maximal stress dimension from domain
+	const std::vector<partDomain*>& allDomain = *(_solver->getDomainVector());
+	int dimStress = 0;
+	for (int i=0; i< allDomain.size(); i++){
+		if (allDomain[i]->getStressDimension() > dimStress){
+			dimStress = allDomain[i]->getStressDimension();
+		}
+	}
+	return dimStress;
+}
+
+void pbcAlgorithm::switchMicroBC(){
+	_pbcConstraint->switchMicroBC();
+	// split dofs
+	this->splitDofs();	
+};
+
 
 void pbcAlgorithm::updateConstraint(const IPField* ipfield){
   for (std::set<constraintElement*>::iterator it= _pbcConstraint->constraintGroupBegin();
@@ -115,6 +145,7 @@ void pbcAlgorithm::updateConstraint(const IPField* ipfield){
 };
 
 void pbcAlgorithm::splitDofs(){
+	const std::vector<partDomain*>& allDomain = *(_solver->getDomainVector());
   if (_splittedDofs == NULL)
     _splittedDofs = new pbcDofManager();
 
@@ -126,7 +157,7 @@ void pbcAlgorithm::splitDofs(){
 	#endif //_DEBUG
 	
 	std::set<Dof> fixedDof;
-	_pAssembler->getFixedDof(fixedDof);
+	_solver->getDofManager()->getFixedDof(fixedDof);
 	for (std::set<Dof>::const_iterator itdof = fixedDof.begin(); itdof!= fixedDof.end(); itdof++){
 		_splittedDofs->fixDof(*itdof);
 	}
@@ -150,8 +181,8 @@ void pbcAlgorithm::splitDofs(){
     }
   };
   // internal DOFs
-  for (int i=0; i<_allDomain.size(); i++){
-    partDomain* dom = _allDomain[i];
+  for (int i=0; i<allDomain.size(); i++){
+    partDomain* dom = allDomain[i];
     FunctionSpaceBase* sp = dom->getFunctionSpace();
     for (groupOfElements::elementContainer::const_iterator it = dom->g_cbegin(); it!= dom->g_cend(); it++){
       MElement* ele = *it;
@@ -230,7 +261,7 @@ void pbcAlgorithm::splitDofs(){
     };
   };
   // for virtual keys
-	std::vector<int> constrainedComp(_mbc->getConstrainedComps().begin(), _mbc->getConstrainedComps().end());
+	std::vector<int> constrainedComp(_solver->getMicroBC()->getConstrainedComps().begin(), _solver->getMicroBC()->getConstrainedComps().end());
   for (std::set<MVertex*>::iterator it = _pbcConstraint->virtualVertexBegin();
                                       it!= _pbcConstraint->virtualVertexEnd(); it++){
     MVertex* v = *it;
@@ -292,28 +323,28 @@ void pbcAlgorithm::splitDofs(){
 };
 
 void pbcAlgorithm::numberDof(const int type){
-  if (this->isSplittedDof() == false) this->splitDofs();
+  if (!this->isSplittedDof()) this->splitDofs();
   if (type == nonLinearMechSolver::MULT_ELIM){
     Msg::Info("Number all displacement dofs");
-    _splittedDofs->numberDof(pbcDofManager::INTERNAL,_pAssembler);
-    _splittedDofs->numberDof(pbcDofManager::BOUNDARY,_pAssembler);
+    _splittedDofs->numberDof(pbcDofManager::INTERNAL,_solver->getDofManager());
+    _splittedDofs->numberDof(pbcDofManager::BOUNDARY,_solver->getDofManager());
   }
   else if (type == nonLinearMechSolver::DISP_ELIM){
     Msg::Info("Number all displacement dofs accounting for constraints");
     this->applyPBCByConstraintElimination();
-    _splittedDofs->numberDof(pbcDofManager::INTERNAL,_pAssembler);
-    _splittedDofs->numberDof(pbcDofManager::BOUNDARY,_pAssembler);
+    _splittedDofs->numberDof(pbcDofManager::INTERNAL,_solver->getDofManager());
+    _splittedDofs->numberDof(pbcDofManager::BOUNDARY,_solver->getDofManager());
   }
   else if (type == nonLinearMechSolver::DISP_MULT){
     Msg::Info("Number all displacement dofs and multiplier dofs");
-    _splittedDofs->numberDof(pbcDofManager::INTERNAL,_pAssembler);
-    _splittedDofs->numberDof(pbcDofManager::BOUNDARY,_pAssembler);
-    _splittedDofs->numberDof(pbcDofManager::MULTIPLIER,_pAssembler);
+    _splittedDofs->numberDof(pbcDofManager::INTERNAL,_solver->getDofManager());
+    _splittedDofs->numberDof(pbcDofManager::BOUNDARY,_solver->getDofManager());
+    _splittedDofs->numberDof(pbcDofManager::MULTIPLIER,_solver->getDofManager());
   }
   else if (type == nonLinearMechSolver::DISP_ELIM_UNIFIED){
     Msg::Info("Number all displacement dofs");
-    _splittedDofs->numberDof(pbcDofManager::INTERNAL,_pAssembler);
-    _splittedDofs->numberDof(pbcDofManager::BOUNDARY,_pAssembler);
+    _splittedDofs->numberDof(pbcDofManager::INTERNAL,_solver->getDofManager());
+    _splittedDofs->numberDof(pbcDofManager::BOUNDARY,_solver->getDofManager());
   }
   else{
     Msg::Error("system type used in mechanical solver is not valid");
@@ -323,7 +354,7 @@ void pbcAlgorithm::numberDof(const int type){
 
 void pbcAlgorithm::assembleKinematicMatrix(){
   std::string name = "A";
-  linearSystem<double>* lsys = _pAssembler->getLinearSystem(name);
+  linearSystem<double>* lsys = _solver->getDofManager()->getLinearSystem(name);
   pbcSystem<double>* pbcsys = dynamic_cast<pbcSystem<double>*>(lsys);
   if (!pbcsys){
     printf("periodic non linear system is not used! \n");
@@ -359,7 +390,7 @@ void pbcAlgorithm::assembleKinematicMatrix(){
 
 void pbcAlgorithm::zeroStressMatrix(){
   std::string name = "A";
-  linearSystem<double>* lsys = _pAssembler->getLinearSystem(name);
+  linearSystem<double>* lsys = _solver->getDofManager()->getLinearSystem(name);
   pbcSystemBase<double>* pbcsys = dynamic_cast<pbcSystemBase<double>*>(lsys);
   if (pbcsys == NULL){
     Msg::Fatal("pbc system must be used pbcAlgorithm::zeroInSystemHomogenizedTangentMatrix");
@@ -371,7 +402,7 @@ void pbcAlgorithm::zeroStressMatrix(){
 
 int pbcAlgorithm::condensationSolve(fullMatrix<double>& L,double rvevolume){
   std::string name = "A";
-  linearSystem<double>* lsys = _pAssembler->getLinearSystem(name);
+  linearSystem<double>* lsys = _solver->getDofManager()->getLinearSystem(name);
   pbcSystemBase<double>* pbcsys = dynamic_cast<pbcSystemBase<double>*>(lsys);
   if (pbcsys == NULL){
     Msg::Fatal("pbc system must be used pbcAlgorithm::zeroInSystemHomogenizedTangentMatrix");
@@ -392,7 +423,7 @@ void pbcAlgorithm::sparsityLagMultiplierDofs(){
 
 		for (int i=0; i< keys.size(); i++){
 		  for (int j=0; j< keys.size(); j++){
-        _pAssembler->insertInSparsityPattern(keys[i],keys[j]);
+        _solver->getDofManager()->insertInSparsityPattern(keys[i],keys[j]);
 		  }
 		}
 
@@ -418,7 +449,7 @@ void pbcAlgorithm::assembleConstraintMatrix(){
 		std::vector<Dof> keys;
 		cele->getConstraintKeys(keys);
 		cele->getMultiplierKeys(keys);
-		_pAssembler->assemble(keys,m);
+		_solver->getDofManager()->assemble(keys,m);
 	};
 };
 void pbcAlgorithm::assembleRightHandSide(){
@@ -429,10 +460,12 @@ void pbcAlgorithm::assembleRightHandSide(){
       fullVector<double> vec;
       cele->getKinematicalVector(vec);
       vec.scale(_scale);
-      if (dynamic_cast<staticDofManager<double>* >(_pAssembler)){
-         static_cast<staticDofManager<double>* >(_pAssembler)->assemble(keys,vec,nonLinearSystem<double>::Fext);
-      } else {
-         _pAssembler->assemble(keys,vec);
+			staticDofManager<double>* sAssembler = _solver->getStaticDofManager();
+      if (sAssembler != NULL){
+         sAssembler->assemble(keys,vec,nonLinearSystem<double>::Fext);
+      } 
+			else {
+				_solver->getDofManager()->assemble(keys,vec);
       };
    };
 };
@@ -456,7 +489,7 @@ void pbcAlgorithm::computeLinearConstraints(){
     cele->getMultiplierKeys(keys);
     fullVector<double> solution(size);
     for (int i=0; i<size; i++){
-        _pAssembler->getDofValue(keys[i],solution(i));
+        _solver->getDofManager()->getDofValue(keys[i],solution(i));
     };
     fullVector<double> val(size);
     m.mult(solution,val);
@@ -468,11 +501,13 @@ void pbcAlgorithm::computeLinearConstraints(){
     for (int i=0; i<row; i++) {
         val(i+col) = val(i+col)-rhs(i);
     };
-    if (dynamic_cast<staticDofManager<double>* >(_pAssembler)){
-       static_cast<staticDofManager<double>* >(_pAssembler)->assemble(keys,val,nonLinearSystem<double>::Fint);
-    } else {
+		staticDofManager<double>* sAssembler = _solver->getStaticDofManager();
+    if (sAssembler!=NULL){
+       sAssembler->assemble(keys,val,nonLinearSystem<double>::Fint);
+    } 
+		else {
        val.scale(-1.0);
-       _pAssembler->assemble(keys,val);
+       _solver->getDofManager()->assemble(keys,val);
     };
   };
 };
@@ -483,7 +518,7 @@ void pbcAlgorithm::assembleConstraintResidualToSystem(){
    printf("assemble constraint residuals to system \n");
    #endif //_DEBUG
    std::string name = "A";
-   linearSystem<double>* lsys = _pAssembler->getLinearSystem(name);
+   linearSystem<double>* lsys = _solver->getDofManager()->getLinearSystem(name);
    pbcSystem<double>* pbcsys = dynamic_cast<pbcSystem<double>*>(lsys);
    if (!pbcsys){
      printf("periodic non linear system is not used! \n");
@@ -503,7 +538,7 @@ void pbcAlgorithm::assembleConstraintResidualToSystem(){
        cele->getConstraintKeys(keyB);
        fullVector<double> result(keyB.size());
        for (int i=0; i<keyB.size(); i++){
-           _pAssembler->getDofValue(keyB[i],result(i));
+           _solver->getDofManager()->getDofValue(keyB[i],result(i));
        };
        fullVector<double> residual(keyL.size());
        residual.setAll(0.0);
@@ -523,7 +558,7 @@ void pbcAlgorithm::assembleLinearConstraintMatrixToSystem(){
 	printf("assemble constraint matrix to system \n");
 	#endif
 	std::string name = "A";
-	linearSystem<double>* lsys = _pAssembler->getLinearSystem(name);
+	linearSystem<double>* lsys = _solver->getDofManager()->getLinearSystem(name);
 	pbcSystem<double>* pbcsys = dynamic_cast<pbcSystem<double>*>(lsys);
 	if (!pbcsys){
 		printf("periodic non linear system is not used! \n");
@@ -540,7 +575,7 @@ void pbcAlgorithm::assembleLinearConstraintMatrixToSystem(){
 			for (int i=0; i<keyL.size(); i++){
 				int row = _splittedDofs->getMultiplierDofNumber(keyL[i]);
 				for (int j=0; j<keyB.size(); j++){
-					int col = _pAssembler->getDofNumber(keyB[j]);
+					int col = _solver->getDofManager()->getDofNumber(keyB[j]);
 					if (fabs(m(i,j))>0.)
 						pbcsys->addToConstraintMatrix(row,col,m(i,j));
 				};
@@ -554,15 +589,15 @@ void pbcAlgorithm::assembleLinearConstraintMatrixToSystem(){
 
 void pbcAlgorithm::allocateConstraintMatrixToSystem(int kinematicDim, int stressDim, bool tangentFlag){
 	std::string name = "A";
-	linearSystem<double>* lsys = _pAssembler->getLinearSystem(name);
+	linearSystem<double>* lsys = _solver->getDofManager()->getLinearSystem(name);
 	pbcSystem<double>* pbcsys = dynamic_cast<pbcSystem<double>*>(lsys);
 	int size = dynamic_cast<pbcDofManager*>(_splittedDofs)->sizeOfMultiplierDof();
 	if (pbcsys){
-		pbcsys->allocateConstraintMatrix(size,_pAssembler->sizeOfR());
+		pbcsys->allocateConstraintMatrix(size,_solver->getDofManager()->sizeOfR());
 		pbcsys->setScaleFactor(_scale);
 		if (tangentFlag){
       pbcsys->allocateKinematicMatrix(size,kinematicDim);
-      pbcsys->allocateStressMatrix(stressDim,_pAssembler->sizeOfR());
+      pbcsys->allocateStressMatrix(stressDim,_solver->getDofManager()->sizeOfR());
 		}
 	}
 };
@@ -576,7 +611,7 @@ void pbcAlgorithm::applyPBCByConstraintElimination(){
 
     cele->getLinearConstraints(linearConstraint);
     for (std::map<Dof,DofAffineConstraint<double> >::iterator itp = linearConstraint.begin(); itp != linearConstraint.end(); itp++){
-      _pAssembler->setLinearConstraint(itp->first, itp->second);
+      _solver->getDofManager()->setLinearConstraint(itp->first, itp->second);
     };
     linearConstraint.clear();
   };
@@ -690,7 +725,7 @@ void pbcAlgorithm::computeIndirectLinearConstraintMatrixForPBCSystem(linearConst
 
  void pbcAlgorithm::updateSystemUnknown(){
   std::string name = "A";
-  linearSystem<double>* lsys = _pAssembler->getLinearSystem(name);
+  linearSystem<double>* lsys = _solver->getDofManager()->getLinearSystem(name);
   pbcSystemConden<double>* pbcsys = dynamic_cast<pbcSystemConden<double>*>(lsys);
   if (pbcsys == NULL){
     Msg::Fatal("pbc system must be used pbcAlgorithm::updateSystemUnknown");
@@ -700,7 +735,7 @@ void pbcAlgorithm::computeIndirectLinearConstraintMatrixForPBCSystem(linearConst
     pbcsys->zeroKinematicVector();
 
     fullVector<double> kinVec;
-    _mbc->getKinematicalVector(kinVec);
+    _solver->getMicroBC()->getKinematicalVector(kinVec);
     for (int i=0; i< kinVec.size(); i++){
       double val = kinVec(i);
       pbcsys->addToKinematicVector(i,val);
@@ -1004,7 +1039,7 @@ void pbcAlgorithm::computeLinearConstraintMatrixLDBC(linearConstraintMatrix* lco
 
 void pbcAlgorithm::computeLoadVector(){
   std::string name = "A";
-  linearSystem<double>* lsys = _pAssembler->getLinearSystem(name);
+  linearSystem<double>* lsys = _solver->getDofManager()->getLinearSystem(name);
   nonLinearSystem<double>* nonsys = dynamic_cast<nonLinearSystem<double>*>(lsys);
   if (nonsys == NULL){
     Msg::Error("The nonlinear system must be used");
@@ -1019,19 +1054,19 @@ void pbcAlgorithm::computeLoadVector(){
       std::vector<Dof> R;
       cele->getMultiplierKeys(R);
 
-			double curtime = _mbc->getTime();
+			double curtime = _solver->getMicroBC()->getTime();
 			fullVector<double> m;
-			_mbc->setTime(0.);
+			_solver->getMicroBC()->setTime(0.);
 			fullVector<double> m0;
 			cele->getKinematicalVector(m0);
-			_mbc->setTime(1.);
+			_solver->getMicroBC()->setTime(1.);
 			cele->getKinematicalVector(m);
 			for (int i=0; i< m.size(); i++){
 				m(i) -= m0(i);
 			}
 
 			// back to current time
-			_mbc->setTime(curtime);
+			_solver->getMicroBC()->setTime(curtime);
 
       for (int i=0; i< R.size(); i++){
         int num = _splittedDofs->getMultiplierDofNumber(R[i]);
diff --git a/NonLinearSolver/periodicBC/pbcAlgorithm.h b/NonLinearSolver/periodicBC/pbcAlgorithm.h
index 3f307acf09b85e3382e9abe9b3bcbf3515af2368..5e56af6eb1fe0110085854babdb5def04521ad0f 100644
--- a/NonLinearSolver/periodicBC/pbcAlgorithm.h
+++ b/NonLinearSolver/periodicBC/pbcAlgorithm.h
@@ -18,32 +18,33 @@
 #include "pbcDofManager.h"
 #include "sparsityPattern.h"
 
+class nonLinearMechSolver;
 class pbcAlgorithm{
 	protected:
-		nonLinearMicroBC* _mbc;	  // for micro BC
 		FunctionSpaceBase* _space, *_mspace;  // function space
-		dofManager<double>* _pAssembler;	// dofManager
-		std::vector<partDomain*>& _allDomain; // alldomain
 		pbcConstraintElementGroup* _pbcConstraint;  // all linear periodic groups
 		pbcDofManager* _splittedDofs;
 		double _scale;	//factor scale
 		bool _isSplitted;
 		bool _isModifiedConstraintMatrix;
+		nonLinearMechSolver* _solver;
 
   protected:
     void __int__();
 
 	public:
-		pbcAlgorithm(nonLinearMicroBC* bc,std::vector<partDomain*>& d, dofManager<double>*p);
+		pbcAlgorithm(nonLinearMechSolver* solver);
 		virtual ~pbcAlgorithm();
+		
+		void switchMicroBC();
 
     pbcDofManager* getSplittedDof() {return _splittedDofs;};
     splitStiffnessMatrix* getSplitStiffness() {return _splittedDofs->getSplitStiffnessMatrix();};
     pbcConstraintElementGroup*  getPBCConstraintGroup() {return _pbcConstraint;};
-    nonLinearMicroBC* getMBC() {return _mbc;};
+    nonLinearMicroBC* getMBC();
     bool isSplittedDof() const {return _isSplitted;};
 
-    int getSystemDofNumber(const Dof& key) {return _pAssembler->getDofNumber(key);};
+    int getSystemDofNumber(const Dof& key);
 
     bool isModifiedConstraintMatrix() const {return _isModifiedConstraintMatrix;};
     void setIsModifiedConstraintMatrixFlag(const bool flag){_isModifiedConstraintMatrix = flag;};
@@ -56,17 +57,8 @@ class pbcAlgorithm{
 
     void numberDof(const int type); // number Dof
     int getNumberDirectConstraints() const {return _pbcConstraint->sizeOfDirectConstraints();};
-    int getNumberOfMacroToMicroKinematicVariables() const {return _mbc->getNumberOfMacroToMicroKinematicVariables();};
-    int getNumberMicroToMacroHomogenizedVariables() const{
-      // get maximal stress dimension from domain
-      int dimStress = 0;
-      for (int i=0; i< _allDomain.size(); i++){
-        if (_allDomain[i]->getStressDimension() > dimStress){
-          dimStress = _allDomain[i]->getStressDimension();
-        }
-      }
-      return dimStress;
-    }
+    int getNumberOfMacroToMicroKinematicVariables() const;;
+    int getNumberMicroToMacroHomogenizedVariables() const;
     // for estimating homogenized tangent in system
     void assembleKinematicMatrix();
     void zeroStressMatrix();
diff --git a/NonLinearSolver/periodicBC/pbcConstraintElement.cpp b/NonLinearSolver/periodicBC/pbcConstraintElement.cpp
index 4ab3917c1d0cdcfb8a6b5a34f0d41f9989b793f9..129a74395f77914abc4bf878161c98ef398b8ea8 100644
--- a/NonLinearSolver/periodicBC/pbcConstraintElement.cpp
+++ b/NonLinearSolver/periodicBC/pbcConstraintElement.cpp
@@ -19,7 +19,7 @@ void periodicMeshConstraint::__init__(const double fact){
 			constraintElement::allPositiveDof.insert(Keys[ik]);
 		}
 		else{
-			Msg::Warning("Dof on vertex was chosen as positive one in other constraint element:");
+			Msg::Warning("periodicMeshConstraint Dof on vertex was chosen as positive one in other constraint element:");
 		}
 	}
 
@@ -194,7 +194,7 @@ cubicSplineConstraintElement::cubicSplineConstraintElement(nonLinearMicroBC* mbc
         constraintElement::allPositiveDof.insert(Keys[ik]);
       }
       else{
-        Msg::Warning("Dof on vertex was chosen as positive one in other constraint element:");
+        Msg::Warning("cubicSplineConstraintElement Dof on vertex was chosen as positive one in other constraint element:");
       }
     }
 
@@ -342,7 +342,7 @@ lagrangeConstraintElement::lagrangeConstraintElement(nonLinearMicroBC* mbc, Func
         constraintElement::allPositiveDof.insert(Keys[ik]);
       }
       else{
-        Msg::Warning("Dof on vertex was chosen as positive one in other constraint element:");
+        Msg::Warning("lagrangeConstraintElement Dof on vertex was chosen as positive one in other constraint element:");
       }
     }
 
@@ -401,6 +401,76 @@ lagrangeConstraintElement::lagrangeConstraintElement(nonLinearMicroBC* mbc, Func
 		getPBCKinematicMatrix(_L,_XX,_S);
 };
 
+lagrangeConstraintElement::lagrangeConstraintElement(nonLinearMicroBC* mbc, FunctionSpaceBase* space, FunctionSpaceBase* mspace, 
+															const int c, MVertex* v1, std::vector<MVertex*>& vlist, 
+															const SVector3& dir): constraintElement(mbc,c), _periodicSpace(space),_multSpace(mspace),
+															_vp(v1),_vn(vlist), _vrootP(NULL), _vrootN(NULL){
+	std::vector<Dof> Keys;
+	getKeysFromVertex(_periodicSpace,_vp, getComp(),Keys);
+	for (int ik=0; ik < Keys.size(); ik++){
+		if (constraintElement::allPositiveDof.find(Keys[ik]) == constraintElement::allPositiveDof.end()){
+			constraintElement::allPositiveDof.insert(Keys[ik]);
+		}
+		else{
+			Msg::Warning("lagrangeConstraintElement Dof on vertex was chosen as positive one in other constraint element:");
+		}
+	}
+
+	for (int i=0; i<vlist.size(); i++){
+		double dist = _vn[i]->distance(_vn[0]);
+		_distance.push_back(dist);
+	};
+	SPoint3 pp = _vp->point();
+	SPoint3 np1 = _vn[0]->point();
+	SPoint3 np2 = _vn[_vn.size()-1]->point();
+	SPoint3 point = planeDirProject(pp,np1,np2,dir);
+	_s = point.distance(np1);
+	int size = _vn.size();
+	_C.resize(_ndofs,(1+size)*_ndofs); _C.setAll(0.0);
+	int col = 0;
+	for (int i=0; i<_ndofs; i++){
+			_C(i,col) = 1.0;
+			col++;
+	};
+	lagrangeConstraintElement::getFF(_s,_distance,_FF);
+	_Cbc.resize(_ndofs,size*_ndofs);
+	_Cbc.setAll(0.);
+	for (int i=0; i<_FF.size(); i++){
+			for (int j=0; j<_ndofs; j++){
+					_C(j,col) = -1.*_FF(i);
+					_Cbc(j,col-_ndofs) = _FF(i);
+					col++;
+			};
+	};
+	for (int j=0; j<3; j++){
+		 _L[j] = pp[j];
+		 for (int i=0; i<_FF.size(); i++){
+				SPoint3 pt = _vn[i]->point();
+				_L[j] -= _FF(i)*pt[j];
+		 }
+	}
+	
+	if (_mbc->getOrder() == 2){
+		SPoint3 positive = _vp->point();
+		SPoint3 np1 = _vn[0]->point();
+		SPoint3 np2 = _vn[_vn.size()-1]->point();
+		SPoint3 negative = project(positive,np1,np2);
+
+		for (int i=0; i<3; i++)
+			for (int j=0; j<3; j++)
+				_XX(i,j) = 0.5*(positive[i]*positive[j]);
+
+		for (int k=0; k<_FF.size(); k++){
+			SPoint3 pt = _vn[k]->point();
+			for (int i=0; i<3; i++)
+				for (int j=0; j<3; j++)
+					_XX(i,j) -= _FF(k)*0.5*(pt[i]*pt[j]);
+		}
+	}
+	
+	getPBCKinematicMatrix(_L,_XX,_S);
+};
+
 
 void lagrangeConstraintElement::getConstraintKeys(std::vector<Dof>& keys) const{
 	getKeysFromVertex(_periodicSpace,_vp, getComp(), keys);
@@ -529,7 +599,7 @@ FEConstraintElement::FEConstraintElement(nonLinearMicroBC* mbc, FunctionSpaceBas
       constraintElement::allPositiveDof.insert(Keys[ik]);
     }
     else{
-      Msg::Warning("Dof on vertex was chosen as positive one in other constraint element:");
+      Msg::Warning("FEConstraintElement Dof on vertex was chosen as positive one in other constraint element:");
     }
   }
   SPoint3 point;
diff --git a/NonLinearSolver/periodicBC/pbcConstraintElement.h b/NonLinearSolver/periodicBC/pbcConstraintElement.h
index 874a1be54a3ec0d64b61c9404979cb3f551a1473..41d84118becf9b4f4f532402b3ec5244b1f1919f 100644
--- a/NonLinearSolver/periodicBC/pbcConstraintElement.h
+++ b/NonLinearSolver/periodicBC/pbcConstraintElement.h
@@ -163,6 +163,11 @@ class lagrangeConstraintElement : public constraintElement{
 		lagrangeConstraintElement(nonLinearMicroBC* mbc, FunctionSpaceBase* space, FunctionSpaceBase* mspace, 
 															const int c, MVertex* v1, std::vector<MVertex*>& vlist, 
 															MVertex* vrootP= NULL, MVertex* vrootN = NULL);
+															
+		lagrangeConstraintElement(nonLinearMicroBC* mbc, FunctionSpaceBase* space, FunctionSpaceBase* mspace, 
+															const int c, MVertex* v1, std::vector<MVertex*>& vlist, 
+															const SVector3& dir);
+															
 		virtual ~lagrangeConstraintElement(){};
 		virtual void getConstraintKeys(std::vector<Dof>& key) const; // real dofs on constraint elements
 		virtual void getMultiplierKeys(std::vector<Dof>& key) const;	// multiplier dof on constraint element
diff --git a/NonLinearSolver/periodicBC/pbcConstraintElementBase.h b/NonLinearSolver/periodicBC/pbcConstraintElementBase.h
index 7c25837d43fb0ca625d58f2dabc7d74dba180371..f0c9572bbfc106922cf06d72a7898f842e83f94f 100644
--- a/NonLinearSolver/periodicBC/pbcConstraintElementBase.h
+++ b/NonLinearSolver/periodicBC/pbcConstraintElementBase.h
@@ -37,7 +37,8 @@
 
 class constraintElement{
   public:
-    enum ElementType{Periodic =0, CubicSpline=1, Lagrange=2, PeriodicNode = 3, Supplement=4, FE = 5};
+    enum ElementType{Periodic =0, CubicSpline=1, Lagrange=2, PeriodicNode = 3, Supplement=4, FE = 5,
+										 DirectionalPeriodic = 6};
 		static std::set<Dof> allPositiveDof;
 		
 		nonLinearMicroBC* _mbc; // micro BC
@@ -87,7 +88,7 @@ class constraintElement{
       Msg::Warning("getLinearConstraintsByVertices must be defined for this kind of constraint");
     };
     /**element type **/
-    virtual constraintElement::ElementType getType() const =0; //  get element type
+		virtual constraintElement::ElementType getType() const =0; //  get element type
 		/**print the constraint**/
 		virtual void print() const{
       Msg::Info("Print the constraint ");
diff --git a/NonLinearSolver/periodicBC/pbcConstraintEliminationNonLinearSystemPETSc.h b/NonLinearSolver/periodicBC/pbcConstraintEliminationNonLinearSystemPETSc.h
index 2378300fb30afe19531ce2e55bda41d53ef0b5f7..a73e963ff40b7cbaa57f5edba27b20acde18ed52 100644
--- a/NonLinearSolver/periodicBC/pbcConstraintEliminationNonLinearSystemPETSc.h
+++ b/NonLinearSolver/periodicBC/pbcConstraintEliminationNonLinearSystemPETSc.h
@@ -270,8 +270,11 @@ class pbcConstraintEliminationNonLinearSystemPETSc : public pbcSystemConden<scal
           else{
             Mat invCd;
             _try(MatInverse_Naive(Cd,&invCd,this->getComm()));
-            _try(MatMatMult(invCd,Cf,MAT_INITIAL_MATRIX,PETSC_DECIDE,&Cdf));
-            _try(MatScale(Cdf,-1.));
+						
+						if (_pAl->getSplittedDof()->sizeOfIndependentDof()>0){
+							_try(MatMatMult(invCd,Cf,MAT_INITIAL_MATRIX,PETSC_DECIDE,&Cdf));
+							_try(MatScale(Cdf,-1.));							
+						};
             _try(MatMatMult(invCd,Sbc,MAT_INITIAL_MATRIX,PETSC_DECIDE,&Sdf));
             _try(MatDestroy(&invCd));
           }
@@ -396,7 +399,9 @@ class pbcConstraintEliminationNonLinearSystemPETSc : public pbcSystemConden<scal
         _isComputedProjectMatrices = true;
 
         if (depenDofMap.size() >0){
-          _try(MatDestroy(&Cdf));
+					if (_pAl->getSplittedDof()->sizeOfIndependentDof()>0){
+						_try(MatDestroy(&Cdf));
+					}
           _try(MatDestroy(&Sdf));
         }
         cConMat.clear();
diff --git a/NonLinearSolver/periodicBC/pbcCreateConstraints.cpp b/NonLinearSolver/periodicBC/pbcCreateConstraints.cpp
index 86434d4939e1bc3ba56ca1c948cde1dae6ecacef..727cdd0bce1bac516fca184164da175da74fecf7 100644
--- a/NonLinearSolver/periodicBC/pbcCreateConstraints.cpp
+++ b/NonLinearSolver/periodicBC/pbcCreateConstraints.cpp
@@ -17,6 +17,7 @@
 #include "pbcCoonsPatchConstraintElement.h"
 #include "pbcSupplementConstraint.h"
 #include "pbcSupplementConstraintExtraDofDiffusion.h"
+#include "directionalConstraintElement.h"
 
 groupOfElementsDomainDecomposition::groupOfElementsDomainDecomposition(const int phys, groupOfElements* g_, std::vector<partDomain*>& allDomain):
 				g(g_),physical(phys){
@@ -73,12 +74,15 @@ groupOfElementsDomainDecomposition::~groupOfElementsDomainDecomposition(){
 	decompositionMap.clear();
 }
 
-pbcConstraintElementGroup::pbcConstraintElementGroup(nonLinearMicroBC* bc, std::vector<partDomain*>& adm,
+pbcConstraintElementGroup::pbcConstraintElementGroup(nonLinearMechSolver* sl,
                             FunctionSpaceBase* lagspace, FunctionSpaceBase* multspace)
-                               :_mbc(bc),_allDomain(adm), _v1(NULL),_v2(NULL),_v4(NULL),_v5(NULL),
+                               :_solver(sl), _v1(NULL),_v2(NULL),_v4(NULL),_v5(NULL),
                                _v3(NULL),_v6(NULL),_v7(NULL),_v8(NULL), _gXY(NULL),_gYZ(NULL),_gZX(NULL),
                                _gX(NULL),_gY(NULL),_gZ(NULL), _g(NULL),
-                               _LagSpace(lagspace),_MultSpace(multspace){
+                               _LagSpace(lagspace),_MultSpace(multspace),
+															 _periodic12(0.),_periodic14(0.),_periodic15(0.),
+															 _e1(1.,0.,0.),_e2(0.,1.,0.),_e3(0.,0.,1.),
+															 _e1Rotated(1.,0.,0.),_e2Rotated(0.,1.,0.),_e3Rotated(0.,0.,1.){
   this->__init__();
 };
 
@@ -166,12 +170,13 @@ void pbcConstraintElementGroup::groupIntersection(std::set<MVertex*>& g1, std::s
 };
 
 void pbcConstraintElementGroup::__init__(){
+	std::vector<partDomain*>& allDomain = *(_solver->getDomainVector());
 
   /**get all element within all domain in CG case**/
   _g = new groupOfElements();
   _fullDG = false;
-  for (int idom = 0; idom< _allDomain.size(); idom++){
-    partDomain* dom = _allDomain[idom];
+  for (int idom = 0; idom< allDomain.size(); idom++){
+    partDomain* dom = allDomain[idom];
     if (dom->getFormulation()){
       _fullDG = true;
 			if (dom->groupOfElementsSize() > 0) Msg::Fatal("The pbcConstraintElementGroup is only implemented for interDomain");
@@ -179,8 +184,8 @@ void pbcConstraintElementGroup::__init__(){
     }
   }
 
-  for (int idom = 0; idom< _allDomain.size(); idom++){
-    partDomain* dom = _allDomain[idom];
+  for (int idom = 0; idom< allDomain.size(); idom++){
+    partDomain* dom = allDomain[idom];
     for (groupOfElements::elementContainer::const_iterator it = dom->g_cbegin(); it!= dom->g_cend(); it++){
       _g->insert(*it);
     }
@@ -192,26 +197,26 @@ void pbcConstraintElementGroup::__init__(){
 	if (_fullDG){
 		Msg::Info("start decomsing boundary element to domains");
 		_boundaryDGMap.clear();
-		const std::vector<int>& bphysical = _mbc->getBoundaryPhysicals();
-		const std::vector<groupOfElements*>& bgroup = _mbc->getBoundaryGroupOfElements();
+		const std::vector<int>& bphysical = _solver->getMicroBC()->getBoundaryPhysicals();
+		const std::vector<groupOfElements*>& bgroup = _solver->getMicroBC()->getBoundaryGroupOfElements();
 		for (int ig=0; ig< bgroup.size(); ig++){
 			groupOfElements* gr = bgroup[ig];
-			groupOfElementsDomainDecomposition* grDomPart = new  groupOfElementsDomainDecomposition(bphysical[ig], gr,_allDomain);
+			groupOfElementsDomainDecomposition* grDomPart = new  groupOfElementsDomainDecomposition(bphysical[ig], gr,allDomain);
 			_boundaryDGMap.push_back(grDomPart);
 		}
 		Msg::Info("done decomsing boundary element to domains");
 
 		// create all lag space
 		int maxTag = 0;
-		for (int i=0; i< _allDomain.size(); i++){
-			if ((maxTag< _allDomain[i]->getFunctionSpace()->getId()) and (_allDomain[i]->groupOfElementsSize()>0)){
-				maxTag = _allDomain[i]->getFunctionSpace()->getId();
+		for (int i=0; i< allDomain.size(); i++){
+			if ((maxTag< allDomain[i]->getFunctionSpace()->getId()) and (allDomain[i]->groupOfElementsSize()>0)){
+				maxTag = allDomain[i]->getFunctionSpace()->getId();
 			}
 		}
 		maxTag ++; // to create a diffrent id for multspace
 		_allDGMultSpace.clear();
-		for (int i=0; i< _allDomain.size(); i++){
-			partDomain* dom = _allDomain[i];
+		for (int i=0; i< allDomain.size(); i++){
+			partDomain* dom = allDomain[i];
 			if (dom->groupOfElementsSize()>0){
 				int newTag = maxTag+i;
 				FunctionSpaceBase* sp = dom->getFunctionSpace()->clone(newTag);
@@ -223,9 +228,9 @@ void pbcConstraintElementGroup::__init__(){
 		}
 	}
 
-  nonLinearPeriodicBC* pbc = dynamic_cast<nonLinearPeriodicBC*>(_mbc);
-  const std::vector<groupOfElements*>& bgroup = _mbc->getBoundaryGroupOfElements();
-  int dim = _mbc->getDim();
+  nonLinearPeriodicBC* pbc = dynamic_cast<nonLinearPeriodicBC*>(_solver->getMicroBC());
+  const std::vector<groupOfElements*>& bgroup = _solver->getMicroBC()->getBoundaryGroupOfElements();
+  int dim = _solver->getMicroBC()->getDim();
   if (pbc != NULL && bgroup.size()>0){
 		if (dim ==2){
 			if (bgroup.size() == 4){
@@ -447,6 +452,9 @@ void pbcConstraintElementGroup::__init__(){
 			Msg::Info("Corner vertex = %d",v->getNum());
 		}
 		#endif //_DEBUG
+		
+		addControlPoints();
+		addOtherCornerPoints();
 	}
 };
 
@@ -454,7 +462,7 @@ void pbcConstraintElementGroup::__init__(){
 void pbcConstraintElementGroup::addControlPoints(){
   std::set<MVertex*> vv;
   groupIntersection(l12,l41,vv);
-  if (_mbc->getDim() == 3){
+  if (_solver->getMicroBC()->getDim() == 3){
     groupIntersection(l12,l15,vv);
     groupIntersection(l41,l15,vv);
   }
@@ -473,7 +481,7 @@ void pbcConstraintElementGroup::addControlPoints(){
       Msg::Info("Create root vertex v1 %d: %e %e %e",_v1->getNum(),pp.x(),pp.y(),pp.z());
       l12.insert(_v1);
       l41.insert(_v1);
-      if (_mbc->getDim()==3){
+      if (_solver->getMicroBC()->getDim()==3){
         l15.insert(_v1);
       }
       _virtualVertices.insert(_v1);
@@ -487,7 +495,7 @@ void pbcConstraintElementGroup::addControlPoints(){
 
   vv.clear();
   groupIntersection(l12,l23,vv);
-  if (_mbc->getDim()==3){
+  if (_solver->getMicroBC()->getDim()==3){
     groupIntersection(l12,l26,vv);
     groupIntersection(l23,l26,vv);
   }
@@ -516,7 +524,7 @@ void pbcConstraintElementGroup::addControlPoints(){
 
   vv.clear();
   groupIntersection(l34,l41,vv);
-  if (_mbc->getDim()==3){
+  if (_solver->getMicroBC()->getDim()==3){
     groupIntersection(l34,l48,vv);
     groupIntersection(l41,l48,vv);
   }
@@ -542,7 +550,7 @@ void pbcConstraintElementGroup::addControlPoints(){
   else {
     _v4 = *(vv.begin());
   }
-  if (_mbc->getDim()==3){
+  if (_solver->getMicroBC()->getDim()==3){
     vv.clear();
     groupIntersection(l85,l15,vv);
     groupIntersection(l85,l56,vv);
@@ -686,6 +694,29 @@ void pbcConstraintElementGroup::addControlPoints(){
     }
 
   }
+	
+	_periodic12[0] = _v2->x() - _v1->x();
+	_periodic12[1] = _v2->y() - _v1->y();
+	_periodic12[2] = _v2->z() - _v1->z();
+	
+	_periodic14[0] = _v4->x() - _v1->x();
+	_periodic14[1] = _v4->y() - _v1->y();
+	_periodic14[2] = _v4->z() - _v1->z();
+	
+	if (_solver->getMicroBC()->getDim() == 3){
+		_periodic15[0] = _v5->x() - _v1->x();
+		_periodic15[1] = _v5->y() - _v1->y();
+		_periodic15[2] = _v5->z() - _v1->z();
+	}
+	
+	_periodic12.print("periodic 1 --> 2");
+	_periodic14.print("periodic 1 --> 4");
+	
+	
+	if (_solver->getMicroBC()->getDim() == 3){
+		_periodic15.print("periodic 1 --> 5");
+	}
+	
 };
 
 void pbcConstraintElementGroup::addOtherCornerPoints(){
@@ -693,7 +724,7 @@ void pbcConstraintElementGroup::addOtherCornerPoints(){
   // find _v3
   vv.clear();
   groupIntersection(l23,l34,vv);
-  if (_mbc->getDim() ==3){
+  if (_solver->getMicroBC()->getDim() ==3){
     if (vv.size()==0)
       groupIntersection(l34,l37,vv);
     if (vv.size() ==0)
@@ -708,7 +739,7 @@ void pbcConstraintElementGroup::addOtherCornerPoints(){
     Msg::Info("Create root vertex v3 %d: %e %e %e",_v3->getNum(),x,y,z);
     l23.insert(_v3);
     l34.insert(_v3);
-    if (_mbc->getDim() ==3)
+    if (_solver->getMicroBC()->getDim() ==3)
       l37.insert(_v3);
     _virtualVertices.insert(_v3);
     _cVertices.insert(_v3);
@@ -718,7 +749,7 @@ void pbcConstraintElementGroup::addOtherCornerPoints(){
     _v3 = *(vv.begin());
   }
 
-  if (_mbc->getDim() ==3){
+  if (_solver->getMicroBC()->getDim() ==3){
     // find _v6
     vv.clear();
     groupIntersection(l26,l56,vv);
@@ -800,8 +831,8 @@ void pbcConstraintElementGroup::addOtherCornerPoints(){
 };
 
 void pbcConstraintElementGroup::createPolynomialBasePoints(){
-  int dim = _mbc->getDim();
-  nonLinearPeriodicBC* pbc = static_cast<nonLinearPeriodicBC*>(_mbc);
+  int dim = _solver->getMicroBC()->getDim();
+  nonLinearPeriodicBC* pbc = static_cast<nonLinearPeriodicBC*>(_solver->getMicroBC());
   int degreeX = pbc->getPBCPolynomialDegree(0);
   int degreeY = pbc->getPBCPolynomialDegree(1);;
   int degreeZ = pbc->getPBCPolynomialDegree(2);;
@@ -839,13 +870,6 @@ void pbcConstraintElementGroup::createPolynomialBasePoints(){
     pbc->setPBCPolynomialDegree(2,degreeZ);
   }
 
-
-
-
-
-  // add root points if necessary
-  this->addControlPoints();
-
   Msg::Info("Interpolation degree used in X direction %d, Y direction %d, Z direction %d",degreeX,degreeY,degreeZ);
 
   bool ok = false;
@@ -882,7 +906,7 @@ void pbcConstraintElementGroup::createBCGroup3D( std::vector<MVertex*>& vlx, std
     return;
   }
   MVertex* vroot = vlx[0];
-  nonLinearPeriodicBC* pbc = dynamic_cast<nonLinearPeriodicBC*>(_mbc);
+  nonLinearPeriodicBC* pbc = dynamic_cast<nonLinearPeriodicBC*>(_solver->getMicroBC());
   if (pbc == NULL) return;
   int NX = vlx.size();
   int NY = vly.size();
@@ -931,7 +955,7 @@ void pbcConstraintElementGroup::createBCGroup3D( std::vector<MVertex*>& vlx, std
   }
 };
 
-void pbcConstraintElementGroup::createLineFromTwoFaces(groupOfElements* face1, groupOfElements* face2, groupOfElements* line) const{
+void pbcConstraintElementGroup::intersectionBetweenTwoFaces(const groupOfElements* face1, const groupOfElements* face2, groupOfElements* & line) const{
 
 	std::vector<std::vector<MVertex*> > allEdges;
 	for (groupOfElements::elementContainer::iterator itL = face1->begin(); itL!= face1->end(); itL++){
@@ -963,8 +987,9 @@ void pbcConstraintElementGroup::createLineFromTwoFaces(groupOfElements* face1, g
 
 		}
 	}
-
-	line->clearAll();
+	
+	// add to grEle
+	if (line == NULL) line = new groupOfElements();
 	for (int i=0; i< allEdges.size(); i++){
 		std::vector<MVertex*>& vv = allEdges[i];
 		MElement* ele = new MLineN(vv);
@@ -972,12 +997,34 @@ void pbcConstraintElementGroup::createLineFromTwoFaces(groupOfElements* face1, g
 	}
 };
 
+void pbcConstraintElementGroup::intersectionBetweenTwoLines(const groupOfElements* line1, const groupOfElements* line2, groupOfElements* & pt) const{	
+	std::vector<MVertex*> allVertex;
+	for (groupOfElements::vertexContainer::iterator itL = line1->vbegin(); itL!= line1->vend(); itL++){
+		MVertex* v1 = *itL;
+		for (groupOfElements::vertexContainer::iterator itR = line2->vbegin(); itR!= line2->vend(); itR++){
+			MVertex* v2 = *itR;
+			if (v1->getNum() == v2->getNum()){
+				allVertex.push_back(v1);
+				break;
+			}
+		}
+	}
+	
+	if (pt == NULL) pt = new groupOfElements();
+	for (int i=0; i< allVertex.size(); i++){
+		MElement* ele = new MPoint(allVertex[i]);
+		pt->insert(ele);
+	}
+};
+
 void pbcConstraintElementGroup::createAllBCGroups(){
-  int dim = _mbc->getDim();
+  int dim = _solver->getMicroBC()->getDim();
+	if (_gX != NULL) delete _gX;
   _gX = new groupOfElements();
+	if (_gY != NULL) delete _gY;
   _gY = new groupOfElements();
 
-  nonLinearPeriodicBC* pbc = dynamic_cast<nonLinearPeriodicBC*>(_mbc);
+  nonLinearPeriodicBC* pbc = dynamic_cast<nonLinearPeriodicBC*>(_solver->getMicroBC());
   if (pbc->getPBCMethod() == nonLinearPeriodicBC::FE_LIN){
     for (int i=0; i<_xBase.size()-1; i++){
       MElement* line = new MLine(_xBase[i],_xBase[i+1]);
@@ -1039,6 +1086,7 @@ void pbcConstraintElementGroup::createAllBCGroups(){
     if (dim== 3){
       std::vector<MVertex*> ztemp(_zBase);
       _zBase.clear();
+			if (_gZ != NULL) delete _gZ;
       _gZ = new groupOfElements();
       for (int i=0; i<ztemp.size()-1; i++){
         _zBase.push_back(ztemp[i]);
@@ -1061,12 +1109,13 @@ void pbcConstraintElementGroup::createAllBCGroups(){
   };
 
   if (dim == 3){
+		if (_gXY != NULL) delete _gXY;
+		if (_gYZ != NULL) delete _gYZ;
+		if (_gZX != NULL) delete _gZX;
     _gXY = new groupOfElements();
     _gZX = new groupOfElements();
     _gYZ = new groupOfElements();
 
-     this->addOtherCornerPoints();
-
     this->createBCGroup3D(_xBase,_yBase,_v3,_gXY);
     this->createBCGroup3D(_yBase,_zBase,_v8,_gYZ);
     this->createBCGroup3D(_zBase,_xBase,_v6,_gZX);
@@ -1114,7 +1163,7 @@ void pbcConstraintElementGroup::periodicConditionForPeriodicMesh(Iterator posivt
     MVertex* v = *itp;
     if ( others.find(v) == others.end()){
       MVertex* vn = findNearestVertex(negativeitbegin,negativeitend,v);
-        constraintElement* cel = new periodicMeshConstraint(_mbc,_LagSpace,_MultSpace,-1,v,vn,vrootP,vrootN);
+        constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,-1,v,vn,vrootP,vrootN);
         _allConstraint.insert(cel);
     };
   }
@@ -1129,7 +1178,7 @@ void pbcConstraintElementGroup::periodicConditionForPeriodicMesh(const int comp,
     MVertex* v = *itp;
     if ( others.find(v) == others.end()){
       MVertex* vn = findNearestVertex(negativeitbegin,negativeitend,v);
-        constraintElement* cel = new periodicMeshConstraint(_mbc,_LagSpace,_MultSpace,comp,v,vn,vrootP,vrootN,fact);
+        constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,comp,v,vn,vrootP,vrootN,fact);
         _allConstraint.insert(cel);
     };
   }
@@ -1233,7 +1282,7 @@ void pbcConstraintElementGroup::cubicSplineFormCondition(Iterator itbegin, Itera
           break;
         };
       };
-			constraintElement* cele = new cubicSplineConstraintElement(_mbc,_LagSpace,_MultSpace,-1,v,vleft,vright,fl);
+			constraintElement* cele = new cubicSplineConstraintElement(_solver->getMicroBC(),_LagSpace,_MultSpace,-1,v,vleft,vright,fl);
 			_allConstraint.insert(cele);
 
     };
@@ -1263,7 +1312,7 @@ void pbcConstraintElementGroup::cubicSplinePeriodicCondition(Iterator itbegin, I
       };
       // if found segment
       if ((vleft != NULL) and (vright!= NULL)){
-				constraintElement* cele = new cubicSplineConstraintElement(_mbc,_LagSpace,_MultSpace,-1,v,vleft,vright,fl);
+				constraintElement* cele = new cubicSplineConstraintElement(_solver->getMicroBC(),_LagSpace,_MultSpace,-1,v,vleft,vright,fl);
 				_allConstraint.insert(cele);
 
       }
@@ -1311,7 +1360,7 @@ void pbcConstraintElementGroup::cubicSplineFormConditionCoonsPatch(Iterator itbe
       };
       // segment found
       if ((vleftx!=NULL) and (vlefty!=NULL) and (vrightx!=NULL) and (vrighty!=NULL)){
-          constraintElement* cele = new CoonsPatchCubicSplineConstraintElement(_mbc,_LagSpace,_MultSpace,
+          constraintElement* cele = new CoonsPatchCubicSplineConstraintElement(_solver->getMicroBC(),_LagSpace,_MultSpace,
 																								-1,v,vref,vleftx,vrightx,vlefty,vrighty,flagx,flagy);
           _allConstraint.insert(cele);
       }
@@ -1362,7 +1411,7 @@ void pbcConstraintElementGroup::cubicSplinePeriodicConditionCoonsPatch(Iterator
         };
       };
       if ((vleftx!=NULL) and (vlefty!=NULL) and (vrightx!=NULL) and (vrighty!=NULL)){
-				constraintElement* cele = new CoonsPatchCubicSplineConstraintElement(_mbc ,_LagSpace,_MultSpace,
+				constraintElement* cele = new CoonsPatchCubicSplineConstraintElement(_solver->getMicroBC() ,_LagSpace,_MultSpace,
 																				-1,v,vref,vleftx,vrightx,vlefty,vrighty,flagx,flagy);
 				_allConstraint.insert(cele);
 
@@ -1388,7 +1437,7 @@ void pbcConstraintElementGroup::lagrangeFormCondition(Iterator itbegin, Iterator
       }
     };
     if (flag){
-			constraintElement* cele = new lagrangeConstraintElement(_mbc,_LagSpace,_MultSpace,
+			constraintElement* cele = new lagrangeConstraintElement(_solver->getMicroBC(),_LagSpace,_MultSpace,
 																			-1,v,vlist,vrootP,vrootN);
 			_allConstraint.insert(cele);
     };
@@ -1401,13 +1450,113 @@ void pbcConstraintElementGroup::lagrangePeriodicCondition(Iterator itbegin, Iter
 	for (Iterator it = itbegin; it != itend; it++){
     MVertex* v= *it;
     if (others.find(v) == others.end()){
-			constraintElement* cele = new lagrangeConstraintElement(_mbc,_LagSpace,_MultSpace,
+			constraintElement* cele = new lagrangeConstraintElement(_solver->getMicroBC(),_LagSpace,_MultSpace,
 																					-1,v,vlist,vrootP,vrootN);
 			_allConstraint.insert(cele);
     };
   };
 };
 
+template<class Iterator>
+void pbcConstraintElementGroup::shiftedLagrangePeriodicCondition(Iterator itbegin, Iterator itend,
+                                   std::vector<MVertex*>& vlist,std::set<MVertex*>& others, const SVector3& normal){
+																		 
+	for (Iterator it = itbegin; it != itend; it++){
+    MVertex* v= *it;
+    if (others.find(v) == others.end()){
+			constraintElement* cele = new shiftedLagrangeConstraintElement(_solver->getMicroBC(),_LagSpace,_MultSpace,
+																					-1,v,vlist,normal);
+			_allConstraint.insert(cele);
+    };
+	}
+};
+
+template<class Iterator>
+void pbcConstraintElementGroup::directionalLagrangeFormCondition(Iterator itbegin, Iterator itend,
+                                std::vector<MVertex*>& vlist, const SVector3& pbcDir){
+
+	int vsize = vlist.size();
+  for (Iterator it = itbegin; it!= itend;it++){
+    MVertex* v = *it;
+    bool flag = true;
+
+    for (int i=0; i<vsize; i++){
+      if (v->getNum() == vlist[i]->getNum()){
+        flag = false;
+        break;
+      }
+    };
+		
+    if (flag){
+			constraintElement* cele = new directionalFormLagrangeConstraintElement(_solver->getMicroBC(),_LagSpace,_MultSpace,v,vlist,pbcDir);
+			_allConstraint.insert(cele);
+    };
+  };																			
+																	
+};
+
+template<class Iterator>
+void pbcConstraintElementGroup::directionalLagrangePeriodicCondition(Iterator itbegin, Iterator itend,
+                                   std::vector<MVertex*>& xlist, std::vector<MVertex*>& ylist,
+																	 const SVector3& pbcNormal, const bool allComp){
+	if (xlist[0]->getNum() != ylist[0]->getNum()){
+		Msg::Fatal("construction of interplolation basis is not correct pbcConstraintElementGroup::directionalLagrangePeriodicCondition");
+	}
+	int xsize = xlist.size();
+	int ysize = ylist.size();
+  for (Iterator it = itbegin; it!= itend;it++){
+    MVertex* v = *it;
+    bool flag = true;
+
+    for (int i=0; i<xsize; i++){
+      if (v->getNum() == xlist[i]->getNum()){
+        flag = false;
+        break;
+      }
+    };
+		if (flag){
+			for (int i=0; i<ysize; i++){
+				if (v->getNum() == ylist[i]->getNum()){
+					flag = false;
+					break;
+				}
+			};
+		}
+		
+    if (flag){
+			SPoint3 pt = v->point();
+			SPoint3 v1 = xlist[0]->point();
+			SPoint3 v2 = xlist[xsize-1]->point();
+			
+			SPoint3 pp = planeDirProject(pt,v1,v2,pbcNormal);
+			
+			SVector3 ppv1(pp,v1);
+			SVector3 ppv2(pp,v2);
+			if (dot(ppv1,ppv2) <=0.){
+				constraintElement* cele;
+				if (allComp){
+					cele = new lagrangeConstraintElement(_solver->getMicroBC(),_LagSpace,_MultSpace,-1,v,xlist,pbcNormal);
+				}
+				else{
+					cele = new directionalPBCLagrangeConstraintElement(_solver->getMicroBC(),_LagSpace,_MultSpace,v,xlist,pbcNormal);
+				}
+				 
+				_allConstraint.insert(cele);
+			}
+			else{
+				constraintElement* cele;
+				if (allComp){
+					cele = new lagrangeConstraintElement(_solver->getMicroBC(),_LagSpace,_MultSpace,-1,v,ylist,pbcNormal);
+				}
+				else{
+					cele = new directionalPBCLagrangeConstraintElement(_solver->getMicroBC(),_LagSpace,_MultSpace,v,ylist,pbcNormal);
+				}
+				_allConstraint.insert(cele);
+			}
+    };
+  };																	 
+};
+
 // for lagrange
 template<class Iterator>
 void pbcConstraintElementGroup::lagrangeFormConditionCoonsPatch(Iterator itbegin, Iterator itend, MVertex* vref,
@@ -1416,7 +1565,7 @@ void pbcConstraintElementGroup::lagrangeFormConditionCoonsPatch(Iterator itbegin
 	for (Iterator it = itbegin; it!= itend;it++){
     MVertex* v = *it;
     if (others.find(v)==others.end()){
-			constraintElement* cele = new CoonsPatchLagrangeConstraintElement(_mbc,_LagSpace,_MultSpace,
+			constraintElement* cele = new CoonsPatchLagrangeConstraintElement(_solver->getMicroBC(),_LagSpace,_MultSpace,
 																										-1,v,vref,xlist,ylist, vrootP,vrootN);
 			_allConstraint.insert(cele);
 
@@ -1430,7 +1579,7 @@ void pbcConstraintElementGroup::lagrangePeriodicConditionCoonsPatch(Iterator itb
 	for (Iterator it = itbegin; it!= itend;it++){
     MVertex* v = *it;
     if (others.find(v)==others.end()){
-			constraintElement* cele = new CoonsPatchLagrangeConstraintElement(_mbc,_LagSpace,_MultSpace,
+			constraintElement* cele = new CoonsPatchLagrangeConstraintElement(_solver->getMicroBC(),_LagSpace,_MultSpace,
 													-1,v,vref,xlist,ylist, vrootP,vrootN);
 			_allConstraint.insert(cele);
     };
@@ -1480,7 +1629,7 @@ void pbcConstraintElementGroup::pbcFEConstraintElementGroup(Iterator itbegin, It
         Msg::Error("receive element not found");
       }
       else{
-				constraintElement* cele = new FEConstraintElement(_mbc ,_LagSpace,_MultSpace, -1,v,e,vrootP,vrootN);
+				constraintElement* cele = new FEConstraintElement(_solver->getMicroBC() ,_LagSpace,_MultSpace, -1,v,e,vrootP,vrootN);
 				_allConstraint.insert(cele);
       }
     };
@@ -1488,9 +1637,9 @@ void pbcConstraintElementGroup::pbcFEConstraintElementGroup(Iterator itbegin, It
 };
 
 void pbcConstraintElementGroup::createFEConstraintElementGroup(){
-  int dim = _mbc->getDim();
-  nonLinearPeriodicBC* pbc = static_cast<nonLinearPeriodicBC*>(_mbc);
-  const std::vector<groupOfElements*>& bgroup = _mbc->getBoundaryGroupOfElements();
+  int dim = _solver->getMicroBC()->getDim();
+  nonLinearPeriodicBC* pbc = static_cast<nonLinearPeriodicBC*>(_solver->getMicroBC());
+  const std::vector<groupOfElements*>& bgroup = _solver->getMicroBC()->getBoundaryGroupOfElements();
  // create base
   this->createPolynomialBasePoints();
   this->createAllBCGroups();
@@ -1535,9 +1684,9 @@ void pbcConstraintElementGroup::createFEConstraintElementGroup(){
 };
 
 void pbcConstraintElementGroup::createProjectConstraintElementGroup(){
-  int dim = _mbc->getDim();
-  nonLinearPeriodicBC* pbc = static_cast<nonLinearPeriodicBC*>(_mbc);
-  const std::vector<groupOfElements*>& bgroup = _mbc->getBoundaryGroupOfElements();
+  int dim = _solver->getMicroBC()->getDim();
+  nonLinearPeriodicBC* pbc = static_cast<nonLinearPeriodicBC*>(_solver->getMicroBC());
+  const std::vector<groupOfElements*>& bgroup = _solver->getMicroBC()->getBoundaryGroupOfElements();
 
 	if (dim == 2){
     this->pbcFEConstraintElementGroup(l34.begin(),l34.end(),bgroup[0],_cVertices,_v4,_v1);
@@ -1548,11 +1697,11 @@ void pbcConstraintElementGroup::createProjectConstraintElementGroup(){
 		if (_gY) delete _gY;
 		if (_gZ) delete _gZ;
 		_gX = new groupOfElements();
-		createLineFromTwoFaces(f1234,f1562,_gX);
+		intersectionBetweenTwoFaces(f1234,f1562,_gX);
 		_gY = new groupOfElements();
-		createLineFromTwoFaces(f1234,f1584,_gY);
+		intersectionBetweenTwoFaces(f1234,f1584,_gY);
 		_gZ = new groupOfElements();
-		createLineFromTwoFaces(f1562,f1584,_gZ);
+		intersectionBetweenTwoFaces(f1562,f1584,_gZ);
 
     this->pbcFEConstraintElementGroup(l34.begin(),l34.end(),_gX,_cVertices,_v4,_v1);
     this->pbcFEConstraintElementGroup(l78.begin(),l78.end(),_gX,_cVertices,_v8,_v1);
@@ -1574,12 +1723,12 @@ void pbcConstraintElementGroup::createProjectConstraintElementGroup(){
 };
 
 void pbcConstraintElementGroup::createPeriodicMeshConstraintElementGroup(){
-  nonLinearPeriodicBC* pbc =  static_cast<nonLinearPeriodicBC*>(_mbc);
-  int dim = _mbc->getDim();
-  const std::vector<groupOfElements*>& bgroup = _mbc->getBoundaryGroupOfElements();
+  nonLinearPeriodicBC* pbc =  static_cast<nonLinearPeriodicBC*>(_solver->getMicroBC());
+  int dim = _solver->getMicroBC()->getDim();
+  const std::vector<groupOfElements*>& bgroup = _solver->getMicroBC()->getBoundaryGroupOfElements();
 
   /**fixed node in case of periodic boundary condition and corner nodes does not exist**/
-  if ((_cVertices.size() ==0) and (_mbc->getOrder()==1)){
+  if ((_cVertices.size() ==0) and (_solver->getMicroBC()->getOrder()==1)){
     if (dim==2){
       MVertex* v = *(bgroup[0]->vbegin());
       _cVertices.insert(v);
@@ -1639,9 +1788,9 @@ void pbcConstraintElementGroup::createPeriodicMeshConstraintElementGroup(){
 
 void pbcConstraintElementGroup::createCubicSplineConstraintElementGroup(){
 
-  const std::vector<groupOfElements*>& bgroup = _mbc->getBoundaryGroupOfElements();
-  nonLinearPeriodicBC* pbc = static_cast<nonLinearPeriodicBC*>(_mbc);
-  int dim = _mbc->getDim();
+  const std::vector<groupOfElements*>& bgroup = _solver->getMicroBC()->getBoundaryGroupOfElements();
+  nonLinearPeriodicBC* pbc = static_cast<nonLinearPeriodicBC*>(_solver->getMicroBC());
+  int dim = _solver->getMicroBC()->getDim();
 
   // create basis
   this->createPolynomialBasePoints();
@@ -1681,17 +1830,75 @@ void pbcConstraintElementGroup::createCubicSplineConstraintElementGroup(){
   };
 };
 
+void pbcConstraintElementGroup::createShiftedLagrangeConstraintElementGroup(){
+  nonLinearPeriodicBC* pbc = static_cast<nonLinearPeriodicBC*>(_solver->getMicroBC());
+	
+	const SVector3& normal = pbc->getShiftPBCNormal();
+	if (normal.norm() < 1e-10){
+		printf("no shifted if normal is zero pbcConstraintElementGroup::createShiftedLagrangeConstraintElementGroup \n");
+		this->createLagrangeConstraintElementGroup();
+		pbc->setShiftedBC(false);
+		return;
+	}
+	
+	int dim = _solver->getMicroBC()->getDim();
+  const std::vector<groupOfElements*>& bgroup = _solver->getMicroBC()->getBoundaryGroupOfElements();
+ // create base
+  this->createPolynomialBasePoints();
+
+  if (dim ==2){
+		this->lagrangeFormCondition(l12.begin(),l12.end(),_xBase);
+		this->lagrangeFormCondition(l41.begin(),l41.end(),_yBase);
+		
+		SPoint3 p1 = _v1->point();
+		SPoint3 p2 = _v2->point();
+		SPoint3 p3 = _v3->point();
+		SPoint3 p4 = _v4->point();
+		SVector3 p1p2(p1,p2);
+		
+		SPoint3 p = planeDirProject(p3,p1,p2,normal);
+		SVector3 p1p3(p1,p3);
+		SVector3 p2p4(p2,p4);
+		
+		double phi0 = acos(dot(p1p2,p1p3)/(p1p2.norm()*p1p3.norm()));
+		double phi1 = acos(dot(p1p2,p2p4)/(p1p2.norm()*p2p4.norm()));
+		
+		SVector3 pp3(p,p3);
+		double phi = acos(dot(pp3,p1p2)/(pp3.norm()*p1p2.norm()));
+		
+		printf("phi = %f phi0 = %f phi1 = %f \n",phi*180./3.14159265359, phi0*180/3.14159265359,phi1*180./3.14159265359);
+		
+		if ((phi >=phi0) and (phi<=phi1)){				
+			Msg::Info("shifted l34");
+			std::set<MVertex*> others;
+			this->lagrangePeriodicCondition(l23.begin(),l23.end(),_yBase,others);
+			others.insert(_v3); // avoid duplicating constraint at v3
+			this->shiftedLagrangePeriodicCondition(l34.begin(),l34.end(),_xBase,others,normal);
+		}
+		else{
+			Msg::Info("shifted l23");
+			std::set<MVertex*> others;
+			this->lagrangePeriodicCondition(l34.begin(),l34.end(),_xBase,others);
+			others.insert(_v3); // avoid duplicating constraint at v3
+			this->shiftedLagrangePeriodicCondition(l23.begin(),l23.end(),_yBase,others,normal);
+		}
+		
+  }
+	else{
+		Msg::Fatal("createShiftedLagrangeConstraintElementGroup has not been implemented for 3D problems");
+	}
+}
+
 void pbcConstraintElementGroup::createLagrangeConstraintElementGroup(){
-  int dim = _mbc->getDim();
-  nonLinearPeriodicBC* pbc = static_cast<nonLinearPeriodicBC*>(_mbc);
-  const std::vector<groupOfElements*>& bgroup = _mbc->getBoundaryGroupOfElements();
+  int dim = _solver->getMicroBC()->getDim();
+  nonLinearPeriodicBC* pbc = static_cast<nonLinearPeriodicBC*>(_solver->getMicroBC());
+  const std::vector<groupOfElements*>& bgroup = _solver->getMicroBC()->getBoundaryGroupOfElements();
  // create base
   this->createPolynomialBasePoints();
 
   if (dim ==2){
     this->lagrangeFormCondition(l12.begin(),l12.end(),_xBase,_v1,_v1);
-    this->lagrangePeriodicCondition(l34.begin(),l34.end(),_xBase,_cVertices,_v4,_v1);
-
+		this->lagrangePeriodicCondition(l34.begin(),l34.end(),_xBase,_cVertices,_v4,_v1);
     this->lagrangeFormCondition(l41.begin(),l41.end(),_yBase,_v1,_v1);
     this->lagrangePeriodicCondition(l23.begin(),l23.end(),_yBase,_cVertices,_v2,_v1);
   }
@@ -1724,7 +1931,7 @@ void pbcConstraintElementGroup::createLagrangeConstraintElementGroup(){
 };
 
 void pbcConstraintElementGroup::createLinearDisplacementConstraintElementGroup(){
-  const std::vector<groupOfElements*>& bgroup = _mbc->getBoundaryGroupOfElements();
+  const std::vector<groupOfElements*>& bgroup = _solver->getMicroBC()->getBoundaryGroupOfElements();
   std::set<MVertex*> allVertices;
   for (int i=0; i<bgroup.size(); i++){
     groupOfElements* g = bgroup[i];
@@ -1737,24 +1944,24 @@ void pbcConstraintElementGroup::createLinearDisplacementConstraintElementGroup()
 
   for (std::set<MVertex*>::iterator it = allVertices.begin(); it!= allVertices.end(); it++){
     MVertex* vp = *it;
-		constraintElement* cel = new periodicMeshConstraint(_mbc,_LagSpace,_MultSpace,-1,vp);
+		constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,-1,vp);
 		_allConstraint.insert(cel);
   };
 };
 
 void pbcConstraintElementGroup::createMinimalKinematicConstraintElementGroup(){
-  const std::vector<groupOfElements*>& bgroup = _mbc->getBoundaryGroupOfElements();
+  const std::vector<groupOfElements*>& bgroup = _solver->getMicroBC()->getBoundaryGroupOfElements();
   int size = bgroup.size();
   for (int i=0; i<size; i++){
-		constraintElement* ppc = new supplementConstraint(_mbc,_LagSpace,_MultSpace,-1,bgroup[i]);
+		constraintElement* ppc = new supplementConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,-1,bgroup[i]);
 		_allConstraint.insert(ppc);
   }
 };
 
 void pbcConstraintElementGroup::createLinearDisplacementConstraintElementGroup_DG(){
   if (_boundaryDGMap.size() <=0) Msg::Fatal("_boundaryDGMap has not been initiated");
-  int ndofsPerNode = _mbc->getNumberOfConstrainedDofsPerVertex();
-	const std::set<int>& constrainedComp = _mbc->getConstrainedComps();
+  int ndofsPerNode = _solver->getMicroBC()->getNumberOfConstrainedDofsPerVertex();
+	const std::set<int>& constrainedComp = _solver->getMicroBC()->getConstrainedComps();
 
   std::set<Dof> allConstraintDof;
   for (int i=0; i<_boundaryDGMap.size(); i++){
@@ -1776,7 +1983,7 @@ void pbcConstraintElementGroup::createLinearDisplacementConstraintElementGroup_D
 					if (allConstraintDof.find(key[0])== allConstraintDof.end()){
 						allConstraintDof.insert(key[0]);
 						// create constraint
-						constraintElement* cel = new periodicMeshConstraint(_mbc,lagSpace,multspace,*itcomp,v);
+						constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC(),lagSpace,multspace,*itcomp,v);
 						_allConstraint.insert(cel);
 
 					}
@@ -1791,19 +1998,19 @@ void pbcConstraintElementGroup::createLinearDisplacementConstraintElementGroup_D
 
 void pbcConstraintElementGroup::createMinimalKinematicConstraintElementGroup_DG(){
 	if (_boundaryDGMap.size() <=0) Msg::Fatal("_boundaryDGMap has not been initiated");
-	const std::set<int>& constrainedComp = _mbc->getConstrainedComps();
+	const std::set<int>& constrainedComp = _solver->getMicroBC()->getConstrainedComps();
 
   for (int i=0; i<_boundaryDGMap.size(); i++){
 		for (std::set<int>::const_iterator itcomp = constrainedComp.begin(); itcomp!= constrainedComp.end(); itcomp++){
 			int comp = *itcomp;
-			constraintElement* ppc = new supplementConstraintGeneral(_mbc,_MultSpace,comp,_boundaryDGMap[i]);
+			constraintElement* ppc = new supplementConstraintGeneral(_solver->getMicroBC(),_MultSpace,comp,_boundaryDGMap[i]);
 			_allConstraint.insert(ppc);
 		}
   }
 };
 
 void pbcConstraintElementGroup::createMixBCConstraintElementGroup(){
-  nonLinearMixedBC* mixBC = dynamic_cast<nonLinearMixedBC*>(_mbc);
+  nonLinearMixedBC* mixBC = dynamic_cast<nonLinearMixedBC*>(_solver->getMicroBC());
   // apply on vertices
   const std::vector<std::pair<int,int> >&  vlist = mixBC->getFixVertices();
   for (int i=0; i< vlist.size(); i++){
@@ -1816,27 +2023,27 @@ void pbcConstraintElementGroup::createMixBCConstraintElementGroup(){
     else
       v = *(gv.vbegin());
     if (v != NULL){
-			constraintElement* cel = new periodicMeshConstraint(_mbc,_LagSpace,_MultSpace,vercomp,v);
+			constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,vercomp,v);
 			_allConstraint.insert(cel);
 		}
   }
 
-	const std::vector<groupOfElements*>& bgroup = _mbc->getBoundaryGroupOfElements();
-	const std::vector<int>& bphysical = _mbc->getBoundaryPhysicals();
+	const std::vector<groupOfElements*>& bgroup = _solver->getMicroBC()->getBoundaryGroupOfElements();
+	const std::vector<int>& bphysical = _solver->getMicroBC()->getBoundaryPhysicals();
 
 	const std::vector<std::pair<int,int> >& kphysical = mixBC->getKinematicPhysical();
 
 	std::map<MVertex*, std::set<int> > mapKinematicConstraints;
 	for (int i=0; i<kphysical.size(); i++){
 		Msg::Info("k bc = %d comp = %d",kphysical[i].first,kphysical[i].second);
-		const groupOfElements* gr = _mbc->getBCGroup(kphysical[i].first);
+		const groupOfElements* gr = _solver->getMicroBC()->getBCGroup(kphysical[i].first);
 		int compK = kphysical[i].second;
 		for (groupOfElements::vertexContainer::iterator it = gr->vbegin(); it!= gr->vend(); it++){
 			MVertex* vp = *it;
 			std::map<MVertex*, std::set<int> >::iterator itvert=mapKinematicConstraints.find(vp);
 			if(itvert==mapKinematicConstraints.end())
 			{
-				constraintElement* cel = new periodicMeshConstraint(_mbc,_LagSpace,_MultSpace,compK,vp);
+				constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,compK,vp);
 				_allConstraint.insert(cel);
 				std::set<int> comp;
 				comp.insert(compK);
@@ -1846,7 +2053,7 @@ void pbcConstraintElementGroup::createMixBCConstraintElementGroup(){
 				std::set<int> &comp = itvert->second;
 				if (comp.find(compK)==comp.end())
 				{
-					constraintElement* cel = new periodicMeshConstraint(_mbc,_LagSpace,_MultSpace,compK,vp);
+					constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,compK,vp);
 					_allConstraint.insert(cel);
 					comp.insert(kphysical[i].second);
 				}
@@ -1860,22 +2067,22 @@ void pbcConstraintElementGroup::createMixBCConstraintElementGroup(){
 
 	for (int i=0; i<sphysical.size(); i++){
 		Msg::Info("s bc = %d comp = %d",sphysical[i].first,sphysical[i].second);
-		groupOfElements* gr = _mbc->getBCGroup(sphysical[i].first);
+		groupOfElements* gr = _solver->getMicroBC()->getBCGroup(sphysical[i].first);
 		int compS = sphysical[i].second;
 
-		constraintElement* ppc= new supplementConstraint(_mbc,_LagSpace,_MultSpace,compS,gr);
+		constraintElement* ppc= new supplementConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,compS,gr);
 		_allConstraint.insert(ppc);
 	};
 
-	if (_mbc->getOrder() == 2){
+	if (_solver->getMicroBC()->getOrder() == 2){
 		const std::vector<additionalSecondOrderElement>& hoCons = mixBC->getAdditionalSecondOrderStaticPhysical();
 		for (int i=0; i< hoCons.size(); i++){
 			const additionalSecondOrderElement& el = hoCons[i];
 			Msg::Info("ho static bc = %d comp = %d direction = %d",el.physical,el.comp,el.direction);
-			groupOfElements* gr = _mbc->getBCGroup(el.physical);
+			groupOfElements* gr = _solver->getMicroBC()->getBCGroup(el.physical);
 
 			singlePositionScalarWeightFunction fct(el.direction);
-			constraintElement* ppc = new supplementConstraint(_mbc, _LagSpace,_MultSpace,el.comp,gr, &fct);
+			constraintElement* ppc = new supplementConstraint(_solver->getMicroBC(), _LagSpace,_MultSpace,el.comp,gr, &fct);
 			_allConstraint.insert(ppc);
 		}
 
@@ -1892,8 +2099,8 @@ void pbcConstraintElementGroup::createMixBCConstraintElementGroup(){
 		
 		Msg::Info("periodic BC negative = %d positive = %d comp = %d",phyNegative,phyPositive,comp);
 		
-		groupOfElements* gPositive = _mbc->getBCGroup(phyPositive);
-		groupOfElements* gNegative = _mbc->getBCGroup(phyNegative);
+		groupOfElements* gPositive = _solver->getMicroBC()->getBCGroup(phyPositive);
+		groupOfElements* gNegative = _solver->getMicroBC()->getBCGroup(phyNegative);
 		
 		std::set<MVertex*> nullSet;
 		periodicConditionForPeriodicMesh(comp,negFact,gPositive->vbegin(), gPositive->vend(),
@@ -1903,8 +2110,169 @@ void pbcConstraintElementGroup::createMixBCConstraintElementGroup(){
 	
 };
 
+void pbcConstraintElementGroup::createOrthogonalMixBCConstraintElementGroupDirectionFollowing(){	
+	nonLinearOrthogonalMixedBCDirectionFollowing* mixBC = dynamic_cast<nonLinearOrthogonalMixedBCDirectionFollowing*>(_solver->getMicroBC());
+	const std::vector<SVector3>& kubcDir = mixBC->getKUBCDirection();
+	const std::vector<SVector3>& subcDir = mixBC->getSUBCDirection();
+
+	const std::vector<groupOfElements*>& bgroup = _solver->getMicroBC()->getBoundaryGroupOfElements();
+	std::set<MVertex*> allVertex;
+	
+	for (int i=0; i< bgroup.size(); i++){
+		for (groupOfElements::vertexContainer::iterator it = bgroup[i]->vbegin(); it!= bgroup[i]->vend(); it++){
+			allVertex.insert(*it);
+		}
+	}
+	
+	for (int i=0; i< kubcDir.size(); i++){
+		const SVector3& dir = kubcDir[i];
+		for (std::set<MVertex*>::iterator it = allVertex.begin(); it!= allVertex.end(); it++){
+			MVertex* v = *it;
+			
+			if (it == allVertex.begin()){
+				MVertex* v = *(allVertex.begin());
+				constraintElement* ppc = new periodicMeshConstraint(_solver->getMicroBC(), _LagSpace,_LagSpace,_MultSpace,-1,v);
+				_allConstraint.insert(ppc);
+			}
+			else{
+				constraintElement* ppc = new directionalPeriodicMeshConstraint(_solver->getMicroBC(), _LagSpace,_LagSpace,_MultSpace,v,NULL,dir);
+				_allConstraint.insert(ppc);
+			}
+		}
+	}
+	
+	int halfOfgsize = bgroup.size()/2;	
+	for (int i=0; i< subcDir.size(); i++){
+		const SVector3& dir = subcDir[i];
+		for (int j=0; j< halfOfgsize; j++){
+			groupOfElements* gPlus = bgroup[j];
+			groupOfElements* gMinus = bgroup[j+halfOfgsize];
+			constraintElement* ppc = new directionalPBCSupplementConstraint(_solver->getMicroBC(), _LagSpace,_MultSpace,gPlus,gMinus,dir);
+			_allConstraint.insert(ppc);
+		};
+	}
+};
+
+void pbcConstraintElementGroup::createMixBCConstraintElementGroupDirectionFollowing(){	
+	nonLinearMixedBCDirectionFollowing* mixBC = dynamic_cast<nonLinearMixedBCDirectionFollowing*>(_solver->getMicroBC());
+	const std::vector<SVector3>& kubcDir = mixBC->getKUBCDirection();
+	const std::vector<SVector3>& subcDir = mixBC->getSUBCDirection();
+	const std::vector<SVector3>& pbcDir = mixBC->getPBCDirection();
+	const std::vector<SVector3>& pbcNormalDir = mixBC->getPBCNormalDirection();
+	const std::vector<bool>& pbcFullConstrainedFlag = mixBC->getFullConstrainedFlag();
+
+
+	const std::vector<groupOfElements*>& bgroup = _solver->getMicroBC()->getBoundaryGroupOfElements();
+	std::set<MVertex*> allVertex;
+	
+	for (int i=0; i< bgroup.size(); i++){
+		for (groupOfElements::vertexContainer::iterator it = bgroup[i]->vbegin(); it!= bgroup[i]->vend(); it++){
+			allVertex.insert(*it);
+		}
+	}
+	
+	for (int i=0; i< kubcDir.size(); i++){
+		const SVector3& dir = kubcDir[i];
+		for (std::set<MVertex*>::iterator it = allVertex.begin(); it!= allVertex.end(); it++){
+			MVertex* v = *it;
+			
+			if ((pbcNormalDir.size() == 0) and (it == allVertex.begin())){
+				MVertex* v = *(allVertex.begin());
+				constraintElement* ppc = new periodicMeshConstraint(_solver->getMicroBC(), _LagSpace,_LagSpace,_MultSpace,-1,v);
+				_allConstraint.insert(ppc);
+			}
+			else{
+				constraintElement* ppc = new directionalPeriodicMeshConstraint(_solver->getMicroBC(), _LagSpace,_LagSpace,_MultSpace,v,NULL,dir);
+				_allConstraint.insert(ppc);
+			}
+		}
+	}
+	if (pbcNormalDir.size() > 0){
+		const std::vector<int>& rootPhysical = mixBC->getRootPhysical();
+		const std::vector<int>& interpDeg = mixBC->getInterpolationDegree();
+		
+		if (mixBC->getDim() == 2){
+			MVertex* v1(NULL), *v2(NULL), *v4(NULL);
+			for (std::set<MVertex*>::iterator it = allVertex.begin(); it!= allVertex.end(); it++){
+				MVertex* v = *it;
+				if ((v1 == NULL) and (v->getNum() == rootPhysical[0])){
+					v1 = v;
+				}
+				if ((v2 == NULL) and (v->getNum() == rootPhysical[1])){
+					v2 = v;
+				}
+				if ((v4 == NULL) and (v->getNum() == rootPhysical[2])){
+					v4 = v;
+				}
+				if ((v1 != NULL) and (v2!=NULL) and (v4!=NULL)){
+					break;
+				}
+			};
+			if ((v1==NULL) or (v2 == NULL) or (v4 ==NULL)){
+				Msg::Fatal("root physical vertces are not correctly defined");
+			}
+			
+			constraintElement* ppc = new periodicMeshConstraint(_solver->getMicroBC(), _LagSpace,_LagSpace,_MultSpace,-1,v2);
+			_allConstraint.insert(ppc);
+			
+			// create local basis
+			this->getInterpolatioPointsFromExistingVertices(interpDeg[0],v1,v4,bgroup[0]->vbegin(),bgroup[0]->vend(),_xBase);
+			this->getInterpolatioPointsFromExistingVertices(interpDeg[1],v1,v2,bgroup[1]->vbegin(),bgroup[1]->vend(),_yBase);
+			
+			for (int i=0; i< _xBase.size(); i++){
+				Msg::Info("xbase :  %d",_xBase[i]->getNum());
+			}
+			
+			for (int i=0; i< _yBase.size(); i++){
+				Msg::Info("ybase :  %d",_yBase[i]->getNum());
+			}
+			
+			std::set<MVertex*> allPositiveVertex;
+			for (groupOfElements::vertexContainer::iterator it = bgroup[2]->vbegin(); it!= bgroup[2]->vend(); it++){
+				allPositiveVertex.insert(*it);
+			}
+			for (groupOfElements::vertexContainer::iterator it = bgroup[3]->vbegin(); it!= bgroup[3]->vend(); it++){
+				allPositiveVertex.insert(*it);
+			}
+			
+			
+			for (int i=0; i< pbcNormalDir.size(); i++){
+				const SVector3& normalPBC = pbcNormalDir[i];
+				const SVector3& dirPBC = pbcDir[i];
+				const bool& fullCon = pbcFullConstrainedFlag[i];
+				
+				if (fullCon){
+					this->lagrangeFormCondition(bgroup[0]->vbegin(),bgroup[0]->vend(),_xBase);
+					this->lagrangeFormCondition(bgroup[1]->vbegin(),bgroup[1]->vend(),_yBase);
+					this->directionalLagrangePeriodicCondition(allPositiveVertex.begin(), allPositiveVertex.end(),_xBase,_yBase,normalPBC,true);					
+				}
+				else{
+					this->directionalLagrangeFormCondition(bgroup[0]->vbegin(),bgroup[0]->vend(),_xBase,dirPBC);
+					this->directionalLagrangeFormCondition(bgroup[1]->vbegin(),bgroup[1]->vend(),_yBase,dirPBC);
+					this->directionalLagrangePeriodicCondition(allPositiveVertex.begin(), allPositiveVertex.end(),_xBase,_yBase,normalPBC,false);
+				}
+			}
+		
+		}
+		else{
+			Msg::Fatal("this bc is not implemented for 3D problems");
+		}
+	}
+	
+	int halfOfgsize = bgroup.size()/2;	
+	for (int i=0; i< subcDir.size(); i++){
+		const SVector3& dir = subcDir[i];
+		for (int j=0; j< halfOfgsize; j++){
+			groupOfElements* gPlus = bgroup[j];
+			groupOfElements* gMinus = bgroup[j+halfOfgsize];
+			constraintElement* ppc = new directionalPBCSupplementConstraint(_solver->getMicroBC(), _LagSpace,_MultSpace,gPlus,gMinus,dir);
+			_allConstraint.insert(ppc);
+		};
+	}
+};
+
 void pbcConstraintElementGroup::createMixBCConstraintElementGroup_DG(){
-  nonLinearMixedBC* mixBC = dynamic_cast<nonLinearMixedBC*>(_mbc);
+  nonLinearMixedBC* mixBC = dynamic_cast<nonLinearMixedBC*>(_solver->getMicroBC());
 
 	const std::vector<std::pair<int,int> >& kphysical = mixBC->getKinematicPhysical();
 	const std::vector<std::pair<int,int> >& sphysical = mixBC->getStaticPhysical();
@@ -1912,7 +2280,7 @@ void pbcConstraintElementGroup::createMixBCConstraintElementGroup_DG(){
 	std::set<Dof> allConstraintDof;
 	for (int i=0; i<kphysical.size(); i++){
 		Msg::Info("k bc = %d comp = %d",kphysical[i].first,kphysical[i].second);
-		const groupOfElements* grPhy = _mbc->getBCGroup(kphysical[i].first);
+		const groupOfElements* grPhy = _solver->getMicroBC()->getBCGroup(kphysical[i].first);
 		groupOfElementsDomainDecomposition* gPartGroup = NULL;
 		for (int ig=0; ig< _boundaryDGMap.size(); ig++){
 			if (_boundaryDGMap[ig]->physical == kphysical[i].first){
@@ -1940,7 +2308,7 @@ void pbcConstraintElementGroup::createMixBCConstraintElementGroup_DG(){
 				if (allConstraintDof.find(key[0])== allConstraintDof.end()){
 					allConstraintDof.insert(key[0]);
 					// create constraint
-					constraintElement* cel = new periodicMeshConstraint(_mbc,lagSpace,multspace,compK,v);
+					constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC(),lagSpace,multspace,compK,v);
 					_allConstraint.insert(cel);
 				}
 
@@ -1950,7 +2318,7 @@ void pbcConstraintElementGroup::createMixBCConstraintElementGroup_DG(){
 
 	for (int i=0; i<sphysical.size(); i++){
 		Msg::Info("s bc = %d comp = %d",sphysical[i].first,sphysical[i].second);
-		groupOfElements* grPhy = _mbc->getBCGroup(sphysical[i].first);
+		groupOfElements* grPhy = _solver->getMicroBC()->getBCGroup(sphysical[i].first);
 		groupOfElementsDomainDecomposition* gPartGroup = NULL;
 		for (int ig=0; ig< _boundaryDGMap.size(); ig++){
 			if (_boundaryDGMap[ig]->physical == sphysical[i].first){
@@ -1963,16 +2331,16 @@ void pbcConstraintElementGroup::createMixBCConstraintElementGroup_DG(){
 		}
 		int compS = sphysical[i].second;
 
-		constraintElement* ppc= new supplementConstraintGeneral(_mbc,_MultSpace,compS,gPartGroup);
+		constraintElement* ppc= new supplementConstraintGeneral(_solver->getMicroBC(),_MultSpace,compS,gPartGroup);
 		_allConstraint.insert(ppc);
 	};
 
-	if (_mbc->getOrder() == 2){
+	if (_solver->getMicroBC()->getOrder() == 2){
 		const std::vector<additionalSecondOrderElement>& hoCons = mixBC->getAdditionalSecondOrderStaticPhysical();
 		for (int i=0; i< hoCons.size(); i++){
 			const additionalSecondOrderElement& el = hoCons[i];
 			Msg::Info("ho static bc = %d comp = %d direction = %d",el.physical,el.comp,el.direction);
-			groupOfElements* grPhy = _mbc->getBCGroup(el.physical);
+			groupOfElements* grPhy = _solver->getMicroBC()->getBCGroup(el.physical);
 			groupOfElementsDomainDecomposition* gPartGroup = NULL;
 			for (int ig=0; ig< _boundaryDGMap.size(); ig++){
 				if (_boundaryDGMap[ig]->physical == el.physical){
@@ -1985,7 +2353,7 @@ void pbcConstraintElementGroup::createMixBCConstraintElementGroup_DG(){
 			}
 
 			singlePositionScalarWeightFunction fct(el.direction);
-			constraintElement* ppc = new supplementConstraintGeneral(_mbc,_MultSpace,el.comp,gPartGroup,&fct);
+			constraintElement* ppc = new supplementConstraintGeneral(_solver->getMicroBC(),_MultSpace,el.comp,gPartGroup,&fct);
 			_allConstraint.insert(ppc);
 		}
 
@@ -1996,30 +2364,41 @@ void pbcConstraintElementGroup::createMixBCConstraintElementGroup_DG(){
 	}
 };
 
+void pbcConstraintElementGroup::createCornerConstraintElementGroupShiftedBPC(){
+	if (_solver->getMicroBC()->getOrder() == 2){
+		Msg::Fatal("shifted BC is implemented for first order BC only");
+	}
+	
+	if (_cVertices.size() > 0){
+		constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC() ,_LagSpace,_MultSpace,-1,_v1);
+		_allConstraint.insert(cel);
+	}
+}
+
 void pbcConstraintElementGroup::createCornerConstraintElementGroup(){
-	int ndofsPerNode = _mbc->getNumberOfConstrainedDofsPerVertex();
+	int ndofsPerNode = _solver->getMicroBC()->getNumberOfConstrainedDofsPerVertex();
 
-	std::vector<int> mechanics(_mbc->getMechanicsConstrainedComps().begin(), _mbc->getMechanicsConstrainedComps().end()); // mechanic Dof only
-	std::vector<int> compConstitutive(_mbc->getConstitutiveExtraConstrainedComps().begin(), _mbc->getConstitutiveExtraConstrainedComps().end()); // constitutuive extraDofs
-	std::vector<int> compNotConstitutive(_mbc->getNonConstitutiveExtraConstrainedComps().begin(), _mbc->getNonConstitutiveExtraConstrainedComps().end()); // non-constitutive extraDofs
+	std::vector<int> mechanics(_solver->getMicroBC()->getMechanicsConstrainedComps().begin(), _solver->getMicroBC()->getMechanicsConstrainedComps().end()); // mechanic Dof only
+	std::vector<int> compConstitutive(_solver->getMicroBC()->getConstitutiveExtraConstrainedComps().begin(), _solver->getMicroBC()->getConstitutiveExtraConstrainedComps().end()); // constitutuive extraDofs
+	std::vector<int> compNotConstitutive(_solver->getMicroBC()->getNonConstitutiveExtraConstrainedComps().begin(), _solver->getMicroBC()->getNonConstitutiveExtraConstrainedComps().end()); // non-constitutive extraDofs
 
-  if (_mbc->getType() == nonLinearMicroBC::PBC){
-    nonLinearPeriodicBC* pbc = static_cast<nonLinearPeriodicBC*>(_mbc);
-    const std::vector<groupOfElements*>& bgroup = _mbc->getBoundaryGroupOfElements();
+  if (_solver->getMicroBC()->getType() == nonLinearMicroBC::PBC){
+    nonLinearPeriodicBC* pbc = static_cast<nonLinearPeriodicBC*>(_solver->getMicroBC());
+    const std::vector<groupOfElements*>& bgroup = _solver->getMicroBC()->getBoundaryGroupOfElements();
     if (bgroup.size()>0){
       if  (pbc->getPBCMethod() == nonLinearPeriodicBC::CEM or pbc->getPBCMethod() == nonLinearPeriodicBC::PROJECT){
 				// for mechanical Dofs
-				if (_mbc->getOrder() == 1){
+				if (_solver->getMicroBC()->getOrder() == 1){
 					// fix all corners mechanical Dofs
 					for (std::set<MVertex*>::iterator it = _cVertices.begin(); it!= _cVertices.end(); it++){
             MVertex* vp1 = *it;
 						for (int i=0; i< mechanics.size(); i++){
-							constraintElement* cel = new periodicMeshConstraint(_mbc ,_LagSpace,_MultSpace,mechanics[i],vp1);
+							constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC() ,_LagSpace,_MultSpace,mechanics[i],vp1);
 							_allConstraint.insert(cel);
 						}
           }
 				}
-				else if (_mbc->getOrder() == 2){
+				else if (_solver->getMicroBC()->getOrder() == 2){
 					// periodic between
 					if (_cVertices.size() >0){
             MVertex* vn = *(_cVertices.begin());
@@ -2028,7 +2407,7 @@ void pbcConstraintElementGroup::createCornerConstraintElementGroup(){
               {
                 MVertex* vp1 = *it;
 								for (int i=0; i< mechanics.size(); i++){
-									constraintElement* cel = new periodicMeshConstraint(_mbc,_LagSpace,_MultSpace,mechanics[i], vp1,vn);
+									constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,mechanics[i], vp1,vn);
 									_allConstraint.insert(cel);
 								}
               }
@@ -2038,7 +2417,7 @@ void pbcConstraintElementGroup::createCornerConstraintElementGroup(){
 					for (int i=0; i<bgroup.size()/2; i++){
 						groupOfElements* g = bgroup[i];
 						for (int k=0; k< mechanics.size(); k++){
-							constraintElement* ppc = new supplementConstraint(_mbc,_LagSpace,_MultSpace,mechanics[k],g);
+							constraintElement* ppc = new supplementConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,mechanics[k],g);
 							_allConstraint.insert(ppc);
 						}
 					}
@@ -2051,14 +2430,14 @@ void pbcConstraintElementGroup::createCornerConstraintElementGroup(){
 						MVertex* vp1 = *it;
 						if (vp1 != oneV){
 							for (int i=0; i< compConstitutive.size(); i++){
-								constraintElement* cel = new periodicMeshConstraint(_mbc,_LagSpace,_MultSpace,compConstitutive[i],vp1,oneV);
+								constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,compConstitutive[i],vp1,oneV);
 								_allConstraint.insert(cel);
 							}
 						}
 					}
 				}
 				for (int i=0; i< compConstitutive.size(); i++){
-					constraintElement* celExtra = new supplementConstraintAverageExtraDofValue(_mbc ,_MultSpace,compConstitutive[i],&_allDomain);
+					constraintElement* celExtra = new supplementConstraintAverageExtraDofValue(_solver->getMicroBC() ,_MultSpace,compConstitutive[i],_solver->getDomainVector());
 					_allConstraint.insert(celExtra);
 				}
 
@@ -2066,48 +2445,48 @@ void pbcConstraintElementGroup::createCornerConstraintElementGroup(){
 				for (std::set<MVertex*>::iterator it = _cVertices.begin(); it!= _cVertices.end(); it++){
 					MVertex* vp1 = *it;
 					for (int i=0; i< compNotConstitutive.size(); i++){
-						constraintElement* cel = new periodicMeshConstraint(_mbc ,_LagSpace,_MultSpace,compNotConstitutive[i],vp1);
+						constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC() ,_LagSpace,_MultSpace,compNotConstitutive[i],vp1);
 						_allConstraint.insert(cel);
 					}
         }
       }
       else if (pbc->getPBCMethod() == nonLinearPeriodicBC::CSIM){
 				// for mechanics
-				if (_mbc->getOrder() == 1){
+				if (_solver->getMicroBC()->getOrder() == 1){
 					for (std::set<MVertex*>::iterator it = _cVertices.begin(); it!= _cVertices.end(); it++){
             MVertex* vp1 = *it;
 						for (int i=0; i< mechanics.size(); i++){
-							constraintElement* cel = new periodicMeshConstraint(_mbc ,_LagSpace,_MultSpace,mechanics[i],vp1);
+							constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC() ,_LagSpace,_MultSpace,mechanics[i],vp1);
 							_allConstraint.insert(cel);
 						}
           }
 				}
-				else if (_mbc->getOrder() == 2){
+				else if (_solver->getMicroBC()->getOrder() == 2){
 					for(std::set<MVertex*>::iterator it = _cVertices.begin(); it!= _cVertices.end(); it++){
             MVertex* v = *it;
             if ( v != _v1){
 							for (int i=0; i< mechanics.size(); i++){
-								constraintElement* cel = new periodicMeshConstraint(_mbc ,_LagSpace,_MultSpace,mechanics[i],v,_v1);
+								constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC() ,_LagSpace,_MultSpace,mechanics[i],v,_v1);
 								_allConstraint.insert(cel);
 							}
             }
           }
 
 
-          if (_mbc->getDim() ==2){
+          if (_solver->getMicroBC()->getDim() ==2){
 						for (int i=0; i< mechanics.size(); i++){
-							constraintElement* ppc = new cubicSplineSupplementConstraint(_mbc,_LagSpace,_MultSpace,mechanics[i],_xBase,0);
+							constraintElement* ppc = new cubicSplineSupplementConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,mechanics[i],_xBase,0);
 							_allConstraint.insert(ppc);
 
-							ppc = new cubicSplineSupplementConstraint(_mbc,_LagSpace,_MultSpace,mechanics[i],_yBase,1);
+							ppc = new cubicSplineSupplementConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,mechanics[i],_yBase,1);
 							_allConstraint.insert(ppc);
 						}
           }
-          else if (_mbc->getDim() == 3){
+          else if (_solver->getMicroBC()->getDim() == 3){
             for (int i=0; i<bgroup.size()/2; i++){
               groupOfElements* g = bgroup[i];
 							for (int k=0; k< mechanics.size(); k++){
-								constraintElement* ppc = new supplementConstraint(_mbc,_LagSpace,_MultSpace,mechanics[k],g);
+								constraintElement* ppc = new supplementConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,mechanics[k],g);
 								_allConstraint.insert(ppc);
 							}
             }
@@ -2120,14 +2499,14 @@ void pbcConstraintElementGroup::createCornerConstraintElementGroup(){
 					MVertex* vp1 = *it;
 					if (vp1 != _v1){
 						for (int i=0; i< compConstitutive.size(); i++){
-							constraintElement* cel = new periodicMeshConstraint(_mbc,_LagSpace,_MultSpace,compConstitutive[i],vp1,_v1);
+							constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,compConstitutive[i],vp1,_v1);
 							_allConstraint.insert(cel);
 						}
 					}
 				}
 				for (int i=0; i< compConstitutive.size(); i++){
-					constraintElement* celExtra = new supplementConstraintAverageExtraDofValue(_mbc ,_MultSpace,
-																	compConstitutive[i], &_allDomain);
+					constraintElement* celExtra = new supplementConstraintAverageExtraDofValue(_solver->getMicroBC() ,_MultSpace,
+																	compConstitutive[i], _solver->getDomainVector());
 					_allConstraint.insert(celExtra);
 				}
 
@@ -2135,7 +2514,7 @@ void pbcConstraintElementGroup::createCornerConstraintElementGroup(){
 				for (std::set<MVertex*>::iterator it = _cVertices.begin(); it!= _cVertices.end(); it++){
 					MVertex* vp1 = *it;
 					for (int i=0; i< compNotConstitutive.size(); i++){
-						constraintElement* cel = new periodicMeshConstraint(_mbc ,_LagSpace,_MultSpace,compNotConstitutive[i],vp1);
+						constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC() ,_LagSpace,_MultSpace,compNotConstitutive[i],vp1);
 						_allConstraint.insert(cel);
 					}
 
@@ -2143,22 +2522,22 @@ void pbcConstraintElementGroup::createCornerConstraintElementGroup(){
       }
       else if (pbc->getPBCMethod() == nonLinearPeriodicBC::LIM){
 				// for mechanics
-				if (_mbc->getOrder() == 1){
+				if (_solver->getMicroBC()->getOrder() == 1){
 					for (std::set<MVertex*>::iterator it = _cVertices.begin(); it!= _cVertices.end(); it++){
             MVertex* vp1 = *it;
 						for (int i=0; i< mechanics.size(); i++){
-							constraintElement* cel = new periodicMeshConstraint(_mbc ,_LagSpace,_MultSpace,mechanics[i],vp1);
+							constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC() ,_LagSpace,_MultSpace,mechanics[i],vp1);
 							_allConstraint.insert(cel);
 						}
           }
 				}
-				else if (_mbc->getOrder() == 2){
+				else if (_solver->getMicroBC()->getOrder() == 2){
 					if (pbc->getMaxDegree()>1){
 						for(std::set<MVertex*>::iterator it = _cVertices.begin(); it!= _cVertices.end(); it++){
 							MVertex* v = *it;
 							if ( v != _v1){
 								for (int i=0; i< mechanics.size(); i++){
-									constraintElement* cel = new periodicMeshConstraint(_mbc ,_LagSpace,_MultSpace,mechanics[i],v,_v1);
+									constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC() ,_LagSpace,_MultSpace,mechanics[i],v,_v1);
 									_allConstraint.insert(cel);
 								}
 							}
@@ -2166,26 +2545,26 @@ void pbcConstraintElementGroup::createCornerConstraintElementGroup(){
 
 						//
 						for (int k=0; k< mechanics.size(); k++){
-							if (_mbc->getDim() ==2){
-								constraintElement* ppc = new lagrangeSupplementConstraint(_mbc, _LagSpace,_MultSpace,mechanics[k],_xBase);
+							if (_solver->getMicroBC()->getDim() ==2){
+								constraintElement* ppc = new lagrangeSupplementConstraint(_solver->getMicroBC(), _LagSpace,_MultSpace,mechanics[k],_xBase);
 								_allConstraint.insert(ppc);
-								ppc = new lagrangeSupplementConstraint(_mbc, _LagSpace,_MultSpace,mechanics[k],_yBase);
+								ppc = new lagrangeSupplementConstraint(_solver->getMicroBC(), _LagSpace,_MultSpace,mechanics[k],_yBase);
 								_allConstraint.insert(ppc);
 							}
-							else if (_mbc->getDim() ==3){
+							else if (_solver->getMicroBC()->getDim() ==3){
 								std::vector<lagrangeSupplementConstraint*> lconstraint;
-								lagrangeSupplementConstraint* con = new lagrangeSupplementConstraint(_mbc, _LagSpace,_MultSpace,mechanics[k],_xBase);
+								lagrangeSupplementConstraint* con = new lagrangeSupplementConstraint(_solver->getMicroBC(), _LagSpace,_MultSpace,mechanics[k],_xBase);
 								lconstraint.push_back(con);
-								con = new lagrangeSupplementConstraint(_mbc,_LagSpace,_MultSpace,mechanics[k],_yBase);
+								con = new lagrangeSupplementConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,mechanics[k],_yBase);
 								lconstraint.push_back(con);
-								con = new lagrangeSupplementConstraint(_mbc,_LagSpace,_MultSpace,mechanics[k],_zBase);
+								con = new lagrangeSupplementConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,mechanics[k],_zBase);
 								lconstraint.push_back(con);
 								//
-								constraintElement* ppc = new CoonsPatchLagrangeSupplementConstraint(_mbc,_LagSpace,_MultSpace,mechanics[k],lconstraint[0],lconstraint[1]);
+								constraintElement* ppc = new CoonsPatchLagrangeSupplementConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,mechanics[k],lconstraint[0],lconstraint[1]);
 								_allConstraint.insert(ppc);
-								ppc = new CoonsPatchLagrangeSupplementConstraint(_mbc, _LagSpace,_MultSpace,mechanics[k],lconstraint[1],lconstraint[2]);
+								ppc = new CoonsPatchLagrangeSupplementConstraint(_solver->getMicroBC(), _LagSpace,_MultSpace,mechanics[k],lconstraint[1],lconstraint[2]);
 								_allConstraint.insert(ppc);
-								ppc = new CoonsPatchLagrangeSupplementConstraint(_mbc, _LagSpace,_MultSpace,mechanics[k],lconstraint[0],lconstraint[2]);
+								ppc = new CoonsPatchLagrangeSupplementConstraint(_solver->getMicroBC(), _LagSpace,_MultSpace,mechanics[k],lconstraint[0],lconstraint[2]);
 								_allConstraint.insert(ppc);
 							}
 
@@ -2195,7 +2574,7 @@ void pbcConstraintElementGroup::createCornerConstraintElementGroup(){
 						for (std::set<MVertex*>::iterator it = _cVertices.begin(); it!= _cVertices.end(); it++){
               MVertex* vp1 = *it;
 							for (int i=0; i< mechanics.size(); i++){
-								constraintElement* cel = new periodicMeshConstraint(_mbc,_LagSpace,_MultSpace,mechanics[i],vp1);
+								constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,mechanics[i],vp1);
 								_allConstraint.insert(cel);
 							}
             }
@@ -2208,14 +2587,14 @@ void pbcConstraintElementGroup::createCornerConstraintElementGroup(){
 					MVertex* vp1 = *it;
 					if (vp1 != _v1){
 						for (int i=0; i< compConstitutive.size(); i++){
-							constraintElement* cel = new periodicMeshConstraint(_mbc,_LagSpace,_MultSpace,compConstitutive[i],vp1,_v1);
+							constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,compConstitutive[i],vp1,_v1);
 							_allConstraint.insert(cel);
 						}
 					}
 				}
 				for (int i=0; i< compConstitutive.size(); i++){
-					constraintElement* celExtra = new supplementConstraintAverageExtraDofValue(_mbc ,_MultSpace,
-																	compConstitutive[i], &_allDomain);
+					constraintElement* celExtra = new supplementConstraintAverageExtraDofValue(_solver->getMicroBC() ,_MultSpace,
+																	compConstitutive[i], _solver->getDomainVector());
 					_allConstraint.insert(celExtra);
 				}
 
@@ -2223,7 +2602,7 @@ void pbcConstraintElementGroup::createCornerConstraintElementGroup(){
 				for (std::set<MVertex*>::iterator it = _cVertices.begin(); it!= _cVertices.end(); it++){
 					MVertex* vp1 = *it;
 					for (int i=0; i< compNotConstitutive.size(); i++){
-						constraintElement* cel = new periodicMeshConstraint(_mbc ,_LagSpace,_MultSpace,compNotConstitutive[i],vp1);
+						constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC() ,_LagSpace,_MultSpace,compNotConstitutive[i],vp1);
 						_allConstraint.insert(cel);
 					}
         }
@@ -2253,17 +2632,17 @@ void pbcConstraintElementGroup::createCornerConstraintElementGroup(){
 				}
 
 				// for mechanics
-				if (_mbc->getOrder() == 1){
+				if (_solver->getMicroBC()->getOrder() == 1){
 					for (std::set<MVertex*>::iterator it = activeCornerVertices.begin(); it!= activeCornerVertices.end(); it++){
             MVertex* vp1 = *it;
 						for (int i=0; i< mechanics.size(); i++){
-							constraintElement* cel = new periodicMeshConstraint(_mbc ,_LagSpace,_MultSpace,mechanics[i],vp1);
+							constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC() ,_LagSpace,_MultSpace,mechanics[i],vp1);
 							_allConstraint.insert(cel);
 						}
           }
 
 				}
-				else if (_mbc->getOrder() == 2){
+				else if (_solver->getMicroBC()->getOrder() == 2){
 					if (_cVertices.size() >0){
             MVertex* vn = *(_cVertices.begin());
             for(std::set<MVertex*>::iterator it = _cVertices.begin(); it!= _cVertices.end(); it++){
@@ -2271,7 +2650,7 @@ void pbcConstraintElementGroup::createCornerConstraintElementGroup(){
               {
                 MVertex* vp1 = *it;
 								for (int i=0; i< mechanics.size(); i++){
-									constraintElement* cel = new periodicMeshConstraint(_mbc,_LagSpace,_MultSpace,mechanics[i],vp1,vn);
+									constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,mechanics[i],vp1,vn);
 									_allConstraint.insert(cel);
 
 								}
@@ -2280,18 +2659,18 @@ void pbcConstraintElementGroup::createCornerConstraintElementGroup(){
           }
 
 					for (int i=0; i< mechanics.size(); i++){
-						if (_mbc->getDim()== 2){
-							constraintElement* ppc = new supplementConstraint(_mbc,_LagSpace,_MultSpace,mechanics[i],_gX);
+						if (_solver->getMicroBC()->getDim()== 2){
+							constraintElement* ppc = new supplementConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,mechanics[i],_gX);
 							_allConstraint.insert(ppc);
-							ppc = new supplementConstraint(_mbc,_LagSpace,_MultSpace,mechanics[i],_gY);
+							ppc = new supplementConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,mechanics[i],_gY);
 							_allConstraint.insert(ppc);
 						}
-						else if (_mbc->getDim() == 3){
-							constraintElement* ppc = new supplementConstraint(_mbc,_LagSpace,_MultSpace,mechanics[i],_gXY);
+						else if (_solver->getMicroBC()->getDim() == 3){
+							constraintElement* ppc = new supplementConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,mechanics[i],_gXY);
 							_allConstraint.insert(ppc);
-							ppc = new supplementConstraint(_mbc,_LagSpace,_MultSpace,mechanics[i],_gYZ);
+							ppc = new supplementConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,mechanics[i],_gYZ);
 							_allConstraint.insert(ppc);
-							ppc = new supplementConstraint(_mbc,_LagSpace,_MultSpace,mechanics[i],_gZX);
+							ppc = new supplementConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,mechanics[i],_gZX);
 							_allConstraint.insert(ppc);
 						}
 					}
@@ -2304,15 +2683,15 @@ void pbcConstraintElementGroup::createCornerConstraintElementGroup(){
 						MVertex* vp1 = *it;
 						if (vp1 != vn1){
 							for (int i=0; i< compConstitutive.size(); i++){
-								constraintElement* cel = new periodicMeshConstraint(_mbc,_LagSpace,_MultSpace,compConstitutive[i],vp1,vn1);
+								constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,compConstitutive[i],vp1,vn1);
 								_allConstraint.insert(cel);
 							}
 						}
 					}
 				}
 				for (int i=0; i< compConstitutive.size(); i++){
-					constraintElement* celExtra = new supplementConstraintAverageExtraDofValue(_mbc ,_MultSpace,
-																	compConstitutive[i], &_allDomain);
+					constraintElement* celExtra = new supplementConstraintAverageExtraDofValue(_solver->getMicroBC() ,_MultSpace,
+																	compConstitutive[i], _solver->getDomainVector());
 					_allConstraint.insert(celExtra);
 				}
 
@@ -2320,7 +2699,7 @@ void pbcConstraintElementGroup::createCornerConstraintElementGroup(){
 				for (int i=0; i< compNotConstitutive.size(); i++){
 					for (std::set<MVertex*>::iterator it = activeCornerVertices.begin(); it!= activeCornerVertices.end(); it++){
 						MVertex* vp1 = *it;
-						constraintElement* cel = new periodicMeshConstraint(_mbc ,_LagSpace,_MultSpace,compNotConstitutive[i],vp1);
+						constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC() ,_LagSpace,_MultSpace,compNotConstitutive[i],vp1);
 						_allConstraint.insert(cel);
 					}
 
@@ -2339,15 +2718,15 @@ void pbcConstraintElementGroup::createCornerConstraintElementGroup(){
 void pbcConstraintElementGroup::createConstraintGroup(){
   constraintElement::allPositiveDof.clear();
 	if (_fullDG){
-		if (_mbc->getType()==nonLinearMicroBC::LDBC){
+		if (_solver->getMicroBC()->getType()==nonLinearMicroBC::LDBC){
 			Msg::Info("Imposing linear displacement BC");
 			this->createLinearDisplacementConstraintElementGroup_DG();
 		}
-		else if (_mbc->getType()==nonLinearMicroBC::MKBC){
+		else if (_solver->getMicroBC()->getType()==nonLinearMicroBC::MKBC){
 			Msg::Info("Imposing minimal kinematical BC");
 			this->createMinimalKinematicConstraintElementGroup_DG();
 		}
-		else if (_mbc->getType() == nonLinearMicroBC::MIXBC){
+		else if (_solver->getMicroBC()->getType() == nonLinearMicroBC::MIXBC){
 			Msg::Info("imposing mixed BC");
 			this->createMixBCConstraintElementGroup_DG();
 		}
@@ -2356,9 +2735,12 @@ void pbcConstraintElementGroup::createConstraintGroup(){
 		};
 	}
 	else{
-		if (_mbc->getType() == nonLinearMicroBC::PBC){
-			nonLinearPeriodicBC* pbc = static_cast<nonLinearPeriodicBC*>(_mbc);
-			const std::vector<groupOfElements*>& bgroup = _mbc->getBoundaryGroupOfElements();
+		if (_solver->getMicroBC()->getType() == nonLinearMicroBC::PBC){
+			nonLinearPeriodicBC* pbc = static_cast<nonLinearPeriodicBC*>(_solver->getMicroBC());
+			if (pbc->isShifted() and pbc->getPBCMethod() != nonLinearPeriodicBC::LIM){
+				Msg::Warning("shifted has not implemented for this option");
+			} 
+			const std::vector<groupOfElements*>& bgroup = _solver->getMicroBC()->getBoundaryGroupOfElements();
 			if (bgroup.size()>0){
 				if  (pbc->getPBCMethod() == nonLinearPeriodicBC::CEM){
 				Msg::Info("Imposing PBC by periodic mesh formulation");
@@ -2370,10 +2752,17 @@ void pbcConstraintElementGroup::createConstraintGroup(){
 				}
 				else if (pbc->getPBCMethod() == nonLinearPeriodicBC::LIM){
 					Msg::Info("Imposing PBC by lagrange formulation");
-					if (pbc->getMaxDegree() >1)
-						this->createLagrangeConstraintElementGroup();
-					else
+					if (pbc->getMaxDegree() >1){
+						if (pbc->isShifted()){
+							this->createShiftedLagrangeConstraintElementGroup();
+						}
+						else{
+							this->createLagrangeConstraintElementGroup();
+						}
+					}
+					else{
 						createLinearDisplacementConstraintElementGroup();
+					}
 				}
 				else if (pbc->getPBCMethod() == nonLinearPeriodicBC::FE_LIN or  pbc->getPBCMethod() == nonLinearPeriodicBC::FE_QUA){
 					Msg::Info("Imposing PBC by lagrange C0");
@@ -2386,22 +2775,32 @@ void pbcConstraintElementGroup::createConstraintGroup(){
 				else{
 					Msg::Fatal("this method is not implemented to impose PBC");
 				}
-
-				this->createCornerConstraintElementGroup();
+				
+				if (pbc->isShifted()){
+					this->createCornerConstraintElementGroupShiftedBPC();
+				}
+				else
+					this->createCornerConstraintElementGroup();
 			}
 		}
-		else if (_mbc->getType()==nonLinearMicroBC::LDBC){
+		else if (_solver->getMicroBC()->getType()==nonLinearMicroBC::LDBC){
 			Msg::Info("Imposing linear displacement BC");
 			this->createLinearDisplacementConstraintElementGroup();
 		}
-		else if (_mbc->getType()==nonLinearMicroBC::MKBC){
+		else if (_solver->getMicroBC()->getType()==nonLinearMicroBC::MKBC){
 			Msg::Info("Imposing minimal kinematical BC");
 			this->createMinimalKinematicConstraintElementGroup();
 		}
-		else if (_mbc->getType() == nonLinearMicroBC::MIXBC){
+		else if (_solver->getMicroBC()->getType() == nonLinearMicroBC::MIXBC){
 			Msg::Info("imposing mixed BC");
 			this->createMixBCConstraintElementGroup();
 		}
+		else if (_solver->getMicroBC()->getType() == nonLinearMicroBC::DirectionalMIXBC){
+			this->createMixBCConstraintElementGroupDirectionFollowing();
+		}
+		else if (_solver->getMicroBC()->getType() == nonLinearMicroBC::OrthogonalDirectionalMixedBC){
+			this->createOrthogonalMixBCConstraintElementGroupDirectionFollowing();
+		}
 		else{
 			Msg::Error("this boundary condition type is not implemented");
 		};
@@ -2409,6 +2808,17 @@ void pbcConstraintElementGroup::createConstraintGroup(){
   constraintElement::allPositiveDof.clear();
 };
 
+void pbcConstraintElementGroup::clearAllConstraints(){
+	_allConstraint.clear();
+	_virtualVertices.clear();
+	_pbcNodes.clear();
+};
+
+void pbcConstraintElementGroup::switchMicroBC(){
+	this->clearAllConstraints(); // clear all existing constraint elements
+	this->createConstraintGroup(); // create new groups
+};
+
 void pbcConstraintElementGroup::createPBCFromFile(FILE* fp, GModel* pModel){
   if (fp == NULL) return;
   while (1){
@@ -2424,7 +2834,7 @@ void pbcConstraintElementGroup::createPBCFromFile(FILE* fp, GModel* pModel){
         if (fscanf(fp, "%d", &num)){
           MVertex* v = pModel->getMeshVertexByTag(num);
           Msg::Error("periodic node: %d",v->getNum());
-					constraintElement* cel = new periodicMeshConstraint(_mbc,_LagSpace,_MultSpace,-1,v);
+					constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,-1,v);
 					_allConstraint.insert(cel);
         }
       }
@@ -2439,7 +2849,7 @@ void pbcConstraintElementGroup::createPBCFromFile(FILE* fp, GModel* pModel){
 				MVertex* vn = pModel->getMeshVertexByTag(n);
 
 				Msg::Error("matching node: %d %d", vp->getNum(),vn->getNum());
-					constraintElement* cel = new periodicMeshConstraint(_mbc,_LagSpace,_MultSpace,-1,vp,vn);
+					constraintElement* cel = new periodicMeshConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,-1,vp,vn);
 					_allConstraint.insert(cel);
 
         }
@@ -2449,14 +2859,14 @@ void pbcConstraintElementGroup::createPBCFromFile(FILE* fp, GModel* pModel){
 };
 
 SVector3 pbcConstraintElementGroup::getUniformDisp(MVertex* v){
-  const STensor3& FI = _mbc->getFirstOrderKinematicalVariable();
-  const STensor33& G = _mbc->getSecondOrderKinematicalVariable();
+  const STensor3& FI = _solver->getMicroBC()->getFirstOrderKinematicalVariable();
+  const STensor33& G = _solver->getMicroBC()->getSecondOrderKinematicalVariable();
   SVector3 u(0.,0.,0.);
   SPoint3 p = v->point();
   for (int i=0; i<3; i++){
     for (int j=0; j<3; j++){
       u[i]+= FI(i,j)*p[j];
-      if (_mbc->getOrder() == 2){
+      if (_solver->getMicroBC()->getOrder() == 2){
         for (int k=0; k<3; k++){
           u[i] += 0.5*G(i,j,k)*p[j]*p[k];
         }
@@ -2470,7 +2880,7 @@ SVector3 pbcConstraintElementGroup::getPerturbation(dofManager<double>* pmanager
   SVector3 ubar = this->getUniformDisp(v);
   std::vector<Dof> keys;
   std::vector<double> val;
-	std::vector<int> constrainedComp(_mbc->getConstrainedComps().begin(), _mbc->getConstrainedComps().end());
+	std::vector<int> constrainedComp(_solver->getMicroBC()->getConstrainedComps().begin(), _solver->getMicroBC()->getConstrainedComps().end());
   getKeysFromVertex(_LagSpace,v,constrainedComp,keys);
   pmanager->getDofValue(keys,val);
   ubar *= -1.;
@@ -2482,12 +2892,12 @@ SVector3 pbcConstraintElementGroup::getPerturbation(dofManager<double>* pmanager
 
 SVector3 pbcConstraintElementGroup::getTangentCubicSpline(dofManager<double>* pmanager, MVertex* v, const int dir){
   SVector3 vec(0.,0.,0.);
-	std::vector<int> constrainedComp(_mbc->getConstrainedComps().begin(), _mbc->getConstrainedComps().end());
-  if (_mbc->getType() != nonLinearMicroBC::PBC) {
+	std::vector<int> constrainedComp(_solver->getMicroBC()->getConstrainedComps().begin(), _solver->getMicroBC()->getConstrainedComps().end());
+  if (_solver->getMicroBC()->getType() != nonLinearMicroBC::PBC) {
     Msg::Warning("this used for periodic BC and cubic spline method");
   }
   else {
-    nonLinearPeriodicBC* pbc = dynamic_cast<nonLinearPeriodicBC*>(_mbc);
+    nonLinearPeriodicBC* pbc = dynamic_cast<nonLinearPeriodicBC*>(_solver->getMicroBC());
     if (pbc->getPBCMethod() == nonLinearPeriodicBC::CSIM){
       std::vector<Dof> dofs;
       std::vector<double> vals;
@@ -2575,8 +2985,8 @@ void pbcConstraintElementGroup::lagrangeToFile(std::vector<MVertex*>& vlist, dof
 };
 
 void pbcConstraintElementGroup::writePertBoundaryToFile(dofManager<double>* pmanager, const int e, const int g, const int iter ){
-  if (_mbc->getType() == nonLinearMicroBC::PBC){
-    nonLinearPeriodicBC* pbc = dynamic_cast<nonLinearPeriodicBC*>(_mbc);
+  if (_solver->getMicroBC()->getType() == nonLinearMicroBC::PBC){
+    nonLinearPeriodicBC* pbc = dynamic_cast<nonLinearPeriodicBC*>(_solver->getMicroBC());
     std::string filename = "E_"+int2str(e)+"_GP_"+int2str(g)+"_xInterpolation_iter_"+int2str(iter)+ ".csv";
     FILE* file = fopen(filename.c_str(),"w");
     if (pbc->getPBCMethod() == nonLinearPeriodicBC::CSIM)
@@ -2602,7 +3012,7 @@ void pbcConstraintElementGroup::writePertBoundaryToFile(dofManager<double>* pman
     fclose(file);
   }
 
-  const std::vector<groupOfElements*>& bgr = _mbc->getBoundaryGroupOfElements();
+  const std::vector<groupOfElements*>& bgr = _solver->getMicroBC()->getBoundaryGroupOfElements();
   for (int i =0; i< bgr.size(); i++){
     std::string filename ="E_"+int2str(e)+"_GP_"+int2str(g)+"_pert_" + int2str(i)+ "_iter_"+int2str(iter)+ ".csv";
     FILE* file = fopen(filename.c_str(),"w");
@@ -2621,7 +3031,7 @@ int pbcConstraintElementGroup::sizeOfDirectConstraints() const{
   for (std::set<constraintElement*>::const_iterator it = _allConstraint.begin();
             it!= _allConstraint.end(); it++){
     const constraintElement* cel = *it;
-    if (cel->getType() == constraintElement::PeriodicNode){
+    if (cel->isDirect()){
       numDir++;
     }
   }
@@ -2656,41 +3066,33 @@ void pbcConstraintElementGroup::createConstraintForTest(){
   _allConstraint.clear();
   Msg::Info("apply periodic boundary condition");
 
-	if (_mbc->getNumberOfConstrainedConstitutiveExtraDofs() > 0){
+	if (_solver->getMicroBC()->getNumberOfConstrainedConstitutiveExtraDofs() > 0){
 		Msg::Fatal("This implementation pbcConstraintElementGroup::createConstraintForTest is not considered with existing constitutive extra Dofs");
 	}
 
-  if (_mbc->getType() == nonLinearMicroBC::PBC){
-    nonLinearPeriodicBC* pbc = static_cast<nonLinearPeriodicBC*>(_mbc);
-    const std::vector<groupOfElements*>& bgroup = _mbc->getBoundaryGroupOfElements();
+  if (_solver->getMicroBC()->getType() == nonLinearMicroBC::PBC){
+    nonLinearPeriodicBC* pbc = static_cast<nonLinearPeriodicBC*>(_solver->getMicroBC());
+    const std::vector<groupOfElements*>& bgroup = _solver->getMicroBC()->getBoundaryGroupOfElements();
 
     if (bgroup.size()>0){
       if  (pbc->getPBCMethod() == nonLinearPeriodicBC::CEM){
       Msg::Info("Imposing PBC by periodic mesh formulation");
-      this->addControlPoints();
-      this->addOtherCornerPoints();
       this->createPeriodicMeshConstraintElementGroup();
       }
       else if (pbc->getPBCMethod() == nonLinearPeriodicBC::CSIM){
         Msg::Info("Imposing PBC by cubic spline formulation");
-        this->addOtherCornerPoints();
         this->createCubicSplineConstraintElementGroup();
       }
       else if (pbc->getPBCMethod() == nonLinearPeriodicBC::LIM){
         Msg::Info("Imposing PBC by lagrange formulation");
-        this->addOtherCornerPoints();
         this->createLagrangeConstraintElementGroup();
       }
       else if (pbc->getPBCMethod() == nonLinearPeriodicBC::FE_LIN or  pbc->getPBCMethod() == nonLinearPeriodicBC::FE_QUA){
         Msg::Info("Imposing PBC by lagrange C0");
-        if (_mbc->getDim() == 2)
-          this->addOtherCornerPoints();
         this->createFEConstraintElementGroup();
       }
       else if (pbc->getPBCMethod() == nonLinearPeriodicBC::PROJECT){
         Msg::Info("Imposing PBC by projection method");
-				this->addControlPoints();
-				this->addOtherCornerPoints();
         this->createProjectConstraintElementGroup();
       }
       else{
@@ -2707,17 +3109,17 @@ void pbcConstraintElementGroup::createConstraintForTest(){
 		if (_v5) Msg::Info("root vertex v5 = %d; vec15 = %f %f %f",_v5->getNum(),_v5->x()-_v1->x(),_v5->y()-_v1->y(),_v5->z()-_v1->z());
 
 
-		constraintElement* cele  = new periodicMeshConstraint(_mbc,_LagSpace,_MultSpace,-1,_v3,_v4,_v2,_v1);
+		constraintElement* cele  = new periodicMeshConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,-1,_v3,_v4,_v2,_v1);
 		_allConstraint.insert(cele);
 
-		if (_mbc->getDim() ==3){
-			cele = new periodicMeshConstraint(_mbc,_LagSpace,_MultSpace,-1,_v7,_v3,_v5,_v1);
+		if (_solver->getMicroBC()->getDim() ==3){
+			cele = new periodicMeshConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,-1,_v7,_v3,_v5,_v1);
 			_allConstraint.insert(cele);
 
-			cele = new periodicMeshConstraint(_mbc,_LagSpace,_MultSpace,-1,_v6,_v2,_v5,_v1);
+			cele = new periodicMeshConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,-1,_v6,_v2,_v5,_v1);
 			_allConstraint.insert(cele);
 
-			cele = new periodicMeshConstraint(_mbc,_LagSpace,_MultSpace,-1,_v8,_v4,_v5,_v1);
+			cele = new periodicMeshConstraint(_solver->getMicroBC(),_LagSpace,_MultSpace,-1,_v8,_v4,_v5,_v1);
 			_allConstraint.insert(cele);
 		}
 
@@ -2729,7 +3131,7 @@ void pbcConstraintElementGroup::createConstraintForTest(){
 
 void pbcConstraintElementGroup::numberDof_virtualVertices(dofManager<double>* pmanager){
   Msg::Info("begin numbering all virtual Dofs from interpolation");
-	std::vector<int> constrainedComp(_mbc->getConstrainedComps().begin(), _mbc->getConstrainedComps().end());
+	std::vector<int> constrainedComp(_solver->getMicroBC()->getConstrainedComps().begin(), _solver->getMicroBC()->getConstrainedComps().end());
   for (std::set<MVertex*>::iterator it = _virtualVertices.begin(); it!= _virtualVertices.end(); it++){
     MVertex* v = *it;
     if (this->isActive(v)){
@@ -2763,3 +3165,64 @@ void pbcConstraintElementGroup::applyLinearConstraintsToSystem(dofManager<double
     linearConstraint.clear();
 	};
 };
+
+void pbcConstraintElementGroup::setLocalBasis(const SVector3& n, const SVector3& t, const SVector3& b){
+	_e1 = n; _e1.normalize();
+	_e2 = t; _e2.normalize();
+	_e3 = b; _e3.normalize();
+};
+
+void pbcConstraintElementGroup::setRotatedBasis(const SVector3& n, const SVector3& t, const SVector3 b){
+	_e1Rotated = n; _e1Rotated.normalize();
+	_e2Rotated = t; _e2Rotated.normalize();
+	_e3Rotated = b; _e3Rotated.normalize();
+};
+
+SPoint3 pbcConstraintElementGroup::getRootPoint(){
+	if (_v1 != NULL) return _v1->point();
+	else{
+		const std::vector<groupOfElements*>& bgroup = _solver->getMicroBC()->getBoundaryGroupOfElements();
+		if (_solver->getMicroBC()->getDim() == 2){
+			SPoint3 oneVp = (*(bgroup[0]->vbegin()))->point();
+			groupOfElements::vertexContainer::iterator it = bgroup[0]->vbegin();
+			SPoint3 firstVn = (*it)->point();
+			it++;
+			SPoint3 secondVn = (*it)->point();
+			
+			SPoint3 p = project(oneVp,firstVn,secondVn);
+			_v1 = new MVertex(p.x(),p.y(),p.z());
+			return p;
+		}
+		else if (_solver->getMicroBC()->getDim() == 3){
+			
+			MElement* e1 = *(bgroup[0]->begin());
+      MElement* e2 = *(bgroup[2]->begin());
+      MElement* e3 = *(bgroup[1]->begin());
+      fullMatrix<double> m(3,3); m.setAll(0.);
+      fullVector<double> b(3); b.setAll(0.);
+
+      std::vector<MVertex*> vv1, vv2, vv3;
+      e1->getVertices(vv1);
+      e2->getVertices(vv2);
+      e3->getVertices(vv3);
+
+      computeSurface(vv1[0]->point(),vv1[1]->point(),vv1[2]->point(),m(0,0),m(0,1),m(0,2),b(0));
+      computeSurface(vv2[0]->point(),vv2[1]->point(),vv2[2]->point(),m(1,0),m(1,1),m(1,2),b(1));
+      computeSurface(vv3[0]->point(),vv3[1]->point(),vv3[2]->point(),m(2,0),m(2,1),m(2,2),b(2));
+
+      fullMatrix<double> invm(3,3);
+      m.invert(invm);
+      fullVector<double> f(3);
+      invm.mult(b,f);
+			
+			SPoint3 p(f(0),f(1),f(2));
+			_v1 = new MVertex(p.x(),p.y(),p.z());
+			return p;
+		}
+		else{
+			Msg::Fatal("getRootPoint has not been implemented for %d D problems",_solver->getMicroBC()->getDim());
+		}
+	}
+	
+};
+
diff --git a/NonLinearSolver/periodicBC/pbcCreateConstraints.h b/NonLinearSolver/periodicBC/pbcCreateConstraints.h
index de06fd6e0dbc220054a4b6bb7cf77f622409ffbd..273f696486d634cec307952db62d5c1705cf86bd 100644
--- a/NonLinearSolver/periodicBC/pbcCreateConstraints.h
+++ b/NonLinearSolver/periodicBC/pbcCreateConstraints.h
@@ -86,8 +86,8 @@ class groupOfElementsDomainDecomposition{
 class pbcConstraintElementGroup{
   protected:
     bool _fullDG; // DG flag
-    std::vector<partDomain*>& _allDomain; // all microscopic domains
-    nonLinearMicroBC* _mbc; // micro bc
+		nonLinearMechSolver* _solver;
+
     FunctionSpaceBase* _LagSpace, *_MultSpace; // lagspace and mult space
     std::set<constraintElement*> _allConstraint; // all constraint
     std::set<MVertex*> _cVertices;  // corner vertices
@@ -106,6 +106,10 @@ class pbcConstraintElementGroup{
     MVertex* _v3, *_v6, *_v7, *_v8;
     groupOfElements* _gX, *_gY, *_gZ; // interpolation edges
     groupOfElements* _gXY, *_gYZ, *_gZX; // interpolation faces
+		
+		SVector3 _periodic12, _periodic14, _periodic15;  // 
+		SVector3 _e1, _e2, _e3; // local basis
+		SVector3 _e1Rotated, _e2Rotated, _e3Rotated; // rotate basis
 
     // 6 periodic nodes in case of missing corner nodes
     std::vector<MVertex*> _pbcNodes;
@@ -118,8 +122,8 @@ class pbcConstraintElementGroup{
     void groupIntersection(groupOfElements* g1, groupOfElements* g2, groupOfElements* &g) const;
     void groupIntersection(std::set<MVertex*>& g1, std::set<MVertex*>& g2, std::set<MVertex*>& ver) const;
 		/* create group of line at intersection of two faces*/
-		void createLineFromTwoFaces(groupOfElements* face1, groupOfElements* face2, groupOfElements* line) const;
-
+		void intersectionBetweenTwoFaces(const groupOfElements* face1, const groupOfElements* face2, groupOfElements* &line) const;
+		void intersectionBetweenTwoLines(const groupOfElements* line1, const groupOfElements* line2, groupOfElements* & pt) const;
     void __init__();
     // add control point in case of missing
     void addControlPoints();
@@ -189,6 +193,19 @@ class pbcConstraintElementGroup{
 		void lagrangePeriodicCondition(Iterator itbegin, Iterator itend,
                                    std::vector<MVertex*>& vlist,std::set<MVertex*>& others,
                                    MVertex* vrootP=NULL, MVertex* vrootN = NULL);
+		template<class Iterator>
+		void shiftedLagrangePeriodicCondition(Iterator itbegin, Iterator itend,
+                                   std::vector<MVertex*>& vlist,std::set<MVertex*>& others, const SVector3& normal);
+																	 
+		// for lagrange
+		template<class Iterator>
+		void directionalLagrangeFormCondition(Iterator itbegin, Iterator itend,
+                                std::vector<MVertex*>& vlist,const SVector3& pbcDir);
+																
+		template<class Iterator>
+		void directionalLagrangePeriodicCondition(Iterator itbegin, Iterator itend,
+                                   std::vector<MVertex*>& xlist, std::vector<MVertex*>& ylist,
+																	 const SVector3& pbcNormal, const bool allComp);
 
     // for lagrange
 		template<class Iterator>
@@ -209,6 +226,7 @@ class pbcConstraintElementGroup{
     void createPeriodicMeshConstraintElementGroup();
     void createCubicSplineConstraintElementGroup();
     void createLagrangeConstraintElementGroup();
+		void createShiftedLagrangeConstraintElementGroup();
     void createFEConstraintElementGroup();
     void createLinearDisplacementConstraintElementGroup();
 		void createProjectConstraintElementGroup();
@@ -216,11 +234,15 @@ class pbcConstraintElementGroup{
     void createMixBCConstraintElementGroup();
 
     void createCornerConstraintElementGroup();
+		void createCornerConstraintElementGroupShiftedBPC();
 		
 		// for DG case
 		void createLinearDisplacementConstraintElementGroup_DG();
 		void createMinimalKinematicConstraintElementGroup_DG();
 		void createMixBCConstraintElementGroup_DG();
+		
+		void createOrthogonalMixBCConstraintElementGroupDirectionFollowing();
+		void createMixBCConstraintElementGroupDirectionFollowing();
    
 
     SVector3 getUniformDisp(MVertex* v);
@@ -230,10 +252,12 @@ class pbcConstraintElementGroup{
     void lagrangeToFile(std::vector<MVertex*>& vlist, dofManager<double>* pmanager, FILE* file);
 
   public:
-    pbcConstraintElementGroup(nonLinearMicroBC* bc, std::vector<partDomain*>& allDom,
+    pbcConstraintElementGroup(nonLinearMechSolver* sl,
                               FunctionSpaceBase* lagspace, FunctionSpaceBase* multspace);
     virtual ~pbcConstraintElementGroup();
     void createConstraintGroup();
+		void switchMicroBC();
+		void clearAllConstraints();
     std::set<constraintElement*>::iterator constraintGroupBegin(){return _allConstraint.begin();};
 		std::set<constraintElement*>::iterator constraintGroupEnd(){return _allConstraint.end();};
 		int size() const {return _allConstraint.size();};
@@ -255,8 +279,11 @@ class pbcConstraintElementGroup{
     void createConstraintForTest();
     void numberDof_virtualVertices(dofManager<double>* pmanager);
     void applyLinearConstraintsToSystem(dofManager<double>* pmanager);
-
-
+		
+		void setLocalBasis(const SVector3& n, const SVector3& t, const SVector3& b);
+		void setRotatedBasis(const SVector3& n, const SVector3& t, const SVector3 b);
+		
+		SPoint3 getRootPoint();
 };
 
 #endif // PBCCREATCONSTRAINTS_H_
diff --git a/NonLinearSolver/periodicBC/pbcSupplementConstraint.cpp b/NonLinearSolver/periodicBC/pbcSupplementConstraint.cpp
index 42a078a725aa9a98cec85cb49b9ec19372c0b6a4..1cec495b39f0d0916bca3f286adf7949db440710 100644
--- a/NonLinearSolver/periodicBC/pbcSupplementConstraint.cpp
+++ b/NonLinearSolver/periodicBC/pbcSupplementConstraint.cpp
@@ -11,40 +11,32 @@
 #include "pbcSupplementConstraint.h"
 #include "pbcCreateConstraints.h"
 
-supplementConstraint::supplementConstraint(nonLinearMicroBC* mbc, FunctionSpaceBase* space, FunctionSpaceBase* mspace,
-												const int c,groupOfElements* g, const scalarWeightFunction* fct):
-									supplementConstraintBase(mbc, space,mspace,c),_g(g){
-  if (fct == NULL){
-    _weightFunction = new constantScalarWeightFunction(1.);
-  }
-  else{
-    _weightFunction = fct->clone();
-  }
-  int sizever = _g->vsize();
-  _weight.resize(sizever);
-  _v.resize(sizever);
+void supplementConstraint::computeWeight(const groupOfElements*g, std::vector<MVertex*>& v, fullVector<double>& weight){
+	int sizever = g->vsize();
+  v.resize(sizever);
   // number all vertices
   std::map<MVertex*,int> allVertices;
-  for (groupOfElements::vertexContainer::iterator it = _g->vbegin(); it!= _g->vend(); it++){
+  for (groupOfElements::vertexContainer::iterator it = g->vbegin(); it!= g->vend(); it++){
     MVertex* vertex = *it;
     int size = allVertices.size();
     allVertices[vertex] = size;
-    _v[size] = vertex;
+    v[size] = vertex;
   }
-  _weight.resize(sizever);
-  _weight.setAll(0.);
+	
+  weight.resize(sizever);
+  weight.setAll(0.);
   // integration rule
-  _integrationRule = new GaussQuadrature(GaussQuadrature::Val);
+  GaussQuadrature integrationRule(GaussQuadrature::Val);
 
   IntPt* GP;
   double jac[3][3];
   double surface =0;
   double val[256];
   // Use a Space to compute Jacobian and shape Function values
-  for (groupOfElements::elementContainer::iterator it = _g->begin(); it!= _g->end(); it++){
+  for (groupOfElements::elementContainer::iterator it = g->begin(); it!= g->end(); it++){
     MElement* ele = *it;
     int numVer = ele->getNumVertices();
-    int npts = _integrationRule->getIntPoints(ele,&GP);
+    int npts = integrationRule.getIntPoints(ele,&GP);
     for (int i=0; i<npts; i++){
       double u = GP[i].pt[0]; double v = GP[i].pt[1]; double w = GP[i].pt[2];
       double wgt = GP[i].weight;
@@ -54,14 +46,28 @@ supplementConstraint::supplementConstraint(nonLinearMicroBC* mbc, FunctionSpaceB
       ele->getShapeFunctions(u,v,w,val);
       for (int j=0; j<numVer; j++){
         MVertex* vertex= ele->getVertex(j);
-        _weight(allVertices[vertex]) += val[j]*ratio;
+        weight(allVertices[vertex]) += val[j]*ratio;
       }
     }
   }
-  _weight.scale(1./surface);
+  weight.scale(1./surface);	
+};
 
+supplementConstraint::supplementConstraint(nonLinearMicroBC* mbc, FunctionSpaceBase* space, FunctionSpaceBase* mspace,
+												const int c,groupOfElements* g, const scalarWeightFunction* fct):
+									supplementConstraintBase(mbc, space,mspace,c),_g(g){
+  if (fct == NULL){
+    _weightFunction = new constantScalarWeightFunction(1.);
+  }
+  else{
+    _weightFunction = fct->clone();
+  }
+	supplementConstraint::computeWeight(_g,_v,_weight);
+	
+	int sizever = _v.size();
+	
   // update with weightfunction
-  for (int i=0; i< _v.size(); i++){
+  for (int i=0; i< sizever; i++){
     _weight(i) *= _weightFunction->getVal(_v[i]);
   }
 
@@ -98,7 +104,6 @@ supplementConstraint::supplementConstraint(nonLinearMicroBC* mbc, FunctionSpaceB
     }
   }
 
-
   double invs = 1./(_weight(_positive));
   _factor = _weight(_positive);
   _weight.scale(invs);
diff --git a/NonLinearSolver/periodicBC/pbcSupplementConstraint.h b/NonLinearSolver/periodicBC/pbcSupplementConstraint.h
index bf10b42f6aefb571ca1c336bf30da7856d65e2fe..19838a67597473f87fc619256368e1e57de46e1b 100644
--- a/NonLinearSolver/periodicBC/pbcSupplementConstraint.h
+++ b/NonLinearSolver/periodicBC/pbcSupplementConstraint.h
@@ -105,6 +105,9 @@ class singlePositionScalarWeightFunction: public scalarWeightFunction{
 
 
 class supplementConstraint : public supplementConstraintBase{
+	public:
+		static void computeWeight(const groupOfElements*g, std::vector<MVertex*>& v, fullVector<double>& weight);
+		
   protected:
     groupOfElements* _g;
     QuadratureBase* _integrationRule; // integration rule for approximate integrals
diff --git a/dG3D/benchmarks/CMakeLists.txt b/dG3D/benchmarks/CMakeLists.txt
index 77cf214f433b3d60b6f30b651b909224e956f761..2dbcbbf1934e8ba76c97a4225873b00cc17c1d19 100644
--- a/dG3D/benchmarks/CMakeLists.txt
+++ b/dG3D/benchmarks/CMakeLists.txt
@@ -44,6 +44,7 @@ add_subdirectory(MFH_EVP_Mercier)
 add_subdirectory(MFH_EVP_Czarnota)
 add_subdirectory(MFH_2EVP_Czarnota)
 add_subdirectory(nonLocalJ2)
+add_subdirectory(nonLocalLemaitreChabocheCube)
 add_subdirectory(multiscaleAdhesiveTest2D)
 add_subdirectory(multiscaleCohesiveTest2D)
 add_subdirectory(multiscaleCohesiveTest2D_tangentByPert)
@@ -104,3 +105,13 @@ add_subdirectory(pathFollowingMultiscale)
 add_subdirectory(multiscaleCohesiveTest2D_mixedMode)
 add_subdirectory(multiscaleCohesiveTest2D_fullDG)
 add_subdirectory(compRVE)
+add_subdirectory(smpT22)
+add_subdirectory(smpT58)
+add_subdirectory(multiscaleCohesiveTest2D_fullDG_rotateRVE)
+add_subdirectory(multiscaleEnhanceStrain)
+add_subdirectory(nonLinearMixedBC_2D_DirectionFollowing)
+add_subdirectory(interpolationPBC_2DShifted)
+add_subdirectory(DG_PRI6_resetBC)
+add_subdirectory(DG_PRI6_DiriToNeum)
+add_subdirectory(microBC_reset)
+add_subdirectory(multiscaleCohesiveTest2D_fullDG_changeBCAfterFailure)
diff --git a/dG3D/benchmarks/DG_PRI6_DiriToNeum/CMakeLists.txt b/dG3D/benchmarks/DG_PRI6_DiriToNeum/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1114c32de584c987638d3c2e691c2097dd535f98
--- /dev/null
+++ b/dG3D/benchmarks/DG_PRI6_DiriToNeum/CMakeLists.txt
@@ -0,0 +1,12 @@
+# test file
+
+set(PYFILE twoHole.py)
+
+set(FILES2DELETE 
+  *.csv
+  disp*
+  stress*
+  previousScheme*
+)
+
+add_cm3python_mpi_test(4 ${PYFILE} "${FILES2DELETE}")
diff --git a/dG3D/benchmarks/DG_PRI6_DiriToNeum/twoHole.geo b/dG3D/benchmarks/DG_PRI6_DiriToNeum/twoHole.geo
new file mode 100644
index 0000000000000000000000000000000000000000..9b42aefe356d6eff249f6f74ccae56f8f5f0ae66
--- /dev/null
+++ b/dG3D/benchmarks/DG_PRI6_DiriToNeum/twoHole.geo
@@ -0,0 +1,72 @@
+
+mm=1.0e-3;
+n=1;
+L=10*mm;
+sl1=0.4*L/n;
+Lx = 2*L;
+Ly = 4*L;
+Point(1)={0,0,0,sl1};
+Point(2)={Lx,0,0,sl1};
+Point(3)={Lx,Ly,0,sl1};
+Point(4)={0,Ly,0,sl1};
+Line(1)={1,2};
+Line(2)={2,3};
+Line(3)={3,4};
+Line(4)={4,1};
+x0=0.5*Lx/n; y0=0.5*Ly/n; r=0.2*L/n; 
+
+x=0.3*Lx;
+y=0.4*Ly;
+r = 0.2*L;
+sl2=0.7*sl1;
+p1=newp; Point(p1)={x-r,y,0,sl2};
+p2=newp; Point(p2)={x,y+r,0,sl2};
+p3=newp; Point(p3)={x+r,y,0,sl2};
+p4=newp; Point(p4)={x,y-r,0,sl2};
+pc=newp; Point(pc)={x,y,0,sl2};
+c1 = newreg; Circle(c1) = {p1,pc,p2};
+c2 = newreg; Circle(c2) = {p2,pc,p3};
+c3 = newreg; Circle(c3) = {p3,pc,p4};
+c4 = newreg; Circle(c4) = {p4,pc,p1};
+l[1]=newreg; Line Loop(l[1]) = {c1,c2,c3,c4}; 
+
+
+x=0.7*Lx;
+y=0.6*Ly;
+r = 0.2*L;
+sl2=0.4*sl1;
+p1=newp; Point(p1)={x-r,y,0,sl2};
+p2=newp; Point(p2)={x,y+r,0,sl2};
+p3=newp; Point(p3)={x+r,y,0,sl2};
+p4=newp; Point(p4)={x,y-r,0,sl2};
+pc=newp; Point(pc)={x,y,0,sl2};
+c1 = newreg; Circle(c1) = {p1,pc,p2};
+c2 = newreg; Circle(c2) = {p2,pc,p3};
+c3 = newreg; Circle(c3) = {p3,pc,p4};
+c4 = newreg; Circle(c4) = {p4,pc,p1};
+l[2]=newreg; Line Loop(l[2]) = {c1,c2,c3,c4}; 
+
+
+l[0]=newreg;
+Line Loop(l[0])={1,2,3,4};
+Plane Surface(11)={l[]};
+//Recombine Surface{11};
+
+Physical Surface(16) = {11};
+Physical Line(17) = {1};
+Physical Line(18) = {3};
+Physical Point(19) = {4};
+Physical Point(20) = {1};
+//+
+//Recombine Surface {11};
+//+
+Extrude {0, 0, 1e-3} {
+  Surface{11}; Layers{2}; Recombine;
+}
+
+//+
+Physical Volume(83) = {1};
+//+
+Physical Surface(84) = {37};
+//+
+Physical Surface(85) = {45};
diff --git a/dG3D/benchmarks/DG_PRI6_DiriToNeum/twoHole.msh b/dG3D/benchmarks/DG_PRI6_DiriToNeum/twoHole.msh
new file mode 100644
index 0000000000000000000000000000000000000000..a3e26cda8fef10667b50e4f68cb7ba3f7aaa6e4a
--- /dev/null
+++ b/dG3D/benchmarks/DG_PRI6_DiriToNeum/twoHole.msh
@@ -0,0 +1,1313 @@
+$MeshFormat
+2.2 0 8
+$EndMeshFormat
+$Nodes
+468
+1 0 0 0
+2 0.02 0 0
+3 0.02 0.04 0
+4 0 0.04 0
+5 0.004 0.016 0
+6 0.006 0.018 0
+7 0.008 0.016 0
+8 0.006 0.014 0
+9 0.012 0.024 0
+10 0.014 0.026 0
+11 0.016 0.024 0
+12 0.014 0.022 0
+13 0 0 0.001
+14 0.02 0 0.001
+15 0.02 0.04 0.001
+16 0 0.04 0.001
+17 0.004 0.016 0.001
+18 0.006 0.014 0.001
+19 0.008 0.016 0.001
+20 0.006 0.018 0.001
+21 0.012 0.024 0.001
+22 0.014 0.022 0.001
+23 0.016 0.024 0.001
+24 0.014 0.026 0.001
+25 0.003999999999991045 0 0
+26 0.007999999999979423 0 0
+27 0.01199999999997901 0 0
+28 0.01599999999998917 0 0
+29 0.02 0.003999999999992779 0
+30 0.02 0.007999999999982091 0
+31 0.02 0.0119999999999705 0
+32 0.02 0.01599999999995885 0
+33 0.02 0.01999999999994786 0
+34 0.02 0.02399999999995802 0
+35 0.02 0.02799999999996886 0
+36 0.02 0.03199999999997834 0
+37 0.02 0.03599999999998998 0
+38 0.01600000000001043 0.04 0
+39 0.01200000000002099 0.04 0
+40 0.008000000000021266 0.04 0
+41 0.004000000000010967 0.04 0
+42 0 0.0360000000000088 0
+43 0 0.03200000000002086 0
+44 0 0.02800000000003047 0
+45 0 0.02400000000004199 0
+46 0 0.02000000000005283 0
+47 0 0.01600000000004253 0
+48 0 0.01200000000003156 0
+49 0 0.008000000000021934 0
+50 0 0.004000000000010155 0
+51 0.004585786437623847 0.01741421356237004 0
+52 0.007414213562370057 0.01741421356237614 0
+53 0.007414213562374714 0.01458578643762852 0
+54 0.004585786437629543 0.01458578643762427 0
+55 0.01258578643762438 0.02541421356237057 0
+56 0.01541421356237008 0.02541421356237611 0
+57 0.01541421356237474 0.02258578643762854 0
+58 0.01258578643763034 0.02258578643762347 0
+59 0.003999999999991045 0 0.001
+60 0.007999999999979423 0 0.001
+61 0.01199999999997901 0 0.001
+62 0.01599999999998917 0 0.001
+63 0.02 0.003999999999992779 0.001
+64 0.02 0.007999999999982091 0.001
+65 0.02 0.0119999999999705 0.001
+66 0.02 0.01599999999995885 0.001
+67 0.02 0.01999999999994786 0.001
+68 0.02 0.02399999999995802 0.001
+69 0.02 0.02799999999996886 0.001
+70 0.02 0.03199999999997834 0.001
+71 0.02 0.03599999999998998 0.001
+72 0.01600000000001043 0.04 0.001
+73 0.01200000000002099 0.04 0.001
+74 0.008000000000021266 0.04 0.001
+75 0.004000000000010967 0.04 0.001
+76 0 0.0360000000000088 0.001
+77 0 0.03200000000002086 0.001
+78 0 0.02800000000003047 0.001
+79 0 0.02400000000004199 0.001
+80 0 0.02000000000005283 0.001
+81 0 0.01600000000004253 0.001
+82 0 0.01200000000003156 0.001
+83 0 0.008000000000021934 0.001
+84 0 0.004000000000010155 0.001
+85 0.004585786437629543 0.01458578643762427 0.001
+86 0.007414213562374714 0.01458578643762852 0.001
+87 0.007414213562370057 0.01741421356237614 0.001
+88 0.004585786437623847 0.01741421356237004 0.001
+89 0.01258578643763034 0.02258578643762347 0.001
+90 0.01541421356237474 0.02258578643762854 0.001
+91 0.01541421356237008 0.02541421356237611 0.001
+92 0.01258578643762438 0.02541421356237057 0.001
+93 0 0 0.0005
+94 0.02 0 0.0005
+95 0.02 0.04 0.0005
+96 0 0.04 0.0005
+97 0.004 0.016 0.0005
+98 0.006 0.014 0.0005
+99 0.008 0.016 0.0005
+100 0.006 0.018 0.0005
+101 0.012 0.024 0.0005
+102 0.014 0.022 0.0005
+103 0.016 0.024 0.0005
+104 0.014 0.026 0.0005
+105 0.01069491464816358 0.03275706766290422 0
+106 0.009305085351833411 0.007242932337095427 0
+107 0.01195336568324533 0.0185033339521395 0
+108 0.01169692766308796 0.01273881552073795 0
+109 0.008268255376061502 0.02156696680671535 0
+110 0.008303072336911339 0.0272611844792605 0
+111 0.01187364030974172 0.02913348640269208 0
+112 0.008126359690256567 0.01086651359730744 0
+113 0.003890646163783284 0.02210218278604862 0
+114 0.01610129463824833 0.01788473837026788 0
+115 0.00527471461890471 0.0312856638364231 0
+116 0.01472528538109378 0.00871433616357243 0
+117 0.01623634084102215 0.03000849594336865 0
+118 0.003763659158977146 0.009991504056632143 0
+119 0.01443926882698468 0.03459017605072594 0
+120 0.005560731173012774 0.005409823949275546 0
+121 0.0107927702276238 0.02079995987352916 0
+122 0.009311828935983526 0.02433847876298567 0
+123 0.010650184926707 0.01597034408016557 0
+124 0.009488676316585596 0.01873394905844636 0
+125 0.007122237134825811 0.0361465517015278 0
+126 0.01287776286517032 0.003853448298470202 0
+127 0.008170792723072185 0.02983066727881701 0
+128 0.01182920727692591 0.01016933272118098 0
+129 0.006054294952975383 0.02377714633014847 0
+130 0.01401598402785484 0.01623087328408668 0
+131 0.007294908290742023 0.01983327956720814 0
+132 0.003027281658933691 0.02681472674903151 0
+133 0.01697271834106652 0.01318527325096741 0
+134 0.01069523874921455 0.02713050105997452 0
+135 0.009304761250784256 0.01286949894002464 0
+136 0.01275290459629123 0.02014826212529715 0
+137 0.01086648419919772 0.02253493272183303 0
+138 0.008075124555504954 0.003752623987231804 0
+139 0.01192487544449155 0.03624737601276829 0
+140 0.004476527263781469 0.01967798854167316 0
+141 0.01563081723820658 0.02008827489546555 0
+142 0.01340073119304642 0.03170462382804348 0
+143 0.006599268806951706 0.00829537617195707 0
+144 0.01261348915701591 0.02734733328150114 0
+145 0.00738651084298308 0.01265266671849831 0
+146 0.002370572056322577 0.01441224443541275 0
+147 0.01762942794367732 0.02558775556458744 0
+148 0.01790285673843247 0.0223785889447873 0
+149 0.002097143261567581 0.01762141105521092 0
+150 0.009240952099717004 0.01705617258380826 0
+151 0.01382198503784448 0.01859814134267057 0
+152 0.006250563403148177 0.02138407985407196 0
+153 0.00387890972637342 0.03353716237557244 0
+154 0.01612109027362417 0.0064628376244262 0
+155 0.01088597704851552 0.02528987054004267 0
+156 0.009114022951483688 0.01471012945995643 0
+157 0.01543332795189227 0.02746035978079723 0
+158 0.01396135682223692 0.02895194262264064 0
+159 0.004566672048107451 0.01253964021920341 0
+160 0.006038643177761786 0.01104805737735952 0
+161 0.005504168720476045 0.02848787898487717 0
+162 0.01449583127952335 0.01151212101512063 0
+163 0.007738762426519678 0.03238279071413182 0
+164 0.01226123757347748 0.00761720928586648 0
+165 0.009183244138059175 0.02006818767405194 0
+166 0.01705248754588463 0.009979094675673207 0
+167 0.002947512454114644 0.03002090532432592 0
+168 0.01627553539450034 0.0154740135035758 0
+169 0.003736908562072098 0.02452497465053428 0
+170 0.01210320004370289 0.02141430992964029 0
+171 0.01457530738257165 0.03732467934410703 0
+172 0.005424692617424976 0.002675320655894944 0
+173 0.01688464871030633 0.03342212420093356 0
+174 0.003115351289692558 0.006577875799067628 0
+175 0.0107562083351965 0.01938171418718952 0
+176 0.00801907739032294 0.01859656757431411 0
+177 0.009706092248953283 0.0349745083483644 0
+178 0.01029390775104271 0.005025491651635151 0
+179 0.01041939478605073 0.03065899224442401 0
+180 0.009580605213946953 0.009341007755575252 0
+181 0.005956735004202661 0.01958735532173931 0
+182 0.007863373369673484 0.02328580803017795 0
+183 0.01213662663032719 0.01671419196982107 0
+184 0.009892427780998104 0.02880296629303362 0
+185 0.01010757221900033 0.01119703370696525 0
+186 0.009309166871142322 0.02282005571001185 0
+187 0.01061502462136631 0.02392672936345621 0
+188 0.01237424154086746 0.03390544608957453 0
+189 0.007625758459129293 0.006094553910425497 0
+190 0.01168498587988745 0.02632369803138027 0
+191 0.008315014120111609 0.01367630196861893 0
+192 0.005728816107385676 0.02596630605182034 0
+193 0.0142849710488482 0.01403486190956942 0
+194 0.004600229372246293 0.0371367428154218 0
+195 0.01539977062775254 0.002863257184577836 0
+196 0.01424508695900598 0.02065138529069585 0
+197 0.01070433566529643 0.01772661763859504 0
+198 0.01031585238516193 0.002273382678171541 0
+199 0.009684147614835145 0.0377266173218274 0
+200 0.009388657496714088 0.0257903919918667 0
+201 0.01060374527582382 0.01427137257676253 0
+202 0.01698320415331218 0.03688949659929274 0
+203 0.003016795846686892 0.003110503400708045 0
+204 0.0176937946876085 0.02816647553920276 0
+205 0.002306205312391421 0.01183352446079793 0
+206 0.01771383789648296 0.01965170741782519 0
+207 0.002297981782566727 0.02031890979568184 0
+208 0.01402312665197501 0.02741087956810794 0
+209 0.005976873348024324 0.01258912043189244 0
+210 0.0122314065954415 0.01499340989019054 0
+211 0.007775007199940583 0.02506988594104327 0
+212 0.009683984162416904 0.02155802055722826 0
+213 0.003364359686384905 0.01875813073873399 0
+214 0.01665173125013881 0.02127130301017035 0
+215 0.003999999999991045 0 0.0005
+216 0.007999999999979423 0 0.0005
+217 0.01199999999997901 0 0.0005
+218 0.01599999999998917 0 0.0005
+219 0.02 0.003999999999992779 0.0005
+220 0.02 0.007999999999982091 0.0005
+221 0.02 0.0119999999999705 0.0005
+222 0.02 0.01599999999995885 0.0005
+223 0.02 0.01999999999994786 0.0005
+224 0.02 0.02399999999995802 0.0005
+225 0.02 0.02799999999996886 0.0005
+226 0.02 0.03199999999997834 0.0005
+227 0.02 0.03599999999998998 0.0005
+228 0.01600000000001043 0.04 0.0005
+229 0.01200000000002099 0.04 0.0005
+230 0.008000000000021266 0.04 0.0005
+231 0.004000000000010967 0.04 0.0005
+232 0 0.0360000000000088 0.0005
+233 0 0.03200000000002086 0.0005
+234 0 0.02800000000003047 0.0005
+235 0 0.02400000000004199 0.0005
+236 0 0.02000000000005283 0.0005
+237 0 0.01600000000004253 0.0005
+238 0 0.01200000000003156 0.0005
+239 0 0.008000000000021934 0.0005
+240 0 0.004000000000010155 0.0005
+241 0.004585786437629543 0.01458578643762427 0.0005
+242 0.007414213562374714 0.01458578643762852 0.0005
+243 0.007414213562370057 0.01741421356237614 0.0005
+244 0.004585786437623847 0.01741421356237004 0.0005
+245 0.01258578643763034 0.02258578643762347 0.0005
+246 0.01541421356237474 0.02258578643762854 0.0005
+247 0.01541421356237008 0.02541421356237611 0.0005
+248 0.01258578643762438 0.02541421356237057 0.0005
+249 0.01069491464816358 0.03275706766290422 0.001
+250 0.009305085351833411 0.007242932337095427 0.001
+251 0.01195336568324533 0.0185033339521395 0.001
+252 0.01169692766308796 0.01273881552073795 0.001
+253 0.008268255376061502 0.02156696680671535 0.001
+254 0.008303072336911339 0.0272611844792605 0.001
+255 0.01187364030974172 0.02913348640269208 0.001
+256 0.008126359690256567 0.01086651359730744 0.001
+257 0.003890646163783284 0.02210218278604862 0.001
+258 0.01610129463824833 0.01788473837026788 0.001
+259 0.00527471461890471 0.0312856638364231 0.001
+260 0.01472528538109378 0.00871433616357243 0.001
+261 0.01623634084102215 0.03000849594336865 0.001
+262 0.003763659158977146 0.009991504056632143 0.001
+263 0.01443926882698468 0.03459017605072594 0.001
+264 0.005560731173012774 0.005409823949275546 0.001
+265 0.0107927702276238 0.02079995987352916 0.001
+266 0.009311828935983526 0.02433847876298567 0.001
+267 0.010650184926707 0.01597034408016557 0.001
+268 0.009488676316585596 0.01873394905844636 0.001
+269 0.007122237134825811 0.0361465517015278 0.001
+270 0.01287776286517032 0.003853448298470202 0.001
+271 0.008170792723072185 0.02983066727881701 0.001
+272 0.01182920727692591 0.01016933272118098 0.001
+273 0.006054294952975383 0.02377714633014847 0.001
+274 0.01401598402785484 0.01623087328408668 0.001
+275 0.007294908290742023 0.01983327956720814 0.001
+276 0.003027281658933691 0.02681472674903151 0.001
+277 0.01697271834106652 0.01318527325096741 0.001
+278 0.01069523874921455 0.02713050105997452 0.001
+279 0.009304761250784256 0.01286949894002464 0.001
+280 0.01275290459629123 0.02014826212529715 0.001
+281 0.01086648419919772 0.02253493272183303 0.001
+282 0.008075124555504954 0.003752623987231804 0.001
+283 0.01192487544449155 0.03624737601276829 0.001
+284 0.004476527263781469 0.01967798854167316 0.001
+285 0.01563081723820658 0.02008827489546555 0.001
+286 0.01340073119304642 0.03170462382804348 0.001
+287 0.006599268806951706 0.00829537617195707 0.001
+288 0.01261348915701591 0.02734733328150114 0.001
+289 0.00738651084298308 0.01265266671849831 0.001
+290 0.002370572056322577 0.01441224443541275 0.001
+291 0.01762942794367732 0.02558775556458744 0.001
+292 0.01790285673843247 0.0223785889447873 0.001
+293 0.002097143261567581 0.01762141105521092 0.001
+294 0.009240952099717004 0.01705617258380826 0.001
+295 0.01382198503784448 0.01859814134267057 0.001
+296 0.006250563403148177 0.02138407985407196 0.001
+297 0.00387890972637342 0.03353716237557244 0.001
+298 0.01612109027362417 0.0064628376244262 0.001
+299 0.01088597704851552 0.02528987054004267 0.001
+300 0.009114022951483688 0.01471012945995643 0.001
+301 0.01543332795189227 0.02746035978079723 0.001
+302 0.01396135682223692 0.02895194262264064 0.001
+303 0.004566672048107451 0.01253964021920341 0.001
+304 0.006038643177761786 0.01104805737735952 0.001
+305 0.005504168720476045 0.02848787898487717 0.001
+306 0.01449583127952335 0.01151212101512063 0.001
+307 0.007738762426519678 0.03238279071413182 0.001
+308 0.01226123757347748 0.00761720928586648 0.001
+309 0.009183244138059175 0.02006818767405194 0.001
+310 0.01705248754588463 0.009979094675673207 0.001
+311 0.002947512454114644 0.03002090532432592 0.001
+312 0.01627553539450034 0.0154740135035758 0.001
+313 0.003736908562072098 0.02452497465053428 0.001
+314 0.01210320004370289 0.02141430992964029 0.001
+315 0.01457530738257165 0.03732467934410703 0.001
+316 0.005424692617424976 0.002675320655894944 0.001
+317 0.01688464871030633 0.03342212420093356 0.001
+318 0.003115351289692558 0.006577875799067628 0.001
+319 0.0107562083351965 0.01938171418718952 0.001
+320 0.00801907739032294 0.01859656757431411 0.001
+321 0.009706092248953283 0.0349745083483644 0.001
+322 0.01029390775104271 0.005025491651635151 0.001
+323 0.01041939478605073 0.03065899224442401 0.001
+324 0.009580605213946953 0.009341007755575252 0.001
+325 0.005956735004202661 0.01958735532173931 0.001
+326 0.007863373369673484 0.02328580803017795 0.001
+327 0.01213662663032719 0.01671419196982107 0.001
+328 0.009892427780998104 0.02880296629303362 0.001
+329 0.01010757221900033 0.01119703370696525 0.001
+330 0.009309166871142322 0.02282005571001185 0.001
+331 0.01061502462136631 0.02392672936345621 0.001
+332 0.01237424154086746 0.03390544608957453 0.001
+333 0.007625758459129293 0.006094553910425497 0.001
+334 0.01168498587988745 0.02632369803138027 0.001
+335 0.008315014120111609 0.01367630196861893 0.001
+336 0.005728816107385676 0.02596630605182034 0.001
+337 0.0142849710488482 0.01403486190956942 0.001
+338 0.004600229372246293 0.0371367428154218 0.001
+339 0.01539977062775254 0.002863257184577836 0.001
+340 0.01424508695900598 0.02065138529069585 0.001
+341 0.01070433566529643 0.01772661763859504 0.001
+342 0.01031585238516193 0.002273382678171541 0.001
+343 0.009684147614835145 0.0377266173218274 0.001
+344 0.009388657496714088 0.0257903919918667 0.001
+345 0.01060374527582382 0.01427137257676253 0.001
+346 0.01698320415331218 0.03688949659929274 0.001
+347 0.003016795846686892 0.003110503400708045 0.001
+348 0.0176937946876085 0.02816647553920276 0.001
+349 0.002306205312391421 0.01183352446079793 0.001
+350 0.01771383789648296 0.01965170741782519 0.001
+351 0.002297981782566727 0.02031890979568184 0.001
+352 0.01402312665197501 0.02741087956810794 0.001
+353 0.005976873348024324 0.01258912043189244 0.001
+354 0.0122314065954415 0.01499340989019054 0.001
+355 0.007775007199940583 0.02506988594104327 0.001
+356 0.009683984162416904 0.02155802055722826 0.001
+357 0.003364359686384905 0.01875813073873399 0.001
+358 0.01665173125013881 0.02127130301017035 0.001
+359 0.01069491464816358 0.03275706766290422 0.0005
+360 0.009305085351833411 0.007242932337095427 0.0005
+361 0.01195336568324533 0.0185033339521395 0.0005
+362 0.01169692766308796 0.01273881552073795 0.0005
+363 0.008268255376061502 0.02156696680671535 0.0005
+364 0.008303072336911339 0.0272611844792605 0.0005
+365 0.01187364030974172 0.02913348640269208 0.0005
+366 0.008126359690256567 0.01086651359730744 0.0005
+367 0.003890646163783284 0.02210218278604862 0.0005
+368 0.01610129463824833 0.01788473837026788 0.0005
+369 0.00527471461890471 0.0312856638364231 0.0005
+370 0.01472528538109378 0.00871433616357243 0.0005
+371 0.01623634084102215 0.03000849594336865 0.0005
+372 0.003763659158977146 0.009991504056632143 0.0005
+373 0.01443926882698468 0.03459017605072594 0.0005
+374 0.005560731173012774 0.005409823949275546 0.0005
+375 0.0107927702276238 0.02079995987352916 0.0005
+376 0.009311828935983526 0.02433847876298567 0.0005
+377 0.010650184926707 0.01597034408016557 0.0005
+378 0.009488676316585596 0.01873394905844636 0.0005
+379 0.007122237134825811 0.0361465517015278 0.0005
+380 0.01287776286517032 0.003853448298470202 0.0005
+381 0.008170792723072185 0.02983066727881701 0.0005
+382 0.01182920727692591 0.01016933272118098 0.0005
+383 0.006054294952975383 0.02377714633014847 0.0005
+384 0.01401598402785484 0.01623087328408668 0.0005
+385 0.007294908290742023 0.01983327956720814 0.0005
+386 0.003027281658933691 0.02681472674903151 0.0005
+387 0.01697271834106652 0.01318527325096741 0.0005
+388 0.01069523874921455 0.02713050105997452 0.0005
+389 0.009304761250784256 0.01286949894002464 0.0005
+390 0.01275290459629123 0.02014826212529715 0.0005
+391 0.01086648419919772 0.02253493272183303 0.0005
+392 0.008075124555504954 0.003752623987231804 0.0005
+393 0.01192487544449155 0.03624737601276829 0.0005
+394 0.004476527263781469 0.01967798854167316 0.0005
+395 0.01563081723820658 0.02008827489546555 0.0005
+396 0.01340073119304642 0.03170462382804348 0.0005
+397 0.006599268806951706 0.00829537617195707 0.0005
+398 0.01261348915701591 0.02734733328150114 0.0005
+399 0.00738651084298308 0.01265266671849831 0.0005
+400 0.002370572056322577 0.01441224443541275 0.0005
+401 0.01762942794367732 0.02558775556458744 0.0005
+402 0.01790285673843247 0.0223785889447873 0.0005
+403 0.002097143261567581 0.01762141105521092 0.0005
+404 0.009240952099717004 0.01705617258380826 0.0005
+405 0.01382198503784448 0.01859814134267057 0.0005
+406 0.006250563403148177 0.02138407985407196 0.0005
+407 0.00387890972637342 0.03353716237557244 0.0005
+408 0.01612109027362417 0.0064628376244262 0.0005
+409 0.01088597704851552 0.02528987054004267 0.0005
+410 0.009114022951483688 0.01471012945995643 0.0005
+411 0.01543332795189227 0.02746035978079723 0.0005
+412 0.01396135682223692 0.02895194262264064 0.0005
+413 0.004566672048107451 0.01253964021920341 0.0005
+414 0.006038643177761786 0.01104805737735952 0.0005
+415 0.005504168720476045 0.02848787898487717 0.0005
+416 0.01449583127952335 0.01151212101512063 0.0005
+417 0.007738762426519678 0.03238279071413182 0.0005
+418 0.01226123757347748 0.00761720928586648 0.0005
+419 0.009183244138059175 0.02006818767405194 0.0005
+420 0.01705248754588463 0.009979094675673207 0.0005
+421 0.002947512454114644 0.03002090532432592 0.0005
+422 0.01627553539450034 0.0154740135035758 0.0005
+423 0.003736908562072098 0.02452497465053428 0.0005
+424 0.01210320004370289 0.02141430992964029 0.0005
+425 0.01457530738257165 0.03732467934410703 0.0005
+426 0.005424692617424976 0.002675320655894944 0.0005
+427 0.01688464871030633 0.03342212420093356 0.0005
+428 0.003115351289692558 0.006577875799067628 0.0005
+429 0.0107562083351965 0.01938171418718952 0.0005
+430 0.00801907739032294 0.01859656757431411 0.0005
+431 0.009706092248953283 0.0349745083483644 0.0005
+432 0.01029390775104271 0.005025491651635151 0.0005
+433 0.01041939478605073 0.03065899224442401 0.0005
+434 0.009580605213946953 0.009341007755575252 0.0005
+435 0.005956735004202661 0.01958735532173931 0.0005
+436 0.007863373369673484 0.02328580803017795 0.0005
+437 0.01213662663032719 0.01671419196982107 0.0005
+438 0.009892427780998104 0.02880296629303362 0.0005
+439 0.01010757221900033 0.01119703370696525 0.0005
+440 0.009309166871142322 0.02282005571001185 0.0005
+441 0.01061502462136631 0.02392672936345621 0.0005
+442 0.01237424154086746 0.03390544608957453 0.0005
+443 0.007625758459129293 0.006094553910425497 0.0005
+444 0.01168498587988745 0.02632369803138027 0.0005
+445 0.008315014120111609 0.01367630196861893 0.0005
+446 0.005728816107385676 0.02596630605182034 0.0005
+447 0.0142849710488482 0.01403486190956942 0.0005
+448 0.004600229372246293 0.0371367428154218 0.0005
+449 0.01539977062775254 0.002863257184577836 0.0005
+450 0.01424508695900598 0.02065138529069585 0.0005
+451 0.01070433566529643 0.01772661763859504 0.0005
+452 0.01031585238516193 0.002273382678171541 0.0005
+453 0.009684147614835145 0.0377266173218274 0.0005
+454 0.009388657496714088 0.0257903919918667 0.0005
+455 0.01060374527582382 0.01427137257676253 0.0005
+456 0.01698320415331218 0.03688949659929274 0.0005
+457 0.003016795846686892 0.003110503400708045 0.0005
+458 0.0176937946876085 0.02816647553920276 0.0005
+459 0.002306205312391421 0.01183352446079793 0.0005
+460 0.01771383789648296 0.01965170741782519 0.0005
+461 0.002297981782566727 0.02031890979568184 0.0005
+462 0.01402312665197501 0.02741087956810794 0.0005
+463 0.005976873348024324 0.01258912043189244 0.0005
+464 0.0122314065954415 0.01499340989019054 0.0005
+465 0.007775007199940583 0.02506988594104327 0.0005
+466 0.009683984162416904 0.02155802055722826 0.0005
+467 0.003364359686384905 0.01875813073873399 0.0005
+468 0.01665173125013881 0.02127130301017035 0.0005
+$EndNodes
+$Elements
+836
+1 15 2 20 1 1
+2 15 2 19 4 4
+3 1 2 17 1 1 25
+4 1 2 17 1 25 26
+5 1 2 17 1 26 27
+6 1 2 17 1 27 28
+7 1 2 17 1 28 2
+8 1 2 18 3 3 38
+9 1 2 18 3 38 39
+10 1 2 18 3 39 40
+11 1 2 18 3 40 41
+12 1 2 18 3 41 4
+13 2 4 16 11 1 2 12 196 57
+14 2 4 16 11 1 3 153 115 163
+15 2 4 16 11 1 1 154 116 164
+16 2 4 16 11 1 1 118 205 49
+17 2 4 16 11 1 3 117 204 36
+18 2 4 16 11 1 3 41 42 194
+19 2 4 16 11 1 1 28 29 195
+20 2 4 16 11 1 3 4 42 41
+21 2 4 16 11 1 1 2 29 28
+22 2 4 16 11 1 2 32 168 133
+23 2 4 16 11 1 4 45 169 132
+24 2 4 16 11 1 4 6 176 131
+25 2 4 16 11 1 1 126 154 164
+26 2 4 16 11 1 3 125 153 163
+27 2 4 16 11 1 3 56 147 157
+28 2 4 16 11 1 1 54 146 159
+29 2 4 16 11 1 2 121 175 136
+30 2 4 16 11 1 2 7 156 150
+31 2 4 16 11 1 2 12 170 136
+32 2 4 16 11 1 2 107 136 175
+33 2 4 16 11 1 2 52 150 176
+34 2 4 16 11 1 3 11 148 147
+35 2 4 16 11 1 4 5 149 146
+36 2 4 16 11 1 3 110 134 184
+37 2 4 16 11 1 1 108 135 185
+38 2 4 16 11 1 4 6 140 51
+39 2 4 16 11 1 4 5 146 54
+40 2 4 16 11 1 3 11 147 56
+41 2 4 16 11 1 4 5 51 149
+42 2 4 16 11 1 2 11 57 148
+43 2 4 16 11 1 2 6 52 176
+44 2 4 16 11 1 4 110 184 127
+45 2 4 16 11 1 1 108 185 128
+46 2 4 16 11 1 1 49 174 118
+47 2 4 16 11 1 3 36 173 117
+48 2 4 16 11 1 2 32 206 114
+49 2 4 16 11 1 4 45 207 113
+50 2 4 16 11 1 2 7 150 52
+51 2 4 16 11 1 3 111 134 144
+52 2 4 16 11 1 1 112 135 145
+53 2 4 16 11 1 4 131 176 165
+54 2 4 16 11 1 1 116 154 166
+55 2 4 16 11 1 3 115 153 167
+56 2 4 16 11 1 3 111 142 179
+57 2 4 16 11 1 1 112 143 180
+58 2 4 16 11 1 1 49 205 48
+59 2 4 16 11 1 3 36 204 35
+60 2 4 16 11 1 2 31 32 133
+61 2 4 16 11 1 4 44 45 132
+62 2 4 16 11 1 4 45 113 169
+63 2 4 16 11 1 2 32 114 168
+64 2 4 16 11 1 2 124 165 176
+65 2 4 16 11 1 3 117 142 158
+66 2 4 16 11 1 1 118 143 160
+67 2 4 16 11 1 2 121 136 170
+68 2 4 16 11 1 2 12 58 170
+69 2 4 16 11 1 2 12 136 196
+70 2 4 16 11 1 4 109 131 165
+71 2 4 16 11 1 4 109 152 131
+72 2 4 16 11 1 2 123 150 156
+73 2 4 16 11 1 3 111 158 142
+74 2 4 16 11 1 1 112 160 143
+75 2 4 16 11 1 4 6 131 181
+76 2 4 16 11 1 3 10 144 55
+77 2 4 16 11 1 1 8 145 53
+78 2 4 16 11 1 2 124 176 150
+79 2 4 16 11 1 1 50 203 174
+80 2 4 16 11 1 3 37 202 173
+81 2 4 16 11 1 2 196 141 57
+82 2 4 16 11 1 3 117 173 142
+83 2 4 16 11 1 1 118 174 143
+84 2 4 16 11 1 1 30 166 154
+85 2 4 16 11 1 3 43 167 153
+86 2 4 16 11 1 2 107 151 136
+87 2 4 16 11 1 2 9 137 58
+88 2 4 16 11 1 2 123 197 150
+89 2 4 16 11 1 2 141 196 151
+90 2 4 16 11 1 4 110 127 161
+91 2 4 16 11 1 1 108 128 162
+92 2 4 16 11 1 2 135 191 145
+93 2 4 16 11 1 4 134 190 144
+94 2 4 16 11 1 3 40 194 125
+95 2 4 16 11 1 1 27 195 126
+96 2 4 16 11 1 1 49 50 174
+97 2 4 16 11 1 3 36 37 173
+98 2 4 16 11 1 1 1 25 203
+99 2 4 16 11 1 3 3 38 202
+100 2 4 16 11 1 2 123 183 197
+101 2 4 16 11 1 2 136 151 196
+102 2 4 16 11 1 2 58 137 170
+103 2 4 16 11 1 3 105 179 142
+104 2 4 16 11 1 1 106 180 143
+105 2 4 16 11 1 4 6 181 140
+106 2 4 16 11 1 3 10 56 157
+107 2 4 16 11 1 1 8 54 159
+108 2 4 16 11 1 1 116 162 128
+109 2 4 16 11 1 4 115 161 127
+110 2 4 16 11 1 4 110 200 134
+111 2 4 16 11 1 2 108 201 135
+112 2 4 16 11 1 3 40 125 199
+113 2 4 16 11 1 1 27 126 198
+114 2 4 16 11 1 3 111 184 134
+115 2 4 16 11 1 1 112 185 135
+116 2 4 16 11 1 1 29 154 195
+117 2 4 16 11 1 3 42 153 194
+118 2 4 16 11 1 1 116 128 164
+119 2 4 16 11 1 3 115 127 163
+120 2 4 16 11 1 1 1 203 50
+121 2 4 16 11 1 3 3 202 37
+122 2 4 16 11 1 2 121 170 137
+123 2 4 16 11 1 4 109 182 152
+124 2 4 16 11 1 3 119 142 173
+125 2 4 16 11 1 1 120 143 174
+126 2 4 16 11 1 3 127 179 163
+127 2 4 16 11 1 1 128 180 164
+128 2 4 16 11 1 2 57 214 148
+129 2 4 16 11 1 4 51 213 149
+130 2 4 16 11 1 4 140 181 152
+131 2 4 16 11 1 1 29 30 154
+132 2 4 16 11 1 3 42 43 153
+133 2 4 16 11 1 4 131 152 181
+134 2 4 16 11 1 2 133 162 166
+135 2 4 16 11 1 4 132 161 167
+136 2 4 16 11 1 3 105 163 179
+137 2 4 16 11 1 1 106 164 180
+138 2 4 16 11 1 3 119 139 188
+139 2 4 16 11 1 1 120 138 189
+140 2 4 16 11 1 3 40 41 194
+141 2 4 16 11 1 1 27 28 195
+142 2 4 16 11 1 4 9 55 155
+143 2 4 16 11 1 2 7 53 156
+144 2 4 16 11 1 2 32 33 206
+145 2 4 16 11 1 4 45 46 207
+146 2 4 16 11 1 2 107 197 183
+147 2 4 16 11 1 2 114 151 130
+148 2 4 16 11 1 1 116 166 162
+149 2 4 16 11 1 4 115 167 161
+150 2 4 16 11 1 3 119 173 202
+151 2 4 16 11 1 1 120 174 203
+152 2 4 16 11 1 4 113 152 129
+153 2 4 16 11 1 2 107 183 151
+154 2 4 16 11 1 2 114 141 151
+155 2 4 16 11 1 1 26 138 172
+156 2 4 16 11 1 3 39 139 171
+157 2 4 16 11 1 3 147 204 157
+158 2 4 16 11 1 1 146 205 159
+159 2 4 16 11 1 3 119 171 139
+160 2 4 16 11 1 1 120 172 138
+161 2 4 16 11 1 4 55 144 190
+162 2 4 16 11 1 2 53 145 191
+163 2 4 16 11 1 2 31 133 166
+164 2 4 16 11 1 4 44 132 167
+165 2 4 16 11 1 4 9 187 137
+166 2 4 16 11 1 4 46 47 149
+167 2 4 16 11 1 3 33 34 148
+168 2 4 16 11 1 3 34 35 147
+169 2 4 16 11 1 1 47 48 146
+170 2 4 16 11 1 4 51 140 213
+171 2 4 16 11 1 2 57 141 214
+172 2 4 16 11 1 3 111 144 158
+173 2 4 16 11 1 1 112 145 160
+174 2 4 16 11 1 3 105 177 163
+175 2 4 16 11 1 1 106 178 164
+176 2 4 16 11 1 4 113 129 169
+177 2 4 16 11 1 2 114 130 168
+178 2 4 16 11 1 2 108 162 193
+179 2 4 16 11 1 4 110 161 192
+180 2 4 16 11 1 1 25 26 172
+181 2 4 16 11 1 3 38 39 171
+182 2 4 16 11 1 3 105 142 188
+183 2 4 16 11 1 1 106 143 189
+184 2 4 16 11 1 2 124 175 165
+185 2 4 16 11 1 4 113 140 152
+186 2 4 16 11 1 4 121 137 212
+187 2 4 16 11 1 3 10 208 144
+188 2 4 16 11 1 1 8 209 145
+189 2 4 16 11 1 2 121 165 175
+190 2 4 16 11 1 2 124 150 197
+191 2 4 16 11 1 3 125 163 177
+192 2 4 16 11 1 1 126 164 178
+193 2 4 16 11 1 4 129 152 182
+194 2 4 16 11 1 4 43 44 167
+195 2 4 16 11 1 2 30 31 166
+196 2 4 16 11 1 3 119 188 142
+197 2 4 16 11 1 1 120 189 143
+198 2 4 16 11 1 3 39 199 139
+199 2 4 16 11 1 1 26 198 138
+200 2 4 16 11 1 3 105 188 177
+201 2 4 16 11 1 1 106 189 178
+202 2 4 16 11 1 1 25 172 203
+203 2 4 16 11 1 3 38 171 202
+204 2 4 16 11 1 3 10 157 208
+205 2 4 16 11 1 1 8 159 209
+206 2 4 16 11 1 3 39 40 199
+207 2 4 16 11 1 1 26 27 198
+208 2 4 16 11 1 4 137 187 186
+209 2 4 16 11 1 2 133 193 162
+210 2 4 16 11 1 4 132 192 161
+211 2 4 16 11 1 4 122 187 155
+212 2 4 16 11 1 3 34 147 148
+213 2 4 16 11 1 4 47 146 149
+214 2 4 16 11 1 3 125 194 153
+215 2 4 16 11 1 1 126 195 154
+216 2 4 16 11 1 3 125 177 199
+217 2 4 16 11 1 1 126 178 198
+218 2 4 16 11 1 2 130 151 183
+219 2 4 16 11 1 4 9 155 187
+220 2 4 16 11 1 4 55 190 155
+221 2 4 16 11 1 2 53 191 156
+222 2 4 16 11 1 4 122 186 187
+223 2 4 16 11 1 4 122 155 200
+224 2 4 16 11 1 2 123 156 201
+225 2 4 16 11 1 3 144 208 158
+226 2 4 16 11 1 1 145 209 160
+227 2 4 16 11 1 3 139 177 188
+228 2 4 16 11 1 1 138 178 189
+229 2 4 16 11 1 2 130 193 168
+230 2 4 16 11 1 4 129 192 169
+231 2 4 16 11 1 3 111 179 184
+232 2 4 16 11 1 1 112 180 185
+233 2 4 16 11 1 4 113 207 140
+234 2 4 16 11 1 2 114 206 141
+235 2 4 16 11 1 4 129 211 192
+236 2 4 16 11 1 2 130 210 193
+237 2 4 16 11 1 4 46 149 207
+238 2 4 16 11 1 2 33 148 206
+239 2 4 16 11 1 3 117 158 157
+240 2 4 16 11 1 1 118 160 159
+241 2 4 16 11 1 4 109 165 212
+242 2 4 16 11 1 4 149 213 207
+243 2 4 16 11 1 2 148 214 206
+244 2 4 16 11 1 4 110 192 211
+245 2 4 16 11 1 2 108 193 210
+246 2 4 16 11 1 4 109 186 182
+247 2 4 16 11 1 4 121 212 165
+248 2 4 16 11 1 2 124 197 175
+249 2 4 16 11 1 2 123 201 210
+250 2 4 16 11 1 4 122 200 211
+251 2 4 16 11 1 3 35 204 147
+252 2 4 16 11 1 1 48 205 146
+253 2 4 16 11 1 3 119 202 171
+254 2 4 16 11 1 1 120 203 172
+255 2 4 16 11 1 3 157 158 208
+256 2 4 16 11 1 1 159 160 209
+257 2 4 16 11 1 4 140 207 213
+258 2 4 16 11 1 2 141 206 214
+259 2 4 16 11 1 2 108 210 201
+260 2 4 16 11 1 4 110 211 200
+261 2 4 16 11 1 4 134 200 155
+262 2 4 16 11 1 2 135 201 156
+263 2 4 16 11 1 2 133 168 193
+264 2 4 16 11 1 4 132 169 192
+265 2 4 16 11 1 4 134 155 190
+266 2 4 16 11 1 2 135 156 191
+267 2 4 16 11 1 4 122 182 186
+268 2 4 16 11 1 4 137 186 212
+269 2 4 16 11 1 1 138 198 178
+270 2 4 16 11 1 3 139 199 177
+271 2 4 16 11 1 2 107 175 197
+272 2 4 16 11 1 4 109 212 186
+273 2 4 16 11 1 4 122 211 182
+274 2 4 16 11 1 2 123 210 183
+275 2 4 16 11 1 3 127 184 179
+276 2 4 16 11 1 1 128 185 180
+277 2 4 16 11 1 4 129 182 211
+278 2 4 16 11 1 2 130 183 210
+279 2 4 16 11 1 3 117 157 204
+280 2 4 16 11 1 1 118 159 205
+281 3 4 84 37 1 1 1 25 215 93
+282 3 4 84 37 1 1 93 215 59 13
+283 3 4 84 37 1 1 25 26 216 215
+284 3 4 84 37 1 1 215 216 60 59
+285 3 4 84 37 1 1 26 27 217 216
+286 3 4 84 37 1 1 216 217 61 60
+287 3 4 84 37 1 1 27 28 218 217
+288 3 4 84 37 1 1 217 218 62 61
+289 3 4 84 37 1 1 28 2 94 218
+290 3 4 84 37 1 1 218 94 14 62
+291 3 4 85 45 1 3 3 38 228 95
+292 3 4 85 45 1 3 95 228 72 15
+293 3 4 85 45 1 3 38 39 229 228
+294 3 4 85 45 1 3 228 229 73 72
+295 3 4 85 45 1 3 39 40 230 229
+296 3 4 85 45 1 3 229 230 74 73
+297 3 4 85 45 1 3 40 41 231 230
+298 3 4 85 45 1 3 230 231 75 74
+299 3 4 85 45 1 3 41 4 96 231
+300 3 4 85 45 1 3 231 96 16 75
+301 6 4 83 1 1 2 57 12 196 246 102 450
+302 6 4 83 1 1 2 246 102 450 90 22 340
+303 6 5 83 1 2 3 -4 163 153 115 417 407 369
+304 6 5 83 1 2 3 -4 417 407 369 307 297 259
+305 6 4 83 1 1 1 164 154 116 418 408 370
+306 6 4 83 1 1 1 418 408 370 308 298 260
+307 6 4 83 1 1 1 49 118 205 239 372 459
+308 6 4 83 1 1 1 239 372 459 83 262 349
+309 6 4 83 1 1 3 36 117 204 226 371 458
+310 6 4 83 1 1 3 226 371 458 70 261 348
+311 6 4 83 1 1 3 194 41 42 448 231 232
+312 6 4 83 1 1 3 448 231 232 338 75 76
+313 6 4 83 1 1 1 195 28 29 449 218 219
+314 6 4 83 1 1 1 449 218 219 339 62 63
+315 6 4 83 1 1 3 41 4 42 231 96 232
+316 6 4 83 1 1 3 231 96 232 75 16 76
+317 6 4 83 1 1 1 28 2 29 218 94 219
+318 6 4 83 1 1 1 218 94 219 62 14 63
+319 6 4 83 1 1 2 133 32 168 387 222 422
+320 6 4 83 1 1 2 387 222 422 277 66 312
+321 6 4 83 1 1 4 132 45 169 386 235 423
+322 6 4 83 1 1 4 386 235 423 276 79 313
+323 6 5 83 1 2 4 -2 131 6 176 385 100 430
+324 6 5 83 1 2 4 -2 385 100 430 275 20 320
+325 6 4 83 1 1 1 164 126 154 418 380 408
+326 6 4 83 1 1 1 418 380 408 308 270 298
+327 6 4 83 1 1 3 163 125 153 417 379 407
+328 6 4 83 1 1 3 417 379 407 307 269 297
+329 6 4 83 1 1 3 157 56 147 411 247 401
+330 6 4 83 1 1 3 411 247 401 301 91 291
+331 6 5 83 1 2 1 -4 159 54 146 413 241 400
+332 6 5 83 1 2 1 -4 413 241 400 303 85 290
+333 6 5 83 1 2 2 -4 136 121 175 390 375 429
+334 6 5 83 1 2 2 -4 390 375 429 280 265 319
+335 6 4 83 1 1 2 150 7 156 404 99 410
+336 6 4 83 1 1 2 404 99 410 294 19 300
+337 6 4 83 1 1 2 136 12 170 390 102 424
+338 6 4 83 1 1 2 390 102 424 280 22 314
+339 6 4 83 1 1 2 175 107 136 429 361 390
+340 6 4 83 1 1 2 429 361 390 319 251 280
+341 6 5 83 1 2 2 -4 176 52 150 430 243 404
+342 6 5 83 1 2 2 -4 430 243 404 320 87 294
+343 6 5 83 1 2 3 -2 147 11 148 401 103 402
+344 6 5 83 1 2 3 -2 401 103 402 291 23 292
+345 6 5 83 1 2 4 -1 146 5 149 400 97 403
+346 6 5 83 1 2 4 -1 400 97 403 290 17 293
+347 6 5 83 1 2 3 -4 184 110 134 438 364 388
+348 6 5 83 1 2 3 -4 438 364 388 328 254 278
+349 6 5 83 1 2 1 -2 185 108 135 439 362 389
+350 6 5 83 1 2 1 -2 439 362 389 329 252 279
+351 6 5 83 1 2 4 -2 51 6 140 244 100 394
+352 6 5 83 1 2 4 -2 244 100 394 88 20 284
+353 6 5 83 1 2 4 -1 54 5 146 241 97 400
+354 6 5 83 1 2 4 -1 241 97 400 85 17 290
+355 6 5 83 1 2 3 -2 56 11 147 247 103 401
+356 6 5 83 1 2 3 -2 247 103 401 91 23 291
+357 6 4 83 1 1 4 149 5 51 403 97 244
+358 6 4 83 1 1 4 403 97 244 293 17 88
+359 6 5 83 1 2 2 -3 148 11 57 402 103 246
+360 6 5 83 1 2 2 -3 402 103 246 292 23 90
+361 6 5 83 1 2 2 -4 176 6 52 430 100 243
+362 6 5 83 1 2 2 -4 430 100 243 320 20 87
+363 6 5 83 1 2 4 -3 127 110 184 381 364 438
+364 6 5 83 1 2 4 -3 381 364 438 271 254 328
+365 6 5 83 1 2 1 -2 128 108 185 382 362 439
+366 6 5 83 1 2 1 -2 382 362 439 272 252 329
+367 6 4 83 1 1 1 118 49 174 372 239 428
+368 6 4 83 1 1 1 372 239 428 262 83 318
+369 6 4 83 1 1 3 117 36 173 371 226 427
+370 6 4 83 1 1 3 371 226 427 261 70 317
+371 6 4 83 1 1 2 114 32 206 368 222 460
+372 6 4 83 1 1 2 368 222 460 258 66 350
+373 6 4 83 1 1 4 113 45 207 367 235 461
+374 6 4 83 1 1 4 367 235 461 257 79 351
+375 6 4 83 1 1 2 52 7 150 243 99 404
+376 6 4 83 1 1 2 243 99 404 87 19 294
+377 6 5 83 1 2 3 -4 144 111 134 398 365 388
+378 6 5 83 1 2 3 -4 398 365 388 288 255 278
+379 6 5 83 1 2 1 -2 145 112 135 399 366 389
+380 6 5 83 1 2 1 -2 399 366 389 289 256 279
+381 6 5 83 1 2 4 -2 165 131 176 419 385 430
+382 6 5 83 1 2 4 -2 419 385 430 309 275 320
+383 6 5 83 1 2 1 -2 166 116 154 420 370 408
+384 6 5 83 1 2 1 -2 420 370 408 310 260 298
+385 6 5 83 1 2 3 -4 167 115 153 421 369 407
+386 6 5 83 1 2 3 -4 421 369 407 311 259 297
+387 6 4 83 1 1 3 179 111 142 433 365 396
+388 6 4 83 1 1 3 433 365 396 323 255 286
+389 6 4 83 1 1 1 180 112 143 434 366 397
+390 6 4 83 1 1 1 434 366 397 324 256 287
+391 6 4 83 1 1 1 48 49 205 238 239 459
+392 6 4 83 1 1 1 238 239 459 82 83 349
+393 6 4 83 1 1 3 35 36 204 225 226 458
+394 6 4 83 1 1 3 225 226 458 69 70 348
+395 6 4 83 1 1 2 133 31 32 387 221 222
+396 6 4 83 1 1 2 387 221 222 277 65 66
+397 6 4 83 1 1 4 132 44 45 386 234 235
+398 6 4 83 1 1 4 386 234 235 276 78 79
+399 6 4 83 1 1 4 169 45 113 423 235 367
+400 6 4 83 1 1 4 423 235 367 313 79 257
+401 6 4 83 1 1 2 168 32 114 422 222 368
+402 6 4 83 1 1 2 422 222 368 312 66 258
+403 6 5 83 1 2 2 -4 176 124 165 430 378 419
+404 6 5 83 1 2 2 -4 430 378 419 320 268 309
+405 6 4 83 1 1 3 158 117 142 412 371 396
+406 6 4 83 1 1 3 412 371 396 302 261 286
+407 6 4 83 1 1 1 160 118 143 414 372 397
+408 6 4 83 1 1 1 414 372 397 304 262 287
+409 6 5 83 1 2 2 -4 170 121 136 424 375 390
+410 6 5 83 1 2 2 -4 424 375 390 314 265 280
+411 6 4 83 1 1 2 170 12 58 424 102 245
+412 6 4 83 1 1 2 424 102 245 314 22 89
+413 6 4 83 1 1 2 196 12 136 450 102 390
+414 6 4 83 1 1 2 450 102 390 340 22 280
+415 6 5 83 1 2 4 -2 165 109 131 419 363 385
+416 6 5 83 1 2 4 -2 419 363 385 309 253 275
+417 6 4 83 1 1 4 131 109 152 385 363 406
+418 6 4 83 1 1 4 385 363 406 275 253 296
+419 6 4 83 1 1 2 156 123 150 410 377 404
+420 6 4 83 1 1 2 410 377 404 300 267 294
+421 6 4 83 1 1 3 142 111 158 396 365 412
+422 6 4 83 1 1 3 396 365 412 286 255 302
+423 6 4 83 1 1 1 143 112 160 397 366 414
+424 6 4 83 1 1 1 397 366 414 287 256 304
+425 6 5 83 1 2 4 -2 181 6 131 435 100 385
+426 6 5 83 1 2 4 -2 435 100 385 325 20 275
+427 6 5 83 1 2 3 -4 55 10 144 248 104 398
+428 6 5 83 1 2 3 -4 248 104 398 92 24 288
+429 6 5 83 1 2 1 -2 53 8 145 242 98 399
+430 6 5 83 1 2 1 -2 242 98 399 86 18 289
+431 6 5 83 1 2 2 -4 150 124 176 404 378 430
+432 6 5 83 1 2 2 -4 404 378 430 294 268 320
+433 6 4 83 1 1 1 174 50 203 428 240 457
+434 6 4 83 1 1 1 428 240 457 318 84 347
+435 6 4 83 1 1 3 173 37 202 427 227 456
+436 6 4 83 1 1 3 427 227 456 317 71 346
+437 6 4 83 1 1 2 57 196 141 246 450 395
+438 6 4 83 1 1 2 246 450 395 90 340 285
+439 6 4 83 1 1 3 142 117 173 396 371 427
+440 6 4 83 1 1 3 396 371 427 286 261 317
+441 6 4 83 1 1 1 143 118 174 397 372 428
+442 6 4 83 1 1 1 397 372 428 287 262 318
+443 6 5 83 1 2 1 -2 154 30 166 408 220 420
+444 6 5 83 1 2 1 -2 408 220 420 298 64 310
+445 6 5 83 1 2 3 -4 153 43 167 407 233 421
+446 6 5 83 1 2 3 -4 407 233 421 297 77 311
+447 6 4 83 1 1 2 136 107 151 390 361 405
+448 6 4 83 1 1 2 390 361 405 280 251 295
+449 6 5 83 1 2 2 -4 58 9 137 245 101 391
+450 6 5 83 1 2 2 -4 245 101 391 89 21 281
+451 6 4 83 1 1 2 150 123 197 404 377 451
+452 6 4 83 1 1 2 404 377 451 294 267 341
+453 6 4 83 1 1 2 151 141 196 405 395 450
+454 6 4 83 1 1 2 405 395 450 295 285 340
+455 6 5 83 1 2 4 -3 161 110 127 415 364 381
+456 6 5 83 1 2 4 -3 415 364 381 305 254 271
+457 6 5 83 1 2 1 -2 162 108 128 416 362 382
+458 6 5 83 1 2 1 -2 416 362 382 306 252 272
+459 6 5 83 1 2 2 -1 145 135 191 399 389 445
+460 6 5 83 1 2 2 -1 399 389 445 289 279 335
+461 6 5 83 1 2 4 -3 144 134 190 398 388 444
+462 6 5 83 1 2 4 -3 398 388 444 288 278 334
+463 6 4 83 1 1 3 125 40 194 379 230 448
+464 6 4 83 1 1 3 379 230 448 269 74 338
+465 6 4 83 1 1 1 126 27 195 380 217 449
+466 6 4 83 1 1 1 380 217 449 270 61 339
+467 6 4 83 1 1 1 174 49 50 428 239 240
+468 6 4 83 1 1 1 428 239 240 318 83 84
+469 6 4 83 1 1 3 173 36 37 427 226 227
+470 6 4 83 1 1 3 427 226 227 317 70 71
+471 6 4 83 1 1 1 203 1 25 457 93 215
+472 6 4 83 1 1 1 457 93 215 347 13 59
+473 6 4 83 1 1 3 202 3 38 456 95 228
+474 6 4 83 1 1 3 456 95 228 346 15 72
+475 6 4 83 1 1 2 197 123 183 451 377 437
+476 6 4 83 1 1 2 451 377 437 341 267 327
+477 6 4 83 1 1 2 196 136 151 450 390 405
+478 6 4 83 1 1 2 450 390 405 340 280 295
+479 6 5 83 1 2 2 -4 170 58 137 424 245 391
+480 6 5 83 1 2 2 -4 424 245 391 314 89 281
+481 6 4 83 1 1 3 142 105 179 396 359 433
+482 6 4 83 1 1 3 396 359 433 286 249 323
+483 6 4 83 1 1 1 143 106 180 397 360 434
+484 6 4 83 1 1 1 397 360 434 287 250 324
+485 6 5 83 1 2 4 -2 140 6 181 394 100 435
+486 6 5 83 1 2 4 -2 394 100 435 284 20 325
+487 6 4 83 1 1 3 157 10 56 411 104 247
+488 6 4 83 1 1 3 411 104 247 301 24 91
+489 6 5 83 1 2 1 -4 159 8 54 413 98 241
+490 6 5 83 1 2 1 -4 413 98 241 303 18 85
+491 6 5 83 1 2 1 -2 128 116 162 382 370 416
+492 6 5 83 1 2 1 -2 382 370 416 272 260 306
+493 6 5 83 1 2 4 -3 127 115 161 381 369 415
+494 6 5 83 1 2 4 -3 381 369 415 271 259 305
+495 6 5 83 1 2 4 -3 134 110 200 388 364 454
+496 6 5 83 1 2 4 -3 388 364 454 278 254 344
+497 6 5 83 1 2 2 -1 135 108 201 389 362 455
+498 6 5 83 1 2 2 -1 389 362 455 279 252 345
+499 6 4 83 1 1 3 199 40 125 453 230 379
+500 6 4 83 1 1 3 453 230 379 343 74 269
+501 6 4 83 1 1 1 198 27 126 452 217 380
+502 6 4 83 1 1 1 452 217 380 342 61 270
+503 6 5 83 1 2 3 -4 134 111 184 388 365 438
+504 6 5 83 1 2 3 -4 388 365 438 278 255 328
+505 6 5 83 1 2 1 -2 135 112 185 389 366 439
+506 6 5 83 1 2 1 -2 389 366 439 279 256 329
+507 6 4 83 1 1 1 195 29 154 449 219 408
+508 6 4 83 1 1 1 449 219 408 339 63 298
+509 6 4 83 1 1 3 194 42 153 448 232 407
+510 6 4 83 1 1 3 448 232 407 338 76 297
+511 6 4 83 1 1 1 164 116 128 418 370 382
+512 6 4 83 1 1 1 418 370 382 308 260 272
+513 6 5 83 1 2 3 -4 163 115 127 417 369 381
+514 6 5 83 1 2 3 -4 417 369 381 307 259 271
+515 6 4 83 1 1 1 50 1 203 240 93 457
+516 6 4 83 1 1 1 240 93 457 84 13 347
+517 6 4 83 1 1 3 37 3 202 227 95 456
+518 6 4 83 1 1 3 227 95 456 71 15 346
+519 6 5 83 1 2 2 -4 137 121 170 391 375 424
+520 6 5 83 1 2 2 -4 391 375 424 281 265 314
+521 6 4 83 1 1 4 152 109 182 406 363 436
+522 6 4 83 1 1 4 406 363 436 296 253 326
+523 6 4 83 1 1 3 173 119 142 427 373 396
+524 6 4 83 1 1 3 427 373 396 317 263 286
+525 6 4 83 1 1 1 174 120 143 428 374 397
+526 6 4 83 1 1 1 428 374 397 318 264 287
+527 6 5 83 1 2 3 -4 163 127 179 417 381 433
+528 6 5 83 1 2 3 -4 417 381 433 307 271 323
+529 6 4 83 1 1 1 164 128 180 418 382 434
+530 6 4 83 1 1 1 418 382 434 308 272 324
+531 6 5 83 1 2 2 -3 148 57 214 402 246 468
+532 6 5 83 1 2 2 -3 402 246 468 292 90 358
+533 6 4 83 1 1 4 149 51 213 403 244 467
+534 6 4 83 1 1 4 403 244 467 293 88 357
+535 6 4 83 1 1 4 152 140 181 406 394 435
+536 6 4 83 1 1 4 406 394 435 296 284 325
+537 6 5 83 1 2 1 -2 154 29 30 408 219 220
+538 6 5 83 1 2 1 -2 408 219 220 298 63 64
+539 6 5 83 1 2 3 -4 153 42 43 407 232 233
+540 6 5 83 1 2 3 -4 407 232 233 297 76 77
+541 6 4 83 1 1 4 181 131 152 435 385 406
+542 6 4 83 1 1 4 435 385 406 325 275 296
+543 6 5 83 1 2 2 -1 166 133 162 420 387 416
+544 6 5 83 1 2 2 -1 420 387 416 310 277 306
+545 6 5 83 1 2 4 -3 167 132 161 421 386 415
+546 6 5 83 1 2 4 -3 421 386 415 311 276 305
+547 6 4 83 1 1 3 179 105 163 433 359 417
+548 6 4 83 1 1 3 433 359 417 323 249 307
+549 6 4 83 1 1 1 180 106 164 434 360 418
+550 6 4 83 1 1 1 434 360 418 324 250 308
+551 6 4 83 1 1 3 188 119 139 442 373 393
+552 6 4 83 1 1 3 442 373 393 332 263 283
+553 6 4 83 1 1 1 189 120 138 443 374 392
+554 6 4 83 1 1 1 443 374 392 333 264 282
+555 6 4 83 1 1 3 194 40 41 448 230 231
+556 6 4 83 1 1 3 448 230 231 338 74 75
+557 6 4 83 1 1 1 195 27 28 449 217 218
+558 6 4 83 1 1 1 449 217 218 339 61 62
+559 6 6 83 1 3 4 -2 -3 155 9 55 409 101 248
+560 6 6 83 1 3 4 -2 -3 409 101 248 299 21 92
+561 6 5 83 1 2 2 -1 156 7 53 410 99 242
+562 6 5 83 1 2 2 -1 410 99 242 300 19 86
+563 6 5 83 1 2 2 -3 206 32 33 460 222 223
+564 6 5 83 1 2 2 -3 460 222 223 350 66 67
+565 6 4 83 1 1 4 207 45 46 461 235 236
+566 6 4 83 1 1 4 461 235 236 351 79 80
+567 6 4 83 1 1 2 183 107 197 437 361 451
+568 6 4 83 1 1 2 437 361 451 327 251 341
+569 6 4 83 1 1 2 130 114 151 384 368 405
+570 6 4 83 1 1 2 384 368 405 274 258 295
+571 6 5 83 1 2 1 -2 162 116 166 416 370 420
+572 6 5 83 1 2 1 -2 416 370 420 306 260 310
+573 6 5 83 1 2 4 -3 161 115 167 415 369 421
+574 6 5 83 1 2 4 -3 415 369 421 305 259 311
+575 6 4 83 1 1 3 202 119 173 456 373 427
+576 6 4 83 1 1 3 456 373 427 346 263 317
+577 6 4 83 1 1 1 203 120 174 457 374 428
+578 6 4 83 1 1 1 457 374 428 347 264 318
+579 6 4 83 1 1 4 129 113 152 383 367 406
+580 6 4 83 1 1 4 383 367 406 273 257 296
+581 6 4 83 1 1 2 151 107 183 405 361 437
+582 6 4 83 1 1 2 405 361 437 295 251 327
+583 6 4 83 1 1 2 151 114 141 405 368 395
+584 6 4 83 1 1 2 405 368 395 295 258 285
+585 6 4 83 1 1 1 172 26 138 426 216 392
+586 6 4 83 1 1 1 426 216 392 316 60 282
+587 6 4 83 1 1 3 171 39 139 425 229 393
+588 6 4 83 1 1 3 425 229 393 315 73 283
+589 6 4 83 1 1 3 157 147 204 411 401 458
+590 6 4 83 1 1 3 411 401 458 301 291 348
+591 6 5 83 1 2 1 -4 159 146 205 413 400 459
+592 6 5 83 1 2 1 -4 413 400 459 303 290 349
+593 6 4 83 1 1 3 139 119 171 393 373 425
+594 6 4 83 1 1 3 393 373 425 283 263 315
+595 6 4 83 1 1 1 138 120 172 392 374 426
+596 6 4 83 1 1 1 392 374 426 282 264 316
+597 6 5 83 1 2 4 -3 190 55 144 444 248 398
+598 6 5 83 1 2 4 -3 444 248 398 334 92 288
+599 6 5 83 1 2 2 -1 191 53 145 445 242 399
+600 6 5 83 1 2 2 -1 445 242 399 335 86 289
+601 6 5 83 1 2 2 -1 166 31 133 420 221 387
+602 6 5 83 1 2 2 -1 420 221 387 310 65 277
+603 6 5 83 1 2 4 -3 167 44 132 421 234 386
+604 6 5 83 1 2 4 -3 421 234 386 311 78 276
+605 6 5 83 1 2 4 -2 137 9 187 391 101 441
+606 6 5 83 1 2 4 -2 391 101 441 281 21 331
+607 6 5 83 1 2 4 -1 149 46 47 403 236 237
+608 6 5 83 1 2 4 -1 403 236 237 293 80 81
+609 6 5 83 1 2 3 -2 148 33 34 402 223 224
+610 6 5 83 1 2 3 -2 402 223 224 292 67 68
+611 6 4 83 1 1 3 147 34 35 401 224 225
+612 6 4 83 1 1 3 401 224 225 291 68 69
+613 6 5 83 1 2 1 -4 146 47 48 400 237 238
+614 6 5 83 1 2 1 -4 400 237 238 290 81 82
+615 6 4 83 1 1 4 213 51 140 467 244 394
+616 6 4 83 1 1 4 467 244 394 357 88 284
+617 6 4 83 1 1 2 214 57 141 468 246 395
+618 6 4 83 1 1 2 468 246 395 358 90 285
+619 6 5 83 1 2 3 -4 158 111 144 412 365 398
+620 6 5 83 1 2 3 -4 412 365 398 302 255 288
+621 6 5 83 1 2 1 -2 160 112 145 414 366 399
+622 6 5 83 1 2 1 -2 414 366 399 304 256 289
+623 6 4 83 1 1 3 163 105 177 417 359 431
+624 6 4 83 1 1 3 417 359 431 307 249 321
+625 6 4 83 1 1 1 164 106 178 418 360 432
+626 6 4 83 1 1 1 418 360 432 308 250 322
+627 6 4 83 1 1 4 169 113 129 423 367 383
+628 6 4 83 1 1 4 423 367 383 313 257 273
+629 6 4 83 1 1 2 168 114 130 422 368 384
+630 6 4 83 1 1 2 422 368 384 312 258 274
+631 6 5 83 1 2 2 -1 193 108 162 447 362 416
+632 6 5 83 1 2 2 -1 447 362 416 337 252 306
+633 6 5 83 1 2 4 -3 192 110 161 446 364 415
+634 6 5 83 1 2 4 -3 446 364 415 336 254 305
+635 6 4 83 1 1 1 172 25 26 426 215 216
+636 6 4 83 1 1 1 426 215 216 316 59 60
+637 6 4 83 1 1 3 171 38 39 425 228 229
+638 6 4 83 1 1 3 425 228 229 315 72 73
+639 6 4 83 1 1 3 188 105 142 442 359 396
+640 6 4 83 1 1 3 442 359 396 332 249 286
+641 6 4 83 1 1 1 189 106 143 443 360 397
+642 6 4 83 1 1 1 443 360 397 333 250 287
+643 6 5 83 1 2 2 -4 165 124 175 419 378 429
+644 6 5 83 1 2 2 -4 419 378 429 309 268 319
+645 6 4 83 1 1 4 152 113 140 406 367 394
+646 6 4 83 1 1 4 406 367 394 296 257 284
+647 6 5 83 1 2 4 -2 212 121 137 466 375 391
+648 6 5 83 1 2 4 -2 466 375 391 356 265 281
+649 6 5 83 1 2 3 -4 144 10 208 398 104 462
+650 6 5 83 1 2 3 -4 398 104 462 288 24 352
+651 6 5 83 1 2 1 -2 145 8 209 399 98 463
+652 6 5 83 1 2 1 -2 399 98 463 289 18 353
+653 6 5 83 1 2 2 -4 175 121 165 429 375 419
+654 6 5 83 1 2 2 -4 429 375 419 319 265 309
+655 6 4 83 1 1 2 197 124 150 451 378 404
+656 6 4 83 1 1 2 451 378 404 341 268 294
+657 6 4 83 1 1 3 177 125 163 431 379 417
+658 6 4 83 1 1 3 431 379 417 321 269 307
+659 6 4 83 1 1 1 178 126 164 432 380 418
+660 6 4 83 1 1 1 432 380 418 322 270 308
+661 6 4 83 1 1 4 182 129 152 436 383 406
+662 6 4 83 1 1 4 436 383 406 326 273 296
+663 6 5 83 1 2 4 -3 167 43 44 421 233 234
+664 6 5 83 1 2 4 -3 421 233 234 311 77 78
+665 6 5 83 1 2 2 -1 166 30 31 420 220 221
+666 6 5 83 1 2 2 -1 420 220 221 310 64 65
+667 6 4 83 1 1 3 142 119 188 396 373 442
+668 6 4 83 1 1 3 396 373 442 286 263 332
+669 6 4 83 1 1 1 143 120 189 397 374 443
+670 6 4 83 1 1 1 397 374 443 287 264 333
+671 6 4 83 1 1 3 139 39 199 393 229 453
+672 6 4 83 1 1 3 393 229 453 283 73 343
+673 6 4 83 1 1 1 138 26 198 392 216 452
+674 6 4 83 1 1 1 392 216 452 282 60 342
+675 6 4 83 1 1 3 177 105 188 431 359 442
+676 6 4 83 1 1 3 431 359 442 321 249 332
+677 6 4 83 1 1 1 178 106 189 432 360 443
+678 6 4 83 1 1 1 432 360 443 322 250 333
+679 6 4 83 1 1 1 203 25 172 457 215 426
+680 6 4 83 1 1 1 457 215 426 347 59 316
+681 6 4 83 1 1 3 202 38 171 456 228 425
+682 6 4 83 1 1 3 456 228 425 346 72 315
+683 6 4 83 1 1 3 208 10 157 462 104 411
+684 6 4 83 1 1 3 462 104 411 352 24 301
+685 6 4 83 1 1 1 209 8 159 463 98 413
+686 6 4 83 1 1 1 463 98 413 353 18 303
+687 6 4 83 1 1 3 199 39 40 453 229 230
+688 6 4 83 1 1 3 453 229 230 343 73 74
+689 6 4 83 1 1 1 198 26 27 452 216 217
+690 6 4 83 1 1 1 452 216 217 342 60 61
+691 6 5 83 1 2 4 -2 186 137 187 440 391 441
+692 6 5 83 1 2 4 -2 440 391 441 330 281 331
+693 6 5 83 1 2 2 -1 162 133 193 416 387 447
+694 6 5 83 1 2 2 -1 416 387 447 306 277 337
+695 6 4 83 1 1 4 161 132 192 415 386 446
+696 6 4 83 1 1 4 415 386 446 305 276 336
+697 6 4 83 1 1 4 155 122 187 409 376 441
+698 6 4 83 1 1 4 409 376 441 299 266 331
+699 6 5 83 1 2 3 -2 148 34 147 402 224 401
+700 6 5 83 1 2 3 -2 402 224 401 292 68 291
+701 6 5 83 1 2 4 -1 149 47 146 403 237 400
+702 6 5 83 1 2 4 -1 403 237 400 293 81 290
+703 6 4 83 1 1 3 153 125 194 407 379 448
+704 6 4 83 1 1 3 407 379 448 297 269 338
+705 6 4 83 1 1 1 154 126 195 408 380 449
+706 6 4 83 1 1 1 408 380 449 298 270 339
+707 6 4 83 1 1 3 199 125 177 453 379 431
+708 6 4 83 1 1 3 453 379 431 343 269 321
+709 6 4 83 1 1 1 198 126 178 452 380 432
+710 6 4 83 1 1 1 452 380 432 342 270 322
+711 6 4 83 1 1 2 183 130 151 437 384 405
+712 6 4 83 1 1 2 437 384 405 327 274 295
+713 6 5 83 1 2 4 -2 187 9 155 441 101 409
+714 6 5 83 1 2 4 -2 441 101 409 331 21 299
+715 6 5 83 1 2 4 -3 155 55 190 409 248 444
+716 6 5 83 1 2 4 -3 409 248 444 299 92 334
+717 6 5 83 1 2 2 -1 156 53 191 410 242 445
+718 6 5 83 1 2 2 -1 410 242 445 300 86 335
+719 6 4 83 1 1 4 187 122 186 441 376 440
+720 6 4 83 1 1 4 441 376 440 331 266 330
+721 6 4 83 1 1 4 200 122 155 454 376 409
+722 6 4 83 1 1 4 454 376 409 344 266 299
+723 6 4 83 1 1 2 201 123 156 455 377 410
+724 6 4 83 1 1 2 455 377 410 345 267 300
+725 6 5 83 1 2 3 -4 158 144 208 412 398 462
+726 6 5 83 1 2 3 -4 412 398 462 302 288 352
+727 6 5 83 1 2 1 -2 160 145 209 414 399 463
+728 6 5 83 1 2 1 -2 414 399 463 304 289 353
+729 6 4 83 1 1 3 188 139 177 442 393 431
+730 6 4 83 1 1 3 442 393 431 332 283 321
+731 6 4 83 1 1 1 189 138 178 443 392 432
+732 6 4 83 1 1 1 443 392 432 333 282 322
+733 6 4 83 1 1 2 168 130 193 422 384 447
+734 6 4 83 1 1 2 422 384 447 312 274 337
+735 6 4 83 1 1 4 169 129 192 423 383 446
+736 6 4 83 1 1 4 423 383 446 313 273 336
+737 6 5 83 1 2 3 -4 184 111 179 438 365 433
+738 6 5 83 1 2 3 -4 438 365 433 328 255 323
+739 6 4 83 1 1 1 185 112 180 439 366 434
+740 6 4 83 1 1 1 439 366 434 329 256 324
+741 6 4 83 1 1 4 140 113 207 394 367 461
+742 6 4 83 1 1 4 394 367 461 284 257 351
+743 6 4 83 1 1 2 141 114 206 395 368 460
+744 6 4 83 1 1 2 395 368 460 285 258 350
+745 6 4 83 1 1 4 192 129 211 446 383 465
+746 6 4 83 1 1 4 446 383 465 336 273 355
+747 6 4 83 1 1 2 193 130 210 447 384 464
+748 6 4 83 1 1 2 447 384 464 337 274 354
+749 6 4 83 1 1 4 207 46 149 461 236 403
+750 6 4 83 1 1 4 461 236 403 351 80 293
+751 6 5 83 1 2 2 -3 206 33 148 460 223 402
+752 6 5 83 1 2 2 -3 460 223 402 350 67 292
+753 6 4 83 1 1 3 157 117 158 411 371 412
+754 6 4 83 1 1 3 411 371 412 301 261 302
+755 6 4 83 1 1 1 159 118 160 413 372 414
+756 6 4 83 1 1 1 413 372 414 303 262 304
+757 6 5 83 1 2 4 -2 212 109 165 466 363 419
+758 6 5 83 1 2 4 -2 466 363 419 356 253 309
+759 6 4 83 1 1 4 207 149 213 461 403 467
+760 6 4 83 1 1 4 461 403 467 351 293 357
+761 6 5 83 1 2 2 -3 206 148 214 460 402 468
+762 6 5 83 1 2 2 -3 460 402 468 350 292 358
+763 6 5 83 1 2 4 -3 211 110 192 465 364 446
+764 6 5 83 1 2 4 -3 465 364 446 355 254 336
+765 6 5 83 1 2 2 -1 210 108 193 464 362 447
+766 6 5 83 1 2 2 -1 464 362 447 354 252 337
+767 6 4 83 1 1 4 182 109 186 436 363 440
+768 6 4 83 1 1 4 436 363 440 326 253 330
+769 6 5 83 1 2 4 -2 165 121 212 419 375 466
+770 6 5 83 1 2 4 -2 419 375 466 309 265 356
+771 6 4 83 1 1 2 175 124 197 429 378 451
+772 6 4 83 1 1 2 429 378 451 319 268 341
+773 6 4 83 1 1 2 210 123 201 464 377 455
+774 6 4 83 1 1 2 464 377 455 354 267 345
+775 6 4 83 1 1 4 211 122 200 465 376 454
+776 6 4 83 1 1 4 465 376 454 355 266 344
+777 6 4 83 1 1 3 147 35 204 401 225 458
+778 6 4 83 1 1 3 401 225 458 291 69 348
+779 6 5 83 1 2 1 -4 146 48 205 400 238 459
+780 6 5 83 1 2 1 -4 400 238 459 290 82 349
+781 6 4 83 1 1 3 171 119 202 425 373 456
+782 6 4 83 1 1 3 425 373 456 315 263 346
+783 6 4 83 1 1 1 172 120 203 426 374 457
+784 6 4 83 1 1 1 426 374 457 316 264 347
+785 6 4 83 1 1 3 208 157 158 462 411 412
+786 6 4 83 1 1 3 462 411 412 352 301 302
+787 6 4 83 1 1 1 209 159 160 463 413 414
+788 6 4 83 1 1 1 463 413 414 353 303 304
+789 6 4 83 1 1 4 213 140 207 467 394 461
+790 6 4 83 1 1 4 467 394 461 357 284 351
+791 6 4 83 1 1 2 214 141 206 468 395 460
+792 6 4 83 1 1 2 468 395 460 358 285 350
+793 6 5 83 1 2 2 -1 201 108 210 455 362 464
+794 6 5 83 1 2 2 -1 455 362 464 345 252 354
+795 6 5 83 1 2 4 -3 200 110 211 454 364 465
+796 6 5 83 1 2 4 -3 454 364 465 344 254 355
+797 6 5 83 1 2 4 -3 155 134 200 409 388 454
+798 6 5 83 1 2 4 -3 409 388 454 299 278 344
+799 6 5 83 1 2 2 -1 156 135 201 410 389 455
+800 6 5 83 1 2 2 -1 410 389 455 300 279 345
+801 6 4 83 1 1 2 193 133 168 447 387 422
+802 6 4 83 1 1 2 447 387 422 337 277 312
+803 6 4 83 1 1 4 192 132 169 446 386 423
+804 6 4 83 1 1 4 446 386 423 336 276 313
+805 6 5 83 1 2 4 -3 190 134 155 444 388 409
+806 6 5 83 1 2 4 -3 444 388 409 334 278 299
+807 6 5 83 1 2 2 -1 191 135 156 445 389 410
+808 6 5 83 1 2 2 -1 445 389 410 335 279 300
+809 6 4 83 1 1 4 186 122 182 440 376 436
+810 6 4 83 1 1 4 440 376 436 330 266 326
+811 6 5 83 1 2 4 -2 212 137 186 466 391 440
+812 6 5 83 1 2 4 -2 466 391 440 356 281 330
+813 6 4 83 1 1 1 178 138 198 432 392 452
+814 6 4 83 1 1 1 432 392 452 322 282 342
+815 6 4 83 1 1 3 177 139 199 431 393 453
+816 6 4 83 1 1 3 431 393 453 321 283 343
+817 6 4 83 1 1 2 197 107 175 451 361 429
+818 6 4 83 1 1 2 451 361 429 341 251 319
+819 6 4 83 1 1 4 186 109 212 440 363 466
+820 6 4 83 1 1 4 440 363 466 330 253 356
+821 6 4 83 1 1 4 182 122 211 436 376 465
+822 6 4 83 1 1 4 436 376 465 326 266 355
+823 6 4 83 1 1 2 183 123 210 437 377 464
+824 6 4 83 1 1 2 437 377 464 327 267 354
+825 6 5 83 1 2 3 -4 179 127 184 433 381 438
+826 6 5 83 1 2 3 -4 433 381 438 323 271 328
+827 6 4 83 1 1 1 180 128 185 434 382 439
+828 6 4 83 1 1 1 434 382 439 324 272 329
+829 6 4 83 1 1 4 211 129 182 465 383 436
+830 6 4 83 1 1 4 465 383 436 355 273 326
+831 6 4 83 1 1 2 210 130 183 464 384 437
+832 6 4 83 1 1 2 464 384 437 354 274 327
+833 6 4 83 1 1 3 204 117 157 458 371 411
+834 6 4 83 1 1 3 458 371 411 348 261 301
+835 6 4 83 1 1 1 205 118 159 459 372 413
+836 6 4 83 1 1 1 459 372 413 349 262 303
+$EndElements
diff --git a/dG3D/benchmarks/DG_PRI6_DiriToNeum/twoHole.py b/dG3D/benchmarks/DG_PRI6_DiriToNeum/twoHole.py
new file mode 100644
index 0000000000000000000000000000000000000000..c57ac0462720449a7b2b62a5b1d6e7317d8cbf54
--- /dev/null
+++ b/dG3D/benchmarks/DG_PRI6_DiriToNeum/twoHole.py
@@ -0,0 +1,105 @@
+#coding-Utf-8-*-
+from gmshpy import *
+from dG3Dpy import*
+
+#script to launch beam problem with a python script
+
+
+lawnum1 = 1 # unique number of law
+rho   = 7850
+young = 28.9e9
+nu    = 0.3 
+sy0   = 150.e6
+h     = young/50.
+
+
+# geometry
+meshfile="twoHole.msh" # name of mesh file
+
+# solver
+sol = 2  # Gmm=0 (default) Taucs=1 PETsc=2
+soltype = 1 # StaticLinear=0 (default) StaticNonLinear=1
+nstep = 25   # number of step (used only if soltype=1)
+ftime =1.   # Final time (used only if soltype=1)
+tol=1.e-6 # relative tolerance for NR scheme (used only if soltype=1)
+nstepArch=1 # Number of step between 2 archiving (used only if soltype=1)
+
+
+
+harden = LinearExponentialJ2IsotropicHardening(1, sy0, h, 0., 10.)
+law1   = J2LinearDG3DMaterialLaw(lawnum1,rho,young,nu,harden)
+
+
+# creation of ElasticField
+beta1 = 1e2
+fullDG = True;
+averageStrainBased = False
+
+myfield1 = dG3DDomain(1000,83,0,lawnum1,fullDG,3)
+myfield1.stabilityParameters(beta1)
+myfield1.averageStrainBased(averageStrainBased)
+
+
+# creation of Solver
+mysolver = nonLinearMechSolver(1000)
+mysolver.loadModel(meshfile)
+mysolver.addDomain(myfield1)
+mysolver.addMaterialLaw(law1)
+
+mysolver.Scheme(soltype)
+mysolver.Solver(sol)
+mysolver.snlData(nstep,ftime,tol)
+mysolver.stepBetweenArchiving(nstepArch)
+mysolver.options("-ksp_type preonly -pc_type lu -pc_factor_mat_solver_package mumps -mat_mumps_icntl_7 2")
+
+# BC
+#mysolver.displacementBC("Volume",83,2,0.)
+mysolver.displacementBC("Face",84,0,0.)
+mysolver.displacementBC("Face",84,1,0.)
+mysolver.displacementBC("Face",84,2,0.)
+mysolver.displacementBC("Face",85,0,0.)
+mysolver.displacementBC("Face",85,1,5e-4)
+mysolver.displacementBC("Face",85,2,0.)
+
+
+mysolver.internalPointBuildView("svm",IPField.SVM, 1, 1)
+mysolver.internalPointBuildView("sig_xx",IPField.SIG_XX, 1, 1)
+mysolver.internalPointBuildView("sig_yy",IPField.SIG_YY, 1, 1)
+mysolver.internalPointBuildView("sig_zz",IPField.SIG_ZZ, 1, 1)
+mysolver.internalPointBuildView("sig_xy",IPField.SIG_XY, 1, 1)
+mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, 1)
+mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, 1)
+mysolver.internalPointBuildView("epl",IPField.PLASTICSTRAIN, 1, 1)
+mysolver.internalPointBuildView("Damage",IPField.DAMAGE, 1, 1)
+mysolver.energyBuildView("elastic energy",2)
+mysolver.OneUnknownBuildView("disp0",0)
+
+mysolver.archivingForceOnPhysicalGroup("Face", 84, 1)
+mysolver.archivingNodeDisplacement(19,1,1)
+
+t1 = mysolver.solve()
+
+check = TestCheck()
+check.equal(-2.839032e+03,mysolver.getArchivedForceOnPhysicalGroup("Face", 84, 1),1.e-4)
+
+nstep = 5   # number of step (used only if soltype=1)
+ftime =1.   # Final time (used only if soltype=1)
+tol=1.e-6 # relative tolerance for NR scheme (used only if soltype=1)
+mysolver.snlData(nstep,ftime,tol)
+
+lastF = 2.839032e+03/(20e-3*1e-3)
+
+fct = LinearFunctionTime(0,lastF,ftime,0.*lastF)
+mysolver.resetBoundaryConditions(False);
+
+mysolver.displacementBC("Face",84,0,0.)
+mysolver.displacementBC("Face",84,1,0.)
+mysolver.displacementBC("Face",84,2,0.)
+mysolver.displacementBC("Face",85,0,0.)
+mysolver.forceBC("Face",85,1,fct)
+mysolver.displacementBC("Face",85,2,0.)
+
+mysolver.solve()
+
+check = TestCheck()
+check.equal(-1.503462e-06,mysolver.getArchivedForceOnPhysicalGroup("Face", 84, 1),1.e-4)
diff --git a/dG3D/benchmarks/DG_PRI6_resetBC/CMakeLists.txt b/dG3D/benchmarks/DG_PRI6_resetBC/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1114c32de584c987638d3c2e691c2097dd535f98
--- /dev/null
+++ b/dG3D/benchmarks/DG_PRI6_resetBC/CMakeLists.txt
@@ -0,0 +1,12 @@
+# test file
+
+set(PYFILE twoHole.py)
+
+set(FILES2DELETE 
+  *.csv
+  disp*
+  stress*
+  previousScheme*
+)
+
+add_cm3python_mpi_test(4 ${PYFILE} "${FILES2DELETE}")
diff --git a/dG3D/benchmarks/DG_PRI6_resetBC/twoHole.geo b/dG3D/benchmarks/DG_PRI6_resetBC/twoHole.geo
new file mode 100644
index 0000000000000000000000000000000000000000..9b42aefe356d6eff249f6f74ccae56f8f5f0ae66
--- /dev/null
+++ b/dG3D/benchmarks/DG_PRI6_resetBC/twoHole.geo
@@ -0,0 +1,72 @@
+
+mm=1.0e-3;
+n=1;
+L=10*mm;
+sl1=0.4*L/n;
+Lx = 2*L;
+Ly = 4*L;
+Point(1)={0,0,0,sl1};
+Point(2)={Lx,0,0,sl1};
+Point(3)={Lx,Ly,0,sl1};
+Point(4)={0,Ly,0,sl1};
+Line(1)={1,2};
+Line(2)={2,3};
+Line(3)={3,4};
+Line(4)={4,1};
+x0=0.5*Lx/n; y0=0.5*Ly/n; r=0.2*L/n; 
+
+x=0.3*Lx;
+y=0.4*Ly;
+r = 0.2*L;
+sl2=0.7*sl1;
+p1=newp; Point(p1)={x-r,y,0,sl2};
+p2=newp; Point(p2)={x,y+r,0,sl2};
+p3=newp; Point(p3)={x+r,y,0,sl2};
+p4=newp; Point(p4)={x,y-r,0,sl2};
+pc=newp; Point(pc)={x,y,0,sl2};
+c1 = newreg; Circle(c1) = {p1,pc,p2};
+c2 = newreg; Circle(c2) = {p2,pc,p3};
+c3 = newreg; Circle(c3) = {p3,pc,p4};
+c4 = newreg; Circle(c4) = {p4,pc,p1};
+l[1]=newreg; Line Loop(l[1]) = {c1,c2,c3,c4}; 
+
+
+x=0.7*Lx;
+y=0.6*Ly;
+r = 0.2*L;
+sl2=0.4*sl1;
+p1=newp; Point(p1)={x-r,y,0,sl2};
+p2=newp; Point(p2)={x,y+r,0,sl2};
+p3=newp; Point(p3)={x+r,y,0,sl2};
+p4=newp; Point(p4)={x,y-r,0,sl2};
+pc=newp; Point(pc)={x,y,0,sl2};
+c1 = newreg; Circle(c1) = {p1,pc,p2};
+c2 = newreg; Circle(c2) = {p2,pc,p3};
+c3 = newreg; Circle(c3) = {p3,pc,p4};
+c4 = newreg; Circle(c4) = {p4,pc,p1};
+l[2]=newreg; Line Loop(l[2]) = {c1,c2,c3,c4}; 
+
+
+l[0]=newreg;
+Line Loop(l[0])={1,2,3,4};
+Plane Surface(11)={l[]};
+//Recombine Surface{11};
+
+Physical Surface(16) = {11};
+Physical Line(17) = {1};
+Physical Line(18) = {3};
+Physical Point(19) = {4};
+Physical Point(20) = {1};
+//+
+//Recombine Surface {11};
+//+
+Extrude {0, 0, 1e-3} {
+  Surface{11}; Layers{2}; Recombine;
+}
+
+//+
+Physical Volume(83) = {1};
+//+
+Physical Surface(84) = {37};
+//+
+Physical Surface(85) = {45};
diff --git a/dG3D/benchmarks/DG_PRI6_resetBC/twoHole.msh b/dG3D/benchmarks/DG_PRI6_resetBC/twoHole.msh
new file mode 100644
index 0000000000000000000000000000000000000000..a3e26cda8fef10667b50e4f68cb7ba3f7aaa6e4a
--- /dev/null
+++ b/dG3D/benchmarks/DG_PRI6_resetBC/twoHole.msh
@@ -0,0 +1,1313 @@
+$MeshFormat
+2.2 0 8
+$EndMeshFormat
+$Nodes
+468
+1 0 0 0
+2 0.02 0 0
+3 0.02 0.04 0
+4 0 0.04 0
+5 0.004 0.016 0
+6 0.006 0.018 0
+7 0.008 0.016 0
+8 0.006 0.014 0
+9 0.012 0.024 0
+10 0.014 0.026 0
+11 0.016 0.024 0
+12 0.014 0.022 0
+13 0 0 0.001
+14 0.02 0 0.001
+15 0.02 0.04 0.001
+16 0 0.04 0.001
+17 0.004 0.016 0.001
+18 0.006 0.014 0.001
+19 0.008 0.016 0.001
+20 0.006 0.018 0.001
+21 0.012 0.024 0.001
+22 0.014 0.022 0.001
+23 0.016 0.024 0.001
+24 0.014 0.026 0.001
+25 0.003999999999991045 0 0
+26 0.007999999999979423 0 0
+27 0.01199999999997901 0 0
+28 0.01599999999998917 0 0
+29 0.02 0.003999999999992779 0
+30 0.02 0.007999999999982091 0
+31 0.02 0.0119999999999705 0
+32 0.02 0.01599999999995885 0
+33 0.02 0.01999999999994786 0
+34 0.02 0.02399999999995802 0
+35 0.02 0.02799999999996886 0
+36 0.02 0.03199999999997834 0
+37 0.02 0.03599999999998998 0
+38 0.01600000000001043 0.04 0
+39 0.01200000000002099 0.04 0
+40 0.008000000000021266 0.04 0
+41 0.004000000000010967 0.04 0
+42 0 0.0360000000000088 0
+43 0 0.03200000000002086 0
+44 0 0.02800000000003047 0
+45 0 0.02400000000004199 0
+46 0 0.02000000000005283 0
+47 0 0.01600000000004253 0
+48 0 0.01200000000003156 0
+49 0 0.008000000000021934 0
+50 0 0.004000000000010155 0
+51 0.004585786437623847 0.01741421356237004 0
+52 0.007414213562370057 0.01741421356237614 0
+53 0.007414213562374714 0.01458578643762852 0
+54 0.004585786437629543 0.01458578643762427 0
+55 0.01258578643762438 0.02541421356237057 0
+56 0.01541421356237008 0.02541421356237611 0
+57 0.01541421356237474 0.02258578643762854 0
+58 0.01258578643763034 0.02258578643762347 0
+59 0.003999999999991045 0 0.001
+60 0.007999999999979423 0 0.001
+61 0.01199999999997901 0 0.001
+62 0.01599999999998917 0 0.001
+63 0.02 0.003999999999992779 0.001
+64 0.02 0.007999999999982091 0.001
+65 0.02 0.0119999999999705 0.001
+66 0.02 0.01599999999995885 0.001
+67 0.02 0.01999999999994786 0.001
+68 0.02 0.02399999999995802 0.001
+69 0.02 0.02799999999996886 0.001
+70 0.02 0.03199999999997834 0.001
+71 0.02 0.03599999999998998 0.001
+72 0.01600000000001043 0.04 0.001
+73 0.01200000000002099 0.04 0.001
+74 0.008000000000021266 0.04 0.001
+75 0.004000000000010967 0.04 0.001
+76 0 0.0360000000000088 0.001
+77 0 0.03200000000002086 0.001
+78 0 0.02800000000003047 0.001
+79 0 0.02400000000004199 0.001
+80 0 0.02000000000005283 0.001
+81 0 0.01600000000004253 0.001
+82 0 0.01200000000003156 0.001
+83 0 0.008000000000021934 0.001
+84 0 0.004000000000010155 0.001
+85 0.004585786437629543 0.01458578643762427 0.001
+86 0.007414213562374714 0.01458578643762852 0.001
+87 0.007414213562370057 0.01741421356237614 0.001
+88 0.004585786437623847 0.01741421356237004 0.001
+89 0.01258578643763034 0.02258578643762347 0.001
+90 0.01541421356237474 0.02258578643762854 0.001
+91 0.01541421356237008 0.02541421356237611 0.001
+92 0.01258578643762438 0.02541421356237057 0.001
+93 0 0 0.0005
+94 0.02 0 0.0005
+95 0.02 0.04 0.0005
+96 0 0.04 0.0005
+97 0.004 0.016 0.0005
+98 0.006 0.014 0.0005
+99 0.008 0.016 0.0005
+100 0.006 0.018 0.0005
+101 0.012 0.024 0.0005
+102 0.014 0.022 0.0005
+103 0.016 0.024 0.0005
+104 0.014 0.026 0.0005
+105 0.01069491464816358 0.03275706766290422 0
+106 0.009305085351833411 0.007242932337095427 0
+107 0.01195336568324533 0.0185033339521395 0
+108 0.01169692766308796 0.01273881552073795 0
+109 0.008268255376061502 0.02156696680671535 0
+110 0.008303072336911339 0.0272611844792605 0
+111 0.01187364030974172 0.02913348640269208 0
+112 0.008126359690256567 0.01086651359730744 0
+113 0.003890646163783284 0.02210218278604862 0
+114 0.01610129463824833 0.01788473837026788 0
+115 0.00527471461890471 0.0312856638364231 0
+116 0.01472528538109378 0.00871433616357243 0
+117 0.01623634084102215 0.03000849594336865 0
+118 0.003763659158977146 0.009991504056632143 0
+119 0.01443926882698468 0.03459017605072594 0
+120 0.005560731173012774 0.005409823949275546 0
+121 0.0107927702276238 0.02079995987352916 0
+122 0.009311828935983526 0.02433847876298567 0
+123 0.010650184926707 0.01597034408016557 0
+124 0.009488676316585596 0.01873394905844636 0
+125 0.007122237134825811 0.0361465517015278 0
+126 0.01287776286517032 0.003853448298470202 0
+127 0.008170792723072185 0.02983066727881701 0
+128 0.01182920727692591 0.01016933272118098 0
+129 0.006054294952975383 0.02377714633014847 0
+130 0.01401598402785484 0.01623087328408668 0
+131 0.007294908290742023 0.01983327956720814 0
+132 0.003027281658933691 0.02681472674903151 0
+133 0.01697271834106652 0.01318527325096741 0
+134 0.01069523874921455 0.02713050105997452 0
+135 0.009304761250784256 0.01286949894002464 0
+136 0.01275290459629123 0.02014826212529715 0
+137 0.01086648419919772 0.02253493272183303 0
+138 0.008075124555504954 0.003752623987231804 0
+139 0.01192487544449155 0.03624737601276829 0
+140 0.004476527263781469 0.01967798854167316 0
+141 0.01563081723820658 0.02008827489546555 0
+142 0.01340073119304642 0.03170462382804348 0
+143 0.006599268806951706 0.00829537617195707 0
+144 0.01261348915701591 0.02734733328150114 0
+145 0.00738651084298308 0.01265266671849831 0
+146 0.002370572056322577 0.01441224443541275 0
+147 0.01762942794367732 0.02558775556458744 0
+148 0.01790285673843247 0.0223785889447873 0
+149 0.002097143261567581 0.01762141105521092 0
+150 0.009240952099717004 0.01705617258380826 0
+151 0.01382198503784448 0.01859814134267057 0
+152 0.006250563403148177 0.02138407985407196 0
+153 0.00387890972637342 0.03353716237557244 0
+154 0.01612109027362417 0.0064628376244262 0
+155 0.01088597704851552 0.02528987054004267 0
+156 0.009114022951483688 0.01471012945995643 0
+157 0.01543332795189227 0.02746035978079723 0
+158 0.01396135682223692 0.02895194262264064 0
+159 0.004566672048107451 0.01253964021920341 0
+160 0.006038643177761786 0.01104805737735952 0
+161 0.005504168720476045 0.02848787898487717 0
+162 0.01449583127952335 0.01151212101512063 0
+163 0.007738762426519678 0.03238279071413182 0
+164 0.01226123757347748 0.00761720928586648 0
+165 0.009183244138059175 0.02006818767405194 0
+166 0.01705248754588463 0.009979094675673207 0
+167 0.002947512454114644 0.03002090532432592 0
+168 0.01627553539450034 0.0154740135035758 0
+169 0.003736908562072098 0.02452497465053428 0
+170 0.01210320004370289 0.02141430992964029 0
+171 0.01457530738257165 0.03732467934410703 0
+172 0.005424692617424976 0.002675320655894944 0
+173 0.01688464871030633 0.03342212420093356 0
+174 0.003115351289692558 0.006577875799067628 0
+175 0.0107562083351965 0.01938171418718952 0
+176 0.00801907739032294 0.01859656757431411 0
+177 0.009706092248953283 0.0349745083483644 0
+178 0.01029390775104271 0.005025491651635151 0
+179 0.01041939478605073 0.03065899224442401 0
+180 0.009580605213946953 0.009341007755575252 0
+181 0.005956735004202661 0.01958735532173931 0
+182 0.007863373369673484 0.02328580803017795 0
+183 0.01213662663032719 0.01671419196982107 0
+184 0.009892427780998104 0.02880296629303362 0
+185 0.01010757221900033 0.01119703370696525 0
+186 0.009309166871142322 0.02282005571001185 0
+187 0.01061502462136631 0.02392672936345621 0
+188 0.01237424154086746 0.03390544608957453 0
+189 0.007625758459129293 0.006094553910425497 0
+190 0.01168498587988745 0.02632369803138027 0
+191 0.008315014120111609 0.01367630196861893 0
+192 0.005728816107385676 0.02596630605182034 0
+193 0.0142849710488482 0.01403486190956942 0
+194 0.004600229372246293 0.0371367428154218 0
+195 0.01539977062775254 0.002863257184577836 0
+196 0.01424508695900598 0.02065138529069585 0
+197 0.01070433566529643 0.01772661763859504 0
+198 0.01031585238516193 0.002273382678171541 0
+199 0.009684147614835145 0.0377266173218274 0
+200 0.009388657496714088 0.0257903919918667 0
+201 0.01060374527582382 0.01427137257676253 0
+202 0.01698320415331218 0.03688949659929274 0
+203 0.003016795846686892 0.003110503400708045 0
+204 0.0176937946876085 0.02816647553920276 0
+205 0.002306205312391421 0.01183352446079793 0
+206 0.01771383789648296 0.01965170741782519 0
+207 0.002297981782566727 0.02031890979568184 0
+208 0.01402312665197501 0.02741087956810794 0
+209 0.005976873348024324 0.01258912043189244 0
+210 0.0122314065954415 0.01499340989019054 0
+211 0.007775007199940583 0.02506988594104327 0
+212 0.009683984162416904 0.02155802055722826 0
+213 0.003364359686384905 0.01875813073873399 0
+214 0.01665173125013881 0.02127130301017035 0
+215 0.003999999999991045 0 0.0005
+216 0.007999999999979423 0 0.0005
+217 0.01199999999997901 0 0.0005
+218 0.01599999999998917 0 0.0005
+219 0.02 0.003999999999992779 0.0005
+220 0.02 0.007999999999982091 0.0005
+221 0.02 0.0119999999999705 0.0005
+222 0.02 0.01599999999995885 0.0005
+223 0.02 0.01999999999994786 0.0005
+224 0.02 0.02399999999995802 0.0005
+225 0.02 0.02799999999996886 0.0005
+226 0.02 0.03199999999997834 0.0005
+227 0.02 0.03599999999998998 0.0005
+228 0.01600000000001043 0.04 0.0005
+229 0.01200000000002099 0.04 0.0005
+230 0.008000000000021266 0.04 0.0005
+231 0.004000000000010967 0.04 0.0005
+232 0 0.0360000000000088 0.0005
+233 0 0.03200000000002086 0.0005
+234 0 0.02800000000003047 0.0005
+235 0 0.02400000000004199 0.0005
+236 0 0.02000000000005283 0.0005
+237 0 0.01600000000004253 0.0005
+238 0 0.01200000000003156 0.0005
+239 0 0.008000000000021934 0.0005
+240 0 0.004000000000010155 0.0005
+241 0.004585786437629543 0.01458578643762427 0.0005
+242 0.007414213562374714 0.01458578643762852 0.0005
+243 0.007414213562370057 0.01741421356237614 0.0005
+244 0.004585786437623847 0.01741421356237004 0.0005
+245 0.01258578643763034 0.02258578643762347 0.0005
+246 0.01541421356237474 0.02258578643762854 0.0005
+247 0.01541421356237008 0.02541421356237611 0.0005
+248 0.01258578643762438 0.02541421356237057 0.0005
+249 0.01069491464816358 0.03275706766290422 0.001
+250 0.009305085351833411 0.007242932337095427 0.001
+251 0.01195336568324533 0.0185033339521395 0.001
+252 0.01169692766308796 0.01273881552073795 0.001
+253 0.008268255376061502 0.02156696680671535 0.001
+254 0.008303072336911339 0.0272611844792605 0.001
+255 0.01187364030974172 0.02913348640269208 0.001
+256 0.008126359690256567 0.01086651359730744 0.001
+257 0.003890646163783284 0.02210218278604862 0.001
+258 0.01610129463824833 0.01788473837026788 0.001
+259 0.00527471461890471 0.0312856638364231 0.001
+260 0.01472528538109378 0.00871433616357243 0.001
+261 0.01623634084102215 0.03000849594336865 0.001
+262 0.003763659158977146 0.009991504056632143 0.001
+263 0.01443926882698468 0.03459017605072594 0.001
+264 0.005560731173012774 0.005409823949275546 0.001
+265 0.0107927702276238 0.02079995987352916 0.001
+266 0.009311828935983526 0.02433847876298567 0.001
+267 0.010650184926707 0.01597034408016557 0.001
+268 0.009488676316585596 0.01873394905844636 0.001
+269 0.007122237134825811 0.0361465517015278 0.001
+270 0.01287776286517032 0.003853448298470202 0.001
+271 0.008170792723072185 0.02983066727881701 0.001
+272 0.01182920727692591 0.01016933272118098 0.001
+273 0.006054294952975383 0.02377714633014847 0.001
+274 0.01401598402785484 0.01623087328408668 0.001
+275 0.007294908290742023 0.01983327956720814 0.001
+276 0.003027281658933691 0.02681472674903151 0.001
+277 0.01697271834106652 0.01318527325096741 0.001
+278 0.01069523874921455 0.02713050105997452 0.001
+279 0.009304761250784256 0.01286949894002464 0.001
+280 0.01275290459629123 0.02014826212529715 0.001
+281 0.01086648419919772 0.02253493272183303 0.001
+282 0.008075124555504954 0.003752623987231804 0.001
+283 0.01192487544449155 0.03624737601276829 0.001
+284 0.004476527263781469 0.01967798854167316 0.001
+285 0.01563081723820658 0.02008827489546555 0.001
+286 0.01340073119304642 0.03170462382804348 0.001
+287 0.006599268806951706 0.00829537617195707 0.001
+288 0.01261348915701591 0.02734733328150114 0.001
+289 0.00738651084298308 0.01265266671849831 0.001
+290 0.002370572056322577 0.01441224443541275 0.001
+291 0.01762942794367732 0.02558775556458744 0.001
+292 0.01790285673843247 0.0223785889447873 0.001
+293 0.002097143261567581 0.01762141105521092 0.001
+294 0.009240952099717004 0.01705617258380826 0.001
+295 0.01382198503784448 0.01859814134267057 0.001
+296 0.006250563403148177 0.02138407985407196 0.001
+297 0.00387890972637342 0.03353716237557244 0.001
+298 0.01612109027362417 0.0064628376244262 0.001
+299 0.01088597704851552 0.02528987054004267 0.001
+300 0.009114022951483688 0.01471012945995643 0.001
+301 0.01543332795189227 0.02746035978079723 0.001
+302 0.01396135682223692 0.02895194262264064 0.001
+303 0.004566672048107451 0.01253964021920341 0.001
+304 0.006038643177761786 0.01104805737735952 0.001
+305 0.005504168720476045 0.02848787898487717 0.001
+306 0.01449583127952335 0.01151212101512063 0.001
+307 0.007738762426519678 0.03238279071413182 0.001
+308 0.01226123757347748 0.00761720928586648 0.001
+309 0.009183244138059175 0.02006818767405194 0.001
+310 0.01705248754588463 0.009979094675673207 0.001
+311 0.002947512454114644 0.03002090532432592 0.001
+312 0.01627553539450034 0.0154740135035758 0.001
+313 0.003736908562072098 0.02452497465053428 0.001
+314 0.01210320004370289 0.02141430992964029 0.001
+315 0.01457530738257165 0.03732467934410703 0.001
+316 0.005424692617424976 0.002675320655894944 0.001
+317 0.01688464871030633 0.03342212420093356 0.001
+318 0.003115351289692558 0.006577875799067628 0.001
+319 0.0107562083351965 0.01938171418718952 0.001
+320 0.00801907739032294 0.01859656757431411 0.001
+321 0.009706092248953283 0.0349745083483644 0.001
+322 0.01029390775104271 0.005025491651635151 0.001
+323 0.01041939478605073 0.03065899224442401 0.001
+324 0.009580605213946953 0.009341007755575252 0.001
+325 0.005956735004202661 0.01958735532173931 0.001
+326 0.007863373369673484 0.02328580803017795 0.001
+327 0.01213662663032719 0.01671419196982107 0.001
+328 0.009892427780998104 0.02880296629303362 0.001
+329 0.01010757221900033 0.01119703370696525 0.001
+330 0.009309166871142322 0.02282005571001185 0.001
+331 0.01061502462136631 0.02392672936345621 0.001
+332 0.01237424154086746 0.03390544608957453 0.001
+333 0.007625758459129293 0.006094553910425497 0.001
+334 0.01168498587988745 0.02632369803138027 0.001
+335 0.008315014120111609 0.01367630196861893 0.001
+336 0.005728816107385676 0.02596630605182034 0.001
+337 0.0142849710488482 0.01403486190956942 0.001
+338 0.004600229372246293 0.0371367428154218 0.001
+339 0.01539977062775254 0.002863257184577836 0.001
+340 0.01424508695900598 0.02065138529069585 0.001
+341 0.01070433566529643 0.01772661763859504 0.001
+342 0.01031585238516193 0.002273382678171541 0.001
+343 0.009684147614835145 0.0377266173218274 0.001
+344 0.009388657496714088 0.0257903919918667 0.001
+345 0.01060374527582382 0.01427137257676253 0.001
+346 0.01698320415331218 0.03688949659929274 0.001
+347 0.003016795846686892 0.003110503400708045 0.001
+348 0.0176937946876085 0.02816647553920276 0.001
+349 0.002306205312391421 0.01183352446079793 0.001
+350 0.01771383789648296 0.01965170741782519 0.001
+351 0.002297981782566727 0.02031890979568184 0.001
+352 0.01402312665197501 0.02741087956810794 0.001
+353 0.005976873348024324 0.01258912043189244 0.001
+354 0.0122314065954415 0.01499340989019054 0.001
+355 0.007775007199940583 0.02506988594104327 0.001
+356 0.009683984162416904 0.02155802055722826 0.001
+357 0.003364359686384905 0.01875813073873399 0.001
+358 0.01665173125013881 0.02127130301017035 0.001
+359 0.01069491464816358 0.03275706766290422 0.0005
+360 0.009305085351833411 0.007242932337095427 0.0005
+361 0.01195336568324533 0.0185033339521395 0.0005
+362 0.01169692766308796 0.01273881552073795 0.0005
+363 0.008268255376061502 0.02156696680671535 0.0005
+364 0.008303072336911339 0.0272611844792605 0.0005
+365 0.01187364030974172 0.02913348640269208 0.0005
+366 0.008126359690256567 0.01086651359730744 0.0005
+367 0.003890646163783284 0.02210218278604862 0.0005
+368 0.01610129463824833 0.01788473837026788 0.0005
+369 0.00527471461890471 0.0312856638364231 0.0005
+370 0.01472528538109378 0.00871433616357243 0.0005
+371 0.01623634084102215 0.03000849594336865 0.0005
+372 0.003763659158977146 0.009991504056632143 0.0005
+373 0.01443926882698468 0.03459017605072594 0.0005
+374 0.005560731173012774 0.005409823949275546 0.0005
+375 0.0107927702276238 0.02079995987352916 0.0005
+376 0.009311828935983526 0.02433847876298567 0.0005
+377 0.010650184926707 0.01597034408016557 0.0005
+378 0.009488676316585596 0.01873394905844636 0.0005
+379 0.007122237134825811 0.0361465517015278 0.0005
+380 0.01287776286517032 0.003853448298470202 0.0005
+381 0.008170792723072185 0.02983066727881701 0.0005
+382 0.01182920727692591 0.01016933272118098 0.0005
+383 0.006054294952975383 0.02377714633014847 0.0005
+384 0.01401598402785484 0.01623087328408668 0.0005
+385 0.007294908290742023 0.01983327956720814 0.0005
+386 0.003027281658933691 0.02681472674903151 0.0005
+387 0.01697271834106652 0.01318527325096741 0.0005
+388 0.01069523874921455 0.02713050105997452 0.0005
+389 0.009304761250784256 0.01286949894002464 0.0005
+390 0.01275290459629123 0.02014826212529715 0.0005
+391 0.01086648419919772 0.02253493272183303 0.0005
+392 0.008075124555504954 0.003752623987231804 0.0005
+393 0.01192487544449155 0.03624737601276829 0.0005
+394 0.004476527263781469 0.01967798854167316 0.0005
+395 0.01563081723820658 0.02008827489546555 0.0005
+396 0.01340073119304642 0.03170462382804348 0.0005
+397 0.006599268806951706 0.00829537617195707 0.0005
+398 0.01261348915701591 0.02734733328150114 0.0005
+399 0.00738651084298308 0.01265266671849831 0.0005
+400 0.002370572056322577 0.01441224443541275 0.0005
+401 0.01762942794367732 0.02558775556458744 0.0005
+402 0.01790285673843247 0.0223785889447873 0.0005
+403 0.002097143261567581 0.01762141105521092 0.0005
+404 0.009240952099717004 0.01705617258380826 0.0005
+405 0.01382198503784448 0.01859814134267057 0.0005
+406 0.006250563403148177 0.02138407985407196 0.0005
+407 0.00387890972637342 0.03353716237557244 0.0005
+408 0.01612109027362417 0.0064628376244262 0.0005
+409 0.01088597704851552 0.02528987054004267 0.0005
+410 0.009114022951483688 0.01471012945995643 0.0005
+411 0.01543332795189227 0.02746035978079723 0.0005
+412 0.01396135682223692 0.02895194262264064 0.0005
+413 0.004566672048107451 0.01253964021920341 0.0005
+414 0.006038643177761786 0.01104805737735952 0.0005
+415 0.005504168720476045 0.02848787898487717 0.0005
+416 0.01449583127952335 0.01151212101512063 0.0005
+417 0.007738762426519678 0.03238279071413182 0.0005
+418 0.01226123757347748 0.00761720928586648 0.0005
+419 0.009183244138059175 0.02006818767405194 0.0005
+420 0.01705248754588463 0.009979094675673207 0.0005
+421 0.002947512454114644 0.03002090532432592 0.0005
+422 0.01627553539450034 0.0154740135035758 0.0005
+423 0.003736908562072098 0.02452497465053428 0.0005
+424 0.01210320004370289 0.02141430992964029 0.0005
+425 0.01457530738257165 0.03732467934410703 0.0005
+426 0.005424692617424976 0.002675320655894944 0.0005
+427 0.01688464871030633 0.03342212420093356 0.0005
+428 0.003115351289692558 0.006577875799067628 0.0005
+429 0.0107562083351965 0.01938171418718952 0.0005
+430 0.00801907739032294 0.01859656757431411 0.0005
+431 0.009706092248953283 0.0349745083483644 0.0005
+432 0.01029390775104271 0.005025491651635151 0.0005
+433 0.01041939478605073 0.03065899224442401 0.0005
+434 0.009580605213946953 0.009341007755575252 0.0005
+435 0.005956735004202661 0.01958735532173931 0.0005
+436 0.007863373369673484 0.02328580803017795 0.0005
+437 0.01213662663032719 0.01671419196982107 0.0005
+438 0.009892427780998104 0.02880296629303362 0.0005
+439 0.01010757221900033 0.01119703370696525 0.0005
+440 0.009309166871142322 0.02282005571001185 0.0005
+441 0.01061502462136631 0.02392672936345621 0.0005
+442 0.01237424154086746 0.03390544608957453 0.0005
+443 0.007625758459129293 0.006094553910425497 0.0005
+444 0.01168498587988745 0.02632369803138027 0.0005
+445 0.008315014120111609 0.01367630196861893 0.0005
+446 0.005728816107385676 0.02596630605182034 0.0005
+447 0.0142849710488482 0.01403486190956942 0.0005
+448 0.004600229372246293 0.0371367428154218 0.0005
+449 0.01539977062775254 0.002863257184577836 0.0005
+450 0.01424508695900598 0.02065138529069585 0.0005
+451 0.01070433566529643 0.01772661763859504 0.0005
+452 0.01031585238516193 0.002273382678171541 0.0005
+453 0.009684147614835145 0.0377266173218274 0.0005
+454 0.009388657496714088 0.0257903919918667 0.0005
+455 0.01060374527582382 0.01427137257676253 0.0005
+456 0.01698320415331218 0.03688949659929274 0.0005
+457 0.003016795846686892 0.003110503400708045 0.0005
+458 0.0176937946876085 0.02816647553920276 0.0005
+459 0.002306205312391421 0.01183352446079793 0.0005
+460 0.01771383789648296 0.01965170741782519 0.0005
+461 0.002297981782566727 0.02031890979568184 0.0005
+462 0.01402312665197501 0.02741087956810794 0.0005
+463 0.005976873348024324 0.01258912043189244 0.0005
+464 0.0122314065954415 0.01499340989019054 0.0005
+465 0.007775007199940583 0.02506988594104327 0.0005
+466 0.009683984162416904 0.02155802055722826 0.0005
+467 0.003364359686384905 0.01875813073873399 0.0005
+468 0.01665173125013881 0.02127130301017035 0.0005
+$EndNodes
+$Elements
+836
+1 15 2 20 1 1
+2 15 2 19 4 4
+3 1 2 17 1 1 25
+4 1 2 17 1 25 26
+5 1 2 17 1 26 27
+6 1 2 17 1 27 28
+7 1 2 17 1 28 2
+8 1 2 18 3 3 38
+9 1 2 18 3 38 39
+10 1 2 18 3 39 40
+11 1 2 18 3 40 41
+12 1 2 18 3 41 4
+13 2 4 16 11 1 2 12 196 57
+14 2 4 16 11 1 3 153 115 163
+15 2 4 16 11 1 1 154 116 164
+16 2 4 16 11 1 1 118 205 49
+17 2 4 16 11 1 3 117 204 36
+18 2 4 16 11 1 3 41 42 194
+19 2 4 16 11 1 1 28 29 195
+20 2 4 16 11 1 3 4 42 41
+21 2 4 16 11 1 1 2 29 28
+22 2 4 16 11 1 2 32 168 133
+23 2 4 16 11 1 4 45 169 132
+24 2 4 16 11 1 4 6 176 131
+25 2 4 16 11 1 1 126 154 164
+26 2 4 16 11 1 3 125 153 163
+27 2 4 16 11 1 3 56 147 157
+28 2 4 16 11 1 1 54 146 159
+29 2 4 16 11 1 2 121 175 136
+30 2 4 16 11 1 2 7 156 150
+31 2 4 16 11 1 2 12 170 136
+32 2 4 16 11 1 2 107 136 175
+33 2 4 16 11 1 2 52 150 176
+34 2 4 16 11 1 3 11 148 147
+35 2 4 16 11 1 4 5 149 146
+36 2 4 16 11 1 3 110 134 184
+37 2 4 16 11 1 1 108 135 185
+38 2 4 16 11 1 4 6 140 51
+39 2 4 16 11 1 4 5 146 54
+40 2 4 16 11 1 3 11 147 56
+41 2 4 16 11 1 4 5 51 149
+42 2 4 16 11 1 2 11 57 148
+43 2 4 16 11 1 2 6 52 176
+44 2 4 16 11 1 4 110 184 127
+45 2 4 16 11 1 1 108 185 128
+46 2 4 16 11 1 1 49 174 118
+47 2 4 16 11 1 3 36 173 117
+48 2 4 16 11 1 2 32 206 114
+49 2 4 16 11 1 4 45 207 113
+50 2 4 16 11 1 2 7 150 52
+51 2 4 16 11 1 3 111 134 144
+52 2 4 16 11 1 1 112 135 145
+53 2 4 16 11 1 4 131 176 165
+54 2 4 16 11 1 1 116 154 166
+55 2 4 16 11 1 3 115 153 167
+56 2 4 16 11 1 3 111 142 179
+57 2 4 16 11 1 1 112 143 180
+58 2 4 16 11 1 1 49 205 48
+59 2 4 16 11 1 3 36 204 35
+60 2 4 16 11 1 2 31 32 133
+61 2 4 16 11 1 4 44 45 132
+62 2 4 16 11 1 4 45 113 169
+63 2 4 16 11 1 2 32 114 168
+64 2 4 16 11 1 2 124 165 176
+65 2 4 16 11 1 3 117 142 158
+66 2 4 16 11 1 1 118 143 160
+67 2 4 16 11 1 2 121 136 170
+68 2 4 16 11 1 2 12 58 170
+69 2 4 16 11 1 2 12 136 196
+70 2 4 16 11 1 4 109 131 165
+71 2 4 16 11 1 4 109 152 131
+72 2 4 16 11 1 2 123 150 156
+73 2 4 16 11 1 3 111 158 142
+74 2 4 16 11 1 1 112 160 143
+75 2 4 16 11 1 4 6 131 181
+76 2 4 16 11 1 3 10 144 55
+77 2 4 16 11 1 1 8 145 53
+78 2 4 16 11 1 2 124 176 150
+79 2 4 16 11 1 1 50 203 174
+80 2 4 16 11 1 3 37 202 173
+81 2 4 16 11 1 2 196 141 57
+82 2 4 16 11 1 3 117 173 142
+83 2 4 16 11 1 1 118 174 143
+84 2 4 16 11 1 1 30 166 154
+85 2 4 16 11 1 3 43 167 153
+86 2 4 16 11 1 2 107 151 136
+87 2 4 16 11 1 2 9 137 58
+88 2 4 16 11 1 2 123 197 150
+89 2 4 16 11 1 2 141 196 151
+90 2 4 16 11 1 4 110 127 161
+91 2 4 16 11 1 1 108 128 162
+92 2 4 16 11 1 2 135 191 145
+93 2 4 16 11 1 4 134 190 144
+94 2 4 16 11 1 3 40 194 125
+95 2 4 16 11 1 1 27 195 126
+96 2 4 16 11 1 1 49 50 174
+97 2 4 16 11 1 3 36 37 173
+98 2 4 16 11 1 1 1 25 203
+99 2 4 16 11 1 3 3 38 202
+100 2 4 16 11 1 2 123 183 197
+101 2 4 16 11 1 2 136 151 196
+102 2 4 16 11 1 2 58 137 170
+103 2 4 16 11 1 3 105 179 142
+104 2 4 16 11 1 1 106 180 143
+105 2 4 16 11 1 4 6 181 140
+106 2 4 16 11 1 3 10 56 157
+107 2 4 16 11 1 1 8 54 159
+108 2 4 16 11 1 1 116 162 128
+109 2 4 16 11 1 4 115 161 127
+110 2 4 16 11 1 4 110 200 134
+111 2 4 16 11 1 2 108 201 135
+112 2 4 16 11 1 3 40 125 199
+113 2 4 16 11 1 1 27 126 198
+114 2 4 16 11 1 3 111 184 134
+115 2 4 16 11 1 1 112 185 135
+116 2 4 16 11 1 1 29 154 195
+117 2 4 16 11 1 3 42 153 194
+118 2 4 16 11 1 1 116 128 164
+119 2 4 16 11 1 3 115 127 163
+120 2 4 16 11 1 1 1 203 50
+121 2 4 16 11 1 3 3 202 37
+122 2 4 16 11 1 2 121 170 137
+123 2 4 16 11 1 4 109 182 152
+124 2 4 16 11 1 3 119 142 173
+125 2 4 16 11 1 1 120 143 174
+126 2 4 16 11 1 3 127 179 163
+127 2 4 16 11 1 1 128 180 164
+128 2 4 16 11 1 2 57 214 148
+129 2 4 16 11 1 4 51 213 149
+130 2 4 16 11 1 4 140 181 152
+131 2 4 16 11 1 1 29 30 154
+132 2 4 16 11 1 3 42 43 153
+133 2 4 16 11 1 4 131 152 181
+134 2 4 16 11 1 2 133 162 166
+135 2 4 16 11 1 4 132 161 167
+136 2 4 16 11 1 3 105 163 179
+137 2 4 16 11 1 1 106 164 180
+138 2 4 16 11 1 3 119 139 188
+139 2 4 16 11 1 1 120 138 189
+140 2 4 16 11 1 3 40 41 194
+141 2 4 16 11 1 1 27 28 195
+142 2 4 16 11 1 4 9 55 155
+143 2 4 16 11 1 2 7 53 156
+144 2 4 16 11 1 2 32 33 206
+145 2 4 16 11 1 4 45 46 207
+146 2 4 16 11 1 2 107 197 183
+147 2 4 16 11 1 2 114 151 130
+148 2 4 16 11 1 1 116 166 162
+149 2 4 16 11 1 4 115 167 161
+150 2 4 16 11 1 3 119 173 202
+151 2 4 16 11 1 1 120 174 203
+152 2 4 16 11 1 4 113 152 129
+153 2 4 16 11 1 2 107 183 151
+154 2 4 16 11 1 2 114 141 151
+155 2 4 16 11 1 1 26 138 172
+156 2 4 16 11 1 3 39 139 171
+157 2 4 16 11 1 3 147 204 157
+158 2 4 16 11 1 1 146 205 159
+159 2 4 16 11 1 3 119 171 139
+160 2 4 16 11 1 1 120 172 138
+161 2 4 16 11 1 4 55 144 190
+162 2 4 16 11 1 2 53 145 191
+163 2 4 16 11 1 2 31 133 166
+164 2 4 16 11 1 4 44 132 167
+165 2 4 16 11 1 4 9 187 137
+166 2 4 16 11 1 4 46 47 149
+167 2 4 16 11 1 3 33 34 148
+168 2 4 16 11 1 3 34 35 147
+169 2 4 16 11 1 1 47 48 146
+170 2 4 16 11 1 4 51 140 213
+171 2 4 16 11 1 2 57 141 214
+172 2 4 16 11 1 3 111 144 158
+173 2 4 16 11 1 1 112 145 160
+174 2 4 16 11 1 3 105 177 163
+175 2 4 16 11 1 1 106 178 164
+176 2 4 16 11 1 4 113 129 169
+177 2 4 16 11 1 2 114 130 168
+178 2 4 16 11 1 2 108 162 193
+179 2 4 16 11 1 4 110 161 192
+180 2 4 16 11 1 1 25 26 172
+181 2 4 16 11 1 3 38 39 171
+182 2 4 16 11 1 3 105 142 188
+183 2 4 16 11 1 1 106 143 189
+184 2 4 16 11 1 2 124 175 165
+185 2 4 16 11 1 4 113 140 152
+186 2 4 16 11 1 4 121 137 212
+187 2 4 16 11 1 3 10 208 144
+188 2 4 16 11 1 1 8 209 145
+189 2 4 16 11 1 2 121 165 175
+190 2 4 16 11 1 2 124 150 197
+191 2 4 16 11 1 3 125 163 177
+192 2 4 16 11 1 1 126 164 178
+193 2 4 16 11 1 4 129 152 182
+194 2 4 16 11 1 4 43 44 167
+195 2 4 16 11 1 2 30 31 166
+196 2 4 16 11 1 3 119 188 142
+197 2 4 16 11 1 1 120 189 143
+198 2 4 16 11 1 3 39 199 139
+199 2 4 16 11 1 1 26 198 138
+200 2 4 16 11 1 3 105 188 177
+201 2 4 16 11 1 1 106 189 178
+202 2 4 16 11 1 1 25 172 203
+203 2 4 16 11 1 3 38 171 202
+204 2 4 16 11 1 3 10 157 208
+205 2 4 16 11 1 1 8 159 209
+206 2 4 16 11 1 3 39 40 199
+207 2 4 16 11 1 1 26 27 198
+208 2 4 16 11 1 4 137 187 186
+209 2 4 16 11 1 2 133 193 162
+210 2 4 16 11 1 4 132 192 161
+211 2 4 16 11 1 4 122 187 155
+212 2 4 16 11 1 3 34 147 148
+213 2 4 16 11 1 4 47 146 149
+214 2 4 16 11 1 3 125 194 153
+215 2 4 16 11 1 1 126 195 154
+216 2 4 16 11 1 3 125 177 199
+217 2 4 16 11 1 1 126 178 198
+218 2 4 16 11 1 2 130 151 183
+219 2 4 16 11 1 4 9 155 187
+220 2 4 16 11 1 4 55 190 155
+221 2 4 16 11 1 2 53 191 156
+222 2 4 16 11 1 4 122 186 187
+223 2 4 16 11 1 4 122 155 200
+224 2 4 16 11 1 2 123 156 201
+225 2 4 16 11 1 3 144 208 158
+226 2 4 16 11 1 1 145 209 160
+227 2 4 16 11 1 3 139 177 188
+228 2 4 16 11 1 1 138 178 189
+229 2 4 16 11 1 2 130 193 168
+230 2 4 16 11 1 4 129 192 169
+231 2 4 16 11 1 3 111 179 184
+232 2 4 16 11 1 1 112 180 185
+233 2 4 16 11 1 4 113 207 140
+234 2 4 16 11 1 2 114 206 141
+235 2 4 16 11 1 4 129 211 192
+236 2 4 16 11 1 2 130 210 193
+237 2 4 16 11 1 4 46 149 207
+238 2 4 16 11 1 2 33 148 206
+239 2 4 16 11 1 3 117 158 157
+240 2 4 16 11 1 1 118 160 159
+241 2 4 16 11 1 4 109 165 212
+242 2 4 16 11 1 4 149 213 207
+243 2 4 16 11 1 2 148 214 206
+244 2 4 16 11 1 4 110 192 211
+245 2 4 16 11 1 2 108 193 210
+246 2 4 16 11 1 4 109 186 182
+247 2 4 16 11 1 4 121 212 165
+248 2 4 16 11 1 2 124 197 175
+249 2 4 16 11 1 2 123 201 210
+250 2 4 16 11 1 4 122 200 211
+251 2 4 16 11 1 3 35 204 147
+252 2 4 16 11 1 1 48 205 146
+253 2 4 16 11 1 3 119 202 171
+254 2 4 16 11 1 1 120 203 172
+255 2 4 16 11 1 3 157 158 208
+256 2 4 16 11 1 1 159 160 209
+257 2 4 16 11 1 4 140 207 213
+258 2 4 16 11 1 2 141 206 214
+259 2 4 16 11 1 2 108 210 201
+260 2 4 16 11 1 4 110 211 200
+261 2 4 16 11 1 4 134 200 155
+262 2 4 16 11 1 2 135 201 156
+263 2 4 16 11 1 2 133 168 193
+264 2 4 16 11 1 4 132 169 192
+265 2 4 16 11 1 4 134 155 190
+266 2 4 16 11 1 2 135 156 191
+267 2 4 16 11 1 4 122 182 186
+268 2 4 16 11 1 4 137 186 212
+269 2 4 16 11 1 1 138 198 178
+270 2 4 16 11 1 3 139 199 177
+271 2 4 16 11 1 2 107 175 197
+272 2 4 16 11 1 4 109 212 186
+273 2 4 16 11 1 4 122 211 182
+274 2 4 16 11 1 2 123 210 183
+275 2 4 16 11 1 3 127 184 179
+276 2 4 16 11 1 1 128 185 180
+277 2 4 16 11 1 4 129 182 211
+278 2 4 16 11 1 2 130 183 210
+279 2 4 16 11 1 3 117 157 204
+280 2 4 16 11 1 1 118 159 205
+281 3 4 84 37 1 1 1 25 215 93
+282 3 4 84 37 1 1 93 215 59 13
+283 3 4 84 37 1 1 25 26 216 215
+284 3 4 84 37 1 1 215 216 60 59
+285 3 4 84 37 1 1 26 27 217 216
+286 3 4 84 37 1 1 216 217 61 60
+287 3 4 84 37 1 1 27 28 218 217
+288 3 4 84 37 1 1 217 218 62 61
+289 3 4 84 37 1 1 28 2 94 218
+290 3 4 84 37 1 1 218 94 14 62
+291 3 4 85 45 1 3 3 38 228 95
+292 3 4 85 45 1 3 95 228 72 15
+293 3 4 85 45 1 3 38 39 229 228
+294 3 4 85 45 1 3 228 229 73 72
+295 3 4 85 45 1 3 39 40 230 229
+296 3 4 85 45 1 3 229 230 74 73
+297 3 4 85 45 1 3 40 41 231 230
+298 3 4 85 45 1 3 230 231 75 74
+299 3 4 85 45 1 3 41 4 96 231
+300 3 4 85 45 1 3 231 96 16 75
+301 6 4 83 1 1 2 57 12 196 246 102 450
+302 6 4 83 1 1 2 246 102 450 90 22 340
+303 6 5 83 1 2 3 -4 163 153 115 417 407 369
+304 6 5 83 1 2 3 -4 417 407 369 307 297 259
+305 6 4 83 1 1 1 164 154 116 418 408 370
+306 6 4 83 1 1 1 418 408 370 308 298 260
+307 6 4 83 1 1 1 49 118 205 239 372 459
+308 6 4 83 1 1 1 239 372 459 83 262 349
+309 6 4 83 1 1 3 36 117 204 226 371 458
+310 6 4 83 1 1 3 226 371 458 70 261 348
+311 6 4 83 1 1 3 194 41 42 448 231 232
+312 6 4 83 1 1 3 448 231 232 338 75 76
+313 6 4 83 1 1 1 195 28 29 449 218 219
+314 6 4 83 1 1 1 449 218 219 339 62 63
+315 6 4 83 1 1 3 41 4 42 231 96 232
+316 6 4 83 1 1 3 231 96 232 75 16 76
+317 6 4 83 1 1 1 28 2 29 218 94 219
+318 6 4 83 1 1 1 218 94 219 62 14 63
+319 6 4 83 1 1 2 133 32 168 387 222 422
+320 6 4 83 1 1 2 387 222 422 277 66 312
+321 6 4 83 1 1 4 132 45 169 386 235 423
+322 6 4 83 1 1 4 386 235 423 276 79 313
+323 6 5 83 1 2 4 -2 131 6 176 385 100 430
+324 6 5 83 1 2 4 -2 385 100 430 275 20 320
+325 6 4 83 1 1 1 164 126 154 418 380 408
+326 6 4 83 1 1 1 418 380 408 308 270 298
+327 6 4 83 1 1 3 163 125 153 417 379 407
+328 6 4 83 1 1 3 417 379 407 307 269 297
+329 6 4 83 1 1 3 157 56 147 411 247 401
+330 6 4 83 1 1 3 411 247 401 301 91 291
+331 6 5 83 1 2 1 -4 159 54 146 413 241 400
+332 6 5 83 1 2 1 -4 413 241 400 303 85 290
+333 6 5 83 1 2 2 -4 136 121 175 390 375 429
+334 6 5 83 1 2 2 -4 390 375 429 280 265 319
+335 6 4 83 1 1 2 150 7 156 404 99 410
+336 6 4 83 1 1 2 404 99 410 294 19 300
+337 6 4 83 1 1 2 136 12 170 390 102 424
+338 6 4 83 1 1 2 390 102 424 280 22 314
+339 6 4 83 1 1 2 175 107 136 429 361 390
+340 6 4 83 1 1 2 429 361 390 319 251 280
+341 6 5 83 1 2 2 -4 176 52 150 430 243 404
+342 6 5 83 1 2 2 -4 430 243 404 320 87 294
+343 6 5 83 1 2 3 -2 147 11 148 401 103 402
+344 6 5 83 1 2 3 -2 401 103 402 291 23 292
+345 6 5 83 1 2 4 -1 146 5 149 400 97 403
+346 6 5 83 1 2 4 -1 400 97 403 290 17 293
+347 6 5 83 1 2 3 -4 184 110 134 438 364 388
+348 6 5 83 1 2 3 -4 438 364 388 328 254 278
+349 6 5 83 1 2 1 -2 185 108 135 439 362 389
+350 6 5 83 1 2 1 -2 439 362 389 329 252 279
+351 6 5 83 1 2 4 -2 51 6 140 244 100 394
+352 6 5 83 1 2 4 -2 244 100 394 88 20 284
+353 6 5 83 1 2 4 -1 54 5 146 241 97 400
+354 6 5 83 1 2 4 -1 241 97 400 85 17 290
+355 6 5 83 1 2 3 -2 56 11 147 247 103 401
+356 6 5 83 1 2 3 -2 247 103 401 91 23 291
+357 6 4 83 1 1 4 149 5 51 403 97 244
+358 6 4 83 1 1 4 403 97 244 293 17 88
+359 6 5 83 1 2 2 -3 148 11 57 402 103 246
+360 6 5 83 1 2 2 -3 402 103 246 292 23 90
+361 6 5 83 1 2 2 -4 176 6 52 430 100 243
+362 6 5 83 1 2 2 -4 430 100 243 320 20 87
+363 6 5 83 1 2 4 -3 127 110 184 381 364 438
+364 6 5 83 1 2 4 -3 381 364 438 271 254 328
+365 6 5 83 1 2 1 -2 128 108 185 382 362 439
+366 6 5 83 1 2 1 -2 382 362 439 272 252 329
+367 6 4 83 1 1 1 118 49 174 372 239 428
+368 6 4 83 1 1 1 372 239 428 262 83 318
+369 6 4 83 1 1 3 117 36 173 371 226 427
+370 6 4 83 1 1 3 371 226 427 261 70 317
+371 6 4 83 1 1 2 114 32 206 368 222 460
+372 6 4 83 1 1 2 368 222 460 258 66 350
+373 6 4 83 1 1 4 113 45 207 367 235 461
+374 6 4 83 1 1 4 367 235 461 257 79 351
+375 6 4 83 1 1 2 52 7 150 243 99 404
+376 6 4 83 1 1 2 243 99 404 87 19 294
+377 6 5 83 1 2 3 -4 144 111 134 398 365 388
+378 6 5 83 1 2 3 -4 398 365 388 288 255 278
+379 6 5 83 1 2 1 -2 145 112 135 399 366 389
+380 6 5 83 1 2 1 -2 399 366 389 289 256 279
+381 6 5 83 1 2 4 -2 165 131 176 419 385 430
+382 6 5 83 1 2 4 -2 419 385 430 309 275 320
+383 6 5 83 1 2 1 -2 166 116 154 420 370 408
+384 6 5 83 1 2 1 -2 420 370 408 310 260 298
+385 6 5 83 1 2 3 -4 167 115 153 421 369 407
+386 6 5 83 1 2 3 -4 421 369 407 311 259 297
+387 6 4 83 1 1 3 179 111 142 433 365 396
+388 6 4 83 1 1 3 433 365 396 323 255 286
+389 6 4 83 1 1 1 180 112 143 434 366 397
+390 6 4 83 1 1 1 434 366 397 324 256 287
+391 6 4 83 1 1 1 48 49 205 238 239 459
+392 6 4 83 1 1 1 238 239 459 82 83 349
+393 6 4 83 1 1 3 35 36 204 225 226 458
+394 6 4 83 1 1 3 225 226 458 69 70 348
+395 6 4 83 1 1 2 133 31 32 387 221 222
+396 6 4 83 1 1 2 387 221 222 277 65 66
+397 6 4 83 1 1 4 132 44 45 386 234 235
+398 6 4 83 1 1 4 386 234 235 276 78 79
+399 6 4 83 1 1 4 169 45 113 423 235 367
+400 6 4 83 1 1 4 423 235 367 313 79 257
+401 6 4 83 1 1 2 168 32 114 422 222 368
+402 6 4 83 1 1 2 422 222 368 312 66 258
+403 6 5 83 1 2 2 -4 176 124 165 430 378 419
+404 6 5 83 1 2 2 -4 430 378 419 320 268 309
+405 6 4 83 1 1 3 158 117 142 412 371 396
+406 6 4 83 1 1 3 412 371 396 302 261 286
+407 6 4 83 1 1 1 160 118 143 414 372 397
+408 6 4 83 1 1 1 414 372 397 304 262 287
+409 6 5 83 1 2 2 -4 170 121 136 424 375 390
+410 6 5 83 1 2 2 -4 424 375 390 314 265 280
+411 6 4 83 1 1 2 170 12 58 424 102 245
+412 6 4 83 1 1 2 424 102 245 314 22 89
+413 6 4 83 1 1 2 196 12 136 450 102 390
+414 6 4 83 1 1 2 450 102 390 340 22 280
+415 6 5 83 1 2 4 -2 165 109 131 419 363 385
+416 6 5 83 1 2 4 -2 419 363 385 309 253 275
+417 6 4 83 1 1 4 131 109 152 385 363 406
+418 6 4 83 1 1 4 385 363 406 275 253 296
+419 6 4 83 1 1 2 156 123 150 410 377 404
+420 6 4 83 1 1 2 410 377 404 300 267 294
+421 6 4 83 1 1 3 142 111 158 396 365 412
+422 6 4 83 1 1 3 396 365 412 286 255 302
+423 6 4 83 1 1 1 143 112 160 397 366 414
+424 6 4 83 1 1 1 397 366 414 287 256 304
+425 6 5 83 1 2 4 -2 181 6 131 435 100 385
+426 6 5 83 1 2 4 -2 435 100 385 325 20 275
+427 6 5 83 1 2 3 -4 55 10 144 248 104 398
+428 6 5 83 1 2 3 -4 248 104 398 92 24 288
+429 6 5 83 1 2 1 -2 53 8 145 242 98 399
+430 6 5 83 1 2 1 -2 242 98 399 86 18 289
+431 6 5 83 1 2 2 -4 150 124 176 404 378 430
+432 6 5 83 1 2 2 -4 404 378 430 294 268 320
+433 6 4 83 1 1 1 174 50 203 428 240 457
+434 6 4 83 1 1 1 428 240 457 318 84 347
+435 6 4 83 1 1 3 173 37 202 427 227 456
+436 6 4 83 1 1 3 427 227 456 317 71 346
+437 6 4 83 1 1 2 57 196 141 246 450 395
+438 6 4 83 1 1 2 246 450 395 90 340 285
+439 6 4 83 1 1 3 142 117 173 396 371 427
+440 6 4 83 1 1 3 396 371 427 286 261 317
+441 6 4 83 1 1 1 143 118 174 397 372 428
+442 6 4 83 1 1 1 397 372 428 287 262 318
+443 6 5 83 1 2 1 -2 154 30 166 408 220 420
+444 6 5 83 1 2 1 -2 408 220 420 298 64 310
+445 6 5 83 1 2 3 -4 153 43 167 407 233 421
+446 6 5 83 1 2 3 -4 407 233 421 297 77 311
+447 6 4 83 1 1 2 136 107 151 390 361 405
+448 6 4 83 1 1 2 390 361 405 280 251 295
+449 6 5 83 1 2 2 -4 58 9 137 245 101 391
+450 6 5 83 1 2 2 -4 245 101 391 89 21 281
+451 6 4 83 1 1 2 150 123 197 404 377 451
+452 6 4 83 1 1 2 404 377 451 294 267 341
+453 6 4 83 1 1 2 151 141 196 405 395 450
+454 6 4 83 1 1 2 405 395 450 295 285 340
+455 6 5 83 1 2 4 -3 161 110 127 415 364 381
+456 6 5 83 1 2 4 -3 415 364 381 305 254 271
+457 6 5 83 1 2 1 -2 162 108 128 416 362 382
+458 6 5 83 1 2 1 -2 416 362 382 306 252 272
+459 6 5 83 1 2 2 -1 145 135 191 399 389 445
+460 6 5 83 1 2 2 -1 399 389 445 289 279 335
+461 6 5 83 1 2 4 -3 144 134 190 398 388 444
+462 6 5 83 1 2 4 -3 398 388 444 288 278 334
+463 6 4 83 1 1 3 125 40 194 379 230 448
+464 6 4 83 1 1 3 379 230 448 269 74 338
+465 6 4 83 1 1 1 126 27 195 380 217 449
+466 6 4 83 1 1 1 380 217 449 270 61 339
+467 6 4 83 1 1 1 174 49 50 428 239 240
+468 6 4 83 1 1 1 428 239 240 318 83 84
+469 6 4 83 1 1 3 173 36 37 427 226 227
+470 6 4 83 1 1 3 427 226 227 317 70 71
+471 6 4 83 1 1 1 203 1 25 457 93 215
+472 6 4 83 1 1 1 457 93 215 347 13 59
+473 6 4 83 1 1 3 202 3 38 456 95 228
+474 6 4 83 1 1 3 456 95 228 346 15 72
+475 6 4 83 1 1 2 197 123 183 451 377 437
+476 6 4 83 1 1 2 451 377 437 341 267 327
+477 6 4 83 1 1 2 196 136 151 450 390 405
+478 6 4 83 1 1 2 450 390 405 340 280 295
+479 6 5 83 1 2 2 -4 170 58 137 424 245 391
+480 6 5 83 1 2 2 -4 424 245 391 314 89 281
+481 6 4 83 1 1 3 142 105 179 396 359 433
+482 6 4 83 1 1 3 396 359 433 286 249 323
+483 6 4 83 1 1 1 143 106 180 397 360 434
+484 6 4 83 1 1 1 397 360 434 287 250 324
+485 6 5 83 1 2 4 -2 140 6 181 394 100 435
+486 6 5 83 1 2 4 -2 394 100 435 284 20 325
+487 6 4 83 1 1 3 157 10 56 411 104 247
+488 6 4 83 1 1 3 411 104 247 301 24 91
+489 6 5 83 1 2 1 -4 159 8 54 413 98 241
+490 6 5 83 1 2 1 -4 413 98 241 303 18 85
+491 6 5 83 1 2 1 -2 128 116 162 382 370 416
+492 6 5 83 1 2 1 -2 382 370 416 272 260 306
+493 6 5 83 1 2 4 -3 127 115 161 381 369 415
+494 6 5 83 1 2 4 -3 381 369 415 271 259 305
+495 6 5 83 1 2 4 -3 134 110 200 388 364 454
+496 6 5 83 1 2 4 -3 388 364 454 278 254 344
+497 6 5 83 1 2 2 -1 135 108 201 389 362 455
+498 6 5 83 1 2 2 -1 389 362 455 279 252 345
+499 6 4 83 1 1 3 199 40 125 453 230 379
+500 6 4 83 1 1 3 453 230 379 343 74 269
+501 6 4 83 1 1 1 198 27 126 452 217 380
+502 6 4 83 1 1 1 452 217 380 342 61 270
+503 6 5 83 1 2 3 -4 134 111 184 388 365 438
+504 6 5 83 1 2 3 -4 388 365 438 278 255 328
+505 6 5 83 1 2 1 -2 135 112 185 389 366 439
+506 6 5 83 1 2 1 -2 389 366 439 279 256 329
+507 6 4 83 1 1 1 195 29 154 449 219 408
+508 6 4 83 1 1 1 449 219 408 339 63 298
+509 6 4 83 1 1 3 194 42 153 448 232 407
+510 6 4 83 1 1 3 448 232 407 338 76 297
+511 6 4 83 1 1 1 164 116 128 418 370 382
+512 6 4 83 1 1 1 418 370 382 308 260 272
+513 6 5 83 1 2 3 -4 163 115 127 417 369 381
+514 6 5 83 1 2 3 -4 417 369 381 307 259 271
+515 6 4 83 1 1 1 50 1 203 240 93 457
+516 6 4 83 1 1 1 240 93 457 84 13 347
+517 6 4 83 1 1 3 37 3 202 227 95 456
+518 6 4 83 1 1 3 227 95 456 71 15 346
+519 6 5 83 1 2 2 -4 137 121 170 391 375 424
+520 6 5 83 1 2 2 -4 391 375 424 281 265 314
+521 6 4 83 1 1 4 152 109 182 406 363 436
+522 6 4 83 1 1 4 406 363 436 296 253 326
+523 6 4 83 1 1 3 173 119 142 427 373 396
+524 6 4 83 1 1 3 427 373 396 317 263 286
+525 6 4 83 1 1 1 174 120 143 428 374 397
+526 6 4 83 1 1 1 428 374 397 318 264 287
+527 6 5 83 1 2 3 -4 163 127 179 417 381 433
+528 6 5 83 1 2 3 -4 417 381 433 307 271 323
+529 6 4 83 1 1 1 164 128 180 418 382 434
+530 6 4 83 1 1 1 418 382 434 308 272 324
+531 6 5 83 1 2 2 -3 148 57 214 402 246 468
+532 6 5 83 1 2 2 -3 402 246 468 292 90 358
+533 6 4 83 1 1 4 149 51 213 403 244 467
+534 6 4 83 1 1 4 403 244 467 293 88 357
+535 6 4 83 1 1 4 152 140 181 406 394 435
+536 6 4 83 1 1 4 406 394 435 296 284 325
+537 6 5 83 1 2 1 -2 154 29 30 408 219 220
+538 6 5 83 1 2 1 -2 408 219 220 298 63 64
+539 6 5 83 1 2 3 -4 153 42 43 407 232 233
+540 6 5 83 1 2 3 -4 407 232 233 297 76 77
+541 6 4 83 1 1 4 181 131 152 435 385 406
+542 6 4 83 1 1 4 435 385 406 325 275 296
+543 6 5 83 1 2 2 -1 166 133 162 420 387 416
+544 6 5 83 1 2 2 -1 420 387 416 310 277 306
+545 6 5 83 1 2 4 -3 167 132 161 421 386 415
+546 6 5 83 1 2 4 -3 421 386 415 311 276 305
+547 6 4 83 1 1 3 179 105 163 433 359 417
+548 6 4 83 1 1 3 433 359 417 323 249 307
+549 6 4 83 1 1 1 180 106 164 434 360 418
+550 6 4 83 1 1 1 434 360 418 324 250 308
+551 6 4 83 1 1 3 188 119 139 442 373 393
+552 6 4 83 1 1 3 442 373 393 332 263 283
+553 6 4 83 1 1 1 189 120 138 443 374 392
+554 6 4 83 1 1 1 443 374 392 333 264 282
+555 6 4 83 1 1 3 194 40 41 448 230 231
+556 6 4 83 1 1 3 448 230 231 338 74 75
+557 6 4 83 1 1 1 195 27 28 449 217 218
+558 6 4 83 1 1 1 449 217 218 339 61 62
+559 6 6 83 1 3 4 -2 -3 155 9 55 409 101 248
+560 6 6 83 1 3 4 -2 -3 409 101 248 299 21 92
+561 6 5 83 1 2 2 -1 156 7 53 410 99 242
+562 6 5 83 1 2 2 -1 410 99 242 300 19 86
+563 6 5 83 1 2 2 -3 206 32 33 460 222 223
+564 6 5 83 1 2 2 -3 460 222 223 350 66 67
+565 6 4 83 1 1 4 207 45 46 461 235 236
+566 6 4 83 1 1 4 461 235 236 351 79 80
+567 6 4 83 1 1 2 183 107 197 437 361 451
+568 6 4 83 1 1 2 437 361 451 327 251 341
+569 6 4 83 1 1 2 130 114 151 384 368 405
+570 6 4 83 1 1 2 384 368 405 274 258 295
+571 6 5 83 1 2 1 -2 162 116 166 416 370 420
+572 6 5 83 1 2 1 -2 416 370 420 306 260 310
+573 6 5 83 1 2 4 -3 161 115 167 415 369 421
+574 6 5 83 1 2 4 -3 415 369 421 305 259 311
+575 6 4 83 1 1 3 202 119 173 456 373 427
+576 6 4 83 1 1 3 456 373 427 346 263 317
+577 6 4 83 1 1 1 203 120 174 457 374 428
+578 6 4 83 1 1 1 457 374 428 347 264 318
+579 6 4 83 1 1 4 129 113 152 383 367 406
+580 6 4 83 1 1 4 383 367 406 273 257 296
+581 6 4 83 1 1 2 151 107 183 405 361 437
+582 6 4 83 1 1 2 405 361 437 295 251 327
+583 6 4 83 1 1 2 151 114 141 405 368 395
+584 6 4 83 1 1 2 405 368 395 295 258 285
+585 6 4 83 1 1 1 172 26 138 426 216 392
+586 6 4 83 1 1 1 426 216 392 316 60 282
+587 6 4 83 1 1 3 171 39 139 425 229 393
+588 6 4 83 1 1 3 425 229 393 315 73 283
+589 6 4 83 1 1 3 157 147 204 411 401 458
+590 6 4 83 1 1 3 411 401 458 301 291 348
+591 6 5 83 1 2 1 -4 159 146 205 413 400 459
+592 6 5 83 1 2 1 -4 413 400 459 303 290 349
+593 6 4 83 1 1 3 139 119 171 393 373 425
+594 6 4 83 1 1 3 393 373 425 283 263 315
+595 6 4 83 1 1 1 138 120 172 392 374 426
+596 6 4 83 1 1 1 392 374 426 282 264 316
+597 6 5 83 1 2 4 -3 190 55 144 444 248 398
+598 6 5 83 1 2 4 -3 444 248 398 334 92 288
+599 6 5 83 1 2 2 -1 191 53 145 445 242 399
+600 6 5 83 1 2 2 -1 445 242 399 335 86 289
+601 6 5 83 1 2 2 -1 166 31 133 420 221 387
+602 6 5 83 1 2 2 -1 420 221 387 310 65 277
+603 6 5 83 1 2 4 -3 167 44 132 421 234 386
+604 6 5 83 1 2 4 -3 421 234 386 311 78 276
+605 6 5 83 1 2 4 -2 137 9 187 391 101 441
+606 6 5 83 1 2 4 -2 391 101 441 281 21 331
+607 6 5 83 1 2 4 -1 149 46 47 403 236 237
+608 6 5 83 1 2 4 -1 403 236 237 293 80 81
+609 6 5 83 1 2 3 -2 148 33 34 402 223 224
+610 6 5 83 1 2 3 -2 402 223 224 292 67 68
+611 6 4 83 1 1 3 147 34 35 401 224 225
+612 6 4 83 1 1 3 401 224 225 291 68 69
+613 6 5 83 1 2 1 -4 146 47 48 400 237 238
+614 6 5 83 1 2 1 -4 400 237 238 290 81 82
+615 6 4 83 1 1 4 213 51 140 467 244 394
+616 6 4 83 1 1 4 467 244 394 357 88 284
+617 6 4 83 1 1 2 214 57 141 468 246 395
+618 6 4 83 1 1 2 468 246 395 358 90 285
+619 6 5 83 1 2 3 -4 158 111 144 412 365 398
+620 6 5 83 1 2 3 -4 412 365 398 302 255 288
+621 6 5 83 1 2 1 -2 160 112 145 414 366 399
+622 6 5 83 1 2 1 -2 414 366 399 304 256 289
+623 6 4 83 1 1 3 163 105 177 417 359 431
+624 6 4 83 1 1 3 417 359 431 307 249 321
+625 6 4 83 1 1 1 164 106 178 418 360 432
+626 6 4 83 1 1 1 418 360 432 308 250 322
+627 6 4 83 1 1 4 169 113 129 423 367 383
+628 6 4 83 1 1 4 423 367 383 313 257 273
+629 6 4 83 1 1 2 168 114 130 422 368 384
+630 6 4 83 1 1 2 422 368 384 312 258 274
+631 6 5 83 1 2 2 -1 193 108 162 447 362 416
+632 6 5 83 1 2 2 -1 447 362 416 337 252 306
+633 6 5 83 1 2 4 -3 192 110 161 446 364 415
+634 6 5 83 1 2 4 -3 446 364 415 336 254 305
+635 6 4 83 1 1 1 172 25 26 426 215 216
+636 6 4 83 1 1 1 426 215 216 316 59 60
+637 6 4 83 1 1 3 171 38 39 425 228 229
+638 6 4 83 1 1 3 425 228 229 315 72 73
+639 6 4 83 1 1 3 188 105 142 442 359 396
+640 6 4 83 1 1 3 442 359 396 332 249 286
+641 6 4 83 1 1 1 189 106 143 443 360 397
+642 6 4 83 1 1 1 443 360 397 333 250 287
+643 6 5 83 1 2 2 -4 165 124 175 419 378 429
+644 6 5 83 1 2 2 -4 419 378 429 309 268 319
+645 6 4 83 1 1 4 152 113 140 406 367 394
+646 6 4 83 1 1 4 406 367 394 296 257 284
+647 6 5 83 1 2 4 -2 212 121 137 466 375 391
+648 6 5 83 1 2 4 -2 466 375 391 356 265 281
+649 6 5 83 1 2 3 -4 144 10 208 398 104 462
+650 6 5 83 1 2 3 -4 398 104 462 288 24 352
+651 6 5 83 1 2 1 -2 145 8 209 399 98 463
+652 6 5 83 1 2 1 -2 399 98 463 289 18 353
+653 6 5 83 1 2 2 -4 175 121 165 429 375 419
+654 6 5 83 1 2 2 -4 429 375 419 319 265 309
+655 6 4 83 1 1 2 197 124 150 451 378 404
+656 6 4 83 1 1 2 451 378 404 341 268 294
+657 6 4 83 1 1 3 177 125 163 431 379 417
+658 6 4 83 1 1 3 431 379 417 321 269 307
+659 6 4 83 1 1 1 178 126 164 432 380 418
+660 6 4 83 1 1 1 432 380 418 322 270 308
+661 6 4 83 1 1 4 182 129 152 436 383 406
+662 6 4 83 1 1 4 436 383 406 326 273 296
+663 6 5 83 1 2 4 -3 167 43 44 421 233 234
+664 6 5 83 1 2 4 -3 421 233 234 311 77 78
+665 6 5 83 1 2 2 -1 166 30 31 420 220 221
+666 6 5 83 1 2 2 -1 420 220 221 310 64 65
+667 6 4 83 1 1 3 142 119 188 396 373 442
+668 6 4 83 1 1 3 396 373 442 286 263 332
+669 6 4 83 1 1 1 143 120 189 397 374 443
+670 6 4 83 1 1 1 397 374 443 287 264 333
+671 6 4 83 1 1 3 139 39 199 393 229 453
+672 6 4 83 1 1 3 393 229 453 283 73 343
+673 6 4 83 1 1 1 138 26 198 392 216 452
+674 6 4 83 1 1 1 392 216 452 282 60 342
+675 6 4 83 1 1 3 177 105 188 431 359 442
+676 6 4 83 1 1 3 431 359 442 321 249 332
+677 6 4 83 1 1 1 178 106 189 432 360 443
+678 6 4 83 1 1 1 432 360 443 322 250 333
+679 6 4 83 1 1 1 203 25 172 457 215 426
+680 6 4 83 1 1 1 457 215 426 347 59 316
+681 6 4 83 1 1 3 202 38 171 456 228 425
+682 6 4 83 1 1 3 456 228 425 346 72 315
+683 6 4 83 1 1 3 208 10 157 462 104 411
+684 6 4 83 1 1 3 462 104 411 352 24 301
+685 6 4 83 1 1 1 209 8 159 463 98 413
+686 6 4 83 1 1 1 463 98 413 353 18 303
+687 6 4 83 1 1 3 199 39 40 453 229 230
+688 6 4 83 1 1 3 453 229 230 343 73 74
+689 6 4 83 1 1 1 198 26 27 452 216 217
+690 6 4 83 1 1 1 452 216 217 342 60 61
+691 6 5 83 1 2 4 -2 186 137 187 440 391 441
+692 6 5 83 1 2 4 -2 440 391 441 330 281 331
+693 6 5 83 1 2 2 -1 162 133 193 416 387 447
+694 6 5 83 1 2 2 -1 416 387 447 306 277 337
+695 6 4 83 1 1 4 161 132 192 415 386 446
+696 6 4 83 1 1 4 415 386 446 305 276 336
+697 6 4 83 1 1 4 155 122 187 409 376 441
+698 6 4 83 1 1 4 409 376 441 299 266 331
+699 6 5 83 1 2 3 -2 148 34 147 402 224 401
+700 6 5 83 1 2 3 -2 402 224 401 292 68 291
+701 6 5 83 1 2 4 -1 149 47 146 403 237 400
+702 6 5 83 1 2 4 -1 403 237 400 293 81 290
+703 6 4 83 1 1 3 153 125 194 407 379 448
+704 6 4 83 1 1 3 407 379 448 297 269 338
+705 6 4 83 1 1 1 154 126 195 408 380 449
+706 6 4 83 1 1 1 408 380 449 298 270 339
+707 6 4 83 1 1 3 199 125 177 453 379 431
+708 6 4 83 1 1 3 453 379 431 343 269 321
+709 6 4 83 1 1 1 198 126 178 452 380 432
+710 6 4 83 1 1 1 452 380 432 342 270 322
+711 6 4 83 1 1 2 183 130 151 437 384 405
+712 6 4 83 1 1 2 437 384 405 327 274 295
+713 6 5 83 1 2 4 -2 187 9 155 441 101 409
+714 6 5 83 1 2 4 -2 441 101 409 331 21 299
+715 6 5 83 1 2 4 -3 155 55 190 409 248 444
+716 6 5 83 1 2 4 -3 409 248 444 299 92 334
+717 6 5 83 1 2 2 -1 156 53 191 410 242 445
+718 6 5 83 1 2 2 -1 410 242 445 300 86 335
+719 6 4 83 1 1 4 187 122 186 441 376 440
+720 6 4 83 1 1 4 441 376 440 331 266 330
+721 6 4 83 1 1 4 200 122 155 454 376 409
+722 6 4 83 1 1 4 454 376 409 344 266 299
+723 6 4 83 1 1 2 201 123 156 455 377 410
+724 6 4 83 1 1 2 455 377 410 345 267 300
+725 6 5 83 1 2 3 -4 158 144 208 412 398 462
+726 6 5 83 1 2 3 -4 412 398 462 302 288 352
+727 6 5 83 1 2 1 -2 160 145 209 414 399 463
+728 6 5 83 1 2 1 -2 414 399 463 304 289 353
+729 6 4 83 1 1 3 188 139 177 442 393 431
+730 6 4 83 1 1 3 442 393 431 332 283 321
+731 6 4 83 1 1 1 189 138 178 443 392 432
+732 6 4 83 1 1 1 443 392 432 333 282 322
+733 6 4 83 1 1 2 168 130 193 422 384 447
+734 6 4 83 1 1 2 422 384 447 312 274 337
+735 6 4 83 1 1 4 169 129 192 423 383 446
+736 6 4 83 1 1 4 423 383 446 313 273 336
+737 6 5 83 1 2 3 -4 184 111 179 438 365 433
+738 6 5 83 1 2 3 -4 438 365 433 328 255 323
+739 6 4 83 1 1 1 185 112 180 439 366 434
+740 6 4 83 1 1 1 439 366 434 329 256 324
+741 6 4 83 1 1 4 140 113 207 394 367 461
+742 6 4 83 1 1 4 394 367 461 284 257 351
+743 6 4 83 1 1 2 141 114 206 395 368 460
+744 6 4 83 1 1 2 395 368 460 285 258 350
+745 6 4 83 1 1 4 192 129 211 446 383 465
+746 6 4 83 1 1 4 446 383 465 336 273 355
+747 6 4 83 1 1 2 193 130 210 447 384 464
+748 6 4 83 1 1 2 447 384 464 337 274 354
+749 6 4 83 1 1 4 207 46 149 461 236 403
+750 6 4 83 1 1 4 461 236 403 351 80 293
+751 6 5 83 1 2 2 -3 206 33 148 460 223 402
+752 6 5 83 1 2 2 -3 460 223 402 350 67 292
+753 6 4 83 1 1 3 157 117 158 411 371 412
+754 6 4 83 1 1 3 411 371 412 301 261 302
+755 6 4 83 1 1 1 159 118 160 413 372 414
+756 6 4 83 1 1 1 413 372 414 303 262 304
+757 6 5 83 1 2 4 -2 212 109 165 466 363 419
+758 6 5 83 1 2 4 -2 466 363 419 356 253 309
+759 6 4 83 1 1 4 207 149 213 461 403 467
+760 6 4 83 1 1 4 461 403 467 351 293 357
+761 6 5 83 1 2 2 -3 206 148 214 460 402 468
+762 6 5 83 1 2 2 -3 460 402 468 350 292 358
+763 6 5 83 1 2 4 -3 211 110 192 465 364 446
+764 6 5 83 1 2 4 -3 465 364 446 355 254 336
+765 6 5 83 1 2 2 -1 210 108 193 464 362 447
+766 6 5 83 1 2 2 -1 464 362 447 354 252 337
+767 6 4 83 1 1 4 182 109 186 436 363 440
+768 6 4 83 1 1 4 436 363 440 326 253 330
+769 6 5 83 1 2 4 -2 165 121 212 419 375 466
+770 6 5 83 1 2 4 -2 419 375 466 309 265 356
+771 6 4 83 1 1 2 175 124 197 429 378 451
+772 6 4 83 1 1 2 429 378 451 319 268 341
+773 6 4 83 1 1 2 210 123 201 464 377 455
+774 6 4 83 1 1 2 464 377 455 354 267 345
+775 6 4 83 1 1 4 211 122 200 465 376 454
+776 6 4 83 1 1 4 465 376 454 355 266 344
+777 6 4 83 1 1 3 147 35 204 401 225 458
+778 6 4 83 1 1 3 401 225 458 291 69 348
+779 6 5 83 1 2 1 -4 146 48 205 400 238 459
+780 6 5 83 1 2 1 -4 400 238 459 290 82 349
+781 6 4 83 1 1 3 171 119 202 425 373 456
+782 6 4 83 1 1 3 425 373 456 315 263 346
+783 6 4 83 1 1 1 172 120 203 426 374 457
+784 6 4 83 1 1 1 426 374 457 316 264 347
+785 6 4 83 1 1 3 208 157 158 462 411 412
+786 6 4 83 1 1 3 462 411 412 352 301 302
+787 6 4 83 1 1 1 209 159 160 463 413 414
+788 6 4 83 1 1 1 463 413 414 353 303 304
+789 6 4 83 1 1 4 213 140 207 467 394 461
+790 6 4 83 1 1 4 467 394 461 357 284 351
+791 6 4 83 1 1 2 214 141 206 468 395 460
+792 6 4 83 1 1 2 468 395 460 358 285 350
+793 6 5 83 1 2 2 -1 201 108 210 455 362 464
+794 6 5 83 1 2 2 -1 455 362 464 345 252 354
+795 6 5 83 1 2 4 -3 200 110 211 454 364 465
+796 6 5 83 1 2 4 -3 454 364 465 344 254 355
+797 6 5 83 1 2 4 -3 155 134 200 409 388 454
+798 6 5 83 1 2 4 -3 409 388 454 299 278 344
+799 6 5 83 1 2 2 -1 156 135 201 410 389 455
+800 6 5 83 1 2 2 -1 410 389 455 300 279 345
+801 6 4 83 1 1 2 193 133 168 447 387 422
+802 6 4 83 1 1 2 447 387 422 337 277 312
+803 6 4 83 1 1 4 192 132 169 446 386 423
+804 6 4 83 1 1 4 446 386 423 336 276 313
+805 6 5 83 1 2 4 -3 190 134 155 444 388 409
+806 6 5 83 1 2 4 -3 444 388 409 334 278 299
+807 6 5 83 1 2 2 -1 191 135 156 445 389 410
+808 6 5 83 1 2 2 -1 445 389 410 335 279 300
+809 6 4 83 1 1 4 186 122 182 440 376 436
+810 6 4 83 1 1 4 440 376 436 330 266 326
+811 6 5 83 1 2 4 -2 212 137 186 466 391 440
+812 6 5 83 1 2 4 -2 466 391 440 356 281 330
+813 6 4 83 1 1 1 178 138 198 432 392 452
+814 6 4 83 1 1 1 432 392 452 322 282 342
+815 6 4 83 1 1 3 177 139 199 431 393 453
+816 6 4 83 1 1 3 431 393 453 321 283 343
+817 6 4 83 1 1 2 197 107 175 451 361 429
+818 6 4 83 1 1 2 451 361 429 341 251 319
+819 6 4 83 1 1 4 186 109 212 440 363 466
+820 6 4 83 1 1 4 440 363 466 330 253 356
+821 6 4 83 1 1 4 182 122 211 436 376 465
+822 6 4 83 1 1 4 436 376 465 326 266 355
+823 6 4 83 1 1 2 183 123 210 437 377 464
+824 6 4 83 1 1 2 437 377 464 327 267 354
+825 6 5 83 1 2 3 -4 179 127 184 433 381 438
+826 6 5 83 1 2 3 -4 433 381 438 323 271 328
+827 6 4 83 1 1 1 180 128 185 434 382 439
+828 6 4 83 1 1 1 434 382 439 324 272 329
+829 6 4 83 1 1 4 211 129 182 465 383 436
+830 6 4 83 1 1 4 465 383 436 355 273 326
+831 6 4 83 1 1 2 210 130 183 464 384 437
+832 6 4 83 1 1 2 464 384 437 354 274 327
+833 6 4 83 1 1 3 204 117 157 458 371 411
+834 6 4 83 1 1 3 458 371 411 348 261 301
+835 6 4 83 1 1 1 205 118 159 459 372 413
+836 6 4 83 1 1 1 459 372 413 349 262 303
+$EndElements
diff --git a/dG3D/benchmarks/DG_PRI6_resetBC/twoHole.py b/dG3D/benchmarks/DG_PRI6_resetBC/twoHole.py
new file mode 100644
index 0000000000000000000000000000000000000000..bef45c3ef1a62a46b809704c5fd1db4ab39840ce
--- /dev/null
+++ b/dG3D/benchmarks/DG_PRI6_resetBC/twoHole.py
@@ -0,0 +1,100 @@
+#coding-Utf-8-*-
+from gmshpy import *
+from dG3Dpy import*
+
+#script to launch beam problem with a python script
+
+
+lawnum1 = 1 # unique number of law
+rho   = 7850
+young = 28.9e9
+nu    = 0.3 
+sy0   = 150.e6
+h     = young/50.
+
+
+# geometry
+meshfile="twoHole.msh" # name of mesh file
+
+# solver
+sol = 2  # Gmm=0 (default) Taucs=1 PETsc=2
+soltype = 1 # StaticLinear=0 (default) StaticNonLinear=1
+nstep = 25   # number of step (used only if soltype=1)
+ftime =1.   # Final time (used only if soltype=1)
+tol=1.e-6 # relative tolerance for NR scheme (used only if soltype=1)
+nstepArch=1 # Number of step between 2 archiving (used only if soltype=1)
+
+
+
+harden = LinearExponentialJ2IsotropicHardening(1, sy0, h, 0., 10.)
+law1   = J2LinearDG3DMaterialLaw(lawnum1,rho,young,nu,harden)
+
+
+# creation of ElasticField
+beta1 = 1e2
+fullDG = True;
+averageStrainBased = False
+
+myfield1 = dG3DDomain(1000,83,0,lawnum1,fullDG,3)
+myfield1.stabilityParameters(beta1)
+myfield1.averageStrainBased(averageStrainBased)
+
+
+# creation of Solver
+mysolver = nonLinearMechSolver(1000)
+mysolver.loadModel(meshfile)
+mysolver.addDomain(myfield1)
+mysolver.addMaterialLaw(law1)
+
+mysolver.Scheme(soltype)
+mysolver.Solver(sol)
+mysolver.snlData(nstep,ftime,tol)
+mysolver.stepBetweenArchiving(nstepArch)
+mysolver.options("-ksp_type preonly -pc_type lu -pc_factor_mat_solver_package mumps")
+
+# BC
+#mysolver.displacementBC("Volume",83,2,0.)
+mysolver.displacementBC("Face",84,0,0.)
+mysolver.displacementBC("Face",84,1,0.)
+mysolver.displacementBC("Face",84,2,0.)
+mysolver.displacementBC("Face",85,0,0.)
+mysolver.displacementBC("Face",85,1,5e-4)
+mysolver.displacementBC("Face",85,2,0.)
+
+
+mysolver.internalPointBuildView("svm",IPField.SVM, 1, 1)
+mysolver.internalPointBuildView("sig_xx",IPField.SIG_XX, 1, 1)
+mysolver.internalPointBuildView("sig_yy",IPField.SIG_YY, 1, 1)
+mysolver.internalPointBuildView("sig_zz",IPField.SIG_ZZ, 1, 1)
+mysolver.internalPointBuildView("sig_xy",IPField.SIG_XY, 1, 1)
+mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, 1)
+mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, 1)
+mysolver.internalPointBuildView("epl",IPField.PLASTICSTRAIN, 1, 1)
+mysolver.internalPointBuildView("Damage",IPField.DAMAGE, 1, 1)
+
+mysolver.archivingForceOnPhysicalGroup("Face", 84, 1)
+mysolver.archivingNodeDisplacement(19,1,1)
+
+t1 = mysolver.solve()
+
+check = TestCheck()
+check.equal(-2.839032e+03,mysolver.getArchivedForceOnPhysicalGroup("Face", 84, 1),1.e-4)
+
+nstep = 5   # number of step (used only if soltype=1)
+ftime =1.   # Final time (used only if soltype=1)
+tol=1.e-6 # relative tolerance for NR scheme (used only if soltype=1)
+mysolver.snlData(nstep,ftime,tol)
+
+fct = LinearFunctionTime(0,5e-4,ftime,0.)
+mysolver.resetBoundaryConditions();
+
+mysolver.displacementBC("Face",84,0,0.)
+mysolver.displacementBC("Face",84,1,0.)
+mysolver.displacementBC("Face",84,2,0.)
+mysolver.displacementBC("Face",85,0,0.)
+mysolver.displacementBC("Face",85,1,fct)
+mysolver.displacementBC("Face",85,2,0.)
+mysolver.solve()
+
+check = TestCheck()
+check.equal(2.570988e+03,mysolver.getArchivedForceOnPhysicalGroup("Face", 84, 1),1.e-4)
diff --git a/dG3D/benchmarks/TransverseAnisotropicCZM/cubeTransverseAnisotropy.py b/dG3D/benchmarks/TransverseAnisotropicCZM/cubeTransverseAnisotropy.py
index 6c95e170a64d69662eef7133f4fd5adcaf0187bb..6df3acac30875e86efc9bd985f78f0357c3a7498 100644
--- a/dG3D/benchmarks/TransverseAnisotropicCZM/cubeTransverseAnisotropy.py
+++ b/dG3D/benchmarks/TransverseAnisotropicCZM/cubeTransverseAnisotropy.py
@@ -108,6 +108,6 @@ mysolver.archivingForceOnPhysicalGroup("Face", 5678, 2)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(2.613053e-01,mysolver.getArchivedForceOnPhysicalGroup("Face", 5678, 2),1.e-4)
+check.equal(2.615077e-01,mysolver.getArchivedForceOnPhysicalGroup("Face", 5678, 2),1.e-4)
 
 
diff --git a/dG3D/benchmarks/compRVE/RVE.py b/dG3D/benchmarks/compRVE/RVE.py
index 8820ef176b8507c5b27c6805f629afc32271aa00..83690a53f27f728a4e75d5a266c64c58c11dc7b5 100644
--- a/dG3D/benchmarks/compRVE/RVE.py
+++ b/dG3D/benchmarks/compRVE/RVE.py
@@ -14,21 +14,21 @@ meshfile="comp.msh" # name of mesh file
 
 lawnonlocal = 2 # unique number of law
 rhoCF   = 1750.
-youngCF    = 40.e9
-youngACF   = 230.e9;
+youngCF    = 40.e3
+youngACF   = 230.e3;
 nuCF       = 0.2 #
 nu_minorCF = 0.256*youngCF/youngACF 
-GACF       = 24.e9
+GACF       = 24.e3
 Ax       = 0.; #direction of anisotropy
 Ay       = 0.;
 Az       = 1.;
 
 lawlinear = 3 # unique number of law
 rhoEP   = 1000.
-youngEP = 3.2e9
+youngEP = 3.2e3
 nuEP    = 0.3
-sy0EP   = 25.e6
-hEP     = 7.1e8  #7.1e9
+sy0EP   = 25.
+hEP     = 7.1e2  #7.1e9
 hexp    = 60.
 
 # solver
@@ -42,6 +42,8 @@ fulldg = 0
 beta1 = 30.
 eqRatio = 1.e6
 
+BC="MIXED"
+number=1
 #  compute solution and BC (given directly to the solver
 # creation of law
 # creation of law
@@ -83,35 +85,39 @@ mysolver.snlData(nstep,ftime,tol,1.e-4)
 #mysolver.lineSearch(bool(1))
 #mysolver.snlManageTimeStep(16, 3, 2, 10)
 mysolver.stepBetweenArchiving(nstepArch)
-#mysolver.options("-petsc_direct")
-mysolver.setSystemType(1)
+
+
+if BC=="KUBC":
+  mysolver.setSystemType(1)
+elif BC=="SUBC":
+  mysolver.setSystemType(2)
+elif BC=="PERIODIC":
+  mysolver.setSystemType(1)
+elif BC=="MIXED":
+  mysolver.setSystemType(1)
+
 mysolver.stiffnessModification(bool(1))
 mysolver.iterativeProcedure(bool(1))
 mysolver.setMessageView(bool(1))
 
-
-mysolver.setPeriodicity(1.e-5,0,0,"x")
-mysolver.setPeriodicity(0,1.e-5,0,"y")
-mysolver.setPeriodicity(0,0,1.e-6,"z")
+mysolver.setPeriodicity(1.e-2,0,0,"x")
+mysolver.setPeriodicity(0,1.e-2,0,"y")
+mysolver.setPeriodicity(0,0,1.e-3,"z")
 
 #boundary condition
-
-microBC = nonLinearPeriodicBC(1000,3)
-microBC.setOrder(1)
-microBC.setBCPhysical(120,100,110,121,101,111)
-
-
-method = 5	# Periodic mesh = 0, Langrange interpolation = 1, Cubic spline interpolation =2,  FE linear= 3, FE Quad = 4
-degree = 3	# Order used for polynomial interpolation 
-addvertex = 1 # Polynomial interpolation by mesh vertex = 0, Polynomial interpolation by virtual vertex 
-microBC.setPeriodicBCOptions(method, degree,bool(addvertex)) 
-
-runTest=1 
+runTest=1
 
 if(runTest==1):
+  microBC = nonLinearPeriodicBC(1000,3)
+  microBC.setOrder(1)
+  microBC.setBCPhysical(120,100,110,121,101,111)
+  method = 5     # Periodic mesh = 0, Langrange interpolation = 1, Cubic spline interpolation =2,  FE linear= 3, FE Quad = 4
+  degree = 3      # Order used for polynomial interpolation 
+  addvertex = 1   # Polynomial interpolation by mesh vertex = 0, Polynomial interpolation by virtual vertex 
+  microBC.setPeriodicBCOptions(method, degree, bool(addvertex))
   mysolver.addMicroBC(microBC)
   mysolver.activateTest(True)
-  mysolver.setRVEVolume(1.e-5*1.e-5*1.e-6)
+  mysolver.setRVEVolume(1.e-2*1.e-2*1.e-3)
 
   # block rigid mode
   mysolver.displacementBC("Node",1,0,0.)
@@ -126,19 +132,65 @@ if(runTest==1):
   mysolver.displacementBC("Face",120,2,0.)
   mysolver.displacementBC("Face",121,2,0.)
 
+
 if(runTest==0):
+  if BC=="KUBC":
+    #linear displacement BC
+    microBC = nonLinearDisplacementBC(1000,3)
+
+  elif BC=="SUBC":
+    #minimal kinematical BC
+    microBC = nonLinearMinimalKinematicBC(1000,3)
+
+  elif BC=="PERIODIC":
+    #boundary condition
+    microBC = nonLinearPeriodicBC(1000,3)
+    method = 5     # Periodic mesh = 0, Langrange interpolation = 1, Cubic spline interpolation =2,  FE linear= 3, FE Quad = 4
+    degree = 3      # Order used for polynomial interpolation 
+    addvertex = 1   # Polynomial interpolation by mesh vertex = 0, Polynomial interpolation by virtual vertex 
+    microBC.setPeriodicBCOptions(method, degree, bool(addvertex))
+
+  elif BC=="MIXED":
+    microBC = nonLinearMixedBC(1000,3) 
+    microBC.setKinematicPhysical(100,0)
+    microBC.setKinematicPhysical(100,1)
+    microBC.setKinematicPhysical(100,2)
+    microBC.setKinematicPhysical(101,0)
+    microBC.setKinematicPhysical(101,1)
+    microBC.setKinematicPhysical(101,2)
+    microBC.setKinematicPhysical(110,0)
+    microBC.setKinematicPhysical(110,1)
+    microBC.setKinematicPhysical(110,2)
+    microBC.setKinematicPhysical(111,0)
+    microBC.setKinematicPhysical(111,1)
+    microBC.setKinematicPhysical(111,2)
+    microBC.setStaticPhysical(120,0)
+    microBC.setStaticPhysical(120,1)
+    microBC.setKinematicPhysical(120,2)
+    microBC.setStaticPhysical(121,0)
+    microBC.setStaticPhysical(121,1)
+    microBC.setKinematicPhysical(121,2)
+
+  microBC.setOrder(1)
+  microBC.setBCPhysical(120,100,110,121,101,111)
   # Deformation gradient
-  microBC.setDeformationGradient(1.01,0.0,0.0,0.0,1.,0,0,0,1.0)
-  mysolver.addMicroBC(microBC)
+  mysolver.setMicroProblemIndentification(0, number);
   #stress averaging flag and averaging method 0- VOLUME, 1- SURFACE
   mysolver.stressAveragingFlag(bool(1)) # set stress averaging ON- 0 , OFF-1
   mysolver.setStressAveragingMethod(0) # 0 -volume 1- surface
   #tangent averaging flag
   mysolver.tangentAveragingFlag(bool(1)) # set tangent averaging ON -0, OFF -1
-  mysolver.setTangentAveragingMethod(2,1e-6) # 0- perturbation 1- condensation
+  if BC=="KUBC":
+    mysolver.setTangentAveragingMethod(2,1e-6) # 0- perturbation 1- condensation
+  elif BC=="SUBC":
+    mysolver.setTangentAveragingMethod(0,1e-6) # 0- perturbation 1- condensation
+  elif BC=="PERIODIC":
+    mysolver.setTangentAveragingMethod(2,1e-6) # 0- perturbation 1- condensation
+  elif BC=="MIXED":
+    mysolver.setTangentAveragingMethod(2,1e-6) # 0- perturbation 1- condensation
   # BC
-  # fixed face
-  #mysolver.displacementBC("Face",120,2,0.)
+  microBC.setDeformationGradient(1.01,0.0,0.0,0.0,0.99,0,0,0,1.01)
+  mysolver.addMicroBC(microBC)
 
 
 
@@ -162,5 +214,5 @@ check = TestCheck()
 import linecache
 homoStress = linecache.getline('homo_sigma.csv',3)
 val = float(homoStress.split(';')[9])
-check.equal(5.436245e+07,val,1.e-4)
+check.equal(5.326579e-02,val,1.e-4)
 
diff --git a/dG3D/benchmarks/compRVE/comp.geo b/dG3D/benchmarks/compRVE/comp.geo
index d6093ce15308e4d48e8bf802cc387491d95c4438..4ee091aa4828ebd010841ad857ba8161b1f74310 100644
--- a/dG3D/benchmarks/compRVE/comp.geo
+++ b/dG3D/benchmarks/compRVE/comp.geo
@@ -1,7 +1,7 @@
 //Fiber reinforced composite cross-section
 Geometry.AutoCoherence= 0;
 //defination of unit
-unit = 1e-06;
+unit = 1e-03;
 //characteristic mesh size
 cl = 1.0*unit;
 h_x = 10.000000 * unit;
diff --git a/dG3D/benchmarks/interpolationPBC_2DShifted/CMakeLists.txt b/dG3D/benchmarks/interpolationPBC_2DShifted/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6e77bcca3ada1b536da9d15d4d87cc953d7708eb
--- /dev/null
+++ b/dG3D/benchmarks/interpolationPBC_2DShifted/CMakeLists.txt
@@ -0,0 +1,12 @@
+# test file
+
+set(PYFILE idealHole.py)
+
+set(FILES2DELETE 
+  E_0_GP_0_out.txt
+  E_0_GP_0_disp.msh
+  E_0_GP_0_stress.msh
+  E_0_GP_0*.csv
+)
+
+add_cm3python_test(${PYFILE} "${FILES2DELETE}")
diff --git a/dG3D/benchmarks/interpolationPBC_2DShifted/idealHole.geo b/dG3D/benchmarks/interpolationPBC_2DShifted/idealHole.geo
new file mode 100644
index 0000000000000000000000000000000000000000..8e8b34440be4b4807fcec7b6e362d49ffee2c257
--- /dev/null
+++ b/dG3D/benchmarks/interpolationPBC_2DShifted/idealHole.geo
@@ -0,0 +1,61 @@
+
+mm=1.0;
+n=1;
+L=1;
+sl1=0.07*L/n;
+Point(1)={0,0,0,sl1};
+Point(2)={L,0,0,sl1};
+Point(3)={L,L,0,sl1};
+Point(4)={0,L,0,sl1};
+Line(1)={1,2};
+Line(2)={2,3};
+Line(3)={3,4};
+Line(4)={4,1};
+x0=0.65*L/n; y0=0.45*L/n; r=0.25*L/n; 
+num=0;
+moyen=0;
+surf=0;
+For i In {0:n-1}
+  	For j In {0:n-1}
+		x=x0*(2*i+1);
+		y=y0*(2*j+1);
+		sl2=0.7*sl1;
+		moyen=moyen+r;
+		surf=surf+Pi*r*r;
+
+		p1=newp; Point(p1)={x-r,y,0,sl2};
+		p2=newp; Point(p2)={x,y+r,0,sl2};
+		p3=newp; Point(p3)={x+r,y,0,sl2};
+		p4=newp; Point(p4)={x,y-r,0,sl2};
+		pc=newp; Point(pc)={x,y,0,sl2};
+
+		c1 = newreg; Circle(c1) = {p1,pc,p2};
+		c2 = newreg; Circle(c2) = {p2,pc,p3};
+		c3 = newreg; Circle(c3) = {p3,pc,p4};
+		c4 = newreg; Circle(c4) = {p4,pc,p1};
+
+//		Transfinite Line {c3, c2, c4, c1} = 4 Using Progression 1;
+		num+=1;
+		l[num]=newreg; Line Loop(l[num]) = {c1,c2,c3,c4}; 
+	EndFor	
+EndFor
+l[0]=newreg;
+Line Loop(l[0])={1,2,3,4};
+Plane Surface(11)={l[]};
+Physical Line(1)={1}; 
+Physical Line(2)={2};
+Physical Line(3)={3};
+Physical Line(4)={4}; 
+Physical Surface(11)={11};
+Physical Point(1)={1}; 
+Physical Point(2)={2};
+Physical Point(3)={3};
+Physical Point(4)={4}; 
+//Transfinite Line {3, 2, 4, 1} = 5*n Using Progression 1;
+//Transfinite Surface{11};
+//Recombine Surface{11};
+
+Translate {-L/2, -L/2, 0} {
+  Surface{11};
+}
+
diff --git a/dG3D/benchmarks/interpolationPBC_2DShifted/idealHole.py b/dG3D/benchmarks/interpolationPBC_2DShifted/idealHole.py
new file mode 100644
index 0000000000000000000000000000000000000000..2b2075f745f4296ad81981cca5fbce4c0f0e0dfa
--- /dev/null
+++ b/dG3D/benchmarks/interpolationPBC_2DShifted/idealHole.py
@@ -0,0 +1,121 @@
+#coding-Utf-8-*-
+
+from gmshpy import *
+from dG3Dpy import*
+from math import*
+
+#script to launch PBC problem with a python script
+
+# material law
+lawnum = 11 # unique number of law
+
+
+E = 210E3
+nu = 0.3
+K = E/3./(1.-2.*nu)	# Bulk mudulus
+mu =E/2./(1.+nu)	  # Shear mudulus
+rho = 2.7 # Bulk mass
+sy0 = 507.e100
+h = 200
+
+# creation of material law
+
+law1 = dG3DLinearElasticMaterialLaw(lawnum,rho,E,nu)
+
+# geometry
+geofile="idealHole.geo" # name of mesh file
+meshfile="idealHole.msh" # name of mesh file
+
+# creation of part Domain
+nfield = 11 # number of the field (physical number of entity)
+dim =2
+myfield1 = dG3DDomain(10,nfield,0,lawnum,0,dim)
+
+
+# solver
+sol = 2  # Gmm=0 (default) Taucs=1 PETsc=2
+soltype =1 # StaticLinear=0 (default) StaticNonLinear=1
+nstep = 3  # number of step (used only if soltype=1)
+ftime =1.   # Final time (used only if soltype=1)
+tol=1.e-6  # relative tolerance for NR scheme (used only if soltype=1)
+nstepArch=1 # Number of step between 2 archiving (used only if soltype=1)
+system = 3 # Displacement elimination =0 Multiplier elimination = 1 Displacement+ multiplier = 2
+control = 0 # load control = 0 arc length control euler = 1
+
+# creation of Solver
+mysolver = nonLinearMechSolver(1000)
+mysolver.createModel(geofile,meshfile,3,1)
+#mysolver.loadModel(meshfile)
+mysolver.addDomain(myfield1)
+mysolver.addMaterialLaw(law1)
+mysolver.Scheme(soltype)
+mysolver.Solver(sol)
+mysolver.snlData(nstep,ftime,tol)
+mysolver.setSystemType(system)
+mysolver.setControlType(control)
+mysolver.stiffnessModification(bool(1))
+mysolver.iterativeProcedure(bool(1))
+mysolver.setMessageView(bool(1))
+
+
+#rve - periodicity
+mysolver.setPeriodicity(1.,0,0,"x")
+mysolver.setPeriodicity(0,1.,0,"y")
+mysolver.setPeriodicity(0,0,1.,"z")
+
+#boundary condition
+microBC = nonLinearPeriodicBC(100,2)
+microBC.setOrder(1)
+microBC.setBCPhysical(1,4,3,2)
+method =1	# Periodic mesh = 0, Langrange interpolation = 1, Cubic spline interpolation =2,  FE linear= 3, FE Quad = 4
+degree = 5	# Order used for polynomial interpolation 
+addvertex = 0 # Polynomial interpolation by mesh vertex = 0, Polynomial interpolation by virtual vertex 
+
+microBC.setPeriodicBCOptions(method, degree,bool(addvertex))
+theta = pi/10;
+
+microBC.activeShiftPBC(True)
+microBC.setShiftPBCNormal(sin(theta),-cos(theta),0.)
+
+ # Deformation gradient
+microBC.setDeformationGradient(1.01,0.0,0.0,0.0,1.0,0,0,0,1.0)
+
+mysolver.addMicroBC(microBC)
+
+#stress averaging flag and averaging method 0- VOLUME, 1- SURFACE
+mysolver.stressAveragingFlag(bool(1)) # set stress averaging ON- 0 , OFF-1
+mysolver.setStressAveragingMethod(0) # 0 -volume 1- surface
+#tangent averaging flag
+mysolver.tangentAveragingFlag(bool(1)) # set tangent averaging ON -0, OFF -1
+mysolver.setTangentAveragingMethod(2,1e-6) # 0- perturbation 1- condensation
+
+#mysolver.setExtractPerturbationToFileFlag(0)	
+
+# build view
+mysolver.internalPointBuildView("Green-Lagrange_xx",IPField.STRAIN_XX, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_yy",IPField.STRAIN_YY, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_zz",IPField.STRAIN_ZZ, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_xy",IPField.STRAIN_XY, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_yz",IPField.STRAIN_YZ, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_xz",IPField.STRAIN_XZ, 1, 1);
+mysolver.internalPointBuildView("sig_xx",IPField.SIG_XX, 1, 1);
+mysolver.internalPointBuildView("sig_yy",IPField.SIG_YY, 1, 1);
+mysolver.internalPointBuildView("sig_zz",IPField.SIG_ZZ, 1, 1);
+mysolver.internalPointBuildView("sig_xy",IPField.SIG_XY, 1, 1);
+mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, 1);
+mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, 1);
+mysolver.internalPointBuildView("sig_VM",IPField.SVM, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange equivalent strain",IPField.GL_EQUIVALENT_STRAIN, 1, 1);
+mysolver.internalPointBuildView("Equivalent plastic strain",IPField.PLASTICSTRAIN, 1, 1);
+
+#mysolver.setWriteDeformedMeshToFile(1)
+
+#mysolver.readPBCDataFromFile("pbcFile.txt")
+
+# solve
+mysolver.solve()
+
+check = TestCheck()
+check.equal(2.082490e+01,mysolver.getHomogenizedStress(0,1),1.e-3)
+check.equal(1.598886e+05,mysolver.getHomogenizedTangent(0,0,0,0),5.e-4)
+
diff --git a/dG3D/benchmarks/microBC_reset/CMakeLists.txt b/dG3D/benchmarks/microBC_reset/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1b051f5356f5dcf1d8e1d24464f275b5e2bb9b26
--- /dev/null
+++ b/dG3D/benchmarks/microBC_reset/CMakeLists.txt
@@ -0,0 +1,13 @@
+# test file
+
+set(PYFILE run.py)
+
+set(FILES2DELETE 
+  E_0_GP_0_out.txt
+  E_0_GP_0_disp.msh
+  E_0_GP_0_stress.msh
+  E_0_GP_0*.csv
+  previousScheme*
+)
+
+add_cm3python_test(${PYFILE} "${FILES2DELETE}")
diff --git a/dG3D/benchmarks/microBC_reset/run.py b/dG3D/benchmarks/microBC_reset/run.py
new file mode 100644
index 0000000000000000000000000000000000000000..e4330699ccbacf9c93e7c052fe08046ae9392bbd
--- /dev/null
+++ b/dG3D/benchmarks/microBC_reset/run.py
@@ -0,0 +1,124 @@
+#coding-Utf-8-*-
+
+from gmshpy import *
+from dG3Dpy import*
+
+#script to launch PBC problem with a python script
+
+# material law
+E = 3.2E3
+nu = 0.3
+K = E/3./(1.-2.*nu)	# Bulk mudulus
+mu =E/2./(1.+nu)	  # Shear mudulus
+rho = 2.7e-9 # Bulk mass
+
+# creation of material law
+
+law1 = dG3DLinearElasticMaterialLaw(11,rho,E,nu)
+
+# geometry
+meshfile="rve.msh" # name of mesh file
+
+# creation of part Domain
+myfield1 = dG3DDomain(10,11,0,11,0,3)
+
+
+# solver
+sol = 2  # Gmm=0 (default) Taucs=1 PETsc=2
+soltype =1 # StaticLinear=0 (default) StaticNonLinear=1
+nstep = 5  # number of step (used only if soltype=1)
+ftime =1.   # Final time (used only if soltype=1)
+tol=1.e-6  # relative tolerance for NR scheme (used only if soltype=1)
+nstepArch=1 # Number of step between 2 archiving (used only if soltype=1)
+system = 1 # Displacement elimination =0 Multiplier elimination = 1 Displacement+ multiplier = 2
+control = 0 # load control = 0 arc length control euler = 1
+
+# creation of Solver
+mysolver = nonLinearMechSolver(1000)
+mysolver.loadModel(meshfile)
+mysolver.addDomain(myfield1)
+mysolver.addMaterialLaw(law1)
+mysolver.Scheme(soltype)
+mysolver.Solver(sol)
+mysolver.snlData(nstep,ftime,tol)
+mysolver.setSystemType(system)
+mysolver.setControlType(control)
+mysolver.stiffnessModification(bool(1))
+mysolver.iterativeProcedure(bool(1))
+mysolver.setMessageView(bool(1))
+
+
+#rve - periodicity
+mysolver.setPeriodicity(1.,0,0,"x")
+mysolver.setPeriodicity(0,1.,0,"y")
+mysolver.setPeriodicity(0,0,1.,"z")
+
+#boundary condition
+microBC = nonLinearMinimalKinematicBC(1000,3)
+microBC.setOrder(1)
+microBC.setBCPhysical(1,3,5,2,4,6) 
+ # Deformation gradient
+microBC.setDeformationGradient(1.0,0.02,0.02,0.0,0.97,0,0,0,1.02)
+
+mysolver.addMicroBC(microBC)
+
+#stress averaging flag and averaging method 0- VOLUME, 1- SURFACE
+mysolver.stressAveragingFlag(bool(1)) # set stress averaging ON- 0 , OFF-1
+mysolver.setStressAveragingMethod(0) # 0 -volume 1- surface
+#tangent averaging flag
+mysolver.tangentAveragingFlag(bool(1)) # set tangent averaging ON -0, OFF -1
+mysolver.setTangentAveragingMethod(2,1e-6) # 0- perturbation 1- condensation
+
+#mysolver.setExtractPerturbationToFileFlag(0)	
+
+# build view
+mysolver.internalPointBuildView("Green-Lagrange_xx",IPField.STRAIN_XX, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_yy",IPField.STRAIN_YY, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_zz",IPField.STRAIN_ZZ, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_xy",IPField.STRAIN_XY, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_yz",IPField.STRAIN_YZ, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_xz",IPField.STRAIN_XZ, 1, 1);
+mysolver.internalPointBuildView("sig_xx",IPField.SIG_XX, 1, 1);
+mysolver.internalPointBuildView("sig_yy",IPField.SIG_YY, 1, 1);
+mysolver.internalPointBuildView("sig_zz",IPField.SIG_ZZ, 1, 1);
+mysolver.internalPointBuildView("sig_xy",IPField.SIG_XY, 1, 1);
+mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, 1);
+mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, 1);
+mysolver.internalPointBuildView("sig_VM",IPField.SVM, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange equivalent strain",IPField.GL_EQUIVALENT_STRAIN, 1, 1);
+mysolver.internalPointBuildView("Equivalent plastic strain",IPField.PLASTICSTRAIN, 1, 1);
+
+
+# solve
+mysolver.solve()
+
+
+microBC = nonLinearPeriodicBC(1000,3)
+microBC.setOrder(1)
+microBC.setBCPhysical(1,3,5,2,4,6) #Periodic boundary condition
+
+method =0	# Periodic mesh = 0, Langrange interpolation = 1, Cubic spline interpolation =2,  FE linear= 3, FE Quad = 4
+degree = 2	# Order used for polynomial interpolation 
+addvertex = 0 # Polynomial interpolation by mesh vertex = 0, Polynomial interpolation by virtual vertex 
+microBC.setPeriodicBCOptions(method, degree,bool(addvertex)) 
+ # Deformation gradient
+microBC.setDeformationGradient(1.01,-0.01,0.0,0.0,0.97,0,0,0,1.0)
+
+mysolver.addMicroBC(microBC)
+nstep = 5  # number of step (used only if soltype=1)
+ftime =1.   # Final time (used only if soltype=1)
+tol=1.e-6  # relative tolerance for NR scheme (used only if soltype=1)
+mysolver.snlData(nstep,ftime,tol)
+mysolver.solve()
+
+# test check
+check = TestCheck()
+check.equal(-3.748114e+00,mysolver.getHomogenizedStress(0,0),1.e-4)
+check.equal(-8.54755E+00,mysolver.getHomogenizedStress(1,0),1.e-4)
+check.equal(-2.23399E+01,mysolver.getHomogenizedStress(2,2),1.e-4)
+
+check.equal(2.976177e+03,mysolver.getHomogenizedTangent(0,0,0,0),1.e-4)
+check.equal(1.116996e+03,mysolver.getHomogenizedTangent(0,0,1,1),1.e-4)
+check.equal(8.54755E+02,mysolver.getHomogenizedTangent(0,1,0,1),1.e-4)
+
+
diff --git a/dG3D/benchmarks/microBC_reset/rve.geo b/dG3D/benchmarks/microBC_reset/rve.geo
new file mode 100644
index 0000000000000000000000000000000000000000..cb718ac283e55fa3ecac1ede9b5dedd7eac12ad1
--- /dev/null
+++ b/dG3D/benchmarks/microBC_reset/rve.geo
@@ -0,0 +1,87 @@
+l = 1;
+r1 = 0.5;
+r2 = 0.2;
+n =6;
+n2 = 8;
+progr = 1.1;
+
+// exterior cube
+Point(1) = {0,0,0,l};
+Point(2) = {r1,r1,-r1,l};
+Point(3) = {-r1,r1,-r1,l};
+Point(4) = {-r1,-r1,-r1,l};
+Point(5) = {r1,-r1,-r1,l};
+Line(1) = {2,3};
+Line(2) = {3,4};
+Line(3) = {4,5};
+Line(4) = {5,2};
+Line Loop(5) = {4,1,2,3};
+Plane Surface(6) = {5};
+Extrude Surface {6, {0.0,0.0,2*r1}};
+Delete { Volume{1}; }
+
+// interior sphere
+Point(102) = {r2,r2,-r2,l};
+Point(103) = {-r2,r2,-r2,l};
+Point(104) = {-r2,-r2,-r2,l};
+Point(105) = {r2,-r2,-r2,l};
+Circle(29) = {103,1,102};
+Circle(30) = {102,1,105};
+Circle(31) = {105,1,104};
+Circle(32) = {104,1,103};
+Line Loop(33) = {29,30,31,32};
+Ruled Surface(34) = {33};
+Rotate { {1,0,0},{0,0,0}, Pi/2 } { Duplicata{ Surface{34}; } }
+Rotate { {1,0,0},{0,0,0}, Pi } { Duplicata{ Surface{34}; } }
+Rotate { {1,0,0},{0,0,0}, 3*Pi/2 } { Duplicata{ Surface{34}; } }
+Rotate { {0,1,0},{0,0,0}, Pi/2 } { Duplicata { Surface{34}; } }
+Rotate { {0,1,0},{0,0,0}, -Pi/2 } { Duplicata { Surface{34}; } }
+
+// connect sphere and cube
+Line(52) = {102,2};
+Line(53) = {108,7};
+Line(54) = {105,5};
+Line(55) = {111,6};
+Line(56) = {109,15};
+Line(57) = {104,4};
+Line(58) = {103,3};
+Line(59) = {106,11};
+
+Line Loop(60) = {58,-1,-52,-29};Plane Surface(61) = {60};
+Line Loop(62) = {58,18,-59,-39};Plane Surface(63) = {62};
+Line Loop(64) = {59,-9,-53,-36};Plane Surface(65) = {64};
+Line Loop(66) = {37,52,14,-53};Plane Surface(67) = {66};
+Line Loop(68) = {56,-22,-57,-49};Plane Surface(69) = {68};
+Line Loop(70) = {31,57,3,-54};Plane Surface(71) = {70};
+Line Loop(72) = {54,13,-55,-47};Plane Surface(73) = {72};
+Line Loop(74) = {55,-11,-56,41};Plane Surface(75) = {74};
+Line Loop(76) = {59,10,-56,-44};Plane Surface(77) = {76};
+Line Loop(78) = {58,2,-57,32};Plane Surface(79) = {78};
+Line Loop(80) = {52,-4,-54,-30};Plane Surface(81) = {80};
+Line Loop(82) = {42,53,-8,-55};Plane Surface(83) = {82};
+
+// connection volumes
+Surface Loop(84) = {19,61,-63,-65,67,-35}; Volume(85) = {84};
+Surface Loop(86) = {34,61,-79,6,81,-71}; Volume(87) = {86};
+Surface Loop(88) = {23,-79,63,77,69,-50}; Volume(89) = {88};
+Surface Loop(90) = {28,83,-40,75,-77,65}; Volume(91) = {90};
+Surface Loop(92) = {15,81,-67,-51,-83,73}; Volume(93) = {92};
+Surface Loop(94) = {27,-71,-45,-73,-75,-69}; Volume(95) = {94};
+
+// define transfinite mesh
+Transfinite Line {53, 59, 52, 58, 55, 56, 54, 57} = n Using Progression progr;
+Transfinite Line {42, 44, 30, 32, 36, 41, 29, 31, 9, 1, 8, 4, 11, 3, 10, 2,
+                  18, 22, 14, 13, 39, 49, 37, 47} = n2;
+Transfinite Surface "*";
+Recombine Surface "*";
+Transfinite Volume "*";
+
+Physical Volume(11) = {85:95:2}; // ext volume
+//Physical Surface(100) = {34,35,40,45,50,51}; // int surf
+
+Physical Surface(1) = {23};
+Physical Surface(2) = {15};
+Physical Surface(3) = {19};
+Physical Surface(4) = {27};
+Physical Surface(5) = {6};
+Physical Surface(6) = {28};
diff --git a/dG3D/benchmarks/microBC_reset/rve.msh b/dG3D/benchmarks/microBC_reset/rve.msh
new file mode 100644
index 0000000000000000000000000000000000000000..87f91a786a5b457c4e434539903a32207827375d
--- /dev/null
+++ b/dG3D/benchmarks/microBC_reset/rve.msh
@@ -0,0 +1,3549 @@
+$MeshFormat
+2.2 0 8
+$EndMeshFormat
+$Nodes
+1776
+1 0.5 0.5 -0.5
+2 -0.5 0.5 -0.5
+3 -0.5 -0.5 -0.5
+4 0.5 -0.5 -0.5
+5 0.5 -0.5 0.5
+6 0.5 0.5 0.5
+7 -0.5 0.5 0.5
+8 -0.5 -0.5 0.5
+9 0.2 0.2 -0.2
+10 -0.2 0.2 -0.2
+11 -0.2 -0.2 -0.2
+12 0.2 -0.2 -0.2
+13 -0.2 0.2 0.2
+14 0.2 0.2 0.2
+15 -0.2 -0.2 0.2
+16 0.2 -0.2 0.2
+17 0.3571428571432532 0.5 -0.5
+18 0.2142857142865066 0.5 -0.5
+19 0.07142857142975945 0.5 -0.5
+20 -0.07142857142738357 0.5 -0.5
+21 -0.2142857142849224 0.5 -0.5
+22 -0.3571428571424612 0.5 -0.5
+23 -0.5 0.3571428571432532 -0.5
+24 -0.5 0.2142857142865066 -0.5
+25 -0.5 0.07142857142975945 -0.5
+26 -0.5 -0.07142857142738357 -0.5
+27 -0.5 -0.2142857142849224 -0.5
+28 -0.5 -0.3571428571424612 -0.5
+29 -0.3571428571432532 -0.5 -0.5
+30 -0.2142857142865066 -0.5 -0.5
+31 -0.07142857142975945 -0.5 -0.5
+32 0.07142857142738357 -0.5 -0.5
+33 0.2142857142849224 -0.5 -0.5
+34 0.3571428571424612 -0.5 -0.5
+35 0.5 -0.3571428571432532 -0.5
+36 0.5 -0.2142857142865066 -0.5
+37 0.5 -0.07142857142975945 -0.5
+38 0.5 0.07142857142738357 -0.5
+39 0.5 0.2142857142849224 -0.5
+40 0.5 0.3571428571424612 -0.5
+41 0.5 -0.3571428571432532 0.5
+42 0.5 -0.2142857142865066 0.5
+43 0.5 -0.07142857142975945 0.5
+44 0.5 0.07142857142738357 0.5
+45 0.5 0.2142857142849224 0.5
+46 0.5 0.3571428571424612 0.5
+47 0.3571428571432532 0.5 0.5
+48 0.2142857142865066 0.5 0.5
+49 0.07142857142975945 0.5 0.5
+50 -0.07142857142738357 0.5 0.5
+51 -0.2142857142849224 0.5 0.5
+52 -0.3571428571424612 0.5 0.5
+53 -0.5 0.3571428571432532 0.5
+54 -0.5 0.2142857142865066 0.5
+55 -0.5 0.07142857142975945 0.5
+56 -0.5 -0.07142857142738357 0.5
+57 -0.5 -0.2142857142849224 0.5
+58 -0.5 -0.3571428571424612 0.5
+59 -0.3571428571432532 -0.5 0.5
+60 -0.2142857142865066 -0.5 0.5
+61 -0.07142857142975945 -0.5 0.5
+62 0.07142857142738357 -0.5 0.5
+63 0.2142857142849224 -0.5 0.5
+64 0.3571428571424612 -0.5 0.5
+65 0.5 -0.5 -0.3571428571432532
+66 0.5 -0.5 -0.2142857142865066
+67 0.5 -0.5 -0.07142857142975945
+68 0.5 -0.5 0.07142857142738357
+69 0.5 -0.5 0.2142857142849224
+70 0.5 -0.5 0.3571428571424612
+71 0.5 0.5 -0.3571428571432532
+72 0.5 0.5 -0.2142857142865066
+73 0.5 0.5 -0.07142857142975945
+74 0.5 0.5 0.07142857142738357
+75 0.5 0.5 0.2142857142849224
+76 0.5 0.5 0.3571428571424612
+77 -0.5 0.5 -0.3571428571432532
+78 -0.5 0.5 -0.2142857142865066
+79 -0.5 0.5 -0.07142857142975945
+80 -0.5 0.5 0.07142857142738357
+81 -0.5 0.5 0.2142857142849224
+82 -0.5 0.5 0.3571428571424612
+83 -0.5 -0.5 -0.3571428571432532
+84 -0.5 -0.5 -0.2142857142865066
+85 -0.5 -0.5 -0.07142857142975945
+86 -0.5 -0.5 0.07142857142738357
+87 -0.5 -0.5 0.2142857142849224
+88 -0.5 -0.5 0.3571428571424612
+89 -0.1474332721339672 0.2216567507068885 -0.2216567507068885
+90 -0.09031909942240358 0.2364767010505748 -0.2364767010505748
+91 -0.03041911644443993 0.2440027431759114 -0.2440027431759114
+92 0.03041911644345088 0.244002743175973 -0.244002743175973
+93 0.09031909942176847 0.2364767010506962 -0.2364767010506962
+94 0.1474332721337505 0.2216567507069607 -0.2216567507069607
+95 0.2216567507068885 0.1474332721339672 -0.2216567507068885
+96 0.2364767010505748 0.09031909942240358 -0.2364767010505748
+97 0.2440027431759114 0.03041911644443993 -0.2440027431759114
+98 0.244002743175973 -0.03041911644345088 -0.244002743175973
+99 0.2364767010506962 -0.09031909942176847 -0.2364767010506962
+100 0.2216567507069607 -0.1474332721337505 -0.2216567507069607
+101 0.1474332721339672 -0.2216567507068885 -0.2216567507068885
+102 0.09031909942240358 -0.2364767010505748 -0.2364767010505748
+103 0.03041911644443993 -0.2440027431759114 -0.2440027431759114
+104 -0.03041911644345088 -0.244002743175973 -0.244002743175973
+105 -0.09031909942176847 -0.2364767010506962 -0.2364767010506962
+106 -0.1474332721337505 -0.2216567507069607 -0.2216567507069607
+107 -0.2216567507068885 -0.1474332721339672 -0.2216567507068885
+108 -0.2364767010505748 -0.09031909942240358 -0.2364767010505748
+109 -0.2440027431759114 -0.03041911644443993 -0.2440027431759114
+110 -0.244002743175973 0.03041911644345088 -0.244002743175973
+111 -0.2364767010506962 0.09031909942176847 -0.2364767010506962
+112 -0.2216567507069607 0.1474332721337505 -0.2216567507069607
+113 -0.1474332721339672 0.2216567507068885 0.2216567507068885
+114 -0.09031909942240358 0.2364767010505748 0.2364767010505748
+115 -0.03041911644443993 0.2440027431759114 0.2440027431759114
+116 0.03041911644345088 0.244002743175973 0.244002743175973
+117 0.09031909942176847 0.2364767010506962 0.2364767010506962
+118 0.1474332721337505 0.2216567507069607 0.2216567507069607
+119 0.2216567507068885 0.2216567507068885 0.1474332721339672
+120 0.2364767010505748 0.2364767010505748 0.09031909942240361
+121 0.2440027431759114 0.2440027431759114 0.03041911644444001
+122 0.244002743175973 0.244002743175973 -0.03041911644345077
+123 0.2364767010506962 0.2364767010506962 -0.09031909942176844
+124 0.2216567507069607 0.2216567507069607 -0.1474332721337504
+125 -0.2216567507068885 0.2216567507068885 -0.1474332721339672
+126 -0.2364767010505748 0.2364767010505748 -0.09031909942240361
+127 -0.2440027431759114 0.2440027431759114 -0.03041911644444001
+128 -0.244002743175973 0.244002743175973 0.03041911644345077
+129 -0.2364767010506962 0.2364767010506962 0.09031909942176844
+130 -0.2216567507069607 0.2216567507069607 0.1474332721337504
+131 -0.1474332721338868 -0.2216567507069153 0.2216567507069154
+132 -0.09031909942234323 -0.2364767010505864 0.2364767010505864
+133 -0.03041911644429762 -0.2440027431759203 0.2440027431759204
+134 0.03041911644345505 -0.2440027431759728 0.2440027431759729
+135 0.0903190994216333 -0.236476701050722 0.236476701050722
+136 0.1474332721337114 -0.2216567507069737 0.2216567507069738
+137 0.2216567507068848 -0.1474332721339787 0.2216567507068848
+138 0.2364767010505767 -0.09031909942239386 0.2364767010505768
+139 0.2440027431759136 -0.03041911644440559 0.2440027431759136
+140 0.244002743175969 0.03041911644351575 0.244002743175969
+141 0.2364767010506961 0.09031909942176899 0.2364767010506961
+142 0.221656750706967 0.1474332721337317 0.221656750706967
+143 -0.2216567507068881 0.1474332721339684 0.2216567507068882
+144 -0.2364767010505747 0.0903190994224045 0.2364767010505747
+145 -0.2440027431759117 0.0304191164444344 0.2440027431759117
+146 -0.2440027431759724 -0.03041911644346137 0.2440027431759724
+147 -0.2364767010506957 -0.09031909942177099 0.2364767010506957
+148 -0.2216567507069608 -0.1474332721337499 0.2216567507069609
+149 0.2216567507068885 -0.2216567507068885 -0.1474332721339672
+150 0.2364767010505748 -0.2364767010505748 -0.09031909942240361
+151 0.2440027431759114 -0.2440027431759114 -0.03041911644444001
+152 0.244002743175973 -0.244002743175973 0.03041911644345077
+153 0.2364767010506962 -0.2364767010506962 0.09031909942176844
+154 0.2216567507069607 -0.2216567507069607 0.1474332721337504
+155 -0.2216567507069033 -0.2216567507069033 0.1474332721339231
+156 -0.236476701050581 -0.236476701050581 0.09031909942237172
+157 -0.2440027431759109 -0.2440027431759109 0.03041911644444972
+158 -0.2440027431759716 -0.2440027431759716 -0.03041911644347436
+159 -0.2364767010506936 -0.2364767010506936 -0.09031909942178215
+160 -0.2216567507069927 -0.2216567507069927 -0.1474332721336544
+161 0.2491392444305696 0.2491392444305696 -0.2491392444305696
+162 0.3031924130913432 0.3031924130913432 -0.3031924130913432
+163 0.3626508984333672 0.3626508984333672 -0.3626508984333672
+164 0.4280552325108338 0.4280552325108338 -0.4280552325108338
+165 0.2491392444305696 0.2491392444305696 0.2491392444305696
+166 0.3031924130913432 0.3031924130913432 0.3031924130913432
+167 0.3626508984333672 0.3626508984333672 0.3626508984333672
+168 0.4280552325108338 0.4280552325108338 0.4280552325108338
+169 0.2491392444305696 -0.2491392444305696 -0.2491392444305696
+170 0.3031924130913432 -0.3031924130913432 -0.3031924130913432
+171 0.3626508984333672 -0.3626508984333672 -0.3626508984333672
+172 0.4280552325108338 -0.4280552325108338 -0.4280552325108338
+173 0.249139244430541 -0.249139244430541 0.2491392444305411
+174 0.3031924130913838 -0.3031924130913838 0.3031924130913838
+175 0.3626508984333941 -0.3626508984333941 0.3626508984333941
+176 0.4280552325108383 -0.4280552325108383 0.4280552325108383
+177 -0.249139244430541 -0.249139244430541 0.2491392444305411
+178 -0.3031924130913838 -0.3031924130913838 0.3031924130913838
+179 -0.3626508984333941 -0.3626508984333941 0.3626508984333941
+180 -0.4280552325108383 -0.4280552325108383 0.4280552325108383
+181 -0.2491392444305696 -0.2491392444305696 -0.2491392444305696
+182 -0.3031924130913432 -0.3031924130913432 -0.3031924130913432
+183 -0.3626508984333672 -0.3626508984333672 -0.3626508984333672
+184 -0.4280552325108338 -0.4280552325108338 -0.4280552325108338
+185 -0.2491392444305696 0.2491392444305696 -0.2491392444305696
+186 -0.3031924130913432 0.3031924130913432 -0.3031924130913432
+187 -0.3626508984333672 0.3626508984333672 -0.3626508984333672
+188 -0.4280552325108338 0.4280552325108338 -0.4280552325108338
+189 -0.2491392444305696 0.2491392444305696 0.2491392444305696
+190 -0.3031924130913432 0.3031924130913432 0.3031924130913432
+191 -0.3626508984333672 0.3626508984333672 0.3626508984333672
+192 -0.4280552325108338 0.4280552325108338 0.4280552325108338
+193 0.3571428571425744 -0.3571428571431401 -0.5
+194 0.2142857142851487 -0.3571428571430268 -0.5
+195 0.07142857142772296 -0.3571428571429137 -0.5
+196 -0.07142857142942005 -0.3571428571428006 -0.5
+197 -0.2142857142862802 -0.3571428571426875 -0.5
+198 -0.3571428571431401 -0.3571428571425744 -0.5
+199 0.3571428571426875 -0.2142857142862802 -0.5
+200 0.214285714285375 -0.2142857142860539 -0.5
+201 0.07142857142806242 -0.2142857142858276 -0.5
+202 -0.0714285714290806 -0.2142857142856013 -0.5
+203 -0.2142857142860539 -0.214285714285375 -0.5
+204 -0.357142857143027 -0.2142857142851487 -0.5
+205 0.3571428571428007 -0.07142857142942 -0.5
+206 0.2142857142856013 -0.0714285714290806 -0.5
+207 0.07142857142840181 -0.07142857142874121 -0.5
+208 -0.07142857142874121 -0.07142857142840181 -0.5
+209 -0.2142857142858277 -0.07142857142806236 -0.5
+210 -0.3571428571429137 -0.07142857142772299 -0.5
+211 0.3571428571429139 0.07142857142772299 -0.5
+212 0.2142857142858276 0.07142857142806236 -0.5
+213 0.07142857142874121 0.07142857142840181 -0.5
+214 -0.07142857142840181 0.07142857142874121 -0.5
+215 -0.2142857142856013 0.07142857142908066 -0.5
+216 -0.3571428571428006 0.07142857142942 -0.5
+217 0.357142857143027 0.2142857142851487 -0.5
+218 0.214285714286054 0.214285714285375 -0.5
+219 0.0714285714290806 0.2142857142856014 -0.5
+220 -0.0714285714280624 0.2142857142858276 -0.5
+221 -0.214285714285375 0.2142857142860539 -0.5
+222 -0.3571428571426875 0.2142857142862802 -0.5
+223 0.3571428571431402 0.3571428571425743 -0.5
+224 0.2142857142862802 0.3571428571426875 -0.5
+225 0.07142857142942007 0.3571428571428007 -0.5
+226 -0.07142857142772296 0.3571428571429138 -0.5
+227 -0.2142857142851487 0.357142857143027 -0.5
+228 -0.3571428571425744 0.3571428571431401 -0.5
+229 0.5 -0.3571428571432533 -0.3571428571432532
+230 0.5 -0.3571428571432532 -0.2142857142865066
+231 0.5 -0.3571428571432532 -0.07142857142975945
+232 0.5 -0.3571428571432532 0.07142857142738357
+233 0.5 -0.3571428571432532 0.2142857142849224
+234 0.5 -0.3571428571432532 0.3571428571424612
+235 0.5 -0.2142857142865066 -0.3571428571432532
+236 0.5 -0.2142857142865066 -0.2142857142865066
+237 0.5 -0.2142857142865066 -0.07142857142975945
+238 0.5 -0.2142857142865066 0.07142857142738357
+239 0.5 -0.2142857142865066 0.2142857142849224
+240 0.5 -0.2142857142865066 0.3571428571424612
+241 0.5 -0.07142857142975945 -0.3571428571432532
+242 0.5 -0.07142857142975945 -0.2142857142865066
+243 0.5 -0.07142857142975945 -0.07142857142975945
+244 0.5 -0.07142857142975945 0.07142857142738357
+245 0.5 -0.07142857142975945 0.2142857142849224
+246 0.5 -0.07142857142975945 0.3571428571424612
+247 0.5 0.07142857142738357 -0.3571428571432532
+248 0.5 0.07142857142738357 -0.2142857142865066
+249 0.5 0.07142857142738357 -0.07142857142975945
+250 0.5 0.07142857142738357 0.07142857142738357
+251 0.5 0.07142857142738357 0.2142857142849224
+252 0.5 0.07142857142738357 0.3571428571424612
+253 0.5 0.2142857142849224 -0.3571428571432532
+254 0.5 0.2142857142849222 -0.2142857142865066
+255 0.5 0.2142857142849224 -0.07142857142975945
+256 0.5 0.2142857142849224 0.07142857142738357
+257 0.5 0.2142857142849224 0.2142857142849224
+258 0.5 0.2142857142849224 0.3571428571424613
+259 0.5 0.3571428571424614 -0.3571428571432532
+260 0.5 0.3571428571424612 -0.2142857142865066
+261 0.5 0.3571428571424612 -0.07142857142975945
+262 0.5 0.3571428571424612 0.07142857142738357
+263 0.5 0.3571428571424613 0.2142857142849224
+264 0.5 0.3571428571424612 0.3571428571424612
+265 0.3571428571432533 0.5 -0.3571428571432532
+266 0.3571428571432532 0.5 -0.2142857142865066
+267 0.3571428571432532 0.5 -0.07142857142975945
+268 0.3571428571432532 0.5 0.07142857142738357
+269 0.3571428571432532 0.5 0.2142857142849224
+270 0.3571428571432532 0.5 0.3571428571424612
+271 0.2142857142865066 0.5 -0.3571428571432532
+272 0.2142857142865066 0.5 -0.2142857142865066
+273 0.2142857142865066 0.5 -0.07142857142975945
+274 0.2142857142865066 0.5 0.07142857142738357
+275 0.2142857142865066 0.5 0.2142857142849224
+276 0.2142857142865066 0.5 0.3571428571424612
+277 0.07142857142975945 0.5 -0.3571428571432532
+278 0.07142857142975945 0.5 -0.2142857142865066
+279 0.07142857142975945 0.5 -0.07142857142975945
+280 0.07142857142975945 0.5 0.07142857142738357
+281 0.07142857142975945 0.5 0.2142857142849224
+282 0.07142857142975945 0.5 0.3571428571424612
+283 -0.07142857142738357 0.5 -0.3571428571432532
+284 -0.07142857142738357 0.5 -0.2142857142865066
+285 -0.07142857142738357 0.5 -0.07142857142975945
+286 -0.07142857142738357 0.5 0.07142857142738357
+287 -0.07142857142738357 0.5 0.2142857142849224
+288 -0.07142857142738357 0.5 0.3571428571424612
+289 -0.2142857142849224 0.5 -0.3571428571432532
+290 -0.2142857142849222 0.5 -0.2142857142865066
+291 -0.2142857142849224 0.5 -0.07142857142975945
+292 -0.2142857142849224 0.5 0.07142857142738357
+293 -0.2142857142849224 0.5 0.2142857142849224
+294 -0.2142857142849224 0.5 0.3571428571424613
+295 -0.3571428571424614 0.5 -0.3571428571432532
+296 -0.3571428571424612 0.5 -0.2142857142865066
+297 -0.3571428571424612 0.5 -0.07142857142975945
+298 -0.3571428571424612 0.5 0.07142857142738357
+299 -0.3571428571424613 0.5 0.2142857142849224
+300 -0.3571428571424612 0.5 0.3571428571424612
+301 -0.5 0.3571428571432533 -0.3571428571432532
+302 -0.5 0.3571428571432532 -0.2142857142865066
+303 -0.5 0.3571428571432532 -0.07142857142975945
+304 -0.5 0.3571428571432532 0.07142857142738357
+305 -0.5 0.3571428571432532 0.2142857142849224
+306 -0.5 0.3571428571432532 0.3571428571424612
+307 -0.5 0.2142857142865066 -0.3571428571432532
+308 -0.5 0.2142857142865066 -0.2142857142865066
+309 -0.5 0.2142857142865066 -0.07142857142975945
+310 -0.5 0.2142857142865066 0.07142857142738357
+311 -0.5 0.2142857142865066 0.2142857142849224
+312 -0.5 0.2142857142865066 0.3571428571424612
+313 -0.5 0.07142857142975945 -0.3571428571432532
+314 -0.5 0.07142857142975945 -0.2142857142865066
+315 -0.5 0.07142857142975945 -0.07142857142975945
+316 -0.5 0.07142857142975945 0.07142857142738357
+317 -0.5 0.07142857142975945 0.2142857142849224
+318 -0.5 0.07142857142975945 0.3571428571424612
+319 -0.5 -0.07142857142738357 -0.3571428571432532
+320 -0.5 -0.07142857142738357 -0.2142857142865066
+321 -0.5 -0.07142857142738357 -0.07142857142975945
+322 -0.5 -0.07142857142738357 0.07142857142738357
+323 -0.5 -0.07142857142738357 0.2142857142849224
+324 -0.5 -0.07142857142738357 0.3571428571424612
+325 -0.5 -0.2142857142849224 -0.3571428571432532
+326 -0.5 -0.2142857142849222 -0.2142857142865066
+327 -0.5 -0.2142857142849224 -0.07142857142975945
+328 -0.5 -0.2142857142849224 0.07142857142738357
+329 -0.5 -0.2142857142849224 0.2142857142849224
+330 -0.5 -0.2142857142849224 0.3571428571424613
+331 -0.5 -0.3571428571424614 -0.3571428571432532
+332 -0.5 -0.3571428571424612 -0.2142857142865066
+333 -0.5 -0.3571428571424612 -0.07142857142975945
+334 -0.5 -0.3571428571424612 0.07142857142738357
+335 -0.5 -0.3571428571424613 0.2142857142849224
+336 -0.5 -0.3571428571424612 0.3571428571424612
+337 -0.3571428571432533 -0.5 -0.3571428571432532
+338 -0.3571428571432532 -0.5 -0.2142857142865066
+339 -0.3571428571432532 -0.5 -0.07142857142975945
+340 -0.3571428571432532 -0.5 0.07142857142738357
+341 -0.3571428571432532 -0.5 0.2142857142849224
+342 -0.3571428571432532 -0.5 0.3571428571424612
+343 -0.2142857142865066 -0.5 -0.3571428571432532
+344 -0.2142857142865066 -0.5 -0.2142857142865066
+345 -0.2142857142865066 -0.5 -0.07142857142975945
+346 -0.2142857142865066 -0.5 0.07142857142738357
+347 -0.2142857142865066 -0.5 0.2142857142849224
+348 -0.2142857142865066 -0.5 0.3571428571424612
+349 -0.07142857142975945 -0.5 -0.3571428571432532
+350 -0.07142857142975945 -0.5 -0.2142857142865066
+351 -0.07142857142975945 -0.5 -0.07142857142975945
+352 -0.07142857142975945 -0.5 0.07142857142738357
+353 -0.07142857142975945 -0.5 0.2142857142849224
+354 -0.07142857142975945 -0.5 0.3571428571424612
+355 0.07142857142738357 -0.5 -0.3571428571432532
+356 0.07142857142738357 -0.5 -0.2142857142865066
+357 0.07142857142738357 -0.5 -0.07142857142975945
+358 0.07142857142738357 -0.5 0.07142857142738357
+359 0.07142857142738357 -0.5 0.2142857142849224
+360 0.07142857142738357 -0.5 0.3571428571424612
+361 0.2142857142849224 -0.5 -0.3571428571432532
+362 0.2142857142849222 -0.5 -0.2142857142865066
+363 0.2142857142849224 -0.5 -0.07142857142975945
+364 0.2142857142849224 -0.5 0.07142857142738357
+365 0.2142857142849224 -0.5 0.2142857142849224
+366 0.2142857142849224 -0.5 0.3571428571424613
+367 0.3571428571424614 -0.5 -0.3571428571432532
+368 0.3571428571424612 -0.5 -0.2142857142865066
+369 0.3571428571424612 -0.5 -0.07142857142975945
+370 0.3571428571424612 -0.5 0.07142857142738357
+371 0.3571428571424613 -0.5 0.2142857142849224
+372 0.3571428571424612 -0.5 0.3571428571424612
+373 0.3571428571425744 -0.3571428571431401 0.5
+374 0.2142857142851487 -0.3571428571430268 0.5
+375 0.07142857142772296 -0.3571428571429137 0.5
+376 -0.07142857142942005 -0.3571428571428006 0.5
+377 -0.2142857142862802 -0.3571428571426875 0.5
+378 -0.3571428571431401 -0.3571428571425744 0.5
+379 0.3571428571426875 -0.2142857142862802 0.5
+380 0.214285714285375 -0.2142857142860539 0.5
+381 0.07142857142806242 -0.2142857142858276 0.5
+382 -0.0714285714290806 -0.2142857142856013 0.5
+383 -0.2142857142860539 -0.214285714285375 0.5
+384 -0.357142857143027 -0.2142857142851487 0.5
+385 0.3571428571428007 -0.07142857142942 0.5
+386 0.2142857142856013 -0.0714285714290806 0.5
+387 0.07142857142840181 -0.07142857142874121 0.5
+388 -0.07142857142874121 -0.07142857142840181 0.5
+389 -0.2142857142858277 -0.07142857142806236 0.5
+390 -0.3571428571429137 -0.07142857142772299 0.5
+391 0.3571428571429139 0.07142857142772299 0.5
+392 0.2142857142858276 0.07142857142806236 0.5
+393 0.07142857142874121 0.07142857142840181 0.5
+394 -0.07142857142840181 0.07142857142874121 0.5
+395 -0.2142857142856013 0.07142857142908066 0.5
+396 -0.3571428571428006 0.07142857142942 0.5
+397 0.357142857143027 0.2142857142851487 0.5
+398 0.214285714286054 0.214285714285375 0.5
+399 0.0714285714290806 0.2142857142856014 0.5
+400 -0.0714285714280624 0.2142857142858276 0.5
+401 -0.214285714285375 0.2142857142860539 0.5
+402 -0.3571428571426875 0.2142857142862802 0.5
+403 0.3571428571431402 0.3571428571425743 0.5
+404 0.2142857142862802 0.3571428571426875 0.5
+405 0.07142857142942007 0.3571428571428007 0.5
+406 -0.07142857142772296 0.3571428571429138 0.5
+407 -0.2142857142851487 0.357142857143027 0.5
+408 -0.3571428571425744 0.3571428571431401 0.5
+409 -0.168412729045123 0.1684127290449069 -0.2515438438746232
+410 -0.1840251665288072 0.1056499826353773 -0.2738116492284235
+411 -0.1924172158451904 0.03605238238461032 -0.2857898542124602
+412 -0.1924172158451068 -0.03605238238544776 -0.2857898542124109
+413 -0.1840251665286123 -0.1056499826359164 -0.2738116492283466
+414 -0.1684127290449069 -0.1684127290451231 -0.2515438438746231
+415 -0.1056499826359164 0.1840251665286123 -0.2738116492283466
+416 -0.1178729386221623 0.117872938621781 -0.3036641906469083
+417 -0.1247857852245938 0.04072386774933271 -0.3205777197520384
+418 -0.1247857852244522 -0.04072386774990223 -0.3205777197520211
+419 -0.117872938621781 -0.1178729386221623 -0.3036641906469082
+420 -0.1056499826353774 -0.1840251665288071 -0.2738116492284237
+421 -0.03605238238544779 0.1924172158451068 -0.2857898542124109
+422 -0.04072386774990237 0.1247857852244522 -0.3205777197520211
+423 -0.04344860409511681 0.04344860409491334 -0.3409170538479842
+424 -0.04344860409491342 -0.04344860409511676 -0.3409170538479842
+425 -0.04072386774933271 -0.1247857852245938 -0.3205777197520384
+426 -0.03605238238461032 -0.1924172158451903 -0.2857898542124603
+427 0.0360523823846103 0.1924172158451904 -0.2857898542124602
+428 0.04072386774933271 0.1247857852245938 -0.3205777197520384
+429 0.04344860409491334 0.04344860409511679 -0.3409170538479842
+430 0.04344860409511674 -0.04344860409491339 -0.3409170538479842
+431 0.04072386774990223 -0.1247857852244523 -0.3205777197520211
+432 0.03605238238544774 -0.1924172158451069 -0.2857898542124108
+433 0.1056499826353774 0.1840251665288071 -0.2738116492284237
+434 0.1178729386217809 0.1178729386221624 -0.3036641906469083
+435 0.1247857852244523 0.04072386774990237 -0.320577719752021
+436 0.1247857852245938 -0.04072386774933271 -0.3205777197520384
+437 0.1178729386221622 -0.1178729386217809 -0.3036641906469083
+438 0.1056499826359164 -0.1840251665286123 -0.2738116492283466
+439 0.1684127290449068 0.1684127290451229 -0.2515438438746232
+440 0.1840251665286123 0.1056499826359164 -0.2738116492283466
+441 0.1924172158451068 0.03605238238544775 -0.2857898542124109
+442 0.1924172158451903 -0.03605238238461032 -0.2857898542124603
+443 0.1840251665288071 -0.1056499826353774 -0.2738116492284237
+444 0.168412729045123 -0.1684127290449069 -0.2515438438746231
+445 -0.1684127290451558 0.2515438438746083 0.1684127290448964
+446 -0.1840251665288739 0.2738116492283849 0.1056499826353614
+447 -0.1924172158452907 0.2857898542123938 0.03605238238460135
+448 -0.1924172158452407 0.2857898542123223 -0.03605238238543585
+449 -0.1840251665287792 0.2738116492282497 -0.1056499826358767
+450 -0.1684127290451034 0.2515438438745335 -0.1684127290450603
+451 -0.1056499826360194 0.2738116492283196 0.1840251665285933
+452 -0.1178729386223859 0.3036641906468334 0.1178729386217503
+453 -0.1247857852249425 0.3205777197519049 0.04072386774931482
+454 -0.1247857852249173 0.3205777197518431 -0.04072386774987849
+455 -0.1178729386223399 0.3036641906467211 -0.1178729386220856
+456 -0.1056499826359956 0.2738116492282615 -0.1840251665286935
+457 -0.03605238238561466 0.2857898542123966 0.1924172158450968
+458 -0.04072386775027815 0.3205777197519799 0.1247857852244354
+459 -0.04344860409571683 0.340917053847909 0.04344860409490332
+460 -0.04344860409571349 0.3409170538478838 -0.04344860409510339
+461 -0.04072386775027215 0.3205777197519354 -0.1247857852245517
+462 -0.03605238238561159 0.2857898542123745 -0.1924172158451302
+463 0.03605238238444329 0.2857898542124746 0.1924172158452004
+464 0.04072386774895695 0.3205777197520795 0.1247857852246106
+465 0.04344860409431331 0.3409170538480593 0.04344860409512685
+466 0.04344860409431667 0.3409170538480844 -0.04344860409492691
+467 0.04072386774896288 0.3205777197521241 -0.1247857852244943
+468 0.03605238238444647 0.2857898542124968 -0.1924172158451669
+469 0.1056499826352743 0.2738116492284506 0.1840251665288261
+470 0.1178729386215574 0.3036641906469831 0.117872938622193
+471 0.1247857852241035 0.3205777197521547 0.04072386774992026
+472 0.1247857852241286 0.3205777197522164 -0.04072386774935659
+473 0.1178729386216034 0.3036641906470955 -0.1178729386218575
+474 0.1056499826352982 0.2738116492285088 -0.1840251665287259
+475 0.1684127290448741 0.2515438438746381 0.1684127290451335
+476 0.1840251665285456 0.2738116492283852 0.1056499826359323
+477 0.1924172158450065 0.2857898542124773 0.03605238238545672
+478 0.1924172158450564 0.2857898542125489 -0.03605238238462209
+479 0.1840251665286402 0.2738116492285205 -0.105649982635417
+480 0.1684127290449265 0.2515438438747128 -0.1684127290449696
+481 -0.1684127290450823 -0.1684127290449209 0.251543843874641
+482 -0.1840251665288119 -0.105649982635377 0.2738116492284206
+483 -0.1924172158452408 -0.03605238238461066 0.2857898542124263
+484 -0.192417215845203 0.03605238238544446 0.2857898542123465
+485 -0.1840251665287543 0.1056499826358835 0.2738116492282639
+486 -0.1684127290450919 0.1684127290450623 0.25154384387454
+487 -0.1056499826359598 -0.1840251665286073 0.2738116492283332
+488 -0.1178729386223328 -0.1178729386217564 0.3036641906468516
+489 -0.1247857852248984 -0.04072386774931409 0.3205777197519222
+490 -0.1247857852248832 0.04072386774989958 0.3205777197518537
+491 -0.1178729386223184 0.1178729386220897 0.3036641906467279
+492 -0.1056499826359868 0.1840251665286905 0.2738116492282669
+493 -0.03605238238546996 -0.1924172158451105 0.2857898542124057
+494 -0.04072386775014319 -0.1247857852244379 0.3205777197519961
+495 -0.04344860409560183 -0.04344860409489292 0.3409170538479249
+496 -0.04344860409562647 0.04344860409513956 0.3409170538478903
+497 -0.04072386775021801 0.1247857852245551 0.3205777197519409
+498 -0.03605238238558819 0.1924172158451238 0.2857898542123817
+499 0.03605238238444708 -0.1924172158452069 0.2857898542124697
+500 0.04072386774896121 -0.1247857852246046 0.3205777197520813
+501 0.0434486040943171 -0.0434486040951054 0.3409170538480616
+502 0.04344860409431838 0.04344860409497592 0.3409170538480779
+503 0.0407238677489646 0.1247857852244951 0.3205777197521236
+504 0.03605238238444816 0.1924172158451559 0.285789854212504
+505 0.1056499826351403 -0.184025166528859 0.2738116492284802
+506 0.1178729386214396 -0.1178729386222016 0.3036641906470256
+507 0.1247857852240058 -0.04072386774989675 0.3205777197521956
+508 0.1247857852240518 0.04072386774941997 0.3205777197522383
+509 0.1178729386215558 0.1178729386218648 0.3036641906471112
+510 0.1056499826352796 0.184025166528716 0.2738116492285226
+511 0.1684127290448354 -0.1684127290451551 0.2515438438746495
+512 0.184025166528517 -0.1056499826359303 0.2738116492284053
+513 0.1924172158449843 -0.03605238238542589 0.2857898542124962
+514 0.1924172158450344 0.03605238238468858 0.2857898542125554
+515 0.1840251665286281 0.1056499826354206 0.2738116492285274
+516 0.168412729044926 0.1684127290449547 0.251543843874723
+517 0.1684127290450693 -0.2515438438745579 -0.1684127290450581
+518 0.1840251665287 -0.2738116492282949 -0.1056499826358977
+519 0.1924172158451219 -0.2857898542124004 -0.03605238238545033
+520 0.1924172158451326 -0.2857898542124983 0.03605238238461702
+521 0.1840251665286777 -0.2738116492285006 0.1056499826354033
+522 0.1684127290449259 -0.251543843874717 0.1684127290449639
+523 0.1056499826358776 -0.2738116492283114 -0.184025166528687
+524 0.1178729386220682 -0.3036641906468102 -0.1178729386221277
+525 0.1247857852244938 -0.3205777197520041 -0.04072386774990916
+526 0.1247857852243782 -0.3205777197521204 0.04072386774934742
+527 0.1178729386217095 -0.3036641906470642 0.117872938621832
+528 0.1056499826352727 -0.2738116492285242 0.1840251665287176
+529 0.03605238238544932 -0.2857898542124181 -0.1924172158450957
+530 0.04072386774989759 -0.3205777197519735 -0.1247857852245759
+531 0.04344860409511592 -0.340917053847957 -0.04344860409512769
+532 0.04344860409491991 -0.340917053848008 0.04344860409492274
+533 0.04072386774934349 -0.3205777197520892 0.1247857852244598
+534 0.03605238238461934 -0.2857898542124956 0.1924172158451362
+535 -0.03605238238459459 -0.2857898542125238 -0.192417215845099
+536 -0.04072386774928415 -0.3205777197520849 -0.1247857852244899
+537 -0.04344860409483012 -0.3409170538480177 -0.04344860409493718
+538 -0.04344860409499823 -0.3409170538479725 0.04344860409512315
+539 -0.04072386774976254 -0.3205777197520004 0.1247857852245511
+540 -0.03605238238530302 -0.2857898542124191 0.1924172158451216
+541 -0.105649982635409 -0.2738116492285272 -0.1840251665286348
+542 -0.1178729386218042 -0.3036641906470237 -0.1178729386218418
+543 -0.1247857852244433 -0.3205777197520931 -0.04072386774936267
+544 -0.124785785224524 -0.3205777197519924 0.04072386774990793
+545 -0.117872938622067 -0.3036641906468232 0.1178729386220955
+546 -0.1056499826358417 -0.2738116492283236 0.1840251665286893
+547 -0.1684127290449749 -0.251543843874743 -0.168412729044876
+548 -0.1840251665286797 -0.2738116492284927 -0.1056499826354204
+549 -0.1924172158451182 -0.2857898542125051 -0.03605238238464049
+550 -0.19241721584509 -0.2857898542124208 0.0360523823854591
+551 -0.1840251665286563 -0.2738116492283326 0.1056499826358761
+552 -0.1684127290450105 -0.2515438438746 0.168412729045054
+553 -0.2515438438746297 0.1684127290449116 -0.1684127290451085
+554 -0.2738116492284407 0.1056499826353845 -0.1840251665287776
+555 -0.2857898542124898 0.03605238238461334 -0.192417215845146
+556 -0.2857898542124501 -0.03605238238545479 -0.1924172158450473
+557 -0.2738116492283894 -0.1056499826359344 -0.1840251665285383
+558 -0.2515438438746629 -0.1684127290451507 -0.1684127290448199
+559 -0.2738116492283457 0.1840251665286123 -0.1056499826359187
+560 -0.3036641906469066 0.1178729386217806 -0.117872938622167
+561 -0.3205777197520358 0.04072386774933021 -0.1247857852246015
+562 -0.3205777197520168 -0.04072386774990589 -0.1247857852244621
+563 -0.3036641906469039 -0.1178729386221615 -0.1178729386217929
+564 -0.2738116492284202 -0.1840251665288046 -0.1056499826353907
+565 -0.2857898542124102 0.1924172158451072 -0.03605238238545175
+566 -0.32057771975202 0.1247857852244523 -0.04072386774991131
+567 -0.3409170538479828 0.04344860409490978 -0.04344860409513108
+568 -0.340917053847981 -0.04344860409512288 -0.0434486040949324
+569 -0.3205777197520354 -0.1247857852245942 -0.04072386774935502
+570 -0.2857898542124583 -0.1924172158451888 -0.0360523823846341
+571 -0.2857898542124597 0.192417215845191 0.0360523823846118
+572 -0.3205777197520377 0.1247857852245942 0.04072386774933627
+573 -0.340917053847984 0.04344860409511215 0.04344860409491928
+574 -0.3409170538479821 -0.04344860409492184 0.04344860409512451
+575 -0.3205777197520194 -0.1247857852244537 0.04072386774991162
+576 -0.2857898542124103 -0.1924172158451059 0.03605238238545767
+577 -0.2738116492284244 0.184025166528809 0.1056499826353719
+578 -0.3036641906469118 0.1178729386221646 0.1178729386217696
+579 -0.3205777197520284 0.04072386774989795 0.1247857852244349
+580 -0.3205777197520462 -0.04072386774934392 0.1247857852245699
+581 -0.3036641906469169 -0.1178729386217871 0.1178729386221338
+582 -0.2738116492283549 -0.1840251665286177 0.1056499826358854
+583 -0.2515438438746257 0.1684127290451262 0.1684127290448999
+584 -0.2738116492283543 0.1056499826359205 0.1840251665285985
+585 -0.2857898542124249 0.03605238238544395 0.1924172158450867
+586 -0.2857898542124774 -0.0360523823846234 0.1924172158451624
+587 -0.2738116492284427 -0.105649982635388 0.1840251665287727
+588 -0.2515438438746416 -0.1684127290449192 0.1684127290450832
+589 0.251543843874631 0.1684127290448899 0.1684127290451284
+590 0.2738116492284235 0.1056499826353778 0.184025166528807
+591 0.2857898542124546 0.03605238238467598 0.1924172158451865
+592 0.2857898542124139 -0.03605238238541304 0.1924172158451089
+593 0.2738116492283491 -0.1056499826359068 0.1840251665286141
+594 0.2515438438746185 -0.1684127290451334 0.1684127290449035
+595 0.2738116492283549 0.1840251665285979 0.1056499826359199
+596 0.3036641906469081 0.1178729386217814 0.1178729386221623
+597 0.3205777197520316 0.0407238677493943 0.124785785224591
+598 0.3205777197520247 -0.04072386774986973 0.1247857852244537
+599 0.3036641906469112 -0.1178729386221538 0.1178729386217821
+600 0.2738116492284185 -0.184025166528816 0.1056499826353752
+601 0.2857898542124185 0.1924172158450953 0.0360523823854488
+602 0.320577719752021 0.1247857852244526 0.04072386774990245
+603 0.3409170538479776 0.04344860409496585 0.04344860409511594
+604 0.3409170538479876 -0.04344860409508894 0.04344860409491394
+605 0.3205777197520411 -0.1247857852245866 0.04072386774933306
+606 0.2857898542124556 -0.1924172158451976 0.03605238238460966
+607 0.2857898542124661 0.1924172158451816 -0.03605238238461109
+608 0.3205777197520382 0.124785785224594 -0.04072386774933263
+609 0.3409170538479792 0.04344860409515611 -0.04344860409491271
+610 0.3409170538479868 -0.04344860409489251 -0.04344860409511717
+611 0.3205777197520231 -0.1247857852244469 -0.04072386774990261
+612 0.2857898542124074 -0.1924172158451121 -0.03605238238544722
+613 0.273811649228427 0.1840251665288014 -0.1056499826353786
+614 0.3036641906469082 0.1178729386221625 -0.117872938621781
+615 0.3205777197520184 0.04072386774992697 -0.1247857852244511
+616 0.3205777197520398 -0.04072386774931966 -0.1247857852245944
+617 0.3036641906469094 -0.1178729386217776 -0.1178729386221627
+618 0.2738116492283446 -0.1840251665286158 -0.1056499826359156
+619 0.2515438438746245 0.1684127290451202 -0.1684127290449078
+620 0.2738116492283467 0.1056499826359165 -0.1840251665286122
+621 0.28578985421241 0.03605238238545867 -0.1924172158451061
+622 0.2857898542124608 -0.03605238238460449 -0.1924172158451908
+623 0.273811649228424 -0.1056499826353757 -0.1840251665288074
+624 0.2515438438746223 -0.1684127290449087 -0.1684127290451225
+625 -0.1817831739911862 0.2672486739155991 -0.2672486739155991
+626 -0.1106245187189356 0.2796411537179944 -0.2796411537179944
+627 -0.03713636188567761 0.2859344490980252 -0.2859344490980252
+628 0.03713636188523975 0.2859344490980768 -0.2859344490980768
+629 0.110624518718664 0.2796411537180958 -0.2796411537180958
+630 0.1817831739911347 0.2672486739156595 -0.2672486739156595
+631 -0.219568065885336 0.3173997892476934 -0.3173997892476934
+632 -0.1329604798571652 0.3271220514651835 -0.3271220514651835
+633 -0.04452533184194246 0.3320593254307181 -0.3320593254307181
+634 0.0445253318421109 0.3320593254307586 -0.3320593254307586
+635 0.1329604798572934 0.327122051465263 -0.327122051465263
+636 0.2195680658854663 0.3173997892477408 -0.3173997892477408
+637 -0.261131446839701 0.3725660159415127 -0.3725660159415127
+638 -0.1575300370328433 0.3793510388247375 -0.3793510388247375
+639 -0.05265319876856827 0.3827966892389629 -0.3827966892389629
+640 0.05265319876940359 0.3827966892389911 -0.3827966892389911
+641 0.1575300370334113 0.3793510388247929 -0.3793510388247929
+642 0.2611314468400313 0.3725660159415458 -0.3725660159415458
+643 -0.3068511660301758 0.4332488654914267 -0.4332488654914267
+644 -0.1845565500092459 0.4368029250970186 -0.4368029250970186
+645 -0.06159385241536584 0.4386077895997552 -0.4386077895997552
+646 0.0615938524169348 0.4386077895997699 -0.4386077895997699
+647 0.1845565500102979 0.4368029250970477 -0.4368029250970477
+648 0.3068511660307259 0.4332488654914441 -0.4332488654914441
+649 -0.2672486739155991 0.2672486739155991 -0.1817831739913159
+650 -0.2796411537179944 0.2796411537179944 -0.1106245187191951
+651 -0.2859344490980252 0.2859344490980252 -0.03713636188606684
+652 -0.2859344490980768 0.2859344490980768 0.03713636188485048
+653 -0.2796411537180959 0.2796411537180959 0.1106245187184045
+654 -0.2672486739156595 0.2672486739156595 0.181783173991005
+655 -0.3173997892476934 0.3173997892476934 -0.2195680658856084
+656 -0.3271220514651835 0.3271220514651835 -0.1329604798577101
+657 -0.3320593254307181 0.3320593254307181 -0.04452533184275977
+658 -0.3320593254307586 0.3320593254307586 0.04452533184129356
+659 -0.327122051465263 0.327122051465263 0.1329604798567485
+660 -0.3173997892477407 0.3173997892477407 0.2195680658851938
+661 -0.3725660159415127 0.3725660159415127 -0.2611314468401303
+662 -0.3793510388247375 0.3793510388247375 -0.1575300370337022
+663 -0.3827966892389629 0.3827966892389629 -0.05265319876985641
+664 -0.3827966892389911 0.3827966892389911 0.0526531987681154
+665 -0.3793510388247931 0.3793510388247931 0.1575300370325524
+666 -0.3725660159415458 0.3725660159415458 0.2611314468396017
+667 -0.4332488654914269 0.4332488654914269 -0.3068511660307779
+668 -0.4368029250970185 0.4368029250970185 -0.1845565500104503
+669 -0.4386077895997552 0.4386077895997552 -0.06159385241717196
+670 -0.4386077895997699 0.4386077895997699 0.06159385241512863
+671 -0.4368029250970477 0.4368029250970477 0.1845565500090936
+672 -0.4332488654914442 0.4332488654914442 0.3068511660301237
+673 -0.1817831739911862 0.2672486739155991 0.2672486739155991
+674 -0.1106245187189356 0.2796411537179944 0.2796411537179944
+675 -0.03713636188567761 0.2859344490980252 0.2859344490980252
+676 0.03713636188523975 0.2859344490980768 0.2859344490980768
+677 0.110624518718664 0.2796411537180958 0.2796411537180958
+678 0.1817831739911347 0.2672486739156595 0.2672486739156595
+679 -0.219568065885336 0.3173997892476934 0.3173997892476934
+680 -0.1329604798571652 0.3271220514651835 0.3271220514651835
+681 -0.04452533184194246 0.3320593254307181 0.3320593254307181
+682 0.0445253318421109 0.3320593254307586 0.3320593254307586
+683 0.1329604798572934 0.327122051465263 0.327122051465263
+684 0.2195680658854663 0.3173997892477408 0.3173997892477408
+685 -0.261131446839701 0.3725660159415127 0.3725660159415127
+686 -0.1575300370328433 0.3793510388247375 0.3793510388247375
+687 -0.05265319876856827 0.3827966892389629 0.3827966892389629
+688 0.05265319876940359 0.3827966892389911 0.3827966892389911
+689 0.1575300370334113 0.3793510388247929 0.3793510388247929
+690 0.2611314468400313 0.3725660159415458 0.3725660159415458
+691 -0.3068511660301758 0.4332488654914267 0.4332488654914267
+692 -0.1845565500092459 0.4368029250970186 0.4368029250970186
+693 -0.06159385241536584 0.4386077895997552 0.4386077895997552
+694 0.0615938524169348 0.4386077895997699 0.4386077895997699
+695 0.1845565500102979 0.4368029250970477 0.4368029250970477
+696 0.3068511660307259 0.4332488654914441 0.4332488654914441
+697 0.2672486739155991 0.2672486739155991 0.1817831739911862
+698 0.3173997892476935 0.3173997892476935 0.219568065885336
+699 0.3725660159415127 0.3725660159415127 0.261131446839701
+700 0.4332488654914269 0.4332488654914269 0.3068511660301758
+701 0.2796411537179945 0.2796411537179945 0.1106245187189356
+702 0.3271220514651834 0.3271220514651834 0.1329604798571651
+703 0.3793510388247374 0.3793510388247374 0.1575300370328432
+704 0.4368029250970186 0.4368029250970186 0.1845565500092459
+705 0.2859344490980253 0.2859344490980253 0.03713636188567768
+706 0.3320593254307181 0.3320593254307181 0.0445253318419425
+707 0.3827966892389629 0.3827966892389629 0.05265319876856835
+708 0.4386077895997552 0.4386077895997552 0.06159385241536588
+709 0.2859344490980769 0.2859344490980769 -0.03713636188523964
+710 0.3320593254307586 0.3320593254307586 -0.04452533184211078
+711 0.3827966892389911 0.3827966892389911 -0.05265319876940355
+712 0.4386077895997699 0.4386077895997699 -0.06159385241693471
+713 0.2796411537180958 0.2796411537180958 -0.110624518718664
+714 0.3271220514652631 0.3271220514652631 -0.1329604798572934
+715 0.3793510388247929 0.3793510388247929 -0.1575300370334113
+716 0.4368029250970476 0.4368029250970476 -0.1845565500102979
+717 0.2672486739156595 0.2672486739156595 -0.1817831739911346
+718 0.3173997892477408 0.3173997892477408 -0.2195680658854662
+719 0.3725660159415458 0.3725660159415458 -0.261131446840031
+720 0.4332488654914441 0.4332488654914441 -0.3068511660307258
+721 -0.267248673915589 -0.267248673915589 0.1817831739911253
+722 -0.2796411537179827 -0.2796411537179827 0.110624518718889
+723 -0.2859344490980129 -0.2859344490980129 0.03713636188566966
+724 -0.2859344490980679 -0.2859344490980679 -0.03713636188527181
+725 -0.2796411537180891 -0.2796411537180891 -0.110624518718684
+726 -0.2672486739156842 -0.2672486739156842 -0.1817831739910589
+727 -0.317399789247735 -0.317399789247735 0.2195680658853413
+728 -0.3271220514652117 -0.3271220514652117 0.1329604798571727
+729 -0.3320593254307351 -0.3320593254307351 0.04452533184197186
+730 -0.3320593254307692 -0.3320593254307692 -0.04452533184210862
+731 -0.3271220514652682 -0.3271220514652682 -0.1329604798572901
+732 -0.3173997892477646 -0.3173997892477646 -0.2195680658853968
+733 -0.3725660159415408 -0.3725660159415408 0.2611314468397034
+734 -0.3793510388247562 -0.3793510388247562 0.1575300370328475
+735 -0.3827966892389741 -0.3827966892389741 0.05265319876858802
+736 -0.3827966892389981 -0.3827966892389981 -0.05265319876940266
+737 -0.3793510388247965 -0.3793510388247965 -0.1575300370334095
+738 -0.3725660159415623 -0.3725660159415623 -0.2611314468399829
+739 -0.4332488654914341 -0.4332488654914341 0.3068511660301688
+740 -0.4368029250970228 -0.4368029250970228 0.1845565500092415
+741 -0.4386077895997571 -0.4386077895997571 0.06159385241537084
+742 -0.438607789599771 -0.438607789599771 -0.06159385241693846
+743 -0.4368029250970479 -0.4368029250970479 -0.1845565500102998
+744 -0.4332488654914523 -0.4332488654914523 -0.3068511660307021
+745 0.1817831739911862 -0.2672486739155991 -0.2672486739155991
+746 0.219568065885336 -0.3173997892476935 -0.3173997892476935
+747 0.261131446839701 -0.3725660159415127 -0.3725660159415127
+748 0.3068511660301758 -0.4332488654914269 -0.4332488654914269
+749 0.1106245187189355 -0.2796411537179945 -0.2796411537179945
+750 0.1329604798571651 -0.3271220514651834 -0.3271220514651834
+751 0.1575300370328432 -0.3793510388247374 -0.3793510388247374
+752 0.1845565500092459 -0.4368029250970186 -0.4368029250970186
+753 0.0371363618856776 -0.2859344490980253 -0.2859344490980253
+754 0.0445253318419425 -0.3320593254307181 -0.3320593254307181
+755 0.05265319876856826 -0.3827966892389629 -0.3827966892389629
+756 0.06159385241536582 -0.4386077895997552 -0.4386077895997552
+757 -0.0371363618852397 -0.2859344490980769 -0.2859344490980769
+758 -0.04452533184211083 -0.3320593254307586 -0.3320593254307586
+759 -0.05265319876940363 -0.3827966892389911 -0.3827966892389911
+760 -0.06159385241693476 -0.4386077895997699 -0.4386077895997699
+761 -0.110624518718664 -0.2796411537180958 -0.2796411537180958
+762 -0.1329604798572934 -0.3271220514652631 -0.3271220514652631
+763 -0.1575300370334113 -0.3793510388247929 -0.3793510388247929
+764 -0.1845565500102979 -0.4368029250970476 -0.4368029250970476
+765 -0.1817831739911347 -0.2672486739156594 -0.2672486739156594
+766 -0.2195680658854662 -0.3173997892477407 -0.3173997892477407
+767 -0.2611314468400311 -0.3725660159415458 -0.3725660159415458
+768 -0.3068511660307258 -0.4332488654914441 -0.4332488654914441
+769 0.267248673915595 -0.267248673915595 -0.18178317399132
+770 0.2796411537179862 -0.2796411537179862 -0.1106245187192033
+771 0.285934449098013 -0.285934449098013 -0.03713636188607911
+772 0.2859344490980605 -0.2859344490980605 0.03713636188483414
+773 0.2796411537180754 -0.2796411537180754 0.1106245187183841
+774 0.267248673915635 -0.267248673915635 0.1817831739909805
+775 0.3173997892476992 -0.3173997892476992 -0.2195680658856027
+776 0.3271220514651951 -0.3271220514651951 -0.1329604798576985
+777 0.3320593254307355 -0.3320593254307355 -0.04452533184274234
+778 0.3320593254307817 -0.3320593254307817 0.04452533184131678
+779 0.327122051465292 -0.327122051465292 0.1329604798567775
+780 0.3173997892477755 -0.3173997892477755 0.2195680658852287
+781 0.3725660159415166 -0.3725660159415166 -0.2611314468401266
+782 0.3793510388247452 -0.3793510388247452 -0.1575300370336945
+783 0.3827966892389745 -0.3827966892389745 -0.05265319876984489
+784 0.3827966892390065 -0.3827966892390065 0.0526531987681308
+785 0.3793510388248122 -0.3793510388248122 0.1575300370325716
+786 0.3725660159415689 -0.3725660159415689 0.2611314468396248
+787 0.4332488654914275 -0.4332488654914275 -0.3068511660307772
+788 0.4368029250970197 -0.4368029250970197 -0.184556550010449
+789 0.438607789599757 -0.438607789599757 -0.06159385241717
+790 0.4386077895997726 -0.4386077895997726 0.06159385241513124
+791 0.436802925097051 -0.436802925097051 0.1845565500090969
+792 0.4332488654914481 -0.4332488654914481 0.3068511660301275
+793 0.1817831739909523 -0.2672486739156438 0.2672486739156439
+794 0.1106245187182796 -0.2796411537180924 0.2796411537180925
+795 0.03713636188485016 -0.2859344490980523 0.2859344490980524
+796 -0.03713636188594389 -0.2859344490980084 0.2859344490980085
+797 -0.1106245187191328 -0.279641153717979 0.279641153717979
+798 -0.1817831739912288 -0.267248673915595 0.267248673915595
+799 0.2195680658851966 -0.3173997892477869 0.317399789247787
+800 0.1329604798566767 -0.3271220514653157 0.3271220514653157
+801 0.04452533184130191 -0.332059325430793 0.332059325430793
+802 -0.04452533184267189 -0.3320593254307586 0.3320593254307586
+803 -0.1329604798576873 -0.3271220514652268 0.3271220514652268
+804 -0.2195680658855842 -0.3173997892477486 0.3173997892477486
+805 0.2611314468396027 -0.3725660159415767 0.3725660159415767
+806 0.1575300370325017 -0.3793510388248286 0.3793510388248286
+807 0.05265319876812112 -0.3827966892390138 0.3827966892390138
+808 -0.05265319876979498 -0.3827966892389899 0.3827966892389899
+809 -0.1575300370336856 -0.3793510388247665 0.3793510388247665
+810 -0.2611314468401124 -0.37256601594155 0.37256601594155
+811 0.3068511660301174 -0.4332488654914515 0.4332488654914515
+812 0.1845565500090631 -0.4368029250970579 0.4368029250970578
+813 0.06159385241513034 -0.4386077895997738 0.4386077895997738
+814 -0.06159385241713846 -0.4386077895997613 0.4386077895997612
+815 -0.1845565500104376 -0.4368029250970253 0.4368029250970252
+816 -0.3068511660307617 -0.4332488654914374 0.4332488654914374
+817 -0.2672486739155947 0.181783173991321 0.2672486739155947
+818 -0.2796411537179861 0.110624518719204 0.2796411537179861
+819 -0.2859344490980133 0.03713636188607444 0.2859344490980133
+820 -0.28593444909806 -0.03713636188484301 0.28593444909806
+821 -0.279641153718075 -0.1106245187183862 0.279641153718075
+822 -0.2672486739156351 -0.18178317399098 0.2672486739156351
+823 -0.3173997892476989 0.2195680658856034 0.3173997892476989
+824 -0.327122051465195 0.1329604798576992 0.327122051465195
+825 -0.3320593254307359 0.04452533184273869 0.3320593254307359
+826 -0.3320593254307813 -0.04452533184132373 0.3320593254307813
+827 -0.3271220514652918 -0.1329604798567792 0.3271220514652918
+828 -0.3173997892477757 -0.2195680658852283 0.3173997892477757
+829 -0.3725660159415164 0.2611314468401271 0.3725660159415164
+830 -0.3793510388247451 0.1575300370336948 0.3793510388247451
+831 -0.3827966892389745 0.05265319876984233 0.3827966892389745
+832 -0.3827966892390062 -0.05265319876813567 0.3827966892390062
+833 -0.3793510388248121 -0.1575300370325728 0.3793510388248121
+834 -0.3725660159415689 -0.2611314468396246 0.3725660159415689
+835 -0.4332488654914275 0.3068511660307776 0.4332488654914275
+836 -0.4368029250970197 0.1845565500104492 0.4368029250970197
+837 -0.4386077895997572 0.06159385241716865 0.4386077895997572
+838 -0.4386077895997724 -0.06159385241513379 0.4386077895997724
+839 -0.4368029250970508 -0.1845565500090975 0.4368029250970508
+840 -0.4332488654914481 -0.3068511660301275 0.4332488654914481
+841 -0.2672486739156595 0.1817831739911347 -0.2672486739156595
+842 -0.2796411537180958 0.110624518718664 -0.2796411537180958
+843 -0.2859344490980769 0.03713636188523975 -0.2859344490980769
+844 -0.2859344490980253 -0.03713636188567761 -0.2859344490980253
+845 -0.2796411537179945 -0.1106245187189356 -0.2796411537179945
+846 -0.2672486739155991 -0.1817831739911862 -0.2672486739155991
+847 -0.3173997892477407 0.2195680658854663 -0.3173997892477407
+848 -0.3271220514652631 0.1329604798572935 -0.3271220514652631
+849 -0.3320593254307586 0.0445253318421109 -0.3320593254307586
+850 -0.3320593254307181 -0.04452533184194246 -0.3320593254307181
+851 -0.3271220514651834 -0.1329604798571652 -0.3271220514651834
+852 -0.3173997892476933 -0.2195680658853361 -0.3173997892476933
+853 -0.3725660159415458 0.2611314468400311 -0.3725660159415458
+854 -0.3793510388247931 0.1575300370334113 -0.3793510388247931
+855 -0.3827966892389911 0.0526531987694036 -0.3827966892389911
+856 -0.3827966892389629 -0.05265319876856828 -0.3827966892389629
+857 -0.3793510388247375 -0.1575300370328432 -0.3793510388247375
+858 -0.3725660159415127 -0.261131446839701 -0.3725660159415127
+859 -0.4332488654914441 0.3068511660307258 -0.4332488654914441
+860 -0.4368029250970477 0.1845565500102979 -0.4368029250970477
+861 -0.4386077895997699 0.06159385241693476 -0.4386077895997699
+862 -0.4386077895997552 -0.06159385241536584 -0.4386077895997552
+863 -0.4368029250970186 -0.184556550009246 -0.4368029250970186
+864 -0.4332488654914269 -0.3068511660301757 -0.4332488654914269
+865 0.2672486739155991 0.1817831739911862 -0.2672486739155991
+866 0.2796411537179944 0.1106245187189356 -0.2796411537179944
+867 0.2859344490980252 0.03713636188567761 -0.2859344490980252
+868 0.2859344490980768 -0.03713636188523975 -0.2859344490980768
+869 0.2796411537180958 -0.110624518718664 -0.2796411537180958
+870 0.2672486739156595 -0.1817831739911347 -0.2672486739156595
+871 0.3173997892476934 0.219568065885336 -0.3173997892476934
+872 0.3271220514651835 0.1329604798571652 -0.3271220514651835
+873 0.3320593254307181 0.04452533184194246 -0.3320593254307181
+874 0.3320593254307586 -0.0445253318421109 -0.3320593254307586
+875 0.327122051465263 -0.1329604798572934 -0.327122051465263
+876 0.3173997892477408 -0.2195680658854663 -0.3173997892477408
+877 0.3725660159415127 0.261131446839701 -0.3725660159415127
+878 0.3793510388247375 0.1575300370328433 -0.3793510388247375
+879 0.3827966892389629 0.05265319876856827 -0.3827966892389629
+880 0.3827966892389911 -0.05265319876940359 -0.3827966892389911
+881 0.3793510388247929 -0.1575300370334113 -0.3793510388247929
+882 0.3725660159415458 -0.2611314468400313 -0.3725660159415458
+883 0.4332488654914267 0.3068511660301758 -0.4332488654914267
+884 0.4368029250970186 0.1845565500092459 -0.4368029250970186
+885 0.4386077895997552 0.06159385241536584 -0.4386077895997552
+886 0.4386077895997699 -0.0615938524169348 -0.4386077895997699
+887 0.4368029250970477 -0.1845565500102979 -0.4368029250970477
+888 0.4332488654914441 -0.3068511660307259 -0.4332488654914441
+889 0.2672486739155715 -0.181783173991301 0.2672486739155716
+890 0.3173997892477258 -0.2195680658856509 0.3173997892477259
+891 0.3725660159415342 -0.2611314468401587 0.3725660159415343
+892 0.4332488654914298 -0.3068511660307844 0.43324886549143
+893 0.2796411537179757 -0.1106245187191665 0.2796411537179758
+894 0.3271220514652138 -0.1329604798577327 0.3271220514652139
+895 0.3793510388247578 -0.157530037033717 0.379351038824758
+896 0.4368029250970223 -0.1845565500104511 0.4368029250970225
+897 0.2859344490980109 -0.03713636188602171 0.285934449098011
+898 0.3320593254307427 -0.0445253318427604 0.3320593254307428
+899 0.3827966892389792 -0.05265319876985613 0.3827966892389794
+900 0.4386077895997585 -0.06159385241716628 0.4386077895997587
+901 0.2859344490980613 0.03713636188491708 0.2859344490980614
+902 0.3320593254307734 0.04452533184131877 0.3320593254307735
+903 0.3827966892390009 0.05265319876813366 0.382796689239001
+904 0.438607789599771 0.06159385241514233 0.4386077895997712
+905 0.2796411537180876 0.1106245187184131 0.2796411537180877
+906 0.3271220514652747 0.1329604798567373 0.3271220514652748
+907 0.3793510388248009 0.157530037032545 0.379351038824801
+908 0.4368029250970489 0.1845565500090925 0.436802925097049
+909 0.2672486739156607 0.1817831739909934 0.2672486739156608
+910 0.3173997892477508 0.2195680658851759 0.3173997892477509
+911 0.3725660159415526 0.2611314468395892 0.3725660159415527
+912 0.4332488654914464 0.3068511660301186 0.4332488654914465
+913 0.3118823731958045 0.4404162653877141 -0.3118823731958147
+914 0.2707364787003844 0.3862492339249757 -0.2707364787004039
+915 0.2333311201832754 0.3370064782012724 -0.2333311201833036
+916 0.1993262486983812 0.2922403364951137 -0.1993262486984171
+917 0.3156264838114877 0.4457564389832931 -0.1882331394376631
+918 0.2778843262392285 0.3964441107889961 -0.1645489804854699
+919 0.2435732740063817 0.3516147216593874 -0.1430179269588154
+920 0.2123814082431975 0.3108607314148777 -0.1234442418737392
+921 0.3176390306009115 0.4486290028916712 -0.06294479911140871
+922 0.2817264610189374 0.4019280964321206 -0.05523227882242283
+923 0.2490786705903228 0.3594727270540673 -0.0482208967630996
+924 0.2193988610175045 0.3208769365904072 -0.04184691305299226
+925 0.3176390306008995 0.4486290028916544 0.06294479910980287
+926 0.2817264610189145 0.4019280964320878 0.05523227882151691
+927 0.2490786705902903 0.3594727270540203 0.04822089676282994
+928 0.2193988610174627 0.3208769365903474 0.04184691305330096
+929 0.315626483811465 0.4457564389832606 0.1882331394365821
+930 0.2778843262391852 0.3964441107889342 0.164548980484847
+931 0.2435732740063197 0.3516147216592986 0.1430179269586085
+932 0.2123814082431185 0.3108607314147646 0.1234442418739105
+933 0.3118823731957919 0.4404162653876961 0.3118823731952517
+934 0.2707364787003601 0.3862492339249416 0.2707364787000495
+935 0.2333311201832409 0.3370064782012235 0.2333311201831386
+936 0.1993262486983372 0.2922403364950511 0.1993262486984245
+937 0.1882331394376345 0.4457564389832904 -0.3156264838115079
+938 0.1645489804854156 0.3964441107889906 -0.2778843262392676
+939 0.1430179269587375 0.3516147216593797 -0.2435732740064379
+940 0.1234442418736399 0.3108607314148678 -0.212381408243269
+941 0.1911643985258512 0.4529155528210268 -0.1911643985259121
+942 0.1701450205627737 0.4101115099334025 -0.1701450205628903
+943 0.1510364952005889 0.3711987437916556 -0.1510364952007556
+944 0.1336651084536945 0.3358235017346489 -0.133665108453907
+945 0.1928222089975411 0.4569716858839906 -0.06406509553939166
+946 0.1733099314631899 0.4178550366897678 -0.05737102654851602
+947 0.1555714973956314 0.3822944466226164 -0.0512855093028079
+948 0.139445648193178 0.3499666373701695 -0.04575322088042165
+949 0.192822208997535 0.4569716858839757 0.06406509553772072
+950 0.1733099314631784 0.4178550366897393 0.05737102654748599
+951 0.1555714973956149 0.3822944466225757 0.05128550930236052
+952 0.1394456481931571 0.349966637370118 0.04575322088050379
+953 0.1911643985258401 0.4529155528209999 0.1911643985247884
+954 0.1701450205627528 0.4101115099333511 0.1701450205621849
+955 0.1510364952005587 0.3711987437915818 0.1510364952004307
+956 0.1336651084536561 0.3358235017345552 0.1336651084539279
+957 0.1882331394376287 0.4457564389832764 0.31562648381093
+958 0.1645489804854046 0.3964441107889639 0.2778843262388842
+959 0.143017926958722 0.3516147216593417 0.2435732740062312
+960 0.1234442418736199 0.3108607314148191 0.2123814082432232
+961 0.06294479911136666 0.4486290028916589 -0.3176390306009378
+962 0.05523227882234241 0.4019280964320966 -0.2817264610189876
+963 0.04822089676298449 0.359472727054033 -0.2490786705903952
+964 0.04184691305284542 0.3208769365903635 -0.2193988610175968
+965 0.06406509553929729 0.4569716858839682 -0.1928222089976288
+966 0.05737102654833573 0.4178550366897256 -0.1733099314633573
+967 0.05128550930254969 0.3822944466225558 -0.1555714973958714
+968 0.04575322088009244 0.3499666373700924 -0.1394456481934838
+969 0.06471853061541648 0.4618493814253628 -0.06471853061556283
+970 0.0586184935118034 0.4271670009048712 -0.05861849351208279
+971 0.05307300525285437 0.3956375641650723 -0.05307300525325466
+972 0.04803165227450233 0.3669744397670647 -0.04803165227501248
+973 0.06471853061541563 0.4618493814253567 0.06471853061380456
+974 0.05861849351180189 0.4271670009048598 0.05861849351088629
+975 0.05307300525285219 0.3956375641650559 0.0530730052525686
+976 0.04803165227449949 0.3669744397670435 0.04803165227479055
+977 0.06406509553929583 0.4569716858839577 0.1928222089964523
+978 0.05737102654833298 0.417855036689705 0.1733099314625517
+979 0.05128550930254579 0.3822944466225266 0.1555714973954025
+980 0.04575322088008755 0.3499666373700554 0.1394456481933216
+981 0.06294479911136584 0.4486290028916535 0.3176390306003436
+982 0.05523227882234093 0.4019280964320864 0.2817264610185741
+983 0.04822089676298241 0.3594727270540183 0.2490786705901448
+984 0.04184691305284272 0.3208769365903449 0.2193988610174951
+985 -0.06294479910984002 0.4486290028916295 -0.3176390306009292
+986 -0.05523227882158774 0.4019280964320407 -0.2817264610189713
+987 -0.04822089676293149 0.3594727270539528 -0.2490786705903712
+988 -0.04184691305343046 0.3208769365902612 -0.2193988610175661
+989 -0.06406509553780509 0.4569716858839231 -0.1928222089976426
+990 -0.05737102654764713 0.417855036689639 -0.1733099314633836
+991 -0.05128550930259136 0.3822944466224321 -0.1555714973959088
+992 -0.04575322088079811 0.3499666373699346 -0.1394456481935318
+993 -0.06471853061394534 0.4618493814253147 -0.06471853061560506
+994 -0.05861849351115482 0.4271670009047794 -0.05861849351216351
+995 -0.05307300525295343 0.3956375641649407 -0.05307300525337041
+996 -0.04803165227528106 0.3669744397668968 -0.04803165227516007
+997 -0.06471853061394608 0.4618493814253208 0.06471853061375099
+998 -0.05861849351115638 0.4271670009047908 0.05861849351078393
+999 -0.05307300525295564 0.3956375641649572 0.05307300525242195
+1000 -0.04803165227528386 0.366974439766918 0.04803165227460365
+1001 -0.06406509553780655 0.4569716858839339 0.1928222089964102
+1002 -0.05737102654764992 0.4178550366896593 0.1733099314624715
+1003 -0.0512855093025953 0.3822944466224613 0.1555714973952877
+1004 -0.04575322088080307 0.3499666373699721 0.139445648193175
+1005 -0.06294479910984072 0.4486290028916348 0.3176390306003187
+1006 -0.05523227882158916 0.4019280964320509 0.2817264610185266
+1007 -0.04822089676293347 0.3594727270539674 0.2490786705900769
+1008 -0.04184691305343307 0.3208769365902798 0.2193988610174085
+1009 -0.1882331394365974 0.4457564389832311 -0.3156264838115005
+1010 -0.164548980484876 0.3964441107888775 -0.2778843262392529
+1011 -0.14301792695865 0.3516147216592175 -0.2435732740064167
+1012 -0.1234442418739635 0.310860731414661 -0.2123814082432421
+1013 -0.1911643985248234 0.4529155528209369 -0.1911643985259669
+1014 -0.1701450205622522 0.4101115099332314 -0.1701450205629949
+1015 -0.1510364952005272 0.3711987437914102 -0.1510364952009054
+1016 -0.133665108454051 0.3358235017343361 -0.1336651084540977
+1017 -0.192822208996526 0.4569716858839011 -0.06406509553951682
+1018 -0.1733099314626922 0.4178550366895969 -0.05737102654875495
+1019 -0.1555714973956038 0.3822944466223716 -0.05128550930315041
+1020 -0.1394456481935781 0.3499666373698574 -0.04575322088085806
+1021 -0.1928222089965319 0.4569716858839157 0.06406509553757553
+1022 -0.1733099314627037 0.417855036689625 0.05737102654720878
+1023 -0.1555714973956204 0.3822944466224119 0.05128550930196332
+1024 -0.1394456481935991 0.3499666373699094 0.04575322087999755
+1025 -0.1911643985248346 0.4529155528209639 0.1911643985246823
+1026 -0.1701450205622735 0.4101115099332829 0.1701450205619824
+1027 -0.1510364952005574 0.3711987437914839 0.1510364952001404
+1028 -0.1336651084540894 0.3358235017344299 0.1336651084535579
+1029 -0.1882331394366031 0.4457564389832448 0.3156264838108741
+1030 -0.1645489804848869 0.3964441107889042 0.2778843262387776
+1031 -0.1430179269586657 0.3516147216592558 0.2435732740060786
+1032 -0.1234442418739835 0.3108607314147096 0.2123814082430286
+1033 -0.3118823731952449 0.440416265387671 -0.3118823731958364
+1034 -0.2707364787000357 0.3862492339248936 -0.2707364787004452
+1035 -0.2333311201831188 0.3370064782011548 -0.2333311201833631
+1036 -0.1993262486983993 0.2922403364949636 -0.199326248698493
+1037 -0.3156264838109186 0.445756438983228 -0.1882331394377731
+1038 -0.2778843262388628 0.3964441107888722 -0.1645489804856805
+1039 -0.2435732740062005 0.3516147216592099 -0.143017926959117
+1040 -0.212381408243184 0.3108607314146511 -0.1234442418741236
+1041 -0.3176390306003534 0.4486290028916168 -0.06294479911160387
+1042 -0.2817264610185923 0.4019280964320169 -0.05523227882279534
+1043 -0.2490786705901713 0.3594727270539185 -0.04822089676363347
+1044 -0.2193988610175288 0.3208769365902178 -0.04184691305367265
+1045 -0.3176390306003653 0.448629002891634 0.06294479910959772
+1046 -0.2817264610186153 0.4019280964320493 0.05523227882112521
+1047 -0.249078670590204 0.3594727270539655 0.04822089676226875
+1048 -0.2193988610175705 0.3208769365902777 0.04184691305258571
+1049 -0.3156264838109415 0.4457564389832604 0.1882331394364453
+1050 -0.2778843262389063 0.3964441107889342 0.1645489804845856
+1051 -0.2435732740062626 0.3516147216592985 0.143017926958234
+1052 -0.2123814082432632 0.3108607314147643 0.1234442418734332
+1053 -0.3118823731952571 0.4404162653876888 0.3118823731951948
+1054 -0.2707364787000596 0.3862492339249278 0.2707364786999409
+1055 -0.2333311201831531 0.3370064782012037 0.2333311201829831
+1056 -0.1993262486984432 0.2922403364950263 0.1993262486982262
+1057 -0.1993262486984343 0.1993262486983462 -0.2922403364950387
+1058 -0.2333311201831705 0.2333311201832234 -0.3370064782012137
+1059 -0.2707364787001061 0.2707364787003137 -0.3862492339249345
+1060 -0.3118823731953357 0.3118823731957134 -0.4404162653876925
+1061 -0.2123814082432443 0.123444241873669 -0.3108607314147968
+1062 -0.2435732740062965 0.1430179269587117 -0.3516147216593241
+1063 -0.2778843262389981 0.1645489804853291 -0.3964441107889518
+1064 -0.3156264838110972 0.1882331394374813 -0.4457564389832699
+1065 -0.2193988610175426 0.04184691305292677 -0.3208769365903331
+1066 -0.249078670590255 0.04822089676297521 -0.359472727054009
+1067 -0.2817264610187534 0.0552322788222334 -0.4019280964320797
+1068 -0.3176390306005994 0.06294479911114786 -0.44862900289165
+1069 -0.2193988610174909 -0.04184691305334907 -0.3208769365902918
+1070 -0.2490786705902391 -0.04822089676294077 -0.3594727270539767
+1071 -0.2817264610187765 -0.05523227882169678 -0.4019280964320572
+1072 -0.3176390306006652 -0.06294479911005871 -0.4486290028916383
+1073 -0.2123814082431372 -0.1234442418739344 -0.3108607314147322
+1074 -0.2435732740062856 -0.1430179269586761 -0.3516147216592735
+1075 -0.2778843262390933 -0.1645489804849625 -0.3964441107889166
+1076 -0.3156264838113086 -0.1882331394367506 -0.4457564389832513
+1077 -0.199326248698346 -0.1993262486984341 -0.2922403364950384
+1078 -0.2333311201832234 -0.2333311201831706 -0.3370064782012135
+1079 -0.2707364787003137 -0.2707364787001063 -0.3862492339249345
+1080 -0.3118823731957136 -0.3118823731953355 -0.4404162653876925
+1081 -0.1234442418739344 0.2123814082431371 -0.3108607314147322
+1082 -0.143017926958676 0.2435732740062856 -0.3516147216592734
+1083 -0.1645489804849624 0.2778843262390933 -0.3964441107889165
+1084 -0.1882331394367504 0.3156264838113086 -0.4457564389832514
+1085 -0.1336651084539767 0.1336651084537691 -0.3358235017344924
+1086 -0.1510364952005664 0.1510364952005498 -0.3711987437915328
+1087 -0.1701450205624164 0.1701450205626099 -0.4101115099333172
+1088 -0.191164398525125 0.1911643985255498 -0.4529155528209819
+1089 -0.1394456481934188 0.0457532208802905 -0.3499666373700207
+1090 -0.1555714973956251 0.05128550930255885 -0.3822944466224995
+1091 -0.1733099314629122 0.05737102654813718 -0.417855036689686
+1092 -0.1928222089969643 0.06406509553886998 -0.4569716858839478
+1093 -0.1394456481933374 -0.04575322088059991 -0.3499666373700062
+1094 -0.15557149739561 -0.05128550930258216 -0.3822944466224884
+1095 -0.17330993146297 -0.05737102654784566 -0.4178550366896782
+1096 -0.1928222089971024 -0.06406509553823241 -0.4569716858839437
+1097 -0.133665108453769 -0.1336651084539766 -0.3358235017344926
+1098 -0.1510364952005497 -0.1510364952005664 -0.3711987437915328
+1099 -0.1701450205626099 -0.1701450205624163 -0.410111509933317
+1100 -0.1911643985255498 -0.191164398525125 -0.4529155528209818
+1101 -0.1234442418736689 -0.2123814082432445 -0.3108607314147967
+1102 -0.1430179269587115 -0.2435732740062966 -0.3516147216593238
+1103 -0.1645489804853291 -0.277884326238998 -0.3964441107889519
+1104 -0.1882331394374814 -0.3156264838110973 -0.44575643898327
+1105 -0.04184691305334906 0.219398861017491 -0.3208769365902917
+1106 -0.04822089676294081 0.2490786705902391 -0.3594727270539768
+1107 -0.05523227882169678 0.2817264610187764 -0.4019280964320572
+1108 -0.06294479911005871 0.3176390306006653 -0.4486290028916383
+1109 -0.04575322088060002 0.1394456481933375 -0.3499666373700062
+1110 -0.0512855093025823 0.1555714973956101 -0.3822944466224884
+1111 -0.05737102654784587 0.1733099314629701 -0.4178550366896783
+1112 -0.06406509553823247 0.1928222089971024 -0.4569716858839437
+1113 -0.04803165227494897 0.04803165227483429 -0.3669744397669807
+1114 -0.05307300525291227 0.05307300525289558 -0.3956375641650066
+1115 -0.05861849351143371 0.05861849351152451 -0.4271670009048252
+1116 -0.06471853061457628 0.0647185306147855 -0.4618493814253389
+1117 -0.04803165227483443 -0.0480316522749489 -0.3669744397669807
+1118 -0.05307300525289553 -0.05307300525291221 -0.3956375641650066
+1119 -0.05861849351152459 -0.05861849351143365 -0.4271670009048252
+1120 -0.06471853061478548 -0.06471853061457619 -0.4618493814253389
+1121 -0.04575322088029053 -0.1394456481934187 -0.3499666373700207
+1122 -0.05128550930255878 -0.155571497395625 -0.3822944466224995
+1123 -0.05737102654813717 -0.1733099314629121 -0.4178550366896863
+1124 -0.06406509553886994 -0.1928222089969644 -0.4569716858839478
+1125 -0.04184691305292669 -0.2193988610175425 -0.3208769365903333
+1126 -0.04822089676297509 -0.249078670590255 -0.3594727270540089
+1127 -0.05523227882223346 -0.2817264610187532 -0.4019280964320797
+1128 -0.06294479911114798 -0.3176390306005993 -0.4486290028916502
+1129 0.04184691305292679 0.2193988610175424 -0.3208769365903331
+1130 0.04822089676297522 0.2490786705902551 -0.359472727054009
+1131 0.05523227882223344 0.2817264610187532 -0.4019280964320798
+1132 0.06294479911114788 0.3176390306005995 -0.44862900289165
+1133 0.04575322088029053 0.1394456481934188 -0.3499666373700208
+1134 0.05128550930255885 0.1555714973956252 -0.3822944466224998
+1135 0.05737102654813705 0.1733099314629121 -0.4178550366896862
+1136 0.06406509553886994 0.1928222089969643 -0.4569716858839477
+1137 0.04803165227483432 0.04803165227494887 -0.3669744397669806
+1138 0.05307300525289553 0.05307300525291229 -0.3956375641650066
+1139 0.05861849351152452 0.05861849351143371 -0.4271670009048253
+1140 0.06471853061478543 0.06471853061457621 -0.4618493814253389
+1141 0.04803165227494882 -0.04803165227483449 -0.366974439766981
+1142 0.05307300525291225 -0.05307300525289559 -0.3956375641650067
+1143 0.05861849351143368 -0.05861849351152459 -0.4271670009048253
+1144 0.06471853061457621 -0.06471853061478547 -0.4618493814253389
+1145 0.0457532208805999 -0.1394456481933375 -0.3499666373700063
+1146 0.0512855093025822 -0.1555714973956101 -0.3822944466224882
+1147 0.05737102654784568 -0.17330993146297 -0.4178550366896782
+1148 0.06406509553823245 -0.1928222089971025 -0.4569716858839438
+1149 0.04184691305334909 -0.219398861017491 -0.3208769365902918
+1150 0.04822089676294088 -0.2490786705902392 -0.3594727270539764
+1151 0.05523227882169679 -0.2817264610187763 -0.4019280964320573
+1152 0.06294479911005857 -0.3176390306006655 -0.4486290028916383
+1153 0.123444241873669 0.2123814082432444 -0.3108607314147968
+1154 0.1430179269587115 0.2435732740062966 -0.3516147216593238
+1155 0.1645489804853292 0.2778843262389979 -0.3964441107889517
+1156 0.1882331394374813 0.3156264838110971 -0.4457564389832699
+1157 0.1336651084537689 0.1336651084539767 -0.3358235017344924
+1158 0.1510364952005498 0.1510364952005664 -0.3711987437915328
+1159 0.1701450205626099 0.1701450205624165 -0.4101115099333171
+1160 0.1911643985255498 0.1911643985251252 -0.4529155528209818
+1161 0.1394456481933375 0.04575322088059998 -0.3499666373700062
+1162 0.1555714973956102 0.05128550930258228 -0.3822944466224884
+1163 0.1733099314629701 0.0573710265478458 -0.4178550366896782
+1164 0.1928222089971026 0.0640650955382325 -0.4569716858839438
+1165 0.1394456481934187 -0.04575322088029055 -0.3499666373700208
+1166 0.1555714973956251 -0.0512855093025588 -0.3822944466224996
+1167 0.1733099314629121 -0.05737102654813704 -0.417855036689686
+1168 0.1928222089969644 -0.06406509553886995 -0.4569716858839477
+1169 0.1336651084539765 -0.133665108453769 -0.3358235017344925
+1170 0.1510364952005663 -0.1510364952005497 -0.3711987437915328
+1171 0.1701450205624162 -0.1701450205626098 -0.4101115099333168
+1172 0.191164398525125 -0.1911643985255498 -0.4529155528209818
+1173 0.1234442418739344 -0.212381408243137 -0.3108607314147323
+1174 0.143017926958676 -0.2435732740062856 -0.3516147216592734
+1175 0.1645489804849624 -0.2778843262390931 -0.3964441107889166
+1176 0.1882331394367504 -0.3156264838113086 -0.4457564389832513
+1177 0.1993262486983462 0.1993262486984343 -0.2922403364950387
+1178 0.2333311201832235 0.2333311201831706 -0.3370064782012135
+1179 0.2707364787003138 0.2707364787001061 -0.3862492339249346
+1180 0.3118823731957137 0.3118823731953353 -0.4404162653876926
+1181 0.2123814082431373 0.1234442418739344 -0.3108607314147323
+1182 0.2435732740062857 0.143017926958676 -0.3516147216592733
+1183 0.2778843262390933 0.1645489804849625 -0.3964441107889166
+1184 0.3156264838113088 0.1882331394367503 -0.4457564389832513
+1185 0.219398861017491 0.0418469130533491 -0.3208769365902918
+1186 0.2490786705902392 0.04822089676294083 -0.3594727270539767
+1187 0.2817264610187765 0.05523227882169672 -0.4019280964320572
+1188 0.3176390306006656 0.06294479911005865 -0.4486290028916383
+1189 0.2193988610175423 -0.04184691305292675 -0.3208769365903331
+1190 0.2490786705902551 -0.04822089676297519 -0.3594727270540092
+1191 0.2817264610187533 -0.05523227882223343 -0.40192809643208
+1192 0.3176390306005993 -0.06294479911114793 -0.4486290028916501
+1193 0.2123814082432444 -0.123444241873669 -0.3108607314147968
+1194 0.2435732740062966 -0.1430179269587115 -0.3516147216593239
+1195 0.2778843262389981 -0.164548980485329 -0.3964441107889519
+1196 0.3156264838110973 -0.1882331394374814 -0.44575643898327
+1197 0.1993262486984343 -0.1993262486983461 -0.2922403364950387
+1198 0.2333311201831706 -0.2333311201832235 -0.3370064782012137
+1199 0.2707364787001063 -0.2707364787003138 -0.3862492339249345
+1200 0.3118823731953355 -0.3118823731957137 -0.4404162653876926
+1201 -0.4404162653876943 0.3118823731958008 -0.3118823731958479
+1202 -0.386249233924938 0.2707364787003772 -0.2707364787004669
+1203 -0.3370064782012182 0.2333311201832651 -0.2333311201833937
+1204 -0.2922403364950438 0.199326248698369 -0.199326248698534
+1205 -0.4457564389832513 0.3156264838114805 -0.188233139437783
+1206 -0.3964441107889169 0.2778843262392151 -0.1645489804856985
+1207 -0.3516147216592738 0.2435732740063625 -0.1430179269591427
+1208 -0.3108607314147309 0.2123814082431748 -0.1234442418741599
+1209 -0.4486290028916384 0.3176390306009234 -0.06294479911160744
+1210 -0.4019280964320581 0.2817264610189594 -0.05523227882280098
+1211 -0.3594727270539778 0.2490786705903545 -0.04822089676364138
+1212 -0.3208769365902901 0.219398861017548 -0.04184691305368777
+1213 -0.4486290028916505 0.3176390306009434 0.06294479910960067
+1214 -0.4019280964320813 0.2817264610189971 0.0552322788211322
+1215 -0.3594727270540112 0.2490786705904087 0.04822089676227895
+1216 -0.3208769365903308 0.2193988610176187 0.04184691305259215
+1217 -0.4457564389832707 0.3156264838115277 0.1882331394364484
+1218 -0.3964441107889544 0.2778843262393036 0.1645489804845932
+1219 -0.3516147216593277 0.243573274006489 0.1430179269582449
+1220 -0.3108607314147949 0.2123814082433411 0.1234442418734391
+1221 -0.4404162653876937 0.3118823731958517 0.3118823731951962
+1222 -0.3862492339249388 0.2707364787004725 0.2707364786999458
+1223 -0.3370064782012198 0.2333311201834017 0.2333311201829901
+1224 -0.2922403364950377 0.1993262486985512 0.1993262486982257
+1225 -0.4457564389832741 0.1882331394376551 -0.31562648381152
+1226 -0.3964441107889602 0.1645489804854545 -0.2778843262392902
+1227 -0.351614721659336 0.1430179269587933 -0.24357327400647
+1228 -0.3108607314148104 0.1234442418737126 -0.2123814082433136
+1229 -0.4529155528209813 0.1911643985258933 -0.191164398525986
+1230 -0.4101115099333177 0.1701450205628538 -0.1701450205630298
+1231 -0.3711987437915338 0.1510364952007033 -0.1510364952009553
+1232 -0.3358235017344898 0.133665108453844 -0.1336651084541683
+1233 -0.4569716858839439 0.1928222089976183 -0.06406509553952419
+1234 -0.41785503668968 0.173309931463336 -0.05737102654876666
+1235 -0.3822944466224909 0.1555714973958404 -0.05128550930316686
+1236 -0.349966637370003 0.1394456481934509 -0.04575322088088905
+1237 -0.4569716858839482 0.1928222089976521 0.06406509553758136
+1238 -0.4178550366896893 0.1733099314633998 0.05737102654722289
+1239 -0.3822944466225042 0.1555714973959319 0.05128550930198397
+1240 -0.3499666373700168 0.1394456481935707 0.04575322088001088
+1241 -0.4529155528209834 0.191164398525985 0.1911643985246876
+1242 -0.4101115099333235 0.1701450205630264 0.1701450205619965
+1243 -0.3711987437915422 0.1510364952009502 0.1510364952001612
+1244 -0.3358235017344905 0.1336651084541686 0.1336651084535683
+1245 -0.4457564389832543 0.1882331394377827 0.3156264838108764
+1246 -0.3964441107889263 0.1645489804856944 0.2778843262387864
+1247 -0.3516147216592877 0.1430179269591366 0.2435732740060917
+1248 -0.3108607314147322 0.1234442418741666 0.2123814082430261
+1249 -0.4486290028916575 0.06294479911140644 -0.3176390306009325
+1250 -0.4019280964320943 0.05523227882241799 -0.2817264610189764
+1251 -0.3594727270540296 0.04822089676309264 -0.2490786705903788
+1252 -0.3208769365903569 0.04184691305298573 -0.2193988610175813
+1253 -0.4569716858839474 0.06406509553938494 -0.1928222089976538
+1254 -0.417855036689687 0.05737102654850199 -0.173309931463403
+1255 -0.3822944466225009 0.05128550930278779 -0.1555714973959363
+1256 -0.3499666373700167 0.04575322088040164 -0.1394456481935771
+1257 -0.4618493814253391 0.06471853061555809 -0.06471853061561091
+1258 -0.4271670009048277 0.05861849351207168 -0.0586184935121713
+1259 -0.3956375641650107 0.05307300525323851 -0.05307300525338103
+1260 -0.3669744397669763 0.04803165227500157 -0.0480316522751886
+1261 -0.4618493814253395 0.06471853061560628 0.06471853061375593
+1262 -0.42716700090483 0.05861849351216271 0.0586184935107977
+1263 -0.3956375641650138 0.05307300525336875 0.05307300525244232
+1264 -0.3669744397669756 0.04803165227517256 0.04803165227461003
+1265 -0.4569716858839468 0.06406509553952026 0.1928222089964117
+1266 -0.4178550366896885 0.05737102654875709 0.1733099314624793
+1267 -0.3822944466225034 0.05128550930315273 0.1555714973952996
+1268 -0.3499666373700051 0.04575322088088164 0.1394456481931661
+1269 -0.4486290028916432 0.06294479911160422 0.3176390306003178
+1270 -0.4019280964320728 0.05523227882278992 0.2817264610185315
+1271 -0.3594727270539996 0.04822089676362507 0.249078670590085
+1272 -0.320876936590294 0.04184691305368912 0.2193988610173898
+1273 -0.4486290028916479 -0.06294479910980266 -0.3176390306009088
+1274 -0.4019280964320764 -0.05523227882151707 -0.2817264610189306
+1275 -0.3594727270540039 -0.04822089676283035 -0.2490786705903133
+1276 -0.3208769365903234 -0.04184691305329825 -0.2193988610174995
+1277 -0.4569716858839432 -0.0640650955377178 -0.1928222089976203
+1278 -0.4178550366896789 -0.05737102654748204 -0.173309931463338
+1279 -0.3822944466224896 -0.05128550930235497 -0.1555714973958432
+1280 -0.3499666373700002 -0.04575322088048912 -0.1394456481934618
+1281 -0.4618493814253387 -0.06471853061380439 -0.06471853061556292
+1282 -0.4271670009048282 -0.05861849351088877 -0.05861849351207861
+1283 -0.3956375641650109 -0.05307300525257257 -0.05307300525324821
+1284 -0.3669744397669739 -0.04803165227478279 -0.04803165227502421
+1285 -0.4618493814253395 -0.06471853061375668 0.06471853061380557
+1286 -0.4271670009048307 -0.05861849351079896 0.05861849351089385
+1287 -0.3956375641650149 -0.05307300525244402 0.05307300525258019
+1288 -0.3669744397669724 -0.04803165227461233 0.04803165227477937
+1289 -0.4569716858839514 -0.06406509553758415 0.1928222089964444
+1290 -0.4178550366896989 -0.0573710265472312 0.1733099314625438
+1291 -0.3822944466225186 -0.0512855093019963 0.155571497395392
+1292 -0.3499666373700178 -0.04575322088001228 0.1394456481932762
+1293 -0.4486290028916564 -0.0629447991096051 0.3176390306003368
+1294 -0.4019280964320998 -0.05523227882114749 0.2817264610185695
+1295 -0.3594727270540387 -0.04822089676230155 0.2490786705901394
+1296 -0.320876936590335 -0.04184691305259134 0.2193988610174496
+1297 -0.4457564389832621 -0.1882331394365831 -0.3156264838114625
+1298 -0.3964441107889374 -0.1645489804848493 -0.2778843262391787
+1299 -0.3516147216593036 -0.1430179269586121 -0.2435732740063103
+1300 -0.3108607314147665 -0.1234442418739109 -0.2123814082431155
+1301 -0.4529155528209814 -0.1911643985247813 -0.1911643985258958
+1302 -0.4101115099333184 -0.1701450205621738 -0.170145020562855
+1303 -0.3711987437915349 -0.151036495200415 -0.1510364952007045
+1304 -0.3358235017344858 -0.1336651084538984 -0.1336651084538592
+1305 -0.4569716858839483 -0.1928222089964494 -0.06406509553938992
+1306 -0.41785503668969 -0.1733099314625496 -0.0573710265485069
+1307 -0.3822944466225059 -0.1555714973954 -0.0512855093027943
+1308 -0.3499666373700125 -0.1394456481933023 -0.04575322088042928
+1309 -0.4569716858839449 -0.1928222089964162 0.06406509553772052
+1310 -0.4178550366896856 -0.173309931462488 0.05737102654749289
+1311 -0.3822944466224997 -0.1555714973953121 0.0512855093023713
+1312 -0.3499666373699963 -0.1394456481931819 0.04575322088048508
+1313 -0.4529155528209863 -0.1911643985246931 0.1911643985247764
+1314 -0.4101115099333322 -0.1701450205620105 0.1701450205621714
+1315 -0.3711987437915559 -0.1510364952001819 0.1510364952004123
+1316 -0.3358235017344878 -0.1336651084535767 0.1336651084538643
+1317 -0.4457564389832771 -0.1882331394364543 0.3156264838109199
+1318 -0.3964441107889758 -0.164548980484613 0.2778843262388759
+1319 -0.3516147216593591 -0.1430179269582744 0.2435732740062207
+1320 -0.3108607314147966 -0.1234442418734395 0.2123814082431614
+1321 -0.4404162653877025 -0.3118823731952566 -0.3118823731957782
+1322 -0.3862492339249544 -0.2707364787000591 -0.2707364787003317
+1323 -0.337006478201242 -0.2333311201831525 -0.2333311201831998
+1324 -0.2922403364950701 -0.1993262486984372 -0.1993262486982958
+1325 -0.4457564389832698 -0.3156264838109255 -0.1882331394376554
+1326 -0.396444110788954 -0.2778843262388783 -0.164548980485451
+1327 -0.3516147216593275 -0.2435732740062231 -0.1430179269587876
+1328 -0.3108607314147898 -0.2123814082432013 -0.1234442418737245
+1329 -0.4486290028916509 -0.317639030600342 -0.06294479911140999
+1330 -0.4019280964320855 -0.2817264610185751 -0.05523227882241833
+1331 -0.3594727270540177 -0.249078670590147 -0.04822089676309228
+1332 -0.3208769365903247 -0.2193988610174787 -0.04184691305301291
+1333 -0.4486290028916398 -0.3176390306003228 0.06294479910980533
+1334 -0.4019280964320668 -0.2817264610185405 0.05523227882153033
+1335 -0.3594727270539911 -0.2490786705900978 0.04822089676285025
+1336 -0.320876936590281 -0.2193988610174059 0.04184691305328792
+1337 -0.4457564389832557 -0.3156264838108823 0.1882331394365737
+1338 -0.3964441107889341 -0.2778843262388025 0.1645489804848416
+1339 -0.3516147216592996 -0.2435732740061151 0.1430179269586023
+1340 -0.3108607314147249 -0.2123814082430346 0.1234442418738542
+1341 -0.4404162653877002 -0.3118823731952037 0.3118823731952428
+1342 -0.3862492339249615 -0.2707364786999697 0.2707364787000459
+1343 -0.3370064782012529 -0.2333311201830254 0.233331120183135
+1344 -0.2922403364950351 -0.1993262486982262 0.1993262486983617
+1345 0.311882373195269 -0.3118823731957768 0.4404162653877027
+1346 0.270736478699991 -0.270736478700449 0.386249233924968
+1347 0.2333311201830064 -0.2333311201834187 0.3370064782012634
+1348 0.1993262486981766 -0.199326248698531 0.2922403364950379
+1349 0.1882331394365659 -0.3156264838113711 0.4457564389832869
+1350 0.1645489804846169 -0.2778843262392263 0.3964441107889981
+1351 0.1430179269581813 -0.243573274006478 0.3516147216593917
+1352 0.1234442418732754 -0.2123814082433217 0.3108607314148227
+1353 0.06294479910981921 -0.3176390306006926 0.4486290028916557
+1354 0.05523227882124186 -0.2817264610188418 0.4019280964321037
+1355 0.04822089676228909 -0.2490786705903345 0.3594727270540449
+1356 0.041846913052509 -0.2193988610175539 0.3208769365903202
+1357 -0.06294479911135477 -0.3176390306005838 0.4486290028916405
+1358 -0.05523227882263014 -0.2817264610187365 0.4019280964320745
+1359 -0.04822089676354388 -0.2490786705902322 0.3594727270540028
+1360 -0.04184691305364228 -0.2193988610174546 0.3208769365902666
+1361 -0.1882331394376228 -0.315626483811053 0.4457564389832514
+1362 -0.1645489804856053 -0.2778843262389271 0.3964441107889309
+1363 -0.1430179269591082 -0.2435732740061963 0.3516147216592954
+1364 -0.1234442418741459 -0.2123814082430559 0.3108607314146997
+1365 -0.3118823731957586 -0.3118823731952905 0.4404162653877003
+1366 -0.2707364787004103 -0.270736478700035 0.386249233924964
+1367 -0.233331120183363 -0.2333311201830705 0.3370064782012576
+1368 -0.1993262486984757 -0.1993262486982426 0.2922403364950309
+1369 0.3156264838110299 -0.1882331394376169 0.4457564389832687
+1370 0.277884326238879 -0.1645489804856002 0.3964441107889616
+1371 0.2435732740061267 -0.1430179269591013 0.351614721659339
+1372 0.2123814082429876 -0.1234442418741123 0.3108607314147626
+1373 0.1911643985249531 -0.1911643985256534 0.4529155528210131
+1374 0.1701450205620936 -0.1701450205628196 0.4101115099333879
+1375 0.1510364952001043 -0.1510364952008513 0.3711987437916355
+1376 0.1336651084533639 -0.1336651084541027 0.335823501734573
+1377 0.06406509553800732 -0.1928222089971419 0.4569716858839612
+1378 0.05737102654741768 -0.1733099314630562 0.4178550366897223
+1379 0.05128550930196885 -0.1555714973957348 0.3822944466225526
+1380 0.04575322087981035 -0.1394456481934474 0.3499666373700392
+1381 -0.0640650955390647 -0.1928222089969299 0.4569716858839406
+1382 -0.05737102654851069 -0.1733099314628572 0.4178550366896835
+1383 -0.05128550930309446 -0.1555714973955476 0.3822944466224968
+1384 -0.04575322088096542 -0.139445648193271 0.3499666373699682
+1385 -0.1911643985256834 -0.1911643985250306 0.4529155528209712
+1386 -0.1701450205628705 -0.1701450205622475 0.4101115099333082
+1387 -0.1510364952009238 -0.1510364952003257 0.3711987437915213
+1388 -0.1336651084542219 -0.1336651084536192 0.3358235017344274
+1389 -0.3156264838113588 -0.1882331394366241 0.445756438983272
+1390 -0.277884326239198 -0.1645489804847334 0.3964441107889682
+1391 -0.2435732740064369 -0.1430179269583491 0.3516147216593489
+1392 -0.2123814082432897 -0.1234442418734645 0.3108607314147753
+1393 0.3176390306005519 -0.06294479911134587 0.4486290028916614
+1394 0.2817264610186699 -0.05523227882262107 0.4019280964321109
+1395 0.2490786705901361 -0.04822089676353173 0.3594727270540544
+1396 0.2193988610173587 -0.04184691305359357 0.3208769365903482
+1397 0.1928222089968248 -0.06406509553900741 0.456971685883988
+1398 0.1733099314626492 -0.05737102654840893 0.417855036689772
+1399 0.1555714973952489 -0.05128550930294926 0.3822944466226233
+1400 0.1394456481929204 -0.04575322088074781 0.349966637370138
+1401 0.06471853061438494 -0.06471853061483375 0.4618493814253596
+1402 0.05861849351106965 -0.05861849351162554 0.4271670009048738
+1403 0.05307300525239077 -0.05307300525304128 0.3956375641650773
+1404 0.04803165227427804 -0.04803165227498113 0.3669744397670318
+1405 -0.06471853061495086 -0.06471853061452477 0.4618493814253269
+1406 -0.05861849351184188 -0.05861849351134429 0.4271670009048112
+1407 -0.05307300525335035 -0.05307300525278515 0.3956375641649876
+1408 -0.04803165227540784 -0.04803165227474787 0.3669744397669176
+1409 -0.1928222089972106 -0.0640650955380936 0.4569716858839224
+1410 -0.1733099314631807 -0.05737102654759 0.4178550366896466
+1411 -0.1555714973959124 -0.05128550930221684 0.3822944466224439
+1412 -0.1394456481937038 -0.04575322088009381 0.3499666373699094
+1413 -0.3176390306006992 -0.06294479910986032 0.4486290028916441
+1414 -0.2817264610188484 -0.05523227882132782 0.4019280964320789
+1415 -0.2490786705903433 -0.04822089676241313 0.3594727270540084
+1416 -0.2193988610175918 -0.04184691305263398 0.3208769365902894
+1417 0.3176390306006495 0.06294479910987491 0.448629002891675
+1418 0.2817264610187515 0.05523227882133851 0.4019280964321343
+1419 0.2490786705902039 0.04822089676242663 0.3594727270540877
+1420 0.2193988610174219 0.04184691305272568 0.3208769365904015
+1421 0.1928222089970074 0.06406509553811507 0.4569716858839975
+1422 0.1733099314627916 0.05737102654761474 0.4178550366897881
+1423 0.1555714973953546 0.05128550930225045 0.3822944466226463
+1424 0.1394456481929975 0.04575322088020743 0.3499666373701775
+1425 0.06471853061464311 0.0647185306145408 0.4618493814253631
+1426 0.05861849351125385 0.05861849351135945 0.4271670009048784
+1427 0.0530730052525076 0.05307300525280498 0.3956375641650832
+1428 0.04803165227433528 0.04803165227484155 0.3669744397670488
+1429 -0.06471853061469873 0.06471853061483807 0.4618493814253181
+1430 -0.05861849351166856 0.0586184935116183 0.4271670009047922
+1431 -0.05307300525324901 0.05307300525302914 0.39563756416496
+1432 -0.04803165227537341 0.04803165227503399 0.3669744397668919
+1433 -0.1928222089970345 0.06406509553900423 0.4569716858839054
+1434 -0.1733099314630492 0.05737102654838649 0.4178550366896117
+1435 -0.1555714973958222 0.05128550930291535 0.382294446622394
+1436 -0.1394456481936555 0.04575322088077532 0.3499666373698556
+1437 -0.3176390306006038 0.06294479911134608 0.4486290028916243
+1438 -0.2817264610187672 0.05523227882260458 0.4019280964320385
+1439 -0.2490786705902755 0.04822089676350624 0.3594727270539506
+1440 -0.2193988610175443 0.04184691305363566 0.3208769365902268
+1441 0.3156264838113134 0.1882331394366305 0.445756438983296
+1442 0.277884326239106 0.1645489804847283 0.3964441107890065
+1443 0.243573274006304 0.1430179269583401 0.3516147216594029
+1444 0.2123814082431447 0.1234442418735274 0.3108607314148759
+1445 0.1911643985254963 0.1911643985250526 0.4529155528210315
+1446 0.1701450205625101 0.1701450205622733 0.4101115099334168
+1447 0.1510364952004069 0.151036495200361 0.3711987437916764
+1448 0.1336651084535772 0.1336651084537349 0.3358235017346551
+1449 0.06406509553878185 0.1928222089969397 0.4569716858839691
+1450 0.05737102654796969 0.1733099314628605 0.4178550366897318
+1451 0.05128550930231894 0.1555714973955505 0.3822944466225655
+1452 0.04575322087998152 0.1394456481933431 0.349966637370085
+1453 -0.06406509553830833 0.192822208997126 0.4569716858839254
+1454 -0.05737102654799132 0.1733099314630105 0.4178550366896483
+1455 -0.05128550930279093 0.1555714973956677 0.3822944466224457
+1456 -0.04575322088086291 0.1394456481934303 0.3499666373699325
+1457 -0.191164398525163 0.1911643985256226 0.4529155528209396
+1458 -0.170145020562491 0.1701450205627445 0.4101115099332413
+1459 -0.1510364952006736 0.1510364952007422 0.3711987437914249
+1460 -0.1336651084541037 0.1336651084540342 0.3358235017343346
+1461 -0.3156264838110856 0.1882331394376015 0.4457564389832324
+1462 -0.2778843262389794 0.1645489804855537 0.3964441107888856
+1463 -0.24357327400627 0.1430179269590329 0.35161472165923
+1464 -0.2123814082431946 0.1234442418740997 0.3108607314146554
+1465 0.3118823731957189 0.3118823731952944 0.4404162653877173
+1466 0.2707364787003254 0.2707364787000254 0.3862492339249843
+1467 0.2333311201832402 0.233331120183055 0.3370064782012844
+1468 0.1993262486983595 0.1993262486982975 0.2922403364951186
+1469 0.1882331394374582 0.3156264838110749 0.4457564389832944
+1470 0.1645489804852861 0.2778843262389529 0.3964441107890009
+1471 0.1430179269586498 0.2435732740062318 0.351614721659394
+1472 0.1234442418735856 0.2123814082431719 0.3108607314148758
+1473 0.06294479911110916 0.3176390306005906 0.4486290028916611
+1474 0.05523227882215988 0.2817264610187343 0.4019280964321034
+1475 0.04822089676286975 0.2490786705902276 0.3594727270540428
+1476 0.04184691305279067 0.2193988610175169 0.320876936590366
+1477 -0.06294479911009246 0.3176390306006689 0.4486290028916319
+1478 -0.05523227882176151 0.2817264610187809 0.4019280964320475
+1479 -0.04822089676303357 0.2490786705902455 0.3594727270539625
+1480 -0.04184691305346593 0.2193988610175086 0.3208769365902641
+1481 -0.1882331394367676 0.315626483811327 0.4457564389832331
+1482 -0.1645489804849962 0.2778843262391253 0.3964441107888836
+1483 -0.1430179269587246 0.2435732740063319 0.3516147216592262
+1484 -0.1234442418739915 0.2123814082432061 0.3108607314146621
+1485 -0.3118823731953284 0.3118823731957502 0.440416265387673
+1486 -0.2707364787000946 0.2707364787003816 0.3862492339249003
+1487 -0.2333311201831542 0.23333112018332 0.3370064782011644
+1488 -0.1993262486984054 0.19932624869848 0.2922403364949655
+1489 0.4404162653876931 -0.3118823731958006 -0.3118823731958507
+1490 0.3862492339249377 -0.2707364787003794 -0.2707364787004706
+1491 0.337006478201218 -0.2333311201832687 -0.2333311201833988
+1492 0.2922403364950345 -0.1993262486983627 -0.1993262486985485
+1493 0.445756438983252 -0.3156264838114828 -0.1882331394377815
+1494 0.396444110788922 -0.277884326239224 -0.1645489804856917
+1495 0.351614721659282 -0.2435732740063756 -0.1430179269591325
+1496 0.3108607314147236 -0.21238140824317 -0.1234442418741631
+1497 0.4486290028916389 -0.3176390306009263 -0.06294479911160487
+1498 0.4019280964320658 -0.2817264610189729 -0.05523227882279055
+1499 0.3594727270539892 -0.2490786705903744 -0.0482208967636259
+1500 0.3208769365902784 -0.2193988610175404 -0.04184691305369269
+1501 0.4486290028916513 -0.3176390306009474 0.06294479910960203
+1502 0.401928096432091 -0.2817264610190153 0.05523227882114238
+1503 0.3594727270540258 -0.2490786705904353 0.04822089676229428
+1504 0.3208769365903151 -0.2193988610176084 0.04184691305257872
+1505 0.4457564389832713 -0.3156264838115326 0.1882331394364515
+1506 0.3964441107889659 -0.2778843262393254 0.1645489804846086
+1507 0.3516147216593454 -0.243573274006522 0.1430179269582681
+1508 0.3108607314147748 -0.2123814082433269 0.1234442418734273
+1509 0.4404162653876949 -0.3118823731958574 0.3118823731952001
+1510 0.3862492339249524 -0.2707364787004986 0.2707364786999643
+1511 0.3370064782012404 -0.2333311201834409 0.2333311201830177
+1512 0.2922403364950137 -0.1993262486985331 0.1993262486982113
+1513 0.4457564389832706 -0.1882331394376534 -0.3156264838115274
+1514 0.3964441107889548 -0.1645489804854539 -0.2778843262393021
+1515 0.3516147216593281 -0.1430179269587925 -0.2435732740064872
+1516 0.3108607314147943 -0.1234442418737018 -0.2123814082433401
+1517 0.4529155528209828 -0.1911643985258939 -0.1911643985259845
+1518 0.410111509933323 -0.1701450205628592 -0.1701450205630243
+1519 0.371198743791542 -0.1510364952007115 -0.1510364952009475
+1520 0.3358235017344877 -0.1336651084538343 -0.133665108454168
+1521 0.4569716858839457 -0.1928222089976188 -0.06406509553952118
+1522 0.4178550366896874 -0.173309931463344 -0.05737102654875754
+1523 0.3822944466225021 -0.1555714973958526 -0.05128550930315359
+1524 0.3499666373699996 -0.1394456481934355 -0.04575322088088694
+1525 0.4569716858839505 -0.1928222089976527 0.06406509553758191
+1526 0.4178550366896986 -0.1733099314634107 0.05737102654722838
+1527 0.3822944466225181 -0.1555714973959482 0.05128550930199199
+1528 0.3499666373700115 -0.1394456481935492 0.04575322088000125
+1529 0.4529155528209848 -0.1911643985259856 0.1911643985246923
+1530 0.4101115099333322 -0.1701450205630398 0.170145020562011
+1531 0.3711987437915555 -0.1510364952009707 0.1510364952001821
+1532 0.3358235017344804 -0.1336651084541401 0.13366510845357
+1533 0.4457564389832548 -0.1882331394377832 0.3156264838108819
+1534 0.3964441107889345 -0.1645489804857108 0.2778843262388039
+1535 0.3516147216593 -0.1430179269591616 0.2435732740061171
+1536 0.3108607314147169 -0.1234442418741313 0.2123814082430286
+1537 0.4486290028916505 -0.06294479911140494 -0.317639030600943
+1538 0.4019280964320824 -0.05523227882241693 -0.2817264610189966
+1539 0.3594727270540127 -0.04822089676309139 -0.2490786705904077
+1540 0.3208769365903312 -0.04184691305297517 -0.219398861017619
+1541 0.4569716858839488 -0.06406509553938358 -0.192822208997652
+1542 0.4178550366896914 -0.0573710265485036 -0.1733099314633988
+1543 0.3822944466225072 -0.05128550930279041 -0.1555714973959302
+1544 0.3499666373700174 -0.04575322088038612 -0.139445648193572
+1545 0.4618493814253404 -0.06471853061555556 -0.06471853061560713
+1546 0.427167000904833 -0.05861849351207368 -0.05861849351216325
+1547 0.3956375641650183 -0.05307300525324205 -0.05307300525336951
+1548 0.3669744397669759 -0.04803165227497673 -0.04803165227517851
+1549 0.461849381425341 -0.06471853061560313 0.06471853061375527
+1550 0.4271670009048357 -0.05861849351216585 0.05861849351079761
+1551 0.3956375641650219 -0.05307300525337417 0.05307300525244218
+1552 0.3669744397669745 -0.04803165227513866 0.04803165227460329
+1553 0.4569716858839468 -0.06406509553951655 0.1928222089964168
+1554 0.4178550366896908 -0.05737102654876199 0.1733099314624909
+1555 0.3822944466225073 -0.05128550930316118 0.1555714973953163
+1556 0.3499666373699978 -0.04575322088083902 0.1394456481931788
+1557 0.4486290028916415 -0.06294479911160063 0.3176390306003242
+1558 0.4019280964320718 -0.0552322788227982 0.2817264610185453
+1559 0.3594727270539987 -0.04822089676363835 0.2490786705901047
+1560 0.3208769365902804 -0.04184691305363963 0.2193988610174047
+1561 0.4486290028916384 0.06294479910980305 -0.3176390306009231
+1562 0.4019280964320585 0.05523227882151607 -0.2817264610189584
+1563 0.3594727270539786 0.04822089676282879 -0.2490786705903529
+1564 0.3208769365902891 0.04184691305330437 -0.2193988610175476
+1565 0.4569716858839436 0.0640650955377218 -0.1928222089976179
+1566 0.4178550366896803 0.05737102654748571 -0.1733099314633342
+1567 0.3822944466224915 0.05128550930235992 -0.1555714973958379
+1568 0.3499666373700006 0.04575322088051293 -0.1394456481934511
+1569 0.4618493814253384 0.06471853061381089 -0.06471853061555838
+1570 0.427167000904828 0.05861849351089468 -0.05861849351207125
+1571 0.3956375641650108 0.05307300525258034 -0.0530730052532378
+1572 0.3669744397669715 0.04803165227482029 -0.0480316522750058
+1573 0.4618493814253383 0.06471853061376495 0.06471853061380324
+1574 0.4271670009048292 0.05861849351080593 0.05861849351088799
+1575 0.3956375641650122 0.05307300525245307 0.05307300525257147
+1576 0.3669744397669684 0.04803165227466299 0.04803165227477453
+1577 0.4569716858839478 0.06406509553759325 0.1928222089964491
+1578 0.4178550366896915 0.05737102654723689 0.1733099314625511
+1579 0.3822944466225076 0.051285509302003 0.1555714973954023
+1580 0.3499666373700063 0.04575322088007283 0.1394456481932965
+1581 0.4486290028916506 0.06294479910961399 0.3176390306003422
+1582 0.401928096432087 0.05523227882114952 0.2817264610185776
+1583 0.3594727270540203 0.04822089676230283 0.2490786705901509
+1584 0.3208769365903179 0.04184691305265859 0.2193988610174731
+1585 0.4457564389832518 0.1882331394365782 -0.3156264838114806
+1586 0.3964441107889176 0.1645489804848388 -0.2778843262392146
+1587 0.3516147216592754 0.1430179269585966 -0.2435732740063617
+1588 0.310860731414731 0.1234442418738986 -0.2123814082431752
+1589 0.4529155528209822 0.1911643985247805 -0.1911643985258934
+1590 0.4101115099333191 0.1701450205621687 -0.170145020562853
+1591 0.3711987437915362 0.1510364952004076 -0.1510364952007021
+1592 0.3358235017344901 0.1336651084539049 -0.1336651084538454
+1593 0.4569716858839483 0.1928222089964477 -0.06406509553938529
+1594 0.4178550366896896 0.1733099314625409 -0.05737102654850174
+1595 0.3822944466225047 0.1555714973953868 -0.05128550930278723
+1596 0.3499666373700173 0.1394456481933112 -0.04575322088040509
+1597 0.4569716858839445 0.1928222089964137 0.06406509553771726
+1598 0.4178550366896826 0.173309931462475 0.05737102654748234
+1599 0.382294446622495 0.1555714973952924 0.05128550930235551
+1600 0.3499666373700016 0.1394456481931942 0.04575322088048431
+1601 0.4529155528209829 0.1911643985246887 0.191164398524782
+1602 0.4101115099333223 0.170145020561991 0.1701450205621766
+1603 0.3711987437915412 0.1510364952001525 0.1510364952004191
+1604 0.3358235017344868 0.1336651084535898 0.1336651084538966
+1605 0.4457564389832711 0.1882331394364481 0.3156264838109266
+1606 0.3964441107889583 0.1645489804845866 0.2778843262388822
+1607 0.3516147216593338 0.143017926958235 0.2435732740062287
+1608 0.3108607314147893 0.1234442418734539 0.2123814082432003
+1609 0.440416265387693 0.3118823731952487 -0.3118823731957995
+1610 0.386249233924936 0.270736478700043 -0.2707364787003749
+1611 0.3370064782012153 0.2333311201831291 -0.2333311201832622
+1612 0.2922403364950393 0.1993262486984139 -0.1993262486983659
+1613 0.4457564389832706 0.3156264838109238 -0.1882331394376533
+1614 0.3964441107889544 0.2778843262388716 -0.1645489804854512
+1615 0.351614721659328 0.2435732740062135 -0.1430179269587885
+1616 0.3108607314147983 0.2123814082432038 -0.1234442418737081
+1617 0.4486290028916517 0.317639030600339 -0.06294479911140563
+1618 0.4019280964320844 0.2817264610185637 -0.05523227882241606
+1619 0.3594727270540156 0.2490786705901301 -0.04822089676308984
+1620 0.3208769365903362 0.2193988610174812 -0.0418469130529847
+1621 0.4486290028916404 0.3176390306003181 0.0629447991098015
+1622 0.401928096432063 0.2817264610185236 0.05523227882151555
+1623 0.3594727270539851 0.2490786705900728 0.04822089676282813
+1624 0.3208769365902959 0.2193988610174097 0.04184691305329214
+1625 0.445756438983254 0.3156264838108748 0.1882331394365798
+1626 0.396444110788923 0.2778843262387768 0.1645489804848442
+1627 0.3516147216592832 0.2435732740060775 0.1430179269586046
+1628 0.3108607314147365 0.2123814082430355 0.1234442418738974
+1629 0.4404162653876951 0.3118823731951929 0.3118823731952511
+1630 0.3862492339249417 0.2707364786999345 0.2707364787000507
+1631 0.3370064782012239 0.233331120182974 0.2333311201831403
+1632 0.2922403364950419 0.1993262486982243 0.1993262486984169
+1633 -0.3118823731958161 -0.4404162653877217 -0.3118823731957915
+1634 -0.2707364787004075 -0.3862492339249914 -0.2707364787003571
+1635 -0.2333311201833086 -0.3370064782012952 -0.2333311201832362
+1636 -0.1993262486984205 -0.2922403364951369 -0.199326248698343
+1637 -0.3156264838114974 -0.4457564389832873 -0.1882331394376626
+1638 -0.2778843262392494 -0.3964441107889882 -0.1645489804854642
+1639 -0.2435732740064117 -0.3516147216593759 -0.1430179269588063
+1640 -0.2123814082432277 -0.3108607314148497 -0.1234442418737499
+1641 -0.3176390306009271 -0.448629002891662 -0.06294479911141136
+1642 -0.2817264610189705 -0.4019280964321076 -0.05523227882242031
+1643 -0.2490786705903705 -0.3594727270540493 -0.04822089676309528
+1644 -0.2193988610175513 -0.3208769365903631 -0.0418469130530191
+1645 -0.3176390306009209 -0.4486290028916426 0.06294479910980579
+1646 -0.28172646101896 -0.4019280964320731 0.05523227882153215
+1647 -0.2490786705903561 -0.3594727270539996 0.04822089676285282
+1648 -0.2193988610175248 -0.3208769365902886 0.04184691305328801
+1649 -0.3156264838114932 -0.4457564389832505 0.1882331394365717
+1650 -0.2778843262392464 -0.3964441107889251 0.1645489804848388
+1651 -0.2435732740064087 -0.3516147216592869 0.1430179269585981
+1652 -0.2123814082431997 -0.3108607314147045 0.1234442418738451
+1653 -0.3118823731958269 -0.4404162653876904 0.311882373195236
+1654 -0.2707364787004372 -0.386249233924944 0.2707364787000343
+1655 -0.2333311201833522 -0.3370064782012282 0.2333311201831183
+1656 -0.199326248698436 -0.2922403364949985 0.1993262486983356
+1657 -0.1882331394376612 -0.4457564389832954 -0.3156264838114857
+1658 -0.1645489804854665 -0.396444110789001 -0.2778843262392222
+1659 -0.1430179269588104 -0.3516147216593949 -0.2435732740063725
+1660 -0.1234442418737323 -0.3108607314148814 -0.2123814082431968
+1661 -0.1911643985258996 -0.4529155528210101 -0.1911643985259072
+1662 -0.1701450205628667 -0.4101115099333743 -0.1701450205628761
+1663 -0.1510364952007219 -0.3711987437916155 -0.1510364952007348
+1664 -0.1336651084538616 -0.3358235017345842 -0.1336651084539014
+1665 -0.1928222089976168 -0.4569716858839624 -0.06406509553939146
+1666 -0.173309931463336 -0.4178550366897188 -0.05737102654850847
+1667 -0.1555714973958407 -0.3822944466225468 -0.05128550930279643
+1668 -0.1394456481934392 -0.349966637370059 -0.04575322088043763
+1669 -0.1928222089976364 -0.4569716858839388 0.06406509553772005
+1670 -0.1733099314633745 -0.4178550366896758 0.05737102654749379
+1671 -0.1555714973958961 -0.3822944466224857 0.05128550930237272
+1672 -0.1394456481935051 -0.3499666373699711 0.04575322088047935
+1673 -0.1911643985259634 -0.4529155528209639 0.1911643985247678
+1674 -0.1701450205629919 -0.4101115099332927 0.1701450205621571
+1675 -0.1510364952009017 -0.3711987437914994 0.151036495200392
+1676 -0.1336651084540764 -0.3358235017344062 0.133665108453829
+1677 -0.1882331394377661 -0.4457564389832492 0.3156264838109002
+1678 -0.1645489804856727 -0.3964441107889249 0.2778843262388417
+1679 -0.1430179269591063 -0.3516147216592871 0.2435732740061718
+1680 -0.1234442418740857 -0.3108607314146931 0.2123814082430877
+1681 -0.06294479911140216 -0.4486290028916658 -0.3176390306009209
+1682 -0.05523227882240969 -0.4019280964321112 -0.2817264610189533
+1683 -0.0482208967630807 -0.359472727054054 -0.2490786705903455
+1684 -0.04184691305296983 -0.3208769365903837 -0.2193988610175439
+1685 -0.06406509553937428 -0.4569716858839597 -0.1928222089976264
+1686 -0.0573710265484822 -0.4178550366897125 -0.1733099314633486
+1687 -0.05128550930275926 -0.3822944466225374 -0.1555714973958582
+1688 -0.04575322088036197 -0.3499666373700548 -0.1394456481934873
+1689 -0.06471853061553955 -0.4618493814253481 -0.06471853061556361
+1690 -0.05861849351203781 -0.4271670009048482 -0.05861849351207762
+1691 -0.05307300525319016 -0.39563756416504 -0.05307300525324644
+1692 -0.04803165227493246 -0.3669744397670009 -0.04803165227503164
+1693 -0.06471853061557994 -0.4618493814253378 0.06471853061380595
+1694 -0.05861849351211533 -0.4271670009048308 0.0586184935108976
+1695 -0.05307300525330125 -0.3956375641650154 0.05307300525258582
+1696 -0.04803165227507247 -0.3669744397669596 0.04803165227477366
+1697 -0.06406509553948909 -0.4569716858839413 0.1928222089964409
+1698 -0.05737102654870267 -0.4178550366896833 0.1733099314625407
+1699 -0.05128550930307551 -0.3822944466224967 0.1555714973953879
+1700 -0.0457532208807604 -0.3499666373699737 0.1394456481932547
+1701 -0.06294479911157246 -0.4486290028916435 0.3176390306003279
+1702 -0.05523227882273676 -0.4019280964320798 0.2817264610185573
+1703 -0.04822089676354945 -0.3594727270540101 0.2490786705901226
+1704 -0.04184691305355945 -0.320876936590279 0.2193988610174087
+1705 0.06294479910980125 -0.4486290028916406 -0.3176390306009203
+1706 0.0552322788215148 -0.401928096432063 -0.2817264610189517
+1707 0.04822089676282713 -0.3594727270539854 -0.2490786705903434
+1708 0.04184691305329332 -0.3208769365902951 -0.219398861017541
+1709 0.06406509553771561 -0.4569716858839331 -0.1928222089976473
+1710 0.05737102654747796 -0.4178550366896617 -0.1733099314633881
+1711 0.05128550930234932 -0.382294446622465 -0.1555714973959147
+1712 0.0457532208804822 -0.3499666373699612 -0.1394456481935593
+1713 0.06471853061380251 -0.4618493814253336 -0.06471853061560927
+1714 0.05861849351088458 -0.4271670009048212 -0.05861849351216489
+1715 0.05307300525256635 -0.3956375641650008 -0.05307300525337147
+1716 0.04803165227477785 -0.3669744397669495 -0.04803165227519098
+1717 0.06471853061375563 -0.4618493814253464 0.06471853061375789
+1718 0.05861849351079531 -0.4271670009048476 0.05861849351080578
+1719 0.0530730052524385 -0.3956375641650395 0.05307300525245436
+1720 0.0480316522746134 -0.3669744397669887 0.04803165227460603
+1721 0.0640650955375832 -0.4569716858839626 0.1928222089964188
+1722 0.05737102654722595 -0.4178550366897243 0.1733099314624988
+1723 0.05128550930198817 -0.3822944466225556 0.1555714973953281
+1724 0.04575322088001722 -0.3499666373700475 0.1394456481931783
+1725 0.06294479910960271 -0.4486290028916619 0.3176390306003313
+1726 0.05523227882113744 -0.401928096432115 0.2817264610185638
+1727 0.04822089676228656 -0.3594727270540607 0.2490786705901322
+1728 0.04184691305259652 -0.3208769365903426 0.2193988610174207
+1729 0.1882331394365694 -0.4457564389832435 -0.3156264838114982
+1730 0.1645489804848241 -0.3964441107889033 -0.2778843262392462
+1731 0.1430179269585758 -0.3516147216592546 -0.2435732740064072
+1732 0.1234442418738625 -0.3108607314146999 -0.2123814082432403
+1733 0.191164398524759 -0.4529155528209592 -0.1911643985259759
+1734 0.1701450205621318 -0.4101115099332778 -0.170145020563007
+1735 0.1510364952003551 -0.3711987437914774 -0.1510364952009225
+1736 0.1336651084538192 -0.3358235017344044 -0.1336651084541404
+1737 0.1928222089964252 -0.4569716858839409 -0.06406509553952248
+1738 0.1733099314625042 -0.4178550366896797 -0.0573710265487587
+1739 0.1555714973953348 -0.3822944466224907 -0.05128550930315508
+1740 0.1394456481932175 -0.3499666373699826 -0.04575322088089458
+1741 0.192822208996398 -0.4569716858839696 0.06406509553758562
+1742 0.1733099314624527 -0.4178550366897362 0.05737102654723732
+1743 0.1555714973952614 -0.3822944466225722 0.05128550930200501
+1744 0.1394456481931192 -0.3499666373700763 0.04575322088001055
+1745 0.1911643985246741 -0.4529155528210222 0.1911643985247047
+1746 0.1701450205619725 -0.4101115099334042 0.1701450205620366
+1747 0.151036495200127 -0.3711987437916597 0.1510364952002193
+1748 0.1336651084535142 -0.335823501734606 0.1336651084536085
+1749 0.1882331394364256 -0.4457564389832973 0.3156264838109072
+1750 0.1645489804845551 -0.3964441107890178 0.2778843262388548
+1751 0.143017926958191 -0.3516147216594198 0.2435732740061906
+1752 0.1234442418733483 -0.3108607314148598 0.2123814082431113
+1753 0.311882373195237 -0.4404162653876776 -0.3118823731958351
+1754 0.2707364787000234 -0.3862492339249078 -0.2707364787004408
+1755 0.2333311201831011 -0.3370064782011757 -0.2333311201833561
+1756 0.1993262486983677 -0.2922403364949805 -0.199326248698495
+1757 0.3156264838109005 -0.44575643898324 -0.1882331394377771
+1758 0.2778843262388323 -0.3964441107888995 -0.164548980485683
+1759 0.2435732740061574 -0.3516147216592496 -0.14301792695912
+1760 0.2123814082431115 -0.3108607314146818 -0.1234442418741488
+1761 0.3176390306003262 -0.4486290028916374 -0.06294479911160561
+1762 0.2817264610185468 -0.4019280964320629 -0.05523227882279128
+1763 0.2490786705901064 -0.3594727270539853 -0.04822089676362686
+1764 0.2193988610174203 -0.3208769365902723 -0.04184691305369618
+1765 0.3176390306003293 -0.4486290028916614 0.06294479910960381
+1766 0.2817264610185542 -0.401928096432111 0.05523227882114663
+1767 0.2490786705901173 -0.3594727270540546 0.04822089676230052
+1768 0.2193988610174263 -0.3208769365903504 0.04184691305258371
+1769 0.3156264838108969 -0.4457564389832914 0.1882331394364583
+1770 0.2778843262388304 -0.3964441107890043 0.1645489804846225
+1771 0.2435732740061548 -0.3516147216594007 0.1430179269582883
+1772 0.2123814082430843 -0.3108607314148424 0.1234442418734494
+1773 0.3118823731952049 -0.4404162653877187 0.3118823731952147
+1774 0.2707364786999709 -0.3862492339249989 0.2707364786999932
+1775 0.233331120183027 -0.3370064782013069 0.2333311201830595
+1776 0.1993262486982335 -0.2922403364950946 0.19932624869826
+$EndNodes
+$Elements
+1764
+1 3 2 5 6 4 35 193 34
+2 3 2 5 6 34 193 194 33
+3 3 2 5 6 33 194 195 32
+4 3 2 5 6 32 195 196 31
+5 3 2 5 6 31 196 197 30
+6 3 2 5 6 30 197 198 29
+7 3 2 5 6 29 198 28 3
+8 3 2 5 6 35 36 199 193
+9 3 2 5 6 193 199 200 194
+10 3 2 5 6 194 200 201 195
+11 3 2 5 6 195 201 202 196
+12 3 2 5 6 196 202 203 197
+13 3 2 5 6 197 203 204 198
+14 3 2 5 6 198 204 27 28
+15 3 2 5 6 36 37 205 199
+16 3 2 5 6 199 205 206 200
+17 3 2 5 6 200 206 207 201
+18 3 2 5 6 201 207 208 202
+19 3 2 5 6 202 208 209 203
+20 3 2 5 6 203 209 210 204
+21 3 2 5 6 204 210 26 27
+22 3 2 5 6 37 38 211 205
+23 3 2 5 6 205 211 212 206
+24 3 2 5 6 206 212 213 207
+25 3 2 5 6 207 213 214 208
+26 3 2 5 6 208 214 215 209
+27 3 2 5 6 209 215 216 210
+28 3 2 5 6 210 216 25 26
+29 3 2 5 6 38 39 217 211
+30 3 2 5 6 211 217 218 212
+31 3 2 5 6 212 218 219 213
+32 3 2 5 6 213 219 220 214
+33 3 2 5 6 214 220 221 215
+34 3 2 5 6 215 221 222 216
+35 3 2 5 6 216 222 24 25
+36 3 2 5 6 39 40 223 217
+37 3 2 5 6 217 223 224 218
+38 3 2 5 6 218 224 225 219
+39 3 2 5 6 219 225 226 220
+40 3 2 5 6 220 226 227 221
+41 3 2 5 6 221 227 228 222
+42 3 2 5 6 222 228 23 24
+43 3 2 5 6 40 1 17 223
+44 3 2 5 6 223 17 18 224
+45 3 2 5 6 224 18 19 225
+46 3 2 5 6 225 19 20 226
+47 3 2 5 6 226 20 21 227
+48 3 2 5 6 227 21 22 228
+49 3 2 5 6 228 22 2 23
+50 3 2 2 15 4 35 229 65
+51 3 2 2 15 65 229 230 66
+52 3 2 2 15 66 230 231 67
+53 3 2 2 15 67 231 232 68
+54 3 2 2 15 68 232 233 69
+55 3 2 2 15 69 233 234 70
+56 3 2 2 15 70 234 41 5
+57 3 2 2 15 35 36 235 229
+58 3 2 2 15 229 235 236 230
+59 3 2 2 15 230 236 237 231
+60 3 2 2 15 231 237 238 232
+61 3 2 2 15 232 238 239 233
+62 3 2 2 15 233 239 240 234
+63 3 2 2 15 234 240 42 41
+64 3 2 2 15 36 37 241 235
+65 3 2 2 15 235 241 242 236
+66 3 2 2 15 236 242 243 237
+67 3 2 2 15 237 243 244 238
+68 3 2 2 15 238 244 245 239
+69 3 2 2 15 239 245 246 240
+70 3 2 2 15 240 246 43 42
+71 3 2 2 15 37 38 247 241
+72 3 2 2 15 241 247 248 242
+73 3 2 2 15 242 248 249 243
+74 3 2 2 15 243 249 250 244
+75 3 2 2 15 244 250 251 245
+76 3 2 2 15 245 251 252 246
+77 3 2 2 15 246 252 44 43
+78 3 2 2 15 38 39 253 247
+79 3 2 2 15 247 253 254 248
+80 3 2 2 15 248 254 255 249
+81 3 2 2 15 249 255 256 250
+82 3 2 2 15 250 256 257 251
+83 3 2 2 15 251 257 258 252
+84 3 2 2 15 252 258 45 44
+85 3 2 2 15 39 40 259 253
+86 3 2 2 15 253 259 260 254
+87 3 2 2 15 254 260 261 255
+88 3 2 2 15 255 261 262 256
+89 3 2 2 15 256 262 263 257
+90 3 2 2 15 257 263 264 258
+91 3 2 2 15 258 264 46 45
+92 3 2 2 15 40 1 71 259
+93 3 2 2 15 259 71 72 260
+94 3 2 2 15 260 72 73 261
+95 3 2 2 15 261 73 74 262
+96 3 2 2 15 262 74 75 263
+97 3 2 2 15 263 75 76 264
+98 3 2 2 15 264 76 6 46
+99 3 2 3 19 1 17 265 71
+100 3 2 3 19 71 265 266 72
+101 3 2 3 19 72 266 267 73
+102 3 2 3 19 73 267 268 74
+103 3 2 3 19 74 268 269 75
+104 3 2 3 19 75 269 270 76
+105 3 2 3 19 76 270 47 6
+106 3 2 3 19 17 18 271 265
+107 3 2 3 19 265 271 272 266
+108 3 2 3 19 266 272 273 267
+109 3 2 3 19 267 273 274 268
+110 3 2 3 19 268 274 275 269
+111 3 2 3 19 269 275 276 270
+112 3 2 3 19 270 276 48 47
+113 3 2 3 19 18 19 277 271
+114 3 2 3 19 271 277 278 272
+115 3 2 3 19 272 278 279 273
+116 3 2 3 19 273 279 280 274
+117 3 2 3 19 274 280 281 275
+118 3 2 3 19 275 281 282 276
+119 3 2 3 19 276 282 49 48
+120 3 2 3 19 19 20 283 277
+121 3 2 3 19 277 283 284 278
+122 3 2 3 19 278 284 285 279
+123 3 2 3 19 279 285 286 280
+124 3 2 3 19 280 286 287 281
+125 3 2 3 19 281 287 288 282
+126 3 2 3 19 282 288 50 49
+127 3 2 3 19 20 21 289 283
+128 3 2 3 19 283 289 290 284
+129 3 2 3 19 284 290 291 285
+130 3 2 3 19 285 291 292 286
+131 3 2 3 19 286 292 293 287
+132 3 2 3 19 287 293 294 288
+133 3 2 3 19 288 294 51 50
+134 3 2 3 19 21 22 295 289
+135 3 2 3 19 289 295 296 290
+136 3 2 3 19 290 296 297 291
+137 3 2 3 19 291 297 298 292
+138 3 2 3 19 292 298 299 293
+139 3 2 3 19 293 299 300 294
+140 3 2 3 19 294 300 52 51
+141 3 2 3 19 22 2 77 295
+142 3 2 3 19 295 77 78 296
+143 3 2 3 19 296 78 79 297
+144 3 2 3 19 297 79 80 298
+145 3 2 3 19 298 80 81 299
+146 3 2 3 19 299 81 82 300
+147 3 2 3 19 300 82 7 52
+148 3 2 1 23 2 23 301 77
+149 3 2 1 23 77 301 302 78
+150 3 2 1 23 78 302 303 79
+151 3 2 1 23 79 303 304 80
+152 3 2 1 23 80 304 305 81
+153 3 2 1 23 81 305 306 82
+154 3 2 1 23 82 306 53 7
+155 3 2 1 23 23 24 307 301
+156 3 2 1 23 301 307 308 302
+157 3 2 1 23 302 308 309 303
+158 3 2 1 23 303 309 310 304
+159 3 2 1 23 304 310 311 305
+160 3 2 1 23 305 311 312 306
+161 3 2 1 23 306 312 54 53
+162 3 2 1 23 24 25 313 307
+163 3 2 1 23 307 313 314 308
+164 3 2 1 23 308 314 315 309
+165 3 2 1 23 309 315 316 310
+166 3 2 1 23 310 316 317 311
+167 3 2 1 23 311 317 318 312
+168 3 2 1 23 312 318 55 54
+169 3 2 1 23 25 26 319 313
+170 3 2 1 23 313 319 320 314
+171 3 2 1 23 314 320 321 315
+172 3 2 1 23 315 321 322 316
+173 3 2 1 23 316 322 323 317
+174 3 2 1 23 317 323 324 318
+175 3 2 1 23 318 324 56 55
+176 3 2 1 23 26 27 325 319
+177 3 2 1 23 319 325 326 320
+178 3 2 1 23 320 326 327 321
+179 3 2 1 23 321 327 328 322
+180 3 2 1 23 322 328 329 323
+181 3 2 1 23 323 329 330 324
+182 3 2 1 23 324 330 57 56
+183 3 2 1 23 27 28 331 325
+184 3 2 1 23 325 331 332 326
+185 3 2 1 23 326 332 333 327
+186 3 2 1 23 327 333 334 328
+187 3 2 1 23 328 334 335 329
+188 3 2 1 23 329 335 336 330
+189 3 2 1 23 330 336 58 57
+190 3 2 1 23 28 3 83 331
+191 3 2 1 23 331 83 84 332
+192 3 2 1 23 332 84 85 333
+193 3 2 1 23 333 85 86 334
+194 3 2 1 23 334 86 87 335
+195 3 2 1 23 335 87 88 336
+196 3 2 1 23 336 88 8 58
+197 3 2 4 27 3 29 337 83
+198 3 2 4 27 83 337 338 84
+199 3 2 4 27 84 338 339 85
+200 3 2 4 27 85 339 340 86
+201 3 2 4 27 86 340 341 87
+202 3 2 4 27 87 341 342 88
+203 3 2 4 27 88 342 59 8
+204 3 2 4 27 29 30 343 337
+205 3 2 4 27 337 343 344 338
+206 3 2 4 27 338 344 345 339
+207 3 2 4 27 339 345 346 340
+208 3 2 4 27 340 346 347 341
+209 3 2 4 27 341 347 348 342
+210 3 2 4 27 342 348 60 59
+211 3 2 4 27 30 31 349 343
+212 3 2 4 27 343 349 350 344
+213 3 2 4 27 344 350 351 345
+214 3 2 4 27 345 351 352 346
+215 3 2 4 27 346 352 353 347
+216 3 2 4 27 347 353 354 348
+217 3 2 4 27 348 354 61 60
+218 3 2 4 27 31 32 355 349
+219 3 2 4 27 349 355 356 350
+220 3 2 4 27 350 356 357 351
+221 3 2 4 27 351 357 358 352
+222 3 2 4 27 352 358 359 353
+223 3 2 4 27 353 359 360 354
+224 3 2 4 27 354 360 62 61
+225 3 2 4 27 32 33 361 355
+226 3 2 4 27 355 361 362 356
+227 3 2 4 27 356 362 363 357
+228 3 2 4 27 357 363 364 358
+229 3 2 4 27 358 364 365 359
+230 3 2 4 27 359 365 366 360
+231 3 2 4 27 360 366 63 62
+232 3 2 4 27 33 34 367 361
+233 3 2 4 27 361 367 368 362
+234 3 2 4 27 362 368 369 363
+235 3 2 4 27 363 369 370 364
+236 3 2 4 27 364 370 371 365
+237 3 2 4 27 365 371 372 366
+238 3 2 4 27 366 372 64 63
+239 3 2 4 27 34 4 65 367
+240 3 2 4 27 367 65 66 368
+241 3 2 4 27 368 66 67 369
+242 3 2 4 27 369 67 68 370
+243 3 2 4 27 370 68 69 371
+244 3 2 4 27 371 69 70 372
+245 3 2 4 27 372 70 5 64
+246 3 2 6 28 5 41 373 64
+247 3 2 6 28 64 373 374 63
+248 3 2 6 28 63 374 375 62
+249 3 2 6 28 62 375 376 61
+250 3 2 6 28 61 376 377 60
+251 3 2 6 28 60 377 378 59
+252 3 2 6 28 59 378 58 8
+253 3 2 6 28 41 42 379 373
+254 3 2 6 28 373 379 380 374
+255 3 2 6 28 374 380 381 375
+256 3 2 6 28 375 381 382 376
+257 3 2 6 28 376 382 383 377
+258 3 2 6 28 377 383 384 378
+259 3 2 6 28 378 384 57 58
+260 3 2 6 28 42 43 385 379
+261 3 2 6 28 379 385 386 380
+262 3 2 6 28 380 386 387 381
+263 3 2 6 28 381 387 388 382
+264 3 2 6 28 382 388 389 383
+265 3 2 6 28 383 389 390 384
+266 3 2 6 28 384 390 56 57
+267 3 2 6 28 43 44 391 385
+268 3 2 6 28 385 391 392 386
+269 3 2 6 28 386 392 393 387
+270 3 2 6 28 387 393 394 388
+271 3 2 6 28 388 394 395 389
+272 3 2 6 28 389 395 396 390
+273 3 2 6 28 390 396 55 56
+274 3 2 6 28 44 45 397 391
+275 3 2 6 28 391 397 398 392
+276 3 2 6 28 392 398 399 393
+277 3 2 6 28 393 399 400 394
+278 3 2 6 28 394 400 401 395
+279 3 2 6 28 395 401 402 396
+280 3 2 6 28 396 402 54 55
+281 3 2 6 28 45 46 403 397
+282 3 2 6 28 397 403 404 398
+283 3 2 6 28 398 404 405 399
+284 3 2 6 28 399 405 406 400
+285 3 2 6 28 400 406 407 401
+286 3 2 6 28 401 407 408 402
+287 3 2 6 28 402 408 53 54
+288 3 2 6 28 46 6 47 403
+289 3 2 6 28 403 47 48 404
+290 3 2 6 28 404 48 49 405
+291 3 2 6 28 405 49 50 406
+292 3 2 6 28 406 50 51 407
+293 3 2 6 28 407 51 52 408
+294 3 2 6 28 408 52 7 53
+295 5 2 11 85 265 17 1 71 913 648 164 720
+296 5 2 11 85 913 648 164 720 914 642 163 719
+297 5 2 11 85 914 642 163 719 915 636 162 718
+298 5 2 11 85 915 636 162 718 916 630 161 717
+299 5 2 11 85 916 630 161 717 480 94 9 124
+300 5 2 11 85 266 265 71 72 917 913 720 716
+301 5 2 11 85 917 913 720 716 918 914 719 715
+302 5 2 11 85 918 914 719 715 919 915 718 714
+303 5 2 11 85 919 915 718 714 920 916 717 713
+304 5 2 11 85 920 916 717 713 479 480 124 123
+305 5 2 11 85 267 266 72 73 921 917 716 712
+306 5 2 11 85 921 917 716 712 922 918 715 711
+307 5 2 11 85 922 918 715 711 923 919 714 710
+308 5 2 11 85 923 919 714 710 924 920 713 709
+309 5 2 11 85 924 920 713 709 478 479 123 122
+310 5 2 11 85 268 267 73 74 925 921 712 708
+311 5 2 11 85 925 921 712 708 926 922 711 707
+312 5 2 11 85 926 922 711 707 927 923 710 706
+313 5 2 11 85 927 923 710 706 928 924 709 705
+314 5 2 11 85 928 924 709 705 477 478 122 121
+315 5 2 11 85 269 268 74 75 929 925 708 704
+316 5 2 11 85 929 925 708 704 930 926 707 703
+317 5 2 11 85 930 926 707 703 931 927 706 702
+318 5 2 11 85 931 927 706 702 932 928 705 701
+319 5 2 11 85 932 928 705 701 476 477 121 120
+320 5 2 11 85 270 269 75 76 933 929 704 700
+321 5 2 11 85 933 929 704 700 934 930 703 699
+322 5 2 11 85 934 930 703 699 935 931 702 698
+323 5 2 11 85 935 931 702 698 936 932 701 697
+324 5 2 11 85 936 932 701 697 475 476 120 119
+325 5 2 11 85 47 270 76 6 696 933 700 168
+326 5 2 11 85 696 933 700 168 690 934 699 167
+327 5 2 11 85 690 934 699 167 684 935 698 166
+328 5 2 11 85 684 935 698 166 678 936 697 165
+329 5 2 11 85 678 936 697 165 118 475 119 14
+330 5 2 11 85 271 18 17 265 937 647 648 913
+331 5 2 11 85 937 647 648 913 938 641 642 914
+332 5 2 11 85 938 641 642 914 939 635 636 915
+333 5 2 11 85 939 635 636 915 940 629 630 916
+334 5 2 11 85 940 629 630 916 474 93 94 480
+335 5 2 11 85 272 271 265 266 941 937 913 917
+336 5 2 11 85 941 937 913 917 942 938 914 918
+337 5 2 11 85 942 938 914 918 943 939 915 919
+338 5 2 11 85 943 939 915 919 944 940 916 920
+339 5 2 11 85 944 940 916 920 473 474 480 479
+340 5 2 11 85 273 272 266 267 945 941 917 921
+341 5 2 11 85 945 941 917 921 946 942 918 922
+342 5 2 11 85 946 942 918 922 947 943 919 923
+343 5 2 11 85 947 943 919 923 948 944 920 924
+344 5 2 11 85 948 944 920 924 472 473 479 478
+345 5 2 11 85 274 273 267 268 949 945 921 925
+346 5 2 11 85 949 945 921 925 950 946 922 926
+347 5 2 11 85 950 946 922 926 951 947 923 927
+348 5 2 11 85 951 947 923 927 952 948 924 928
+349 5 2 11 85 952 948 924 928 471 472 478 477
+350 5 2 11 85 275 274 268 269 953 949 925 929
+351 5 2 11 85 953 949 925 929 954 950 926 930
+352 5 2 11 85 954 950 926 930 955 951 927 931
+353 5 2 11 85 955 951 927 931 956 952 928 932
+354 5 2 11 85 956 952 928 932 470 471 477 476
+355 5 2 11 85 276 275 269 270 957 953 929 933
+356 5 2 11 85 957 953 929 933 958 954 930 934
+357 5 2 11 85 958 954 930 934 959 955 931 935
+358 5 2 11 85 959 955 931 935 960 956 932 936
+359 5 2 11 85 960 956 932 936 469 470 476 475
+360 5 2 11 85 48 276 270 47 695 957 933 696
+361 5 2 11 85 695 957 933 696 689 958 934 690
+362 5 2 11 85 689 958 934 690 683 959 935 684
+363 5 2 11 85 683 959 935 684 677 960 936 678
+364 5 2 11 85 677 960 936 678 117 469 475 118
+365 5 2 11 85 277 19 18 271 961 646 647 937
+366 5 2 11 85 961 646 647 937 962 640 641 938
+367 5 2 11 85 962 640 641 938 963 634 635 939
+368 5 2 11 85 963 634 635 939 964 628 629 940
+369 5 2 11 85 964 628 629 940 468 92 93 474
+370 5 2 11 85 278 277 271 272 965 961 937 941
+371 5 2 11 85 965 961 937 941 966 962 938 942
+372 5 2 11 85 966 962 938 942 967 963 939 943
+373 5 2 11 85 967 963 939 943 968 964 940 944
+374 5 2 11 85 968 964 940 944 467 468 474 473
+375 5 2 11 85 279 278 272 273 969 965 941 945
+376 5 2 11 85 969 965 941 945 970 966 942 946
+377 5 2 11 85 970 966 942 946 971 967 943 947
+378 5 2 11 85 971 967 943 947 972 968 944 948
+379 5 2 11 85 972 968 944 948 466 467 473 472
+380 5 2 11 85 280 279 273 274 973 969 945 949
+381 5 2 11 85 973 969 945 949 974 970 946 950
+382 5 2 11 85 974 970 946 950 975 971 947 951
+383 5 2 11 85 975 971 947 951 976 972 948 952
+384 5 2 11 85 976 972 948 952 465 466 472 471
+385 5 2 11 85 281 280 274 275 977 973 949 953
+386 5 2 11 85 977 973 949 953 978 974 950 954
+387 5 2 11 85 978 974 950 954 979 975 951 955
+388 5 2 11 85 979 975 951 955 980 976 952 956
+389 5 2 11 85 980 976 952 956 464 465 471 470
+390 5 2 11 85 282 281 275 276 981 977 953 957
+391 5 2 11 85 981 977 953 957 982 978 954 958
+392 5 2 11 85 982 978 954 958 983 979 955 959
+393 5 2 11 85 983 979 955 959 984 980 956 960
+394 5 2 11 85 984 980 956 960 463 464 470 469
+395 5 2 11 85 49 282 276 48 694 981 957 695
+396 5 2 11 85 694 981 957 695 688 982 958 689
+397 5 2 11 85 688 982 958 689 682 983 959 683
+398 5 2 11 85 682 983 959 683 676 984 960 677
+399 5 2 11 85 676 984 960 677 116 463 469 117
+400 5 2 11 85 283 20 19 277 985 645 646 961
+401 5 2 11 85 985 645 646 961 986 639 640 962
+402 5 2 11 85 986 639 640 962 987 633 634 963
+403 5 2 11 85 987 633 634 963 988 627 628 964
+404 5 2 11 85 988 627 628 964 462 91 92 468
+405 5 2 11 85 284 283 277 278 989 985 961 965
+406 5 2 11 85 989 985 961 965 990 986 962 966
+407 5 2 11 85 990 986 962 966 991 987 963 967
+408 5 2 11 85 991 987 963 967 992 988 964 968
+409 5 2 11 85 992 988 964 968 461 462 468 467
+410 5 2 11 85 285 284 278 279 993 989 965 969
+411 5 2 11 85 993 989 965 969 994 990 966 970
+412 5 2 11 85 994 990 966 970 995 991 967 971
+413 5 2 11 85 995 991 967 971 996 992 968 972
+414 5 2 11 85 996 992 968 972 460 461 467 466
+415 5 2 11 85 286 285 279 280 997 993 969 973
+416 5 2 11 85 997 993 969 973 998 994 970 974
+417 5 2 11 85 998 994 970 974 999 995 971 975
+418 5 2 11 85 999 995 971 975 1000 996 972 976
+419 5 2 11 85 1000 996 972 976 459 460 466 465
+420 5 2 11 85 287 286 280 281 1001 997 973 977
+421 5 2 11 85 1001 997 973 977 1002 998 974 978
+422 5 2 11 85 1002 998 974 978 1003 999 975 979
+423 5 2 11 85 1003 999 975 979 1004 1000 976 980
+424 5 2 11 85 1004 1000 976 980 458 459 465 464
+425 5 2 11 85 288 287 281 282 1005 1001 977 981
+426 5 2 11 85 1005 1001 977 981 1006 1002 978 982
+427 5 2 11 85 1006 1002 978 982 1007 1003 979 983
+428 5 2 11 85 1007 1003 979 983 1008 1004 980 984
+429 5 2 11 85 1008 1004 980 984 457 458 464 463
+430 5 2 11 85 50 288 282 49 693 1005 981 694
+431 5 2 11 85 693 1005 981 694 687 1006 982 688
+432 5 2 11 85 687 1006 982 688 681 1007 983 682
+433 5 2 11 85 681 1007 983 682 675 1008 984 676
+434 5 2 11 85 675 1008 984 676 115 457 463 116
+435 5 2 11 85 289 21 20 283 1009 644 645 985
+436 5 2 11 85 1009 644 645 985 1010 638 639 986
+437 5 2 11 85 1010 638 639 986 1011 632 633 987
+438 5 2 11 85 1011 632 633 987 1012 626 627 988
+439 5 2 11 85 1012 626 627 988 456 90 91 462
+440 5 2 11 85 290 289 283 284 1013 1009 985 989
+441 5 2 11 85 1013 1009 985 989 1014 1010 986 990
+442 5 2 11 85 1014 1010 986 990 1015 1011 987 991
+443 5 2 11 85 1015 1011 987 991 1016 1012 988 992
+444 5 2 11 85 1016 1012 988 992 455 456 462 461
+445 5 2 11 85 291 290 284 285 1017 1013 989 993
+446 5 2 11 85 1017 1013 989 993 1018 1014 990 994
+447 5 2 11 85 1018 1014 990 994 1019 1015 991 995
+448 5 2 11 85 1019 1015 991 995 1020 1016 992 996
+449 5 2 11 85 1020 1016 992 996 454 455 461 460
+450 5 2 11 85 292 291 285 286 1021 1017 993 997
+451 5 2 11 85 1021 1017 993 997 1022 1018 994 998
+452 5 2 11 85 1022 1018 994 998 1023 1019 995 999
+453 5 2 11 85 1023 1019 995 999 1024 1020 996 1000
+454 5 2 11 85 1024 1020 996 1000 453 454 460 459
+455 5 2 11 85 293 292 286 287 1025 1021 997 1001
+456 5 2 11 85 1025 1021 997 1001 1026 1022 998 1002
+457 5 2 11 85 1026 1022 998 1002 1027 1023 999 1003
+458 5 2 11 85 1027 1023 999 1003 1028 1024 1000 1004
+459 5 2 11 85 1028 1024 1000 1004 452 453 459 458
+460 5 2 11 85 294 293 287 288 1029 1025 1001 1005
+461 5 2 11 85 1029 1025 1001 1005 1030 1026 1002 1006
+462 5 2 11 85 1030 1026 1002 1006 1031 1027 1003 1007
+463 5 2 11 85 1031 1027 1003 1007 1032 1028 1004 1008
+464 5 2 11 85 1032 1028 1004 1008 451 452 458 457
+465 5 2 11 85 51 294 288 50 692 1029 1005 693
+466 5 2 11 85 692 1029 1005 693 686 1030 1006 687
+467 5 2 11 85 686 1030 1006 687 680 1031 1007 681
+468 5 2 11 85 680 1031 1007 681 674 1032 1008 675
+469 5 2 11 85 674 1032 1008 675 114 451 457 115
+470 5 2 11 85 295 22 21 289 1033 643 644 1009
+471 5 2 11 85 1033 643 644 1009 1034 637 638 1010
+472 5 2 11 85 1034 637 638 1010 1035 631 632 1011
+473 5 2 11 85 1035 631 632 1011 1036 625 626 1012
+474 5 2 11 85 1036 625 626 1012 450 89 90 456
+475 5 2 11 85 296 295 289 290 1037 1033 1009 1013
+476 5 2 11 85 1037 1033 1009 1013 1038 1034 1010 1014
+477 5 2 11 85 1038 1034 1010 1014 1039 1035 1011 1015
+478 5 2 11 85 1039 1035 1011 1015 1040 1036 1012 1016
+479 5 2 11 85 1040 1036 1012 1016 449 450 456 455
+480 5 2 11 85 297 296 290 291 1041 1037 1013 1017
+481 5 2 11 85 1041 1037 1013 1017 1042 1038 1014 1018
+482 5 2 11 85 1042 1038 1014 1018 1043 1039 1015 1019
+483 5 2 11 85 1043 1039 1015 1019 1044 1040 1016 1020
+484 5 2 11 85 1044 1040 1016 1020 448 449 455 454
+485 5 2 11 85 298 297 291 292 1045 1041 1017 1021
+486 5 2 11 85 1045 1041 1017 1021 1046 1042 1018 1022
+487 5 2 11 85 1046 1042 1018 1022 1047 1043 1019 1023
+488 5 2 11 85 1047 1043 1019 1023 1048 1044 1020 1024
+489 5 2 11 85 1048 1044 1020 1024 447 448 454 453
+490 5 2 11 85 299 298 292 293 1049 1045 1021 1025
+491 5 2 11 85 1049 1045 1021 1025 1050 1046 1022 1026
+492 5 2 11 85 1050 1046 1022 1026 1051 1047 1023 1027
+493 5 2 11 85 1051 1047 1023 1027 1052 1048 1024 1028
+494 5 2 11 85 1052 1048 1024 1028 446 447 453 452
+495 5 2 11 85 300 299 293 294 1053 1049 1025 1029
+496 5 2 11 85 1053 1049 1025 1029 1054 1050 1026 1030
+497 5 2 11 85 1054 1050 1026 1030 1055 1051 1027 1031
+498 5 2 11 85 1055 1051 1027 1031 1056 1052 1028 1032
+499 5 2 11 85 1056 1052 1028 1032 445 446 452 451
+500 5 2 11 85 52 300 294 51 691 1053 1029 692
+501 5 2 11 85 691 1053 1029 692 685 1054 1030 686
+502 5 2 11 85 685 1054 1030 686 679 1055 1031 680
+503 5 2 11 85 679 1055 1031 680 673 1056 1032 674
+504 5 2 11 85 673 1056 1032 674 113 445 451 114
+505 5 2 11 85 77 2 22 295 667 188 643 1033
+506 5 2 11 85 667 188 643 1033 661 187 637 1034
+507 5 2 11 85 661 187 637 1034 655 186 631 1035
+508 5 2 11 85 655 186 631 1035 649 185 625 1036
+509 5 2 11 85 649 185 625 1036 125 10 89 450
+510 5 2 11 85 78 77 295 296 668 667 1033 1037
+511 5 2 11 85 668 667 1033 1037 662 661 1034 1038
+512 5 2 11 85 662 661 1034 1038 656 655 1035 1039
+513 5 2 11 85 656 655 1035 1039 650 649 1036 1040
+514 5 2 11 85 650 649 1036 1040 126 125 450 449
+515 5 2 11 85 79 78 296 297 669 668 1037 1041
+516 5 2 11 85 669 668 1037 1041 663 662 1038 1042
+517 5 2 11 85 663 662 1038 1042 657 656 1039 1043
+518 5 2 11 85 657 656 1039 1043 651 650 1040 1044
+519 5 2 11 85 651 650 1040 1044 127 126 449 448
+520 5 2 11 85 80 79 297 298 670 669 1041 1045
+521 5 2 11 85 670 669 1041 1045 664 663 1042 1046
+522 5 2 11 85 664 663 1042 1046 658 657 1043 1047
+523 5 2 11 85 658 657 1043 1047 652 651 1044 1048
+524 5 2 11 85 652 651 1044 1048 128 127 448 447
+525 5 2 11 85 81 80 298 299 671 670 1045 1049
+526 5 2 11 85 671 670 1045 1049 665 664 1046 1050
+527 5 2 11 85 665 664 1046 1050 659 658 1047 1051
+528 5 2 11 85 659 658 1047 1051 653 652 1048 1052
+529 5 2 11 85 653 652 1048 1052 129 128 447 446
+530 5 2 11 85 82 81 299 300 672 671 1049 1053
+531 5 2 11 85 672 671 1049 1053 666 665 1050 1054
+532 5 2 11 85 666 665 1050 1054 660 659 1051 1055
+533 5 2 11 85 660 659 1051 1055 654 653 1052 1056
+534 5 2 11 85 654 653 1052 1056 130 129 446 445
+535 5 2 11 85 7 82 300 52 192 672 1053 691
+536 5 2 11 85 192 672 1053 691 191 666 1054 685
+537 5 2 11 85 191 666 1054 685 190 660 1055 679
+538 5 2 11 85 190 660 1055 679 189 654 1056 673
+539 5 2 11 85 189 654 1056 673 13 130 445 113
+540 5 2 11 87 10 89 409 112 185 625 1057 841
+541 5 2 11 87 185 625 1057 841 186 631 1058 847
+542 5 2 11 87 186 631 1058 847 187 637 1059 853
+543 5 2 11 87 187 637 1059 853 188 643 1060 859
+544 5 2 11 87 188 643 1060 859 2 22 228 23
+545 5 2 11 87 112 409 410 111 841 1057 1061 842
+546 5 2 11 87 841 1057 1061 842 847 1058 1062 848
+547 5 2 11 87 847 1058 1062 848 853 1059 1063 854
+548 5 2 11 87 853 1059 1063 854 859 1060 1064 860
+549 5 2 11 87 859 1060 1064 860 23 228 222 24
+550 5 2 11 87 111 410 411 110 842 1061 1065 843
+551 5 2 11 87 842 1061 1065 843 848 1062 1066 849
+552 5 2 11 87 848 1062 1066 849 854 1063 1067 855
+553 5 2 11 87 854 1063 1067 855 860 1064 1068 861
+554 5 2 11 87 860 1064 1068 861 24 222 216 25
+555 5 2 11 87 110 411 412 109 843 1065 1069 844
+556 5 2 11 87 843 1065 1069 844 849 1066 1070 850
+557 5 2 11 87 849 1066 1070 850 855 1067 1071 856
+558 5 2 11 87 855 1067 1071 856 861 1068 1072 862
+559 5 2 11 87 861 1068 1072 862 25 216 210 26
+560 5 2 11 87 109 412 413 108 844 1069 1073 845
+561 5 2 11 87 844 1069 1073 845 850 1070 1074 851
+562 5 2 11 87 850 1070 1074 851 856 1071 1075 857
+563 5 2 11 87 856 1071 1075 857 862 1072 1076 863
+564 5 2 11 87 862 1072 1076 863 26 210 204 27
+565 5 2 11 87 108 413 414 107 845 1073 1077 846
+566 5 2 11 87 845 1073 1077 846 851 1074 1078 852
+567 5 2 11 87 851 1074 1078 852 857 1075 1079 858
+568 5 2 11 87 857 1075 1079 858 863 1076 1080 864
+569 5 2 11 87 863 1076 1080 864 27 204 198 28
+570 5 2 11 87 107 414 106 11 846 1077 765 181
+571 5 2 11 87 846 1077 765 181 852 1078 766 182
+572 5 2 11 87 852 1078 766 182 858 1079 767 183
+573 5 2 11 87 858 1079 767 183 864 1080 768 184
+574 5 2 11 87 864 1080 768 184 28 198 29 3
+575 5 2 11 87 89 90 415 409 625 626 1081 1057
+576 5 2 11 87 625 626 1081 1057 631 632 1082 1058
+577 5 2 11 87 631 632 1082 1058 637 638 1083 1059
+578 5 2 11 87 637 638 1083 1059 643 644 1084 1060
+579 5 2 11 87 643 644 1084 1060 22 21 227 228
+580 5 2 11 87 409 415 416 410 1057 1081 1085 1061
+581 5 2 11 87 1057 1081 1085 1061 1058 1082 1086 1062
+582 5 2 11 87 1058 1082 1086 1062 1059 1083 1087 1063
+583 5 2 11 87 1059 1083 1087 1063 1060 1084 1088 1064
+584 5 2 11 87 1060 1084 1088 1064 228 227 221 222
+585 5 2 11 87 410 416 417 411 1061 1085 1089 1065
+586 5 2 11 87 1061 1085 1089 1065 1062 1086 1090 1066
+587 5 2 11 87 1062 1086 1090 1066 1063 1087 1091 1067
+588 5 2 11 87 1063 1087 1091 1067 1064 1088 1092 1068
+589 5 2 11 87 1064 1088 1092 1068 222 221 215 216
+590 5 2 11 87 411 417 418 412 1065 1089 1093 1069
+591 5 2 11 87 1065 1089 1093 1069 1066 1090 1094 1070
+592 5 2 11 87 1066 1090 1094 1070 1067 1091 1095 1071
+593 5 2 11 87 1067 1091 1095 1071 1068 1092 1096 1072
+594 5 2 11 87 1068 1092 1096 1072 216 215 209 210
+595 5 2 11 87 412 418 419 413 1069 1093 1097 1073
+596 5 2 11 87 1069 1093 1097 1073 1070 1094 1098 1074
+597 5 2 11 87 1070 1094 1098 1074 1071 1095 1099 1075
+598 5 2 11 87 1071 1095 1099 1075 1072 1096 1100 1076
+599 5 2 11 87 1072 1096 1100 1076 210 209 203 204
+600 5 2 11 87 413 419 420 414 1073 1097 1101 1077
+601 5 2 11 87 1073 1097 1101 1077 1074 1098 1102 1078
+602 5 2 11 87 1074 1098 1102 1078 1075 1099 1103 1079
+603 5 2 11 87 1075 1099 1103 1079 1076 1100 1104 1080
+604 5 2 11 87 1076 1100 1104 1080 204 203 197 198
+605 5 2 11 87 414 420 105 106 1077 1101 761 765
+606 5 2 11 87 1077 1101 761 765 1078 1102 762 766
+607 5 2 11 87 1078 1102 762 766 1079 1103 763 767
+608 5 2 11 87 1079 1103 763 767 1080 1104 764 768
+609 5 2 11 87 1080 1104 764 768 198 197 30 29
+610 5 2 11 87 90 91 421 415 626 627 1105 1081
+611 5 2 11 87 626 627 1105 1081 632 633 1106 1082
+612 5 2 11 87 632 633 1106 1082 638 639 1107 1083
+613 5 2 11 87 638 639 1107 1083 644 645 1108 1084
+614 5 2 11 87 644 645 1108 1084 21 20 226 227
+615 5 2 11 87 415 421 422 416 1081 1105 1109 1085
+616 5 2 11 87 1081 1105 1109 1085 1082 1106 1110 1086
+617 5 2 11 87 1082 1106 1110 1086 1083 1107 1111 1087
+618 5 2 11 87 1083 1107 1111 1087 1084 1108 1112 1088
+619 5 2 11 87 1084 1108 1112 1088 227 226 220 221
+620 5 2 11 87 416 422 423 417 1085 1109 1113 1089
+621 5 2 11 87 1085 1109 1113 1089 1086 1110 1114 1090
+622 5 2 11 87 1086 1110 1114 1090 1087 1111 1115 1091
+623 5 2 11 87 1087 1111 1115 1091 1088 1112 1116 1092
+624 5 2 11 87 1088 1112 1116 1092 221 220 214 215
+625 5 2 11 87 417 423 424 418 1089 1113 1117 1093
+626 5 2 11 87 1089 1113 1117 1093 1090 1114 1118 1094
+627 5 2 11 87 1090 1114 1118 1094 1091 1115 1119 1095
+628 5 2 11 87 1091 1115 1119 1095 1092 1116 1120 1096
+629 5 2 11 87 1092 1116 1120 1096 215 214 208 209
+630 5 2 11 87 418 424 425 419 1093 1117 1121 1097
+631 5 2 11 87 1093 1117 1121 1097 1094 1118 1122 1098
+632 5 2 11 87 1094 1118 1122 1098 1095 1119 1123 1099
+633 5 2 11 87 1095 1119 1123 1099 1096 1120 1124 1100
+634 5 2 11 87 1096 1120 1124 1100 209 208 202 203
+635 5 2 11 87 419 425 426 420 1097 1121 1125 1101
+636 5 2 11 87 1097 1121 1125 1101 1098 1122 1126 1102
+637 5 2 11 87 1098 1122 1126 1102 1099 1123 1127 1103
+638 5 2 11 87 1099 1123 1127 1103 1100 1124 1128 1104
+639 5 2 11 87 1100 1124 1128 1104 203 202 196 197
+640 5 2 11 87 420 426 104 105 1101 1125 757 761
+641 5 2 11 87 1101 1125 757 761 1102 1126 758 762
+642 5 2 11 87 1102 1126 758 762 1103 1127 759 763
+643 5 2 11 87 1103 1127 759 763 1104 1128 760 764
+644 5 2 11 87 1104 1128 760 764 197 196 31 30
+645 5 2 11 87 91 92 427 421 627 628 1129 1105
+646 5 2 11 87 627 628 1129 1105 633 634 1130 1106
+647 5 2 11 87 633 634 1130 1106 639 640 1131 1107
+648 5 2 11 87 639 640 1131 1107 645 646 1132 1108
+649 5 2 11 87 645 646 1132 1108 20 19 225 226
+650 5 2 11 87 421 427 428 422 1105 1129 1133 1109
+651 5 2 11 87 1105 1129 1133 1109 1106 1130 1134 1110
+652 5 2 11 87 1106 1130 1134 1110 1107 1131 1135 1111
+653 5 2 11 87 1107 1131 1135 1111 1108 1132 1136 1112
+654 5 2 11 87 1108 1132 1136 1112 226 225 219 220
+655 5 2 11 87 422 428 429 423 1109 1133 1137 1113
+656 5 2 11 87 1109 1133 1137 1113 1110 1134 1138 1114
+657 5 2 11 87 1110 1134 1138 1114 1111 1135 1139 1115
+658 5 2 11 87 1111 1135 1139 1115 1112 1136 1140 1116
+659 5 2 11 87 1112 1136 1140 1116 220 219 213 214
+660 5 2 11 87 423 429 430 424 1113 1137 1141 1117
+661 5 2 11 87 1113 1137 1141 1117 1114 1138 1142 1118
+662 5 2 11 87 1114 1138 1142 1118 1115 1139 1143 1119
+663 5 2 11 87 1115 1139 1143 1119 1116 1140 1144 1120
+664 5 2 11 87 1116 1140 1144 1120 214 213 207 208
+665 5 2 11 87 424 430 431 425 1117 1141 1145 1121
+666 5 2 11 87 1117 1141 1145 1121 1118 1142 1146 1122
+667 5 2 11 87 1118 1142 1146 1122 1119 1143 1147 1123
+668 5 2 11 87 1119 1143 1147 1123 1120 1144 1148 1124
+669 5 2 11 87 1120 1144 1148 1124 208 207 201 202
+670 5 2 11 87 425 431 432 426 1121 1145 1149 1125
+671 5 2 11 87 1121 1145 1149 1125 1122 1146 1150 1126
+672 5 2 11 87 1122 1146 1150 1126 1123 1147 1151 1127
+673 5 2 11 87 1123 1147 1151 1127 1124 1148 1152 1128
+674 5 2 11 87 1124 1148 1152 1128 202 201 195 196
+675 5 2 11 87 426 432 103 104 1125 1149 753 757
+676 5 2 11 87 1125 1149 753 757 1126 1150 754 758
+677 5 2 11 87 1126 1150 754 758 1127 1151 755 759
+678 5 2 11 87 1127 1151 755 759 1128 1152 756 760
+679 5 2 11 87 1128 1152 756 760 196 195 32 31
+680 5 2 11 87 92 93 433 427 628 629 1153 1129
+681 5 2 11 87 628 629 1153 1129 634 635 1154 1130
+682 5 2 11 87 634 635 1154 1130 640 641 1155 1131
+683 5 2 11 87 640 641 1155 1131 646 647 1156 1132
+684 5 2 11 87 646 647 1156 1132 19 18 224 225
+685 5 2 11 87 427 433 434 428 1129 1153 1157 1133
+686 5 2 11 87 1129 1153 1157 1133 1130 1154 1158 1134
+687 5 2 11 87 1130 1154 1158 1134 1131 1155 1159 1135
+688 5 2 11 87 1131 1155 1159 1135 1132 1156 1160 1136
+689 5 2 11 87 1132 1156 1160 1136 225 224 218 219
+690 5 2 11 87 428 434 435 429 1133 1157 1161 1137
+691 5 2 11 87 1133 1157 1161 1137 1134 1158 1162 1138
+692 5 2 11 87 1134 1158 1162 1138 1135 1159 1163 1139
+693 5 2 11 87 1135 1159 1163 1139 1136 1160 1164 1140
+694 5 2 11 87 1136 1160 1164 1140 219 218 212 213
+695 5 2 11 87 429 435 436 430 1137 1161 1165 1141
+696 5 2 11 87 1137 1161 1165 1141 1138 1162 1166 1142
+697 5 2 11 87 1138 1162 1166 1142 1139 1163 1167 1143
+698 5 2 11 87 1139 1163 1167 1143 1140 1164 1168 1144
+699 5 2 11 87 1140 1164 1168 1144 213 212 206 207
+700 5 2 11 87 430 436 437 431 1141 1165 1169 1145
+701 5 2 11 87 1141 1165 1169 1145 1142 1166 1170 1146
+702 5 2 11 87 1142 1166 1170 1146 1143 1167 1171 1147
+703 5 2 11 87 1143 1167 1171 1147 1144 1168 1172 1148
+704 5 2 11 87 1144 1168 1172 1148 207 206 200 201
+705 5 2 11 87 431 437 438 432 1145 1169 1173 1149
+706 5 2 11 87 1145 1169 1173 1149 1146 1170 1174 1150
+707 5 2 11 87 1146 1170 1174 1150 1147 1171 1175 1151
+708 5 2 11 87 1147 1171 1175 1151 1148 1172 1176 1152
+709 5 2 11 87 1148 1172 1176 1152 201 200 194 195
+710 5 2 11 87 432 438 102 103 1149 1173 749 753
+711 5 2 11 87 1149 1173 749 753 1150 1174 750 754
+712 5 2 11 87 1150 1174 750 754 1151 1175 751 755
+713 5 2 11 87 1151 1175 751 755 1152 1176 752 756
+714 5 2 11 87 1152 1176 752 756 195 194 33 32
+715 5 2 11 87 93 94 439 433 629 630 1177 1153
+716 5 2 11 87 629 630 1177 1153 635 636 1178 1154
+717 5 2 11 87 635 636 1178 1154 641 642 1179 1155
+718 5 2 11 87 641 642 1179 1155 647 648 1180 1156
+719 5 2 11 87 647 648 1180 1156 18 17 223 224
+720 5 2 11 87 433 439 440 434 1153 1177 1181 1157
+721 5 2 11 87 1153 1177 1181 1157 1154 1178 1182 1158
+722 5 2 11 87 1154 1178 1182 1158 1155 1179 1183 1159
+723 5 2 11 87 1155 1179 1183 1159 1156 1180 1184 1160
+724 5 2 11 87 1156 1180 1184 1160 224 223 217 218
+725 5 2 11 87 434 440 441 435 1157 1181 1185 1161
+726 5 2 11 87 1157 1181 1185 1161 1158 1182 1186 1162
+727 5 2 11 87 1158 1182 1186 1162 1159 1183 1187 1163
+728 5 2 11 87 1159 1183 1187 1163 1160 1184 1188 1164
+729 5 2 11 87 1160 1184 1188 1164 218 217 211 212
+730 5 2 11 87 435 441 442 436 1161 1185 1189 1165
+731 5 2 11 87 1161 1185 1189 1165 1162 1186 1190 1166
+732 5 2 11 87 1162 1186 1190 1166 1163 1187 1191 1167
+733 5 2 11 87 1163 1187 1191 1167 1164 1188 1192 1168
+734 5 2 11 87 1164 1188 1192 1168 212 211 205 206
+735 5 2 11 87 436 442 443 437 1165 1189 1193 1169
+736 5 2 11 87 1165 1189 1193 1169 1166 1190 1194 1170
+737 5 2 11 87 1166 1190 1194 1170 1167 1191 1195 1171
+738 5 2 11 87 1167 1191 1195 1171 1168 1192 1196 1172
+739 5 2 11 87 1168 1192 1196 1172 206 205 199 200
+740 5 2 11 87 437 443 444 438 1169 1193 1197 1173
+741 5 2 11 87 1169 1193 1197 1173 1170 1194 1198 1174
+742 5 2 11 87 1170 1194 1198 1174 1171 1195 1199 1175
+743 5 2 11 87 1171 1195 1199 1175 1172 1196 1200 1176
+744 5 2 11 87 1172 1196 1200 1176 200 199 193 194
+745 5 2 11 87 438 444 101 102 1173 1197 745 749
+746 5 2 11 87 1173 1197 745 749 1174 1198 746 750
+747 5 2 11 87 1174 1198 746 750 1175 1199 747 751
+748 5 2 11 87 1175 1199 747 751 1176 1200 748 752
+749 5 2 11 87 1176 1200 748 752 194 193 34 33
+750 5 2 11 87 94 9 95 439 630 161 865 1177
+751 5 2 11 87 630 161 865 1177 636 162 871 1178
+752 5 2 11 87 636 162 871 1178 642 163 877 1179
+753 5 2 11 87 642 163 877 1179 648 164 883 1180
+754 5 2 11 87 648 164 883 1180 17 1 40 223
+755 5 2 11 87 439 95 96 440 1177 865 866 1181
+756 5 2 11 87 1177 865 866 1181 1178 871 872 1182
+757 5 2 11 87 1178 871 872 1182 1179 877 878 1183
+758 5 2 11 87 1179 877 878 1183 1180 883 884 1184
+759 5 2 11 87 1180 883 884 1184 223 40 39 217
+760 5 2 11 87 440 96 97 441 1181 866 867 1185
+761 5 2 11 87 1181 866 867 1185 1182 872 873 1186
+762 5 2 11 87 1182 872 873 1186 1183 878 879 1187
+763 5 2 11 87 1183 878 879 1187 1184 884 885 1188
+764 5 2 11 87 1184 884 885 1188 217 39 38 211
+765 5 2 11 87 441 97 98 442 1185 867 868 1189
+766 5 2 11 87 1185 867 868 1189 1186 873 874 1190
+767 5 2 11 87 1186 873 874 1190 1187 879 880 1191
+768 5 2 11 87 1187 879 880 1191 1188 885 886 1192
+769 5 2 11 87 1188 885 886 1192 211 38 37 205
+770 5 2 11 87 442 98 99 443 1189 868 869 1193
+771 5 2 11 87 1189 868 869 1193 1190 874 875 1194
+772 5 2 11 87 1190 874 875 1194 1191 880 881 1195
+773 5 2 11 87 1191 880 881 1195 1192 886 887 1196
+774 5 2 11 87 1192 886 887 1196 205 37 36 199
+775 5 2 11 87 443 99 100 444 1193 869 870 1197
+776 5 2 11 87 1193 869 870 1197 1194 875 876 1198
+777 5 2 11 87 1194 875 876 1198 1195 881 882 1199
+778 5 2 11 87 1195 881 882 1199 1196 887 888 1200
+779 5 2 11 87 1196 887 888 1200 199 36 35 193
+780 5 2 11 87 444 100 12 101 1197 870 169 745
+781 5 2 11 87 1197 870 169 745 1198 876 170 746
+782 5 2 11 87 1198 876 170 746 1199 882 171 747
+783 5 2 11 87 1199 882 171 747 1200 888 172 748
+784 5 2 11 87 1200 888 172 748 193 35 4 34
+785 5 2 11 89 301 23 2 77 1201 859 188 667
+786 5 2 11 89 1201 859 188 667 1202 853 187 661
+787 5 2 11 89 1202 853 187 661 1203 847 186 655
+788 5 2 11 89 1203 847 186 655 1204 841 185 649
+789 5 2 11 89 1204 841 185 649 553 112 10 125
+790 5 2 11 89 302 301 77 78 1205 1201 667 668
+791 5 2 11 89 1205 1201 667 668 1206 1202 661 662
+792 5 2 11 89 1206 1202 661 662 1207 1203 655 656
+793 5 2 11 89 1207 1203 655 656 1208 1204 649 650
+794 5 2 11 89 1208 1204 649 650 559 553 125 126
+795 5 2 11 89 303 302 78 79 1209 1205 668 669
+796 5 2 11 89 1209 1205 668 669 1210 1206 662 663
+797 5 2 11 89 1210 1206 662 663 1211 1207 656 657
+798 5 2 11 89 1211 1207 656 657 1212 1208 650 651
+799 5 2 11 89 1212 1208 650 651 565 559 126 127
+800 5 2 11 89 304 303 79 80 1213 1209 669 670
+801 5 2 11 89 1213 1209 669 670 1214 1210 663 664
+802 5 2 11 89 1214 1210 663 664 1215 1211 657 658
+803 5 2 11 89 1215 1211 657 658 1216 1212 651 652
+804 5 2 11 89 1216 1212 651 652 571 565 127 128
+805 5 2 11 89 305 304 80 81 1217 1213 670 671
+806 5 2 11 89 1217 1213 670 671 1218 1214 664 665
+807 5 2 11 89 1218 1214 664 665 1219 1215 658 659
+808 5 2 11 89 1219 1215 658 659 1220 1216 652 653
+809 5 2 11 89 1220 1216 652 653 577 571 128 129
+810 5 2 11 89 306 305 81 82 1221 1217 671 672
+811 5 2 11 89 1221 1217 671 672 1222 1218 665 666
+812 5 2 11 89 1222 1218 665 666 1223 1219 659 660
+813 5 2 11 89 1223 1219 659 660 1224 1220 653 654
+814 5 2 11 89 1224 1220 653 654 583 577 129 130
+815 5 2 11 89 53 306 82 7 835 1221 672 192
+816 5 2 11 89 835 1221 672 192 829 1222 666 191
+817 5 2 11 89 829 1222 666 191 823 1223 660 190
+818 5 2 11 89 823 1223 660 190 817 1224 654 189
+819 5 2 11 89 817 1224 654 189 143 583 130 13
+820 5 2 11 89 307 24 23 301 1225 860 859 1201
+821 5 2 11 89 1225 860 859 1201 1226 854 853 1202
+822 5 2 11 89 1226 854 853 1202 1227 848 847 1203
+823 5 2 11 89 1227 848 847 1203 1228 842 841 1204
+824 5 2 11 89 1228 842 841 1204 554 111 112 553
+825 5 2 11 89 308 307 301 302 1229 1225 1201 1205
+826 5 2 11 89 1229 1225 1201 1205 1230 1226 1202 1206
+827 5 2 11 89 1230 1226 1202 1206 1231 1227 1203 1207
+828 5 2 11 89 1231 1227 1203 1207 1232 1228 1204 1208
+829 5 2 11 89 1232 1228 1204 1208 560 554 553 559
+830 5 2 11 89 309 308 302 303 1233 1229 1205 1209
+831 5 2 11 89 1233 1229 1205 1209 1234 1230 1206 1210
+832 5 2 11 89 1234 1230 1206 1210 1235 1231 1207 1211
+833 5 2 11 89 1235 1231 1207 1211 1236 1232 1208 1212
+834 5 2 11 89 1236 1232 1208 1212 566 560 559 565
+835 5 2 11 89 310 309 303 304 1237 1233 1209 1213
+836 5 2 11 89 1237 1233 1209 1213 1238 1234 1210 1214
+837 5 2 11 89 1238 1234 1210 1214 1239 1235 1211 1215
+838 5 2 11 89 1239 1235 1211 1215 1240 1236 1212 1216
+839 5 2 11 89 1240 1236 1212 1216 572 566 565 571
+840 5 2 11 89 311 310 304 305 1241 1237 1213 1217
+841 5 2 11 89 1241 1237 1213 1217 1242 1238 1214 1218
+842 5 2 11 89 1242 1238 1214 1218 1243 1239 1215 1219
+843 5 2 11 89 1243 1239 1215 1219 1244 1240 1216 1220
+844 5 2 11 89 1244 1240 1216 1220 578 572 571 577
+845 5 2 11 89 312 311 305 306 1245 1241 1217 1221
+846 5 2 11 89 1245 1241 1217 1221 1246 1242 1218 1222
+847 5 2 11 89 1246 1242 1218 1222 1247 1243 1219 1223
+848 5 2 11 89 1247 1243 1219 1223 1248 1244 1220 1224
+849 5 2 11 89 1248 1244 1220 1224 584 578 577 583
+850 5 2 11 89 54 312 306 53 836 1245 1221 835
+851 5 2 11 89 836 1245 1221 835 830 1246 1222 829
+852 5 2 11 89 830 1246 1222 829 824 1247 1223 823
+853 5 2 11 89 824 1247 1223 823 818 1248 1224 817
+854 5 2 11 89 818 1248 1224 817 144 584 583 143
+855 5 2 11 89 313 25 24 307 1249 861 860 1225
+856 5 2 11 89 1249 861 860 1225 1250 855 854 1226
+857 5 2 11 89 1250 855 854 1226 1251 849 848 1227
+858 5 2 11 89 1251 849 848 1227 1252 843 842 1228
+859 5 2 11 89 1252 843 842 1228 555 110 111 554
+860 5 2 11 89 314 313 307 308 1253 1249 1225 1229
+861 5 2 11 89 1253 1249 1225 1229 1254 1250 1226 1230
+862 5 2 11 89 1254 1250 1226 1230 1255 1251 1227 1231
+863 5 2 11 89 1255 1251 1227 1231 1256 1252 1228 1232
+864 5 2 11 89 1256 1252 1228 1232 561 555 554 560
+865 5 2 11 89 315 314 308 309 1257 1253 1229 1233
+866 5 2 11 89 1257 1253 1229 1233 1258 1254 1230 1234
+867 5 2 11 89 1258 1254 1230 1234 1259 1255 1231 1235
+868 5 2 11 89 1259 1255 1231 1235 1260 1256 1232 1236
+869 5 2 11 89 1260 1256 1232 1236 567 561 560 566
+870 5 2 11 89 316 315 309 310 1261 1257 1233 1237
+871 5 2 11 89 1261 1257 1233 1237 1262 1258 1234 1238
+872 5 2 11 89 1262 1258 1234 1238 1263 1259 1235 1239
+873 5 2 11 89 1263 1259 1235 1239 1264 1260 1236 1240
+874 5 2 11 89 1264 1260 1236 1240 573 567 566 572
+875 5 2 11 89 317 316 310 311 1265 1261 1237 1241
+876 5 2 11 89 1265 1261 1237 1241 1266 1262 1238 1242
+877 5 2 11 89 1266 1262 1238 1242 1267 1263 1239 1243
+878 5 2 11 89 1267 1263 1239 1243 1268 1264 1240 1244
+879 5 2 11 89 1268 1264 1240 1244 579 573 572 578
+880 5 2 11 89 318 317 311 312 1269 1265 1241 1245
+881 5 2 11 89 1269 1265 1241 1245 1270 1266 1242 1246
+882 5 2 11 89 1270 1266 1242 1246 1271 1267 1243 1247
+883 5 2 11 89 1271 1267 1243 1247 1272 1268 1244 1248
+884 5 2 11 89 1272 1268 1244 1248 585 579 578 584
+885 5 2 11 89 55 318 312 54 837 1269 1245 836
+886 5 2 11 89 837 1269 1245 836 831 1270 1246 830
+887 5 2 11 89 831 1270 1246 830 825 1271 1247 824
+888 5 2 11 89 825 1271 1247 824 819 1272 1248 818
+889 5 2 11 89 819 1272 1248 818 145 585 584 144
+890 5 2 11 89 319 26 25 313 1273 862 861 1249
+891 5 2 11 89 1273 862 861 1249 1274 856 855 1250
+892 5 2 11 89 1274 856 855 1250 1275 850 849 1251
+893 5 2 11 89 1275 850 849 1251 1276 844 843 1252
+894 5 2 11 89 1276 844 843 1252 556 109 110 555
+895 5 2 11 89 320 319 313 314 1277 1273 1249 1253
+896 5 2 11 89 1277 1273 1249 1253 1278 1274 1250 1254
+897 5 2 11 89 1278 1274 1250 1254 1279 1275 1251 1255
+898 5 2 11 89 1279 1275 1251 1255 1280 1276 1252 1256
+899 5 2 11 89 1280 1276 1252 1256 562 556 555 561
+900 5 2 11 89 321 320 314 315 1281 1277 1253 1257
+901 5 2 11 89 1281 1277 1253 1257 1282 1278 1254 1258
+902 5 2 11 89 1282 1278 1254 1258 1283 1279 1255 1259
+903 5 2 11 89 1283 1279 1255 1259 1284 1280 1256 1260
+904 5 2 11 89 1284 1280 1256 1260 568 562 561 567
+905 5 2 11 89 322 321 315 316 1285 1281 1257 1261
+906 5 2 11 89 1285 1281 1257 1261 1286 1282 1258 1262
+907 5 2 11 89 1286 1282 1258 1262 1287 1283 1259 1263
+908 5 2 11 89 1287 1283 1259 1263 1288 1284 1260 1264
+909 5 2 11 89 1288 1284 1260 1264 574 568 567 573
+910 5 2 11 89 323 322 316 317 1289 1285 1261 1265
+911 5 2 11 89 1289 1285 1261 1265 1290 1286 1262 1266
+912 5 2 11 89 1290 1286 1262 1266 1291 1287 1263 1267
+913 5 2 11 89 1291 1287 1263 1267 1292 1288 1264 1268
+914 5 2 11 89 1292 1288 1264 1268 580 574 573 579
+915 5 2 11 89 324 323 317 318 1293 1289 1265 1269
+916 5 2 11 89 1293 1289 1265 1269 1294 1290 1266 1270
+917 5 2 11 89 1294 1290 1266 1270 1295 1291 1267 1271
+918 5 2 11 89 1295 1291 1267 1271 1296 1292 1268 1272
+919 5 2 11 89 1296 1292 1268 1272 586 580 579 585
+920 5 2 11 89 56 324 318 55 838 1293 1269 837
+921 5 2 11 89 838 1293 1269 837 832 1294 1270 831
+922 5 2 11 89 832 1294 1270 831 826 1295 1271 825
+923 5 2 11 89 826 1295 1271 825 820 1296 1272 819
+924 5 2 11 89 820 1296 1272 819 146 586 585 145
+925 5 2 11 89 325 27 26 319 1297 863 862 1273
+926 5 2 11 89 1297 863 862 1273 1298 857 856 1274
+927 5 2 11 89 1298 857 856 1274 1299 851 850 1275
+928 5 2 11 89 1299 851 850 1275 1300 845 844 1276
+929 5 2 11 89 1300 845 844 1276 557 108 109 556
+930 5 2 11 89 326 325 319 320 1301 1297 1273 1277
+931 5 2 11 89 1301 1297 1273 1277 1302 1298 1274 1278
+932 5 2 11 89 1302 1298 1274 1278 1303 1299 1275 1279
+933 5 2 11 89 1303 1299 1275 1279 1304 1300 1276 1280
+934 5 2 11 89 1304 1300 1276 1280 563 557 556 562
+935 5 2 11 89 327 326 320 321 1305 1301 1277 1281
+936 5 2 11 89 1305 1301 1277 1281 1306 1302 1278 1282
+937 5 2 11 89 1306 1302 1278 1282 1307 1303 1279 1283
+938 5 2 11 89 1307 1303 1279 1283 1308 1304 1280 1284
+939 5 2 11 89 1308 1304 1280 1284 569 563 562 568
+940 5 2 11 89 328 327 321 322 1309 1305 1281 1285
+941 5 2 11 89 1309 1305 1281 1285 1310 1306 1282 1286
+942 5 2 11 89 1310 1306 1282 1286 1311 1307 1283 1287
+943 5 2 11 89 1311 1307 1283 1287 1312 1308 1284 1288
+944 5 2 11 89 1312 1308 1284 1288 575 569 568 574
+945 5 2 11 89 329 328 322 323 1313 1309 1285 1289
+946 5 2 11 89 1313 1309 1285 1289 1314 1310 1286 1290
+947 5 2 11 89 1314 1310 1286 1290 1315 1311 1287 1291
+948 5 2 11 89 1315 1311 1287 1291 1316 1312 1288 1292
+949 5 2 11 89 1316 1312 1288 1292 581 575 574 580
+950 5 2 11 89 330 329 323 324 1317 1313 1289 1293
+951 5 2 11 89 1317 1313 1289 1293 1318 1314 1290 1294
+952 5 2 11 89 1318 1314 1290 1294 1319 1315 1291 1295
+953 5 2 11 89 1319 1315 1291 1295 1320 1316 1292 1296
+954 5 2 11 89 1320 1316 1292 1296 587 581 580 586
+955 5 2 11 89 57 330 324 56 839 1317 1293 838
+956 5 2 11 89 839 1317 1293 838 833 1318 1294 832
+957 5 2 11 89 833 1318 1294 832 827 1319 1295 826
+958 5 2 11 89 827 1319 1295 826 821 1320 1296 820
+959 5 2 11 89 821 1320 1296 820 147 587 586 146
+960 5 2 11 89 331 28 27 325 1321 864 863 1297
+961 5 2 11 89 1321 864 863 1297 1322 858 857 1298
+962 5 2 11 89 1322 858 857 1298 1323 852 851 1299
+963 5 2 11 89 1323 852 851 1299 1324 846 845 1300
+964 5 2 11 89 1324 846 845 1300 558 107 108 557
+965 5 2 11 89 332 331 325 326 1325 1321 1297 1301
+966 5 2 11 89 1325 1321 1297 1301 1326 1322 1298 1302
+967 5 2 11 89 1326 1322 1298 1302 1327 1323 1299 1303
+968 5 2 11 89 1327 1323 1299 1303 1328 1324 1300 1304
+969 5 2 11 89 1328 1324 1300 1304 564 558 557 563
+970 5 2 11 89 333 332 326 327 1329 1325 1301 1305
+971 5 2 11 89 1329 1325 1301 1305 1330 1326 1302 1306
+972 5 2 11 89 1330 1326 1302 1306 1331 1327 1303 1307
+973 5 2 11 89 1331 1327 1303 1307 1332 1328 1304 1308
+974 5 2 11 89 1332 1328 1304 1308 570 564 563 569
+975 5 2 11 89 334 333 327 328 1333 1329 1305 1309
+976 5 2 11 89 1333 1329 1305 1309 1334 1330 1306 1310
+977 5 2 11 89 1334 1330 1306 1310 1335 1331 1307 1311
+978 5 2 11 89 1335 1331 1307 1311 1336 1332 1308 1312
+979 5 2 11 89 1336 1332 1308 1312 576 570 569 575
+980 5 2 11 89 335 334 328 329 1337 1333 1309 1313
+981 5 2 11 89 1337 1333 1309 1313 1338 1334 1310 1314
+982 5 2 11 89 1338 1334 1310 1314 1339 1335 1311 1315
+983 5 2 11 89 1339 1335 1311 1315 1340 1336 1312 1316
+984 5 2 11 89 1340 1336 1312 1316 582 576 575 581
+985 5 2 11 89 336 335 329 330 1341 1337 1313 1317
+986 5 2 11 89 1341 1337 1313 1317 1342 1338 1314 1318
+987 5 2 11 89 1342 1338 1314 1318 1343 1339 1315 1319
+988 5 2 11 89 1343 1339 1315 1319 1344 1340 1316 1320
+989 5 2 11 89 1344 1340 1316 1320 588 582 581 587
+990 5 2 11 89 58 336 330 57 840 1341 1317 839
+991 5 2 11 89 840 1341 1317 839 834 1342 1318 833
+992 5 2 11 89 834 1342 1318 833 828 1343 1319 827
+993 5 2 11 89 828 1343 1319 827 822 1344 1320 821
+994 5 2 11 89 822 1344 1320 821 148 588 587 147
+995 5 2 11 89 83 3 28 331 744 184 864 1321
+996 5 2 11 89 744 184 864 1321 738 183 858 1322
+997 5 2 11 89 738 183 858 1322 732 182 852 1323
+998 5 2 11 89 732 182 852 1323 726 181 846 1324
+999 5 2 11 89 726 181 846 1324 160 11 107 558
+1000 5 2 11 89 84 83 331 332 743 744 1321 1325
+1001 5 2 11 89 743 744 1321 1325 737 738 1322 1326
+1002 5 2 11 89 737 738 1322 1326 731 732 1323 1327
+1003 5 2 11 89 731 732 1323 1327 725 726 1324 1328
+1004 5 2 11 89 725 726 1324 1328 159 160 558 564
+1005 5 2 11 89 85 84 332 333 742 743 1325 1329
+1006 5 2 11 89 742 743 1325 1329 736 737 1326 1330
+1007 5 2 11 89 736 737 1326 1330 730 731 1327 1331
+1008 5 2 11 89 730 731 1327 1331 724 725 1328 1332
+1009 5 2 11 89 724 725 1328 1332 158 159 564 570
+1010 5 2 11 89 86 85 333 334 741 742 1329 1333
+1011 5 2 11 89 741 742 1329 1333 735 736 1330 1334
+1012 5 2 11 89 735 736 1330 1334 729 730 1331 1335
+1013 5 2 11 89 729 730 1331 1335 723 724 1332 1336
+1014 5 2 11 89 723 724 1332 1336 157 158 570 576
+1015 5 2 11 89 87 86 334 335 740 741 1333 1337
+1016 5 2 11 89 740 741 1333 1337 734 735 1334 1338
+1017 5 2 11 89 734 735 1334 1338 728 729 1335 1339
+1018 5 2 11 89 728 729 1335 1339 722 723 1336 1340
+1019 5 2 11 89 722 723 1336 1340 156 157 576 582
+1020 5 2 11 89 88 87 335 336 739 740 1337 1341
+1021 5 2 11 89 739 740 1337 1341 733 734 1338 1342
+1022 5 2 11 89 733 734 1338 1342 727 728 1339 1343
+1023 5 2 11 89 727 728 1339 1343 721 722 1340 1344
+1024 5 2 11 89 721 722 1340 1344 155 156 582 588
+1025 5 2 11 89 8 88 336 58 180 739 1341 840
+1026 5 2 11 89 180 739 1341 840 179 733 1342 834
+1027 5 2 11 89 179 733 1342 834 178 727 1343 828
+1028 5 2 11 89 178 727 1343 828 177 721 1344 822
+1029 5 2 11 89 177 721 1344 822 15 155 588 148
+1030 5 2 11 91 373 41 5 64 1345 892 176 811
+1031 5 2 11 91 1345 892 176 811 1346 891 175 805
+1032 5 2 11 91 1346 891 175 805 1347 890 174 799
+1033 5 2 11 91 1347 890 174 799 1348 889 173 793
+1034 5 2 11 91 1348 889 173 793 511 137 16 136
+1035 5 2 11 91 374 373 64 63 1349 1345 811 812
+1036 5 2 11 91 1349 1345 811 812 1350 1346 805 806
+1037 5 2 11 91 1350 1346 805 806 1351 1347 799 800
+1038 5 2 11 91 1351 1347 799 800 1352 1348 793 794
+1039 5 2 11 91 1352 1348 793 794 505 511 136 135
+1040 5 2 11 91 375 374 63 62 1353 1349 812 813
+1041 5 2 11 91 1353 1349 812 813 1354 1350 806 807
+1042 5 2 11 91 1354 1350 806 807 1355 1351 800 801
+1043 5 2 11 91 1355 1351 800 801 1356 1352 794 795
+1044 5 2 11 91 1356 1352 794 795 499 505 135 134
+1045 5 2 11 91 376 375 62 61 1357 1353 813 814
+1046 5 2 11 91 1357 1353 813 814 1358 1354 807 808
+1047 5 2 11 91 1358 1354 807 808 1359 1355 801 802
+1048 5 2 11 91 1359 1355 801 802 1360 1356 795 796
+1049 5 2 11 91 1360 1356 795 796 493 499 134 133
+1050 5 2 11 91 377 376 61 60 1361 1357 814 815
+1051 5 2 11 91 1361 1357 814 815 1362 1358 808 809
+1052 5 2 11 91 1362 1358 808 809 1363 1359 802 803
+1053 5 2 11 91 1363 1359 802 803 1364 1360 796 797
+1054 5 2 11 91 1364 1360 796 797 487 493 133 132
+1055 5 2 11 91 378 377 60 59 1365 1361 815 816
+1056 5 2 11 91 1365 1361 815 816 1366 1362 809 810
+1057 5 2 11 91 1366 1362 809 810 1367 1363 803 804
+1058 5 2 11 91 1367 1363 803 804 1368 1364 797 798
+1059 5 2 11 91 1368 1364 797 798 481 487 132 131
+1060 5 2 11 91 58 378 59 8 840 1365 816 180
+1061 5 2 11 91 840 1365 816 180 834 1366 810 179
+1062 5 2 11 91 834 1366 810 179 828 1367 804 178
+1063 5 2 11 91 828 1367 804 178 822 1368 798 177
+1064 5 2 11 91 822 1368 798 177 148 481 131 15
+1065 5 2 11 91 379 42 41 373 1369 896 892 1345
+1066 5 2 11 91 1369 896 892 1345 1370 895 891 1346
+1067 5 2 11 91 1370 895 891 1346 1371 894 890 1347
+1068 5 2 11 91 1371 894 890 1347 1372 893 889 1348
+1069 5 2 11 91 1372 893 889 1348 512 138 137 511
+1070 5 2 11 91 380 379 373 374 1373 1369 1345 1349
+1071 5 2 11 91 1373 1369 1345 1349 1374 1370 1346 1350
+1072 5 2 11 91 1374 1370 1346 1350 1375 1371 1347 1351
+1073 5 2 11 91 1375 1371 1347 1351 1376 1372 1348 1352
+1074 5 2 11 91 1376 1372 1348 1352 506 512 511 505
+1075 5 2 11 91 381 380 374 375 1377 1373 1349 1353
+1076 5 2 11 91 1377 1373 1349 1353 1378 1374 1350 1354
+1077 5 2 11 91 1378 1374 1350 1354 1379 1375 1351 1355
+1078 5 2 11 91 1379 1375 1351 1355 1380 1376 1352 1356
+1079 5 2 11 91 1380 1376 1352 1356 500 506 505 499
+1080 5 2 11 91 382 381 375 376 1381 1377 1353 1357
+1081 5 2 11 91 1381 1377 1353 1357 1382 1378 1354 1358
+1082 5 2 11 91 1382 1378 1354 1358 1383 1379 1355 1359
+1083 5 2 11 91 1383 1379 1355 1359 1384 1380 1356 1360
+1084 5 2 11 91 1384 1380 1356 1360 494 500 499 493
+1085 5 2 11 91 383 382 376 377 1385 1381 1357 1361
+1086 5 2 11 91 1385 1381 1357 1361 1386 1382 1358 1362
+1087 5 2 11 91 1386 1382 1358 1362 1387 1383 1359 1363
+1088 5 2 11 91 1387 1383 1359 1363 1388 1384 1360 1364
+1089 5 2 11 91 1388 1384 1360 1364 488 494 493 487
+1090 5 2 11 91 384 383 377 378 1389 1385 1361 1365
+1091 5 2 11 91 1389 1385 1361 1365 1390 1386 1362 1366
+1092 5 2 11 91 1390 1386 1362 1366 1391 1387 1363 1367
+1093 5 2 11 91 1391 1387 1363 1367 1392 1388 1364 1368
+1094 5 2 11 91 1392 1388 1364 1368 482 488 487 481
+1095 5 2 11 91 57 384 378 58 839 1389 1365 840
+1096 5 2 11 91 839 1389 1365 840 833 1390 1366 834
+1097 5 2 11 91 833 1390 1366 834 827 1391 1367 828
+1098 5 2 11 91 827 1391 1367 828 821 1392 1368 822
+1099 5 2 11 91 821 1392 1368 822 147 482 481 148
+1100 5 2 11 91 385 43 42 379 1393 900 896 1369
+1101 5 2 11 91 1393 900 896 1369 1394 899 895 1370
+1102 5 2 11 91 1394 899 895 1370 1395 898 894 1371
+1103 5 2 11 91 1395 898 894 1371 1396 897 893 1372
+1104 5 2 11 91 1396 897 893 1372 513 139 138 512
+1105 5 2 11 91 386 385 379 380 1397 1393 1369 1373
+1106 5 2 11 91 1397 1393 1369 1373 1398 1394 1370 1374
+1107 5 2 11 91 1398 1394 1370 1374 1399 1395 1371 1375
+1108 5 2 11 91 1399 1395 1371 1375 1400 1396 1372 1376
+1109 5 2 11 91 1400 1396 1372 1376 507 513 512 506
+1110 5 2 11 91 387 386 380 381 1401 1397 1373 1377
+1111 5 2 11 91 1401 1397 1373 1377 1402 1398 1374 1378
+1112 5 2 11 91 1402 1398 1374 1378 1403 1399 1375 1379
+1113 5 2 11 91 1403 1399 1375 1379 1404 1400 1376 1380
+1114 5 2 11 91 1404 1400 1376 1380 501 507 506 500
+1115 5 2 11 91 388 387 381 382 1405 1401 1377 1381
+1116 5 2 11 91 1405 1401 1377 1381 1406 1402 1378 1382
+1117 5 2 11 91 1406 1402 1378 1382 1407 1403 1379 1383
+1118 5 2 11 91 1407 1403 1379 1383 1408 1404 1380 1384
+1119 5 2 11 91 1408 1404 1380 1384 495 501 500 494
+1120 5 2 11 91 389 388 382 383 1409 1405 1381 1385
+1121 5 2 11 91 1409 1405 1381 1385 1410 1406 1382 1386
+1122 5 2 11 91 1410 1406 1382 1386 1411 1407 1383 1387
+1123 5 2 11 91 1411 1407 1383 1387 1412 1408 1384 1388
+1124 5 2 11 91 1412 1408 1384 1388 489 495 494 488
+1125 5 2 11 91 390 389 383 384 1413 1409 1385 1389
+1126 5 2 11 91 1413 1409 1385 1389 1414 1410 1386 1390
+1127 5 2 11 91 1414 1410 1386 1390 1415 1411 1387 1391
+1128 5 2 11 91 1415 1411 1387 1391 1416 1412 1388 1392
+1129 5 2 11 91 1416 1412 1388 1392 483 489 488 482
+1130 5 2 11 91 56 390 384 57 838 1413 1389 839
+1131 5 2 11 91 838 1413 1389 839 832 1414 1390 833
+1132 5 2 11 91 832 1414 1390 833 826 1415 1391 827
+1133 5 2 11 91 826 1415 1391 827 820 1416 1392 821
+1134 5 2 11 91 820 1416 1392 821 146 483 482 147
+1135 5 2 11 91 391 44 43 385 1417 904 900 1393
+1136 5 2 11 91 1417 904 900 1393 1418 903 899 1394
+1137 5 2 11 91 1418 903 899 1394 1419 902 898 1395
+1138 5 2 11 91 1419 902 898 1395 1420 901 897 1396
+1139 5 2 11 91 1420 901 897 1396 514 140 139 513
+1140 5 2 11 91 392 391 385 386 1421 1417 1393 1397
+1141 5 2 11 91 1421 1417 1393 1397 1422 1418 1394 1398
+1142 5 2 11 91 1422 1418 1394 1398 1423 1419 1395 1399
+1143 5 2 11 91 1423 1419 1395 1399 1424 1420 1396 1400
+1144 5 2 11 91 1424 1420 1396 1400 508 514 513 507
+1145 5 2 11 91 393 392 386 387 1425 1421 1397 1401
+1146 5 2 11 91 1425 1421 1397 1401 1426 1422 1398 1402
+1147 5 2 11 91 1426 1422 1398 1402 1427 1423 1399 1403
+1148 5 2 11 91 1427 1423 1399 1403 1428 1424 1400 1404
+1149 5 2 11 91 1428 1424 1400 1404 502 508 507 501
+1150 5 2 11 91 394 393 387 388 1429 1425 1401 1405
+1151 5 2 11 91 1429 1425 1401 1405 1430 1426 1402 1406
+1152 5 2 11 91 1430 1426 1402 1406 1431 1427 1403 1407
+1153 5 2 11 91 1431 1427 1403 1407 1432 1428 1404 1408
+1154 5 2 11 91 1432 1428 1404 1408 496 502 501 495
+1155 5 2 11 91 395 394 388 389 1433 1429 1405 1409
+1156 5 2 11 91 1433 1429 1405 1409 1434 1430 1406 1410
+1157 5 2 11 91 1434 1430 1406 1410 1435 1431 1407 1411
+1158 5 2 11 91 1435 1431 1407 1411 1436 1432 1408 1412
+1159 5 2 11 91 1436 1432 1408 1412 490 496 495 489
+1160 5 2 11 91 396 395 389 390 1437 1433 1409 1413
+1161 5 2 11 91 1437 1433 1409 1413 1438 1434 1410 1414
+1162 5 2 11 91 1438 1434 1410 1414 1439 1435 1411 1415
+1163 5 2 11 91 1439 1435 1411 1415 1440 1436 1412 1416
+1164 5 2 11 91 1440 1436 1412 1416 484 490 489 483
+1165 5 2 11 91 55 396 390 56 837 1437 1413 838
+1166 5 2 11 91 837 1437 1413 838 831 1438 1414 832
+1167 5 2 11 91 831 1438 1414 832 825 1439 1415 826
+1168 5 2 11 91 825 1439 1415 826 819 1440 1416 820
+1169 5 2 11 91 819 1440 1416 820 145 484 483 146
+1170 5 2 11 91 397 45 44 391 1441 908 904 1417
+1171 5 2 11 91 1441 908 904 1417 1442 907 903 1418
+1172 5 2 11 91 1442 907 903 1418 1443 906 902 1419
+1173 5 2 11 91 1443 906 902 1419 1444 905 901 1420
+1174 5 2 11 91 1444 905 901 1420 515 141 140 514
+1175 5 2 11 91 398 397 391 392 1445 1441 1417 1421
+1176 5 2 11 91 1445 1441 1417 1421 1446 1442 1418 1422
+1177 5 2 11 91 1446 1442 1418 1422 1447 1443 1419 1423
+1178 5 2 11 91 1447 1443 1419 1423 1448 1444 1420 1424
+1179 5 2 11 91 1448 1444 1420 1424 509 515 514 508
+1180 5 2 11 91 399 398 392 393 1449 1445 1421 1425
+1181 5 2 11 91 1449 1445 1421 1425 1450 1446 1422 1426
+1182 5 2 11 91 1450 1446 1422 1426 1451 1447 1423 1427
+1183 5 2 11 91 1451 1447 1423 1427 1452 1448 1424 1428
+1184 5 2 11 91 1452 1448 1424 1428 503 509 508 502
+1185 5 2 11 91 400 399 393 394 1453 1449 1425 1429
+1186 5 2 11 91 1453 1449 1425 1429 1454 1450 1426 1430
+1187 5 2 11 91 1454 1450 1426 1430 1455 1451 1427 1431
+1188 5 2 11 91 1455 1451 1427 1431 1456 1452 1428 1432
+1189 5 2 11 91 1456 1452 1428 1432 497 503 502 496
+1190 5 2 11 91 401 400 394 395 1457 1453 1429 1433
+1191 5 2 11 91 1457 1453 1429 1433 1458 1454 1430 1434
+1192 5 2 11 91 1458 1454 1430 1434 1459 1455 1431 1435
+1193 5 2 11 91 1459 1455 1431 1435 1460 1456 1432 1436
+1194 5 2 11 91 1460 1456 1432 1436 491 497 496 490
+1195 5 2 11 91 402 401 395 396 1461 1457 1433 1437
+1196 5 2 11 91 1461 1457 1433 1437 1462 1458 1434 1438
+1197 5 2 11 91 1462 1458 1434 1438 1463 1459 1435 1439
+1198 5 2 11 91 1463 1459 1435 1439 1464 1460 1436 1440
+1199 5 2 11 91 1464 1460 1436 1440 485 491 490 484
+1200 5 2 11 91 54 402 396 55 836 1461 1437 837
+1201 5 2 11 91 836 1461 1437 837 830 1462 1438 831
+1202 5 2 11 91 830 1462 1438 831 824 1463 1439 825
+1203 5 2 11 91 824 1463 1439 825 818 1464 1440 819
+1204 5 2 11 91 818 1464 1440 819 144 485 484 145
+1205 5 2 11 91 403 46 45 397 1465 912 908 1441
+1206 5 2 11 91 1465 912 908 1441 1466 911 907 1442
+1207 5 2 11 91 1466 911 907 1442 1467 910 906 1443
+1208 5 2 11 91 1467 910 906 1443 1468 909 905 1444
+1209 5 2 11 91 1468 909 905 1444 516 142 141 515
+1210 5 2 11 91 404 403 397 398 1469 1465 1441 1445
+1211 5 2 11 91 1469 1465 1441 1445 1470 1466 1442 1446
+1212 5 2 11 91 1470 1466 1442 1446 1471 1467 1443 1447
+1213 5 2 11 91 1471 1467 1443 1447 1472 1468 1444 1448
+1214 5 2 11 91 1472 1468 1444 1448 510 516 515 509
+1215 5 2 11 91 405 404 398 399 1473 1469 1445 1449
+1216 5 2 11 91 1473 1469 1445 1449 1474 1470 1446 1450
+1217 5 2 11 91 1474 1470 1446 1450 1475 1471 1447 1451
+1218 5 2 11 91 1475 1471 1447 1451 1476 1472 1448 1452
+1219 5 2 11 91 1476 1472 1448 1452 504 510 509 503
+1220 5 2 11 91 406 405 399 400 1477 1473 1449 1453
+1221 5 2 11 91 1477 1473 1449 1453 1478 1474 1450 1454
+1222 5 2 11 91 1478 1474 1450 1454 1479 1475 1451 1455
+1223 5 2 11 91 1479 1475 1451 1455 1480 1476 1452 1456
+1224 5 2 11 91 1480 1476 1452 1456 498 504 503 497
+1225 5 2 11 91 407 406 400 401 1481 1477 1453 1457
+1226 5 2 11 91 1481 1477 1453 1457 1482 1478 1454 1458
+1227 5 2 11 91 1482 1478 1454 1458 1483 1479 1455 1459
+1228 5 2 11 91 1483 1479 1455 1459 1484 1480 1456 1460
+1229 5 2 11 91 1484 1480 1456 1460 492 498 497 491
+1230 5 2 11 91 408 407 401 402 1485 1481 1457 1461
+1231 5 2 11 91 1485 1481 1457 1461 1486 1482 1458 1462
+1232 5 2 11 91 1486 1482 1458 1462 1487 1483 1459 1463
+1233 5 2 11 91 1487 1483 1459 1463 1488 1484 1460 1464
+1234 5 2 11 91 1488 1484 1460 1464 486 492 491 485
+1235 5 2 11 91 53 408 402 54 835 1485 1461 836
+1236 5 2 11 91 835 1485 1461 836 829 1486 1462 830
+1237 5 2 11 91 829 1486 1462 830 823 1487 1463 824
+1238 5 2 11 91 823 1487 1463 824 817 1488 1464 818
+1239 5 2 11 91 817 1488 1464 818 143 486 485 144
+1240 5 2 11 91 47 6 46 403 696 168 912 1465
+1241 5 2 11 91 696 168 912 1465 690 167 911 1466
+1242 5 2 11 91 690 167 911 1466 684 166 910 1467
+1243 5 2 11 91 684 166 910 1467 678 165 909 1468
+1244 5 2 11 91 678 165 909 1468 118 14 142 516
+1245 5 2 11 91 48 47 403 404 695 696 1465 1469
+1246 5 2 11 91 695 696 1465 1469 689 690 1466 1470
+1247 5 2 11 91 689 690 1466 1470 683 684 1467 1471
+1248 5 2 11 91 683 684 1467 1471 677 678 1468 1472
+1249 5 2 11 91 677 678 1468 1472 117 118 516 510
+1250 5 2 11 91 49 48 404 405 694 695 1469 1473
+1251 5 2 11 91 694 695 1469 1473 688 689 1470 1474
+1252 5 2 11 91 688 689 1470 1474 682 683 1471 1475
+1253 5 2 11 91 682 683 1471 1475 676 677 1472 1476
+1254 5 2 11 91 676 677 1472 1476 116 117 510 504
+1255 5 2 11 91 50 49 405 406 693 694 1473 1477
+1256 5 2 11 91 693 694 1473 1477 687 688 1474 1478
+1257 5 2 11 91 687 688 1474 1478 681 682 1475 1479
+1258 5 2 11 91 681 682 1475 1479 675 676 1476 1480
+1259 5 2 11 91 675 676 1476 1480 115 116 504 498
+1260 5 2 11 91 51 50 406 407 692 693 1477 1481
+1261 5 2 11 91 692 693 1477 1481 686 687 1478 1482
+1262 5 2 11 91 686 687 1478 1482 680 681 1479 1483
+1263 5 2 11 91 680 681 1479 1483 674 675 1480 1484
+1264 5 2 11 91 674 675 1480 1484 114 115 498 492
+1265 5 2 11 91 52 51 407 408 691 692 1481 1485
+1266 5 2 11 91 691 692 1481 1485 685 686 1482 1486
+1267 5 2 11 91 685 686 1482 1486 679 680 1483 1487
+1268 5 2 11 91 679 680 1483 1487 673 674 1484 1488
+1269 5 2 11 91 673 674 1484 1488 113 114 492 486
+1270 5 2 11 91 7 52 408 53 192 691 1485 835
+1271 5 2 11 91 192 691 1485 835 191 685 1486 829
+1272 5 2 11 91 191 685 1486 829 190 679 1487 823
+1273 5 2 11 91 190 679 1487 823 189 673 1488 817
+1274 5 2 11 91 189 673 1488 817 13 113 486 143
+1275 5 2 11 93 229 35 4 65 1489 888 172 787
+1276 5 2 11 93 1489 888 172 787 1490 882 171 781
+1277 5 2 11 93 1490 882 171 781 1491 876 170 775
+1278 5 2 11 93 1491 876 170 775 1492 870 169 769
+1279 5 2 11 93 1492 870 169 769 624 100 12 149
+1280 5 2 11 93 230 229 65 66 1493 1489 787 788
+1281 5 2 11 93 1493 1489 787 788 1494 1490 781 782
+1282 5 2 11 93 1494 1490 781 782 1495 1491 775 776
+1283 5 2 11 93 1495 1491 775 776 1496 1492 769 770
+1284 5 2 11 93 1496 1492 769 770 618 624 149 150
+1285 5 2 11 93 231 230 66 67 1497 1493 788 789
+1286 5 2 11 93 1497 1493 788 789 1498 1494 782 783
+1287 5 2 11 93 1498 1494 782 783 1499 1495 776 777
+1288 5 2 11 93 1499 1495 776 777 1500 1496 770 771
+1289 5 2 11 93 1500 1496 770 771 612 618 150 151
+1290 5 2 11 93 232 231 67 68 1501 1497 789 790
+1291 5 2 11 93 1501 1497 789 790 1502 1498 783 784
+1292 5 2 11 93 1502 1498 783 784 1503 1499 777 778
+1293 5 2 11 93 1503 1499 777 778 1504 1500 771 772
+1294 5 2 11 93 1504 1500 771 772 606 612 151 152
+1295 5 2 11 93 233 232 68 69 1505 1501 790 791
+1296 5 2 11 93 1505 1501 790 791 1506 1502 784 785
+1297 5 2 11 93 1506 1502 784 785 1507 1503 778 779
+1298 5 2 11 93 1507 1503 778 779 1508 1504 772 773
+1299 5 2 11 93 1508 1504 772 773 600 606 152 153
+1300 5 2 11 93 234 233 69 70 1509 1505 791 792
+1301 5 2 11 93 1509 1505 791 792 1510 1506 785 786
+1302 5 2 11 93 1510 1506 785 786 1511 1507 779 780
+1303 5 2 11 93 1511 1507 779 780 1512 1508 773 774
+1304 5 2 11 93 1512 1508 773 774 594 600 153 154
+1305 5 2 11 93 41 234 70 5 892 1509 792 176
+1306 5 2 11 93 892 1509 792 176 891 1510 786 175
+1307 5 2 11 93 891 1510 786 175 890 1511 780 174
+1308 5 2 11 93 890 1511 780 174 889 1512 774 173
+1309 5 2 11 93 889 1512 774 173 137 594 154 16
+1310 5 2 11 93 235 36 35 229 1513 887 888 1489
+1311 5 2 11 93 1513 887 888 1489 1514 881 882 1490
+1312 5 2 11 93 1514 881 882 1490 1515 875 876 1491
+1313 5 2 11 93 1515 875 876 1491 1516 869 870 1492
+1314 5 2 11 93 1516 869 870 1492 623 99 100 624
+1315 5 2 11 93 236 235 229 230 1517 1513 1489 1493
+1316 5 2 11 93 1517 1513 1489 1493 1518 1514 1490 1494
+1317 5 2 11 93 1518 1514 1490 1494 1519 1515 1491 1495
+1318 5 2 11 93 1519 1515 1491 1495 1520 1516 1492 1496
+1319 5 2 11 93 1520 1516 1492 1496 617 623 624 618
+1320 5 2 11 93 237 236 230 231 1521 1517 1493 1497
+1321 5 2 11 93 1521 1517 1493 1497 1522 1518 1494 1498
+1322 5 2 11 93 1522 1518 1494 1498 1523 1519 1495 1499
+1323 5 2 11 93 1523 1519 1495 1499 1524 1520 1496 1500
+1324 5 2 11 93 1524 1520 1496 1500 611 617 618 612
+1325 5 2 11 93 238 237 231 232 1525 1521 1497 1501
+1326 5 2 11 93 1525 1521 1497 1501 1526 1522 1498 1502
+1327 5 2 11 93 1526 1522 1498 1502 1527 1523 1499 1503
+1328 5 2 11 93 1527 1523 1499 1503 1528 1524 1500 1504
+1329 5 2 11 93 1528 1524 1500 1504 605 611 612 606
+1330 5 2 11 93 239 238 232 233 1529 1525 1501 1505
+1331 5 2 11 93 1529 1525 1501 1505 1530 1526 1502 1506
+1332 5 2 11 93 1530 1526 1502 1506 1531 1527 1503 1507
+1333 5 2 11 93 1531 1527 1503 1507 1532 1528 1504 1508
+1334 5 2 11 93 1532 1528 1504 1508 599 605 606 600
+1335 5 2 11 93 240 239 233 234 1533 1529 1505 1509
+1336 5 2 11 93 1533 1529 1505 1509 1534 1530 1506 1510
+1337 5 2 11 93 1534 1530 1506 1510 1535 1531 1507 1511
+1338 5 2 11 93 1535 1531 1507 1511 1536 1532 1508 1512
+1339 5 2 11 93 1536 1532 1508 1512 593 599 600 594
+1340 5 2 11 93 42 240 234 41 896 1533 1509 892
+1341 5 2 11 93 896 1533 1509 892 895 1534 1510 891
+1342 5 2 11 93 895 1534 1510 891 894 1535 1511 890
+1343 5 2 11 93 894 1535 1511 890 893 1536 1512 889
+1344 5 2 11 93 893 1536 1512 889 138 593 594 137
+1345 5 2 11 93 241 37 36 235 1537 886 887 1513
+1346 5 2 11 93 1537 886 887 1513 1538 880 881 1514
+1347 5 2 11 93 1538 880 881 1514 1539 874 875 1515
+1348 5 2 11 93 1539 874 875 1515 1540 868 869 1516
+1349 5 2 11 93 1540 868 869 1516 622 98 99 623
+1350 5 2 11 93 242 241 235 236 1541 1537 1513 1517
+1351 5 2 11 93 1541 1537 1513 1517 1542 1538 1514 1518
+1352 5 2 11 93 1542 1538 1514 1518 1543 1539 1515 1519
+1353 5 2 11 93 1543 1539 1515 1519 1544 1540 1516 1520
+1354 5 2 11 93 1544 1540 1516 1520 616 622 623 617
+1355 5 2 11 93 243 242 236 237 1545 1541 1517 1521
+1356 5 2 11 93 1545 1541 1517 1521 1546 1542 1518 1522
+1357 5 2 11 93 1546 1542 1518 1522 1547 1543 1519 1523
+1358 5 2 11 93 1547 1543 1519 1523 1548 1544 1520 1524
+1359 5 2 11 93 1548 1544 1520 1524 610 616 617 611
+1360 5 2 11 93 244 243 237 238 1549 1545 1521 1525
+1361 5 2 11 93 1549 1545 1521 1525 1550 1546 1522 1526
+1362 5 2 11 93 1550 1546 1522 1526 1551 1547 1523 1527
+1363 5 2 11 93 1551 1547 1523 1527 1552 1548 1524 1528
+1364 5 2 11 93 1552 1548 1524 1528 604 610 611 605
+1365 5 2 11 93 245 244 238 239 1553 1549 1525 1529
+1366 5 2 11 93 1553 1549 1525 1529 1554 1550 1526 1530
+1367 5 2 11 93 1554 1550 1526 1530 1555 1551 1527 1531
+1368 5 2 11 93 1555 1551 1527 1531 1556 1552 1528 1532
+1369 5 2 11 93 1556 1552 1528 1532 598 604 605 599
+1370 5 2 11 93 246 245 239 240 1557 1553 1529 1533
+1371 5 2 11 93 1557 1553 1529 1533 1558 1554 1530 1534
+1372 5 2 11 93 1558 1554 1530 1534 1559 1555 1531 1535
+1373 5 2 11 93 1559 1555 1531 1535 1560 1556 1532 1536
+1374 5 2 11 93 1560 1556 1532 1536 592 598 599 593
+1375 5 2 11 93 43 246 240 42 900 1557 1533 896
+1376 5 2 11 93 900 1557 1533 896 899 1558 1534 895
+1377 5 2 11 93 899 1558 1534 895 898 1559 1535 894
+1378 5 2 11 93 898 1559 1535 894 897 1560 1536 893
+1379 5 2 11 93 897 1560 1536 893 139 592 593 138
+1380 5 2 11 93 247 38 37 241 1561 885 886 1537
+1381 5 2 11 93 1561 885 886 1537 1562 879 880 1538
+1382 5 2 11 93 1562 879 880 1538 1563 873 874 1539
+1383 5 2 11 93 1563 873 874 1539 1564 867 868 1540
+1384 5 2 11 93 1564 867 868 1540 621 97 98 622
+1385 5 2 11 93 248 247 241 242 1565 1561 1537 1541
+1386 5 2 11 93 1565 1561 1537 1541 1566 1562 1538 1542
+1387 5 2 11 93 1566 1562 1538 1542 1567 1563 1539 1543
+1388 5 2 11 93 1567 1563 1539 1543 1568 1564 1540 1544
+1389 5 2 11 93 1568 1564 1540 1544 615 621 622 616
+1390 5 2 11 93 249 248 242 243 1569 1565 1541 1545
+1391 5 2 11 93 1569 1565 1541 1545 1570 1566 1542 1546
+1392 5 2 11 93 1570 1566 1542 1546 1571 1567 1543 1547
+1393 5 2 11 93 1571 1567 1543 1547 1572 1568 1544 1548
+1394 5 2 11 93 1572 1568 1544 1548 609 615 616 610
+1395 5 2 11 93 250 249 243 244 1573 1569 1545 1549
+1396 5 2 11 93 1573 1569 1545 1549 1574 1570 1546 1550
+1397 5 2 11 93 1574 1570 1546 1550 1575 1571 1547 1551
+1398 5 2 11 93 1575 1571 1547 1551 1576 1572 1548 1552
+1399 5 2 11 93 1576 1572 1548 1552 603 609 610 604
+1400 5 2 11 93 251 250 244 245 1577 1573 1549 1553
+1401 5 2 11 93 1577 1573 1549 1553 1578 1574 1550 1554
+1402 5 2 11 93 1578 1574 1550 1554 1579 1575 1551 1555
+1403 5 2 11 93 1579 1575 1551 1555 1580 1576 1552 1556
+1404 5 2 11 93 1580 1576 1552 1556 597 603 604 598
+1405 5 2 11 93 252 251 245 246 1581 1577 1553 1557
+1406 5 2 11 93 1581 1577 1553 1557 1582 1578 1554 1558
+1407 5 2 11 93 1582 1578 1554 1558 1583 1579 1555 1559
+1408 5 2 11 93 1583 1579 1555 1559 1584 1580 1556 1560
+1409 5 2 11 93 1584 1580 1556 1560 591 597 598 592
+1410 5 2 11 93 44 252 246 43 904 1581 1557 900
+1411 5 2 11 93 904 1581 1557 900 903 1582 1558 899
+1412 5 2 11 93 903 1582 1558 899 902 1583 1559 898
+1413 5 2 11 93 902 1583 1559 898 901 1584 1560 897
+1414 5 2 11 93 901 1584 1560 897 140 591 592 139
+1415 5 2 11 93 253 39 38 247 1585 884 885 1561
+1416 5 2 11 93 1585 884 885 1561 1586 878 879 1562
+1417 5 2 11 93 1586 878 879 1562 1587 872 873 1563
+1418 5 2 11 93 1587 872 873 1563 1588 866 867 1564
+1419 5 2 11 93 1588 866 867 1564 620 96 97 621
+1420 5 2 11 93 254 253 247 248 1589 1585 1561 1565
+1421 5 2 11 93 1589 1585 1561 1565 1590 1586 1562 1566
+1422 5 2 11 93 1590 1586 1562 1566 1591 1587 1563 1567
+1423 5 2 11 93 1591 1587 1563 1567 1592 1588 1564 1568
+1424 5 2 11 93 1592 1588 1564 1568 614 620 621 615
+1425 5 2 11 93 255 254 248 249 1593 1589 1565 1569
+1426 5 2 11 93 1593 1589 1565 1569 1594 1590 1566 1570
+1427 5 2 11 93 1594 1590 1566 1570 1595 1591 1567 1571
+1428 5 2 11 93 1595 1591 1567 1571 1596 1592 1568 1572
+1429 5 2 11 93 1596 1592 1568 1572 608 614 615 609
+1430 5 2 11 93 256 255 249 250 1597 1593 1569 1573
+1431 5 2 11 93 1597 1593 1569 1573 1598 1594 1570 1574
+1432 5 2 11 93 1598 1594 1570 1574 1599 1595 1571 1575
+1433 5 2 11 93 1599 1595 1571 1575 1600 1596 1572 1576
+1434 5 2 11 93 1600 1596 1572 1576 602 608 609 603
+1435 5 2 11 93 257 256 250 251 1601 1597 1573 1577
+1436 5 2 11 93 1601 1597 1573 1577 1602 1598 1574 1578
+1437 5 2 11 93 1602 1598 1574 1578 1603 1599 1575 1579
+1438 5 2 11 93 1603 1599 1575 1579 1604 1600 1576 1580
+1439 5 2 11 93 1604 1600 1576 1580 596 602 603 597
+1440 5 2 11 93 258 257 251 252 1605 1601 1577 1581
+1441 5 2 11 93 1605 1601 1577 1581 1606 1602 1578 1582
+1442 5 2 11 93 1606 1602 1578 1582 1607 1603 1579 1583
+1443 5 2 11 93 1607 1603 1579 1583 1608 1604 1580 1584
+1444 5 2 11 93 1608 1604 1580 1584 590 596 597 591
+1445 5 2 11 93 45 258 252 44 908 1605 1581 904
+1446 5 2 11 93 908 1605 1581 904 907 1606 1582 903
+1447 5 2 11 93 907 1606 1582 903 906 1607 1583 902
+1448 5 2 11 93 906 1607 1583 902 905 1608 1584 901
+1449 5 2 11 93 905 1608 1584 901 141 590 591 140
+1450 5 2 11 93 259 40 39 253 1609 883 884 1585
+1451 5 2 11 93 1609 883 884 1585 1610 877 878 1586
+1452 5 2 11 93 1610 877 878 1586 1611 871 872 1587
+1453 5 2 11 93 1611 871 872 1587 1612 865 866 1588
+1454 5 2 11 93 1612 865 866 1588 619 95 96 620
+1455 5 2 11 93 260 259 253 254 1613 1609 1585 1589
+1456 5 2 11 93 1613 1609 1585 1589 1614 1610 1586 1590
+1457 5 2 11 93 1614 1610 1586 1590 1615 1611 1587 1591
+1458 5 2 11 93 1615 1611 1587 1591 1616 1612 1588 1592
+1459 5 2 11 93 1616 1612 1588 1592 613 619 620 614
+1460 5 2 11 93 261 260 254 255 1617 1613 1589 1593
+1461 5 2 11 93 1617 1613 1589 1593 1618 1614 1590 1594
+1462 5 2 11 93 1618 1614 1590 1594 1619 1615 1591 1595
+1463 5 2 11 93 1619 1615 1591 1595 1620 1616 1592 1596
+1464 5 2 11 93 1620 1616 1592 1596 607 613 614 608
+1465 5 2 11 93 262 261 255 256 1621 1617 1593 1597
+1466 5 2 11 93 1621 1617 1593 1597 1622 1618 1594 1598
+1467 5 2 11 93 1622 1618 1594 1598 1623 1619 1595 1599
+1468 5 2 11 93 1623 1619 1595 1599 1624 1620 1596 1600
+1469 5 2 11 93 1624 1620 1596 1600 601 607 608 602
+1470 5 2 11 93 263 262 256 257 1625 1621 1597 1601
+1471 5 2 11 93 1625 1621 1597 1601 1626 1622 1598 1602
+1472 5 2 11 93 1626 1622 1598 1602 1627 1623 1599 1603
+1473 5 2 11 93 1627 1623 1599 1603 1628 1624 1600 1604
+1474 5 2 11 93 1628 1624 1600 1604 595 601 602 596
+1475 5 2 11 93 264 263 257 258 1629 1625 1601 1605
+1476 5 2 11 93 1629 1625 1601 1605 1630 1626 1602 1606
+1477 5 2 11 93 1630 1626 1602 1606 1631 1627 1603 1607
+1478 5 2 11 93 1631 1627 1603 1607 1632 1628 1604 1608
+1479 5 2 11 93 1632 1628 1604 1608 589 595 596 590
+1480 5 2 11 93 46 264 258 45 912 1629 1605 908
+1481 5 2 11 93 912 1629 1605 908 911 1630 1606 907
+1482 5 2 11 93 911 1630 1606 907 910 1631 1607 906
+1483 5 2 11 93 910 1631 1607 906 909 1632 1608 905
+1484 5 2 11 93 909 1632 1608 905 142 589 590 141
+1485 5 2 11 93 71 1 40 259 720 164 883 1609
+1486 5 2 11 93 720 164 883 1609 719 163 877 1610
+1487 5 2 11 93 719 163 877 1610 718 162 871 1611
+1488 5 2 11 93 718 162 871 1611 717 161 865 1612
+1489 5 2 11 93 717 161 865 1612 124 9 95 619
+1490 5 2 11 93 72 71 259 260 716 720 1609 1613
+1491 5 2 11 93 716 720 1609 1613 715 719 1610 1614
+1492 5 2 11 93 715 719 1610 1614 714 718 1611 1615
+1493 5 2 11 93 714 718 1611 1615 713 717 1612 1616
+1494 5 2 11 93 713 717 1612 1616 123 124 619 613
+1495 5 2 11 93 73 72 260 261 712 716 1613 1617
+1496 5 2 11 93 712 716 1613 1617 711 715 1614 1618
+1497 5 2 11 93 711 715 1614 1618 710 714 1615 1619
+1498 5 2 11 93 710 714 1615 1619 709 713 1616 1620
+1499 5 2 11 93 709 713 1616 1620 122 123 613 607
+1500 5 2 11 93 74 73 261 262 708 712 1617 1621
+1501 5 2 11 93 708 712 1617 1621 707 711 1618 1622
+1502 5 2 11 93 707 711 1618 1622 706 710 1619 1623
+1503 5 2 11 93 706 710 1619 1623 705 709 1620 1624
+1504 5 2 11 93 705 709 1620 1624 121 122 607 601
+1505 5 2 11 93 75 74 262 263 704 708 1621 1625
+1506 5 2 11 93 704 708 1621 1625 703 707 1622 1626
+1507 5 2 11 93 703 707 1622 1626 702 706 1623 1627
+1508 5 2 11 93 702 706 1623 1627 701 705 1624 1628
+1509 5 2 11 93 701 705 1624 1628 120 121 601 595
+1510 5 2 11 93 76 75 263 264 700 704 1625 1629
+1511 5 2 11 93 700 704 1625 1629 699 703 1626 1630
+1512 5 2 11 93 699 703 1626 1630 698 702 1627 1631
+1513 5 2 11 93 698 702 1627 1631 697 701 1628 1632
+1514 5 2 11 93 697 701 1628 1632 119 120 595 589
+1515 5 2 11 93 6 76 264 46 168 700 1629 912
+1516 5 2 11 93 168 700 1629 912 167 699 1630 911
+1517 5 2 11 93 167 699 1630 911 166 698 1631 910
+1518 5 2 11 93 166 698 1631 910 165 697 1632 909
+1519 5 2 11 93 165 697 1632 909 14 119 589 142
+1520 5 2 11 95 337 29 3 83 1633 768 184 744
+1521 5 2 11 95 1633 768 184 744 1634 767 183 738
+1522 5 2 11 95 1634 767 183 738 1635 766 182 732
+1523 5 2 11 95 1635 766 182 732 1636 765 181 726
+1524 5 2 11 95 1636 765 181 726 547 106 11 160
+1525 5 2 11 95 338 337 83 84 1637 1633 744 743
+1526 5 2 11 95 1637 1633 744 743 1638 1634 738 737
+1527 5 2 11 95 1638 1634 738 737 1639 1635 732 731
+1528 5 2 11 95 1639 1635 732 731 1640 1636 726 725
+1529 5 2 11 95 1640 1636 726 725 548 547 160 159
+1530 5 2 11 95 339 338 84 85 1641 1637 743 742
+1531 5 2 11 95 1641 1637 743 742 1642 1638 737 736
+1532 5 2 11 95 1642 1638 737 736 1643 1639 731 730
+1533 5 2 11 95 1643 1639 731 730 1644 1640 725 724
+1534 5 2 11 95 1644 1640 725 724 549 548 159 158
+1535 5 2 11 95 340 339 85 86 1645 1641 742 741
+1536 5 2 11 95 1645 1641 742 741 1646 1642 736 735
+1537 5 2 11 95 1646 1642 736 735 1647 1643 730 729
+1538 5 2 11 95 1647 1643 730 729 1648 1644 724 723
+1539 5 2 11 95 1648 1644 724 723 550 549 158 157
+1540 5 2 11 95 341 340 86 87 1649 1645 741 740
+1541 5 2 11 95 1649 1645 741 740 1650 1646 735 734
+1542 5 2 11 95 1650 1646 735 734 1651 1647 729 728
+1543 5 2 11 95 1651 1647 729 728 1652 1648 723 722
+1544 5 2 11 95 1652 1648 723 722 551 550 157 156
+1545 5 2 11 95 342 341 87 88 1653 1649 740 739
+1546 5 2 11 95 1653 1649 740 739 1654 1650 734 733
+1547 5 2 11 95 1654 1650 734 733 1655 1651 728 727
+1548 5 2 11 95 1655 1651 728 727 1656 1652 722 721
+1549 5 2 11 95 1656 1652 722 721 552 551 156 155
+1550 5 2 11 95 59 342 88 8 816 1653 739 180
+1551 5 2 11 95 816 1653 739 180 810 1654 733 179
+1552 5 2 11 95 810 1654 733 179 804 1655 727 178
+1553 5 2 11 95 804 1655 727 178 798 1656 721 177
+1554 5 2 11 95 798 1656 721 177 131 552 155 15
+1555 5 2 11 95 343 30 29 337 1657 764 768 1633
+1556 5 2 11 95 1657 764 768 1633 1658 763 767 1634
+1557 5 2 11 95 1658 763 767 1634 1659 762 766 1635
+1558 5 2 11 95 1659 762 766 1635 1660 761 765 1636
+1559 5 2 11 95 1660 761 765 1636 541 105 106 547
+1560 5 2 11 95 344 343 337 338 1661 1657 1633 1637
+1561 5 2 11 95 1661 1657 1633 1637 1662 1658 1634 1638
+1562 5 2 11 95 1662 1658 1634 1638 1663 1659 1635 1639
+1563 5 2 11 95 1663 1659 1635 1639 1664 1660 1636 1640
+1564 5 2 11 95 1664 1660 1636 1640 542 541 547 548
+1565 5 2 11 95 345 344 338 339 1665 1661 1637 1641
+1566 5 2 11 95 1665 1661 1637 1641 1666 1662 1638 1642
+1567 5 2 11 95 1666 1662 1638 1642 1667 1663 1639 1643
+1568 5 2 11 95 1667 1663 1639 1643 1668 1664 1640 1644
+1569 5 2 11 95 1668 1664 1640 1644 543 542 548 549
+1570 5 2 11 95 346 345 339 340 1669 1665 1641 1645
+1571 5 2 11 95 1669 1665 1641 1645 1670 1666 1642 1646
+1572 5 2 11 95 1670 1666 1642 1646 1671 1667 1643 1647
+1573 5 2 11 95 1671 1667 1643 1647 1672 1668 1644 1648
+1574 5 2 11 95 1672 1668 1644 1648 544 543 549 550
+1575 5 2 11 95 347 346 340 341 1673 1669 1645 1649
+1576 5 2 11 95 1673 1669 1645 1649 1674 1670 1646 1650
+1577 5 2 11 95 1674 1670 1646 1650 1675 1671 1647 1651
+1578 5 2 11 95 1675 1671 1647 1651 1676 1672 1648 1652
+1579 5 2 11 95 1676 1672 1648 1652 545 544 550 551
+1580 5 2 11 95 348 347 341 342 1677 1673 1649 1653
+1581 5 2 11 95 1677 1673 1649 1653 1678 1674 1650 1654
+1582 5 2 11 95 1678 1674 1650 1654 1679 1675 1651 1655
+1583 5 2 11 95 1679 1675 1651 1655 1680 1676 1652 1656
+1584 5 2 11 95 1680 1676 1652 1656 546 545 551 552
+1585 5 2 11 95 60 348 342 59 815 1677 1653 816
+1586 5 2 11 95 815 1677 1653 816 809 1678 1654 810
+1587 5 2 11 95 809 1678 1654 810 803 1679 1655 804
+1588 5 2 11 95 803 1679 1655 804 797 1680 1656 798
+1589 5 2 11 95 797 1680 1656 798 132 546 552 131
+1590 5 2 11 95 349 31 30 343 1681 760 764 1657
+1591 5 2 11 95 1681 760 764 1657 1682 759 763 1658
+1592 5 2 11 95 1682 759 763 1658 1683 758 762 1659
+1593 5 2 11 95 1683 758 762 1659 1684 757 761 1660
+1594 5 2 11 95 1684 757 761 1660 535 104 105 541
+1595 5 2 11 95 350 349 343 344 1685 1681 1657 1661
+1596 5 2 11 95 1685 1681 1657 1661 1686 1682 1658 1662
+1597 5 2 11 95 1686 1682 1658 1662 1687 1683 1659 1663
+1598 5 2 11 95 1687 1683 1659 1663 1688 1684 1660 1664
+1599 5 2 11 95 1688 1684 1660 1664 536 535 541 542
+1600 5 2 11 95 351 350 344 345 1689 1685 1661 1665
+1601 5 2 11 95 1689 1685 1661 1665 1690 1686 1662 1666
+1602 5 2 11 95 1690 1686 1662 1666 1691 1687 1663 1667
+1603 5 2 11 95 1691 1687 1663 1667 1692 1688 1664 1668
+1604 5 2 11 95 1692 1688 1664 1668 537 536 542 543
+1605 5 2 11 95 352 351 345 346 1693 1689 1665 1669
+1606 5 2 11 95 1693 1689 1665 1669 1694 1690 1666 1670
+1607 5 2 11 95 1694 1690 1666 1670 1695 1691 1667 1671
+1608 5 2 11 95 1695 1691 1667 1671 1696 1692 1668 1672
+1609 5 2 11 95 1696 1692 1668 1672 538 537 543 544
+1610 5 2 11 95 353 352 346 347 1697 1693 1669 1673
+1611 5 2 11 95 1697 1693 1669 1673 1698 1694 1670 1674
+1612 5 2 11 95 1698 1694 1670 1674 1699 1695 1671 1675
+1613 5 2 11 95 1699 1695 1671 1675 1700 1696 1672 1676
+1614 5 2 11 95 1700 1696 1672 1676 539 538 544 545
+1615 5 2 11 95 354 353 347 348 1701 1697 1673 1677
+1616 5 2 11 95 1701 1697 1673 1677 1702 1698 1674 1678
+1617 5 2 11 95 1702 1698 1674 1678 1703 1699 1675 1679
+1618 5 2 11 95 1703 1699 1675 1679 1704 1700 1676 1680
+1619 5 2 11 95 1704 1700 1676 1680 540 539 545 546
+1620 5 2 11 95 61 354 348 60 814 1701 1677 815
+1621 5 2 11 95 814 1701 1677 815 808 1702 1678 809
+1622 5 2 11 95 808 1702 1678 809 802 1703 1679 803
+1623 5 2 11 95 802 1703 1679 803 796 1704 1680 797
+1624 5 2 11 95 796 1704 1680 797 133 540 546 132
+1625 5 2 11 95 355 32 31 349 1705 756 760 1681
+1626 5 2 11 95 1705 756 760 1681 1706 755 759 1682
+1627 5 2 11 95 1706 755 759 1682 1707 754 758 1683
+1628 5 2 11 95 1707 754 758 1683 1708 753 757 1684
+1629 5 2 11 95 1708 753 757 1684 529 103 104 535
+1630 5 2 11 95 356 355 349 350 1709 1705 1681 1685
+1631 5 2 11 95 1709 1705 1681 1685 1710 1706 1682 1686
+1632 5 2 11 95 1710 1706 1682 1686 1711 1707 1683 1687
+1633 5 2 11 95 1711 1707 1683 1687 1712 1708 1684 1688
+1634 5 2 11 95 1712 1708 1684 1688 530 529 535 536
+1635 5 2 11 95 357 356 350 351 1713 1709 1685 1689
+1636 5 2 11 95 1713 1709 1685 1689 1714 1710 1686 1690
+1637 5 2 11 95 1714 1710 1686 1690 1715 1711 1687 1691
+1638 5 2 11 95 1715 1711 1687 1691 1716 1712 1688 1692
+1639 5 2 11 95 1716 1712 1688 1692 531 530 536 537
+1640 5 2 11 95 358 357 351 352 1717 1713 1689 1693
+1641 5 2 11 95 1717 1713 1689 1693 1718 1714 1690 1694
+1642 5 2 11 95 1718 1714 1690 1694 1719 1715 1691 1695
+1643 5 2 11 95 1719 1715 1691 1695 1720 1716 1692 1696
+1644 5 2 11 95 1720 1716 1692 1696 532 531 537 538
+1645 5 2 11 95 359 358 352 353 1721 1717 1693 1697
+1646 5 2 11 95 1721 1717 1693 1697 1722 1718 1694 1698
+1647 5 2 11 95 1722 1718 1694 1698 1723 1719 1695 1699
+1648 5 2 11 95 1723 1719 1695 1699 1724 1720 1696 1700
+1649 5 2 11 95 1724 1720 1696 1700 533 532 538 539
+1650 5 2 11 95 360 359 353 354 1725 1721 1697 1701
+1651 5 2 11 95 1725 1721 1697 1701 1726 1722 1698 1702
+1652 5 2 11 95 1726 1722 1698 1702 1727 1723 1699 1703
+1653 5 2 11 95 1727 1723 1699 1703 1728 1724 1700 1704
+1654 5 2 11 95 1728 1724 1700 1704 534 533 539 540
+1655 5 2 11 95 62 360 354 61 813 1725 1701 814
+1656 5 2 11 95 813 1725 1701 814 807 1726 1702 808
+1657 5 2 11 95 807 1726 1702 808 801 1727 1703 802
+1658 5 2 11 95 801 1727 1703 802 795 1728 1704 796
+1659 5 2 11 95 795 1728 1704 796 134 534 540 133
+1660 5 2 11 95 361 33 32 355 1729 752 756 1705
+1661 5 2 11 95 1729 752 756 1705 1730 751 755 1706
+1662 5 2 11 95 1730 751 755 1706 1731 750 754 1707
+1663 5 2 11 95 1731 750 754 1707 1732 749 753 1708
+1664 5 2 11 95 1732 749 753 1708 523 102 103 529
+1665 5 2 11 95 362 361 355 356 1733 1729 1705 1709
+1666 5 2 11 95 1733 1729 1705 1709 1734 1730 1706 1710
+1667 5 2 11 95 1734 1730 1706 1710 1735 1731 1707 1711
+1668 5 2 11 95 1735 1731 1707 1711 1736 1732 1708 1712
+1669 5 2 11 95 1736 1732 1708 1712 524 523 529 530
+1670 5 2 11 95 363 362 356 357 1737 1733 1709 1713
+1671 5 2 11 95 1737 1733 1709 1713 1738 1734 1710 1714
+1672 5 2 11 95 1738 1734 1710 1714 1739 1735 1711 1715
+1673 5 2 11 95 1739 1735 1711 1715 1740 1736 1712 1716
+1674 5 2 11 95 1740 1736 1712 1716 525 524 530 531
+1675 5 2 11 95 364 363 357 358 1741 1737 1713 1717
+1676 5 2 11 95 1741 1737 1713 1717 1742 1738 1714 1718
+1677 5 2 11 95 1742 1738 1714 1718 1743 1739 1715 1719
+1678 5 2 11 95 1743 1739 1715 1719 1744 1740 1716 1720
+1679 5 2 11 95 1744 1740 1716 1720 526 525 531 532
+1680 5 2 11 95 365 364 358 359 1745 1741 1717 1721
+1681 5 2 11 95 1745 1741 1717 1721 1746 1742 1718 1722
+1682 5 2 11 95 1746 1742 1718 1722 1747 1743 1719 1723
+1683 5 2 11 95 1747 1743 1719 1723 1748 1744 1720 1724
+1684 5 2 11 95 1748 1744 1720 1724 527 526 532 533
+1685 5 2 11 95 366 365 359 360 1749 1745 1721 1725
+1686 5 2 11 95 1749 1745 1721 1725 1750 1746 1722 1726
+1687 5 2 11 95 1750 1746 1722 1726 1751 1747 1723 1727
+1688 5 2 11 95 1751 1747 1723 1727 1752 1748 1724 1728
+1689 5 2 11 95 1752 1748 1724 1728 528 527 533 534
+1690 5 2 11 95 63 366 360 62 812 1749 1725 813
+1691 5 2 11 95 812 1749 1725 813 806 1750 1726 807
+1692 5 2 11 95 806 1750 1726 807 800 1751 1727 801
+1693 5 2 11 95 800 1751 1727 801 794 1752 1728 795
+1694 5 2 11 95 794 1752 1728 795 135 528 534 134
+1695 5 2 11 95 367 34 33 361 1753 748 752 1729
+1696 5 2 11 95 1753 748 752 1729 1754 747 751 1730
+1697 5 2 11 95 1754 747 751 1730 1755 746 750 1731
+1698 5 2 11 95 1755 746 750 1731 1756 745 749 1732
+1699 5 2 11 95 1756 745 749 1732 517 101 102 523
+1700 5 2 11 95 368 367 361 362 1757 1753 1729 1733
+1701 5 2 11 95 1757 1753 1729 1733 1758 1754 1730 1734
+1702 5 2 11 95 1758 1754 1730 1734 1759 1755 1731 1735
+1703 5 2 11 95 1759 1755 1731 1735 1760 1756 1732 1736
+1704 5 2 11 95 1760 1756 1732 1736 518 517 523 524
+1705 5 2 11 95 369 368 362 363 1761 1757 1733 1737
+1706 5 2 11 95 1761 1757 1733 1737 1762 1758 1734 1738
+1707 5 2 11 95 1762 1758 1734 1738 1763 1759 1735 1739
+1708 5 2 11 95 1763 1759 1735 1739 1764 1760 1736 1740
+1709 5 2 11 95 1764 1760 1736 1740 519 518 524 525
+1710 5 2 11 95 370 369 363 364 1765 1761 1737 1741
+1711 5 2 11 95 1765 1761 1737 1741 1766 1762 1738 1742
+1712 5 2 11 95 1766 1762 1738 1742 1767 1763 1739 1743
+1713 5 2 11 95 1767 1763 1739 1743 1768 1764 1740 1744
+1714 5 2 11 95 1768 1764 1740 1744 520 519 525 526
+1715 5 2 11 95 371 370 364 365 1769 1765 1741 1745
+1716 5 2 11 95 1769 1765 1741 1745 1770 1766 1742 1746
+1717 5 2 11 95 1770 1766 1742 1746 1771 1767 1743 1747
+1718 5 2 11 95 1771 1767 1743 1747 1772 1768 1744 1748
+1719 5 2 11 95 1772 1768 1744 1748 521 520 526 527
+1720 5 2 11 95 372 371 365 366 1773 1769 1745 1749
+1721 5 2 11 95 1773 1769 1745 1749 1774 1770 1746 1750
+1722 5 2 11 95 1774 1770 1746 1750 1775 1771 1747 1751
+1723 5 2 11 95 1775 1771 1747 1751 1776 1772 1748 1752
+1724 5 2 11 95 1776 1772 1748 1752 522 521 527 528
+1725 5 2 11 95 64 372 366 63 811 1773 1749 812
+1726 5 2 11 95 811 1773 1749 812 805 1774 1750 806
+1727 5 2 11 95 805 1774 1750 806 799 1775 1751 800
+1728 5 2 11 95 799 1775 1751 800 793 1776 1752 794
+1729 5 2 11 95 793 1776 1752 794 136 522 528 135
+1730 5 2 11 95 65 4 34 367 787 172 748 1753
+1731 5 2 11 95 787 172 748 1753 781 171 747 1754
+1732 5 2 11 95 781 171 747 1754 775 170 746 1755
+1733 5 2 11 95 775 170 746 1755 769 169 745 1756
+1734 5 2 11 95 769 169 745 1756 149 12 101 517
+1735 5 2 11 95 66 65 367 368 788 787 1753 1757
+1736 5 2 11 95 788 787 1753 1757 782 781 1754 1758
+1737 5 2 11 95 782 781 1754 1758 776 775 1755 1759
+1738 5 2 11 95 776 775 1755 1759 770 769 1756 1760
+1739 5 2 11 95 770 769 1756 1760 150 149 517 518
+1740 5 2 11 95 67 66 368 369 789 788 1757 1761
+1741 5 2 11 95 789 788 1757 1761 783 782 1758 1762
+1742 5 2 11 95 783 782 1758 1762 777 776 1759 1763
+1743 5 2 11 95 777 776 1759 1763 771 770 1760 1764
+1744 5 2 11 95 771 770 1760 1764 151 150 518 519
+1745 5 2 11 95 68 67 369 370 790 789 1761 1765
+1746 5 2 11 95 790 789 1761 1765 784 783 1762 1766
+1747 5 2 11 95 784 783 1762 1766 778 777 1763 1767
+1748 5 2 11 95 778 777 1763 1767 772 771 1764 1768
+1749 5 2 11 95 772 771 1764 1768 152 151 519 520
+1750 5 2 11 95 69 68 370 371 791 790 1765 1769
+1751 5 2 11 95 791 790 1765 1769 785 784 1766 1770
+1752 5 2 11 95 785 784 1766 1770 779 778 1767 1771
+1753 5 2 11 95 779 778 1767 1771 773 772 1768 1772
+1754 5 2 11 95 773 772 1768 1772 153 152 520 521
+1755 5 2 11 95 70 69 371 372 792 791 1769 1773
+1756 5 2 11 95 792 791 1769 1773 786 785 1770 1774
+1757 5 2 11 95 786 785 1770 1774 780 779 1771 1775
+1758 5 2 11 95 780 779 1771 1775 774 773 1772 1776
+1759 5 2 11 95 774 773 1772 1776 154 153 521 522
+1760 5 2 11 95 5 70 372 64 176 792 1773 811
+1761 5 2 11 95 176 792 1773 811 175 786 1774 805
+1762 5 2 11 95 175 786 1774 805 174 780 1775 799
+1763 5 2 11 95 174 780 1775 799 173 774 1776 793
+1764 5 2 11 95 173 774 1776 793 16 154 522 136
+$EndElements
diff --git a/dG3D/benchmarks/multiscaleAdhesiveTest2D/model.py b/dG3D/benchmarks/multiscaleAdhesiveTest2D/model.py
index 42ce256287d14279ea801b7553ff90b55f02b9fb..14a8f141f1b7412879c2c9e7cd74a5afe7d61f56 100644
--- a/dG3D/benchmarks/multiscaleAdhesiveTest2D/model.py
+++ b/dG3D/benchmarks/multiscaleAdhesiveTest2D/model.py
@@ -32,7 +32,7 @@ myfield1 = nonLocalDamageDG3DDomain(1000,nfield,0,lawnum1,0,1e3,2,1)
 
 microBC = nonLinearPeriodicBC(1000,2)
 microBC.setOrder(1)
-microBC.setBCPhysical(1,2,3,4)
+microBC.setBCPhysical(1,4,3,2)
 # periodiodic BC
 method = 0 # Periodic mesh = 0 Langrange interpolation = 1 Cubic spline interpolation =2
 degree = 5 
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D/model.py b/dG3D/benchmarks/multiscaleCohesiveTest2D/model.py
index c4e554c7c69c997f27afbd256800c1ca6939d839..078ffcbfe138de617e95cdf86db8d31286b49cab 100644
--- a/dG3D/benchmarks/multiscaleCohesiveTest2D/model.py
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D/model.py
@@ -31,7 +31,7 @@ myfield1 = nonLocalDamageDG3DDomain(1000,nfield,0,lawnum1,0,1e3,2,1)
 
 microBC = nonLinearPeriodicBC(1000,2)
 microBC.setOrder(1)
-microBC.setBCPhysical(1,2,3,4)
+microBC.setBCPhysical(1,4,3,2)
 # periodiodic BC
 method = 0 # Periodic mesh = 0 Langrange interpolation = 1 Cubic spline interpolation =2
 degree = 5 
@@ -98,7 +98,6 @@ macromat1.dirichletBC("Face",11,2,0.)
 lcohNum = 13
 lawCoh = TwoFieldMultiscaleCohesive3DLaw(lcohNum,0.7)
 lawCoh.setCharacteristicLength(1.)
-lawCoh.setExtractCohesiveLawFromMicroDamage(True)
 lawCoh.setLostSolutionUniquenssTolerance(0.9)
 
 macromeshfile="model.msh" # name of mesh file
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG/model.py b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG/model.py
index 8a0c1ae67a088f93c6e2e9ec3274e622ec6be637..9246d35e19c7a1a01f117a92eff5438d53f56a60 100644
--- a/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG/model.py
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG/model.py
@@ -31,7 +31,7 @@ myfield1 = nonLocalDamageDG3DDomain(1000,nfield,0,lawnum1,0,1e3,2,1)
 
 microBC = nonLinearPeriodicBC(1000,2)
 microBC.setOrder(1)
-microBC.setBCPhysical(1,2,3,4)
+microBC.setBCPhysical(1,4,3,2)
 # periodiodic BC
 method = 0 # Periodic mesh = 0 Langrange interpolation = 1 Cubic spline interpolation =2
 degree = 5 
@@ -98,7 +98,6 @@ macromat1.dirichletBC("Face",11,2,0.)
 lcohNum = 13
 lawCoh = dG3DMultiscaleCohesiveLaw(lcohNum,0.7)
 lawCoh.setCharacteristicLength(1.)
-lawCoh.setExtractCohesiveLawFromMicroDamage(True)
 lawCoh.setLostSolutionUniquenssTolerance(0.)
 
 macromeshfile="model.msh" # name of mesh file
@@ -204,5 +203,5 @@ mysolver.archivingInterfaceElementIP(11,12,IPField.INCOMPATIBLE_STRAIN_Y,4,0,1)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(-8.808509e+00,mysolver.getArchivedForceOnPhysicalGroup("Edge", 4, 0),1.e-4)
+check.equal(-1.362276e+01,mysolver.getArchivedForceOnPhysicalGroup("Edge", 4, 0),1.e-4)
 
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_changeBCAfterFailure/CMakeLists.txt b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_changeBCAfterFailure/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..bc54bc2ce5018e76600e6490a5013c6c5d8aed59
--- /dev/null
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_changeBCAfterFailure/CMakeLists.txt
@@ -0,0 +1,14 @@
+# test file
+
+set(PYFILE model.py)
+
+set(FILES2DELETE
+	E_*.msh
+	*.txt 
+  *.csv
+  disp*
+  stress*
+	*Rotated*.msh
+)
+
+add_cm3python_mpi_test(4 ${PYFILE} "${FILES2DELETE}")
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_changeBCAfterFailure/micro.geo b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_changeBCAfterFailure/micro.geo
new file mode 100644
index 0000000000000000000000000000000000000000..5e0b62d6d05215e12989e4cd6bfebc54d1a5517e
--- /dev/null
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_changeBCAfterFailure/micro.geo
@@ -0,0 +1,45 @@
+mm = 1.;
+L = 1.*mm;
+R = 0.15*L;
+lsca1 = 0.2*L;
+lsca2 = 0.4*lsca1;
+
+Point(1) = {0,0,0,lsca1};
+Point(2) = {-R,0,0,lsca2};
+Point(3) = {-0.5*L,0,0,lsca2};
+Point(4) = {-0.5*L,-0.5*L,0,lsca1};
+Point(5) = {0,-0.5*L,0,lsca2};
+Point(6) = {0,-R,0,lsca2};
+
+
+Line(1) = {2, 3};
+Line(2) = {3, 4};
+Line(3) = {4, 5};
+Line(4) = {5, 6};
+Circle(5) = {2, 1, 6};
+Line Loop(6) = {2, 3, 4, -5, 1};
+Plane Surface(7) = {6};
+Symmetry {1, 0, 0, 0} {
+  Duplicata { Surface{7}; }
+}
+Symmetry {0, 1, 0, 0} {
+  Duplicata { Surface{7, 8}; }
+}
+
+//Recombine Surface{14, 20, 8, 7};
+Physical Line(1) = {3, 10};
+Physical Line(2) = {9, 21};
+Physical Line(3) = {22, 16};
+Physical Line(4) = {15, 2};
+Physical Surface(11) = {14, 20, 8, 7};
+
+
+/*
+Translate {0.1, 0, 0} {
+  Line{17, 24, 18, 5, 12, 4};
+}
+
+Translate {0, 0.1, 0} {
+  Line{18, 24, 13, 12, 5, 1};
+}
+*/
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_changeBCAfterFailure/micro.msh b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_changeBCAfterFailure/micro.msh
new file mode 100644
index 0000000000000000000000000000000000000000..c6acd5b31b792077590d064be2f4fe7779b47c89
--- /dev/null
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_changeBCAfterFailure/micro.msh
@@ -0,0 +1,787 @@
+$MeshFormat
+2.2 0 8
+$EndMeshFormat
+$Nodes
+512
+1 -0.15 0 0
+2 -0.5 0 0
+3 -0.5 -0.5 0
+4 0 -0.5 0
+5 0 -0.15 0
+6 0.5 0 0
+7 0.5 -0.5 0
+8 0.15 0 0
+9 -0.5 0.5 0
+10 0 0.5 0
+11 0 0.15 0
+12 0.5 0.5 0
+13 -0.2199999999998429 0 0
+14 -0.2899999999995946 0 0
+15 -0.3599999999995793 0 0
+16 -0.4299999999997463 0 0
+17 -0.1849999999999308 0 0
+18 -0.2549999999996413 0 0
+19 -0.3249999999994754 0 0
+20 -0.3949999999996151 0 0
+21 -0.4649999999998321 0 0
+22 -0.5 -0.08581116126524545 0
+23 -0.5 -0.1937129562906754 0
+24 -0.5 -0.3293922803425093 0
+25 -0.5 -0.04290558063262855 0
+26 -0.5 -0.1397620587779604 0
+27 -0.5 -0.261552618316445 0
+28 -0.5 -0.4146961401712547 0
+29 -0.329392280343592 -0.5 0
+30 -0.1937129562919624 -0.5 0
+31 -0.08581116126571686 -0.5 0
+32 -0.4146961401717154 -0.5 0
+33 -0.2615526183179323 -0.5 0
+34 -0.1397620587788396 -0.5 0
+35 -0.04290558063285843 -0.5 0
+36 0 -0.4300000000001734 0
+37 0 -0.3600000000003685 0
+38 0 -0.2900000000003252 0
+39 0 -0.2200000000001519 0
+40 0 -0.4650000000000867 0
+41 0 -0.3950000000003007 0
+42 0 -0.3250000000004448 0
+43 0 -0.2550000000002834 0
+44 0 -0.1850000000000817 0
+45 -0.1299038105677715 -0.07499999999981691 0
+46 -0.07500000000016267 -0.1299038105675719 0
+47 -0.1448888739433795 -0.03882285676530619 0
+48 -0.106066017178175 -0.1060660171777893 0
+49 -0.03882285676546777 -0.1448888739433362 0
+50 0.5 -0.08581116126524545 0
+51 0.5 -0.1937129562906754 0
+52 0.5 -0.3293922803425093 0
+53 0.5 -0.04290558063262855 0
+54 0.5 -0.1397620587779604 0
+55 0.5 -0.261552618316445 0
+56 0.5 -0.4146961401712547 0
+57 0.329392280343592 -0.5 0
+58 0.1937129562919624 -0.5 0
+59 0.08581116126571686 -0.5 0
+60 0.4146961401717154 -0.5 0
+61 0.2615526183179323 -0.5 0
+62 0.1397620587788396 -0.5 0
+63 0.04290558063285843 -0.5 0
+64 0.07499999999980624 -0.1299038105677777 0
+65 0.12990381056752 -0.07500000000025255 0
+66 0.03882285676529234 -0.1448888739433832 0
+67 0.1060660171777162 -0.1060660171782481 0
+68 0.1448888739433208 -0.03882285676552522 0
+69 0.2199999999998429 0 0
+70 0.2899999999995946 0 0
+71 0.3599999999995793 0 0
+72 0.4299999999997463 0 0
+73 0.1849999999999308 0 0
+74 0.2549999999996413 0 0
+75 0.3249999999994754 0 0
+76 0.3949999999996151 0 0
+77 0.4649999999998321 0 0
+78 -0.5 0.08581116126524545 0
+79 -0.5 0.1937129562906754 0
+80 -0.5 0.3293922803425093 0
+81 -0.5 0.04290558063262855 0
+82 -0.5 0.1397620587779604 0
+83 -0.5 0.261552618316445 0
+84 -0.5 0.4146961401712547 0
+85 -0.329392280343592 0.5 0
+86 -0.1937129562919624 0.5 0
+87 -0.08581116126571686 0.5 0
+88 -0.4146961401717154 0.5 0
+89 -0.2615526183179323 0.5 0
+90 -0.1397620587788396 0.5 0
+91 -0.04290558063285843 0.5 0
+92 0 0.4300000000001734 0
+93 0 0.3600000000003685 0
+94 0 0.2900000000003252 0
+95 0 0.2200000000001519 0
+96 0 0.4650000000000867 0
+97 0 0.3950000000003007 0
+98 0 0.3250000000004448 0
+99 0 0.2550000000002834 0
+100 0 0.1850000000000817 0
+101 -0.07499999999980624 0.1299038105677777 0
+102 -0.12990381056752 0.07500000000025255 0
+103 -0.03882285676529234 0.1448888739433832 0
+104 -0.1060660171777162 0.1060660171782481 0
+105 -0.1448888739433208 0.03882285676552522 0
+106 0.5 0.08581116126524545 0
+107 0.5 0.1937129562906754 0
+108 0.5 0.3293922803425093 0
+109 0.5 0.04290558063262855 0
+110 0.5 0.1397620587779604 0
+111 0.5 0.261552618316445 0
+112 0.5 0.4146961401712547 0
+113 0.329392280343592 0.5 0
+114 0.1937129562919624 0.5 0
+115 0.08581116126571686 0.5 0
+116 0.4146961401717154 0.5 0
+117 0.2615526183179323 0.5 0
+118 0.1397620587788396 0.5 0
+119 0.04290558063285843 0.5 0
+120 0.07499999999980624 0.1299038105677777 0
+121 0.12990381056752 0.07500000000025255 0
+122 0.03882285676529234 0.1448888739433832 0
+123 0.1060660171777162 0.1060660171782481 0
+124 0.1448888739433208 0.03882285676552522 0
+125 -0.1632048750113544 -0.1232644810194541 0
+126 -0.2185144679483137 -0.3801534959448527 0
+127 -0.05089028167349786 -0.3584631613501202 0
+128 -0.06084793484707645 -0.1951430174291601 0
+129 -0.3999414826379826 -0.2373669670280938 0
+130 -0.3599999999994629 -0.06999999999986822 0
+131 -0.3654446467373357 -0.3654437046554025 0
+132 -0.4395424499711516 -0.06153088004804232 0
+133 -0.07529335399327118 -0.4336732331852045 0
+134 -0.281150983089465 -0.07390248292404106 0
+135 -0.2004047094340141 -0.06731430289221857 0
+136 -0.2306851351003935 -0.1453676244057918 0
+137 -0.07468286925234641 -0.2723686030373706 0
+138 -0.1452917775342399 -0.193626272412306 0
+139 -0.2595592816824605 -0.2528029361930984 0
+140 -0.1622839878484807 -0.2944285423531688 0
+141 -0.3285804443445061 -0.150165777374023 0
+142 -0.1292296528346454 -0.3731811726451194 0
+143 -0.4267159830345902 -0.1297998703416353 0
+144 -0.3297503821602216 -0.2450849516105961 0
+145 -0.2940698630134833 -0.2014843567835607 0
+146 -0.3642609634912444 -0.1937663722010584 0
+147 -0.1345031551426168 -0.4668366165926022 0
+148 -0.1022615034139583 -0.4034272029151619 0
+149 -0.1614713045633039 -0.4365905863225597 0
+150 -0.1969450050558739 -0.134316052712623 0
+151 -0.1879884563173167 -0.1694969484090489 0
+152 -0.1542483262727972 -0.1584453767158801 0
+153 -0.1191024375057585 -0.126584145793513 0
+154 -0.1101458887672013 -0.1617650414899389 0
+155 -0.245122208391427 -0.1990852802994451 0
+156 -0.2024255296083502 -0.2232146043027022 0
+157 -0.4327223233686679 -0.3474179924989559 0
+158 -0.3826930646876592 -0.3014053358417482 0
+159 -0.4499707413189913 -0.2833796236853016 0
+160 -0.2739533741459528 -0.4400767479724264 0
+161 -0.2919795573428247 -0.3727986003001276 0
+162 -0.3474184635404639 -0.4327218523277012 0
+163 -0.08055225762949403 -0.4668366165926022 0
+164 -0.1465543427895629 -0.09913224050963552 0
+165 -0.1738720603914795 -0.3766673342949861 0
+166 -0.206113712120138 -0.4400767479724264 0
+167 -0.1903992278983972 -0.3372910191490107 0
+168 -0.2109216347654706 -0.2736157392731336 0
+169 -0.239036874815387 -0.3164782160689755 0
+170 -0.06278657546292213 -0.3154158821937454 0
+171 -0.1019562610434959 -0.322774887841245 0
+172 -0.09005996725407162 -0.3658221669976198 0
+173 -0.1184834285504136 -0.2833985726952697 0
+174 -0.145756820341563 -0.3338048574991441 0
+175 -0.4327223233686679 -0.4327218523277012 0
+176 -0.4499707413189913 -0.2155399616593846 0
+177 -0.4133287328362865 -0.1835834186848646 0
+178 -0.4633579915172951 -0.1617564133161554 0
+179 -0.250575491544654 -0.03695124146202053 0
+180 -0.2407778462617395 -0.07060839290812981 0
+181 -0.2102023547169285 -0.03365715144610928 0
+182 -0.0373414346261732 -0.2811843015188479 0
+183 -0.02544514083674893 -0.3242315806752227 0
+184 -0.2796327897224498 -0.1477667008899074 0
+185 -0.4633579915172951 -0.1078055158034404 0
+186 -0.4697712249855758 -0.07367102065664388 0
+187 -0.4697712249855758 -0.03076544002402116 0
+188 -0.03764667699663559 -0.4668366165926022 0
+189 -0.2559180590949293 -0.1096350536649164 0
+190 -0.2155449222672038 -0.1063409636490052 0
+191 -0.1537878826913603 -0.2440274073827374 0
+192 -0.434771224985449 -0.03076544002402116 0
+193 -0.06792396742361956 -0.162523413998366 0
+194 -0.03042396742353823 -0.17257150871458 0
+195 -0.03764667699663559 -0.4318366165926889 0
+196 -0.175202354717007 -0.03365715144610928 0
+197 -0.1651542600008928 -0.07115715144601774 0
+198 -0.3442902221719845 -0.1100828886869456 0
+199 -0.3048657137169856 -0.112034130149032 0
+200 -0.320575491544464 -0.07195124146195464 0
+201 -0.3933579915170266 -0.09989993517075177 0
+202 -0.3776482136895482 -0.1399828238578292 0
+203 -0.3997712249853073 -0.06576544002395526 0
+204 -0.3949999999996046 -0.03499999999993411 0
+205 -0.02544514083674893 -0.3942315806751467 0
+206 -0.06309181783338452 -0.3960681972676623 0
+207 -0.1030698561906582 -0.194384644920733 0
+208 -0.1099873233932932 -0.2329974377248383 0
+209 -0.06776540204971143 -0.2337558102332654 0
+210 -0.2855754915445298 -0.03695124146202053 0
+211 -0.03042396742353823 -0.207571508714656 0
+212 -0.0373414346261732 -0.2461843015187613 0
+213 -0.3599999999995211 -0.03499999999993411 0
+214 -0.3249999999995288 -0.03499999999993411 0
+215 -0.02544514083674893 -0.3592315806752443 0
+216 -0.433129216502871 -0.09566537519483881 0
+217 -0.1818047922226842 -0.09528939195583636 0
+218 -0.3125019642098981 -0.3091233204242504 0
+219 0.1224866355280155 -0.1629072024975547 0
+220 0.3808849436885997 -0.210277224031109 0
+221 0.206743501399355 -0.07464099728276744 0
+222 0.3593515291260043 -0.06361416849824304 0
+223 0.2373889375053712 -0.4000946023341276 0
+224 0.05600596672534444 -0.3582026903534058 0
+225 0.3654446467373352 -0.3654437046554016 0
+226 0.07667776057372377 -0.4233233779044261 0
+227 0.4334916324593139 -0.06393052432330396 0
+228 0.07179343033759225 -0.2810845082405963 0
+229 0.06810735186864317 -0.2009476328841135 0
+230 0.1441955258379768 -0.2303966446545607 0
+231 0.2844391541799908 -0.07552818560281363 0
+232 0.1883841865915948 -0.1499536144563917 0
+233 0.2533917520134046 -0.2547236322031965 0
+234 0.2785219510541916 -0.1476215722506409 0
+235 0.1425674588596785 -0.3441671146532657 0
+236 0.3629155847584906 -0.1147592360453619 0
+237 0.1472316548992905 -0.4335170189783639 0
+238 0.4354584321812809 -0.1336982203911391 0
+239 0.1899781981825249 -0.3721308584936966 0
+240 0.1979796054365416 -0.2994453734282311 0
+241 0.2453903447593879 -0.3274091172686621 0
+242 0.1554354110598052 -0.1564304084769732 0
+243 0.1662898562147858 -0.1901751295554762 0
+244 0.1333410806829962 -0.1966519235760577 0
+245 0.1261952230477678 -0.1189536012489036 0
+246 0.09874331776391088 -0.1464055065326662 0
+247 0.2208879693024997 -0.2023386233297941 0
+248 0.1987936389256907 -0.2425601384288786 0
+249 0.1591439985795574 -0.1124768072283221 0
+250 0.2833906089244816 -0.4500473011670638 0
+251 0.3014167921213532 -0.3827691534947646 0
+252 0.3474184635404636 -0.4327218523277008 0
+253 0.4327223233686676 -0.3474179924989554 0
+254 0.3731647952129674 -0.2878604643432553 0
+255 0.4404424718442999 -0.2698347521868091 0
+256 0.3171383478510021 -0.2325004281171527 0
+257 0.2659568515337981 -0.2011726022269187 0
+258 0.3297034473713957 -0.178949398140875 0
+259 0.3207187679063411 -0.1311904041480014 0
+260 0.3719002642235452 -0.1625182300382355 0
+261 0.4327223233686676 -0.4327218523277008 0
+262 0.1704723055956265 -0.466758509489182 0
+263 0.1923102962023309 -0.4168058106562458 0
+264 0.2155509468986668 -0.4500473011670638 0
+265 0.4404424718442999 -0.2019950901608922 0
+266 0.4081716879349403 -0.1719877222111241 0
+267 0.4677292160906404 -0.1637055883409073 0
+268 0.03405367593432158 -0.2104738164421327 0
+269 0.06995039110311771 -0.2410160705623549 0
+270 0.03589671516879613 -0.2505422541203741 0
+271 0.1433814923488277 -0.2872818796539132 0
+272 0.4677292160906404 -0.1097546908281923 0
+273 0.1165214080825037 -0.466758509489182 0
+274 0.2522195770899168 -0.03776409280140682 0
+275 0.2455913277896729 -0.07508459144279053 0
+276 0.213371750699599 -0.03732049864138372 0
+277 0.4344750323202974 -0.09881437235722154 0
+278 0.3991870084698858 -0.1242287282182505 0
+279 0.3982036086089022 -0.08934488018433293 0
+280 0.2334530688228932 -0.1487875933535163 0
+281 0.03833888028686189 -0.461661688952213 0
+282 0.08124446091972032 -0.461661688952213 0
+283 0.4667458162296569 -0.07487084279427469 0
+284 0.4667458162296569 -0.03196526216165198 0
+285 0.10615143885331 -0.2156721387693371 0
+286 0.1079944780877845 -0.2557405764475785 0
+287 0.2814805526170912 -0.1115748789267273 0
+288 0.2426327262267733 -0.1111312847667042 0
+289 0.1783717506996775 -0.03732049864138372 0
+290 0.1683236559834375 -0.07482049864151 0
+291 0.3236773694692406 -0.09514371082408776 0
+292 0.03833888028686189 -0.4266616889522997 0
+293 0.4317458162295301 -0.03196526216165198 0
+294 0.2872195770897927 -0.03776409280140682 0
+295 0.07155367593422471 -0.1654257217259456 0
+296 0.03405367593432158 -0.1754738164420568 0
+297 0.1975638439954749 -0.1122973058695796 0
+298 0.06389969853146835 -0.319643599297001 0
+299 0.1071804445986354 -0.312625811446931 0
+300 0.09928671279251149 -0.3511849025033358 0
+301 0.1096226097167012 -0.3837452462788459 0
+302 0.06634186364953411 -0.3907630341289159 0
+303 0.1448995568794845 -0.3888420668158148 0
+304 0.1119547077365072 -0.428420198441395 0
+305 0.02800298336267222 -0.3941013451767896 0
+306 0.3964215807926591 -0.06377234641077351 0
+307 0.3946757645628752 -0.03180708424912152 0
+308 0.3246757645627995 -0.03180708424912152 0
+309 0.3218953416529975 -0.06957117705052834 0
+310 0.03589671516879613 -0.2855422541204607 0
+311 0.02800298336267222 -0.3241013451768655 0
+312 0.02800298336267222 -0.3591013451768871 0
+313 0.3596757645627918 -0.03180708424912152 0
+314 0.09529699369832934 -0.1819274176908341 0
+315 0.3611335569422474 -0.08918670227180248 0
+316 0.3094181993753699 -0.310083668429299 0
+317 -0.1224866355280155 0.1629072024975547 0
+318 -0.3808849436885997 0.210277224031109 0
+319 -0.206743501399355 0.07464099728276744 0
+320 -0.3593515291260043 0.06361416849824304 0
+321 -0.2373889375053712 0.4000946023341276 0
+322 -0.05600596672534444 0.3582026903534058 0
+323 -0.3654446467373352 0.3654437046554016 0
+324 -0.07667776057372377 0.4233233779044261 0
+325 -0.4334916324593139 0.06393052432330396 0
+326 -0.07179343033759225 0.2810845082405963 0
+327 -0.06810735186864317 0.2009476328841135 0
+328 -0.1441955258379768 0.2303966446545607 0
+329 -0.2844391541799908 0.07552818560281363 0
+330 -0.1883841865915948 0.1499536144563917 0
+331 -0.2533917520134046 0.2547236322031965 0
+332 -0.2785219510541917 0.1476215722506409 0
+333 -0.1425674588596785 0.3441671146532657 0
+334 -0.3629155847584906 0.1147592360453619 0
+335 -0.1472316548992905 0.4335170189783639 0
+336 -0.4354584321812809 0.1336982203911391 0
+337 -0.1899781981825249 0.3721308584936966 0
+338 -0.1979796054365416 0.2994453734282311 0
+339 -0.2453903447593879 0.3274091172686621 0
+340 -0.1554354110598052 0.1564304084769732 0
+341 -0.1662898562147858 0.1901751295554762 0
+342 -0.1333410806829962 0.1966519235760577 0
+343 -0.1261952230477678 0.1189536012489036 0
+344 -0.09874331776391088 0.1464055065326662 0
+345 -0.2208879693024997 0.2023386233297941 0
+346 -0.1987936389256907 0.2425601384288786 0
+347 -0.1591439985795574 0.1124768072283221 0
+348 -0.2833906089244816 0.4500473011670638 0
+349 -0.3014167921213532 0.3827691534947646 0
+350 -0.3474184635404636 0.4327218523277008 0
+351 -0.4327223233686676 0.3474179924989554 0
+352 -0.3731647952129674 0.2878604643432553 0
+353 -0.4404424718442999 0.2698347521868091 0
+354 -0.3171383478510021 0.2325004281171527 0
+355 -0.2659568515337981 0.2011726022269187 0
+356 -0.3297034473713957 0.178949398140875 0
+357 -0.3207187679063411 0.1311904041480014 0
+358 -0.3719002642235452 0.1625182300382355 0
+359 -0.4327223233686676 0.4327218523277008 0
+360 -0.1704723055956265 0.466758509489182 0
+361 -0.1923102962023309 0.4168058106562458 0
+362 -0.2155509468986668 0.4500473011670638 0
+363 -0.4404424718442999 0.2019950901608922 0
+364 -0.4081716879349403 0.1719877222111241 0
+365 -0.4677292160906404 0.1637055883409073 0
+366 -0.03405367593432158 0.2104738164421327 0
+367 -0.06995039110311771 0.2410160705623549 0
+368 -0.03589671516879613 0.2505422541203741 0
+369 -0.1433814923488277 0.2872818796539132 0
+370 -0.4677292160906404 0.1097546908281923 0
+371 -0.1165214080825037 0.466758509489182 0
+372 -0.2522195770899168 0.03776409280140682 0
+373 -0.2455913277896729 0.07508459144279053 0
+374 -0.213371750699599 0.03732049864138372 0
+375 -0.4344750323202974 0.09881437235722154 0
+376 -0.3991870084698858 0.1242287282182505 0
+377 -0.3982036086089022 0.08934488018433293 0
+378 -0.2334530688228932 0.1487875933535163 0
+379 -0.03833888028686189 0.461661688952213 0
+380 -0.08124446091972032 0.461661688952213 0
+381 -0.4667458162296569 0.07487084279427469 0
+382 -0.4667458162296569 0.03196526216165198 0
+383 -0.10615143885331 0.2156721387693371 0
+384 -0.1079944780877845 0.2557405764475785 0
+385 -0.2814805526170913 0.1115748789267273 0
+386 -0.2426327262267734 0.1111312847667042 0
+387 -0.1783717506996775 0.03732049864138372 0
+388 -0.1683236559834375 0.07482049864151 0
+389 -0.3236773694692406 0.09514371082408776 0
+390 -0.03833888028686189 0.4266616889522997 0
+391 -0.4317458162295301 0.03196526216165198 0
+392 -0.2872195770897927 0.03776409280140682 0
+393 -0.07155367593422471 0.1654257217259456 0
+394 -0.03405367593432158 0.1754738164420568 0
+395 -0.1975638439954749 0.1122973058695796 0
+396 -0.06389969853146835 0.319643599297001 0
+397 -0.1071804445986354 0.312625811446931 0
+398 -0.09928671279251149 0.3511849025033358 0
+399 -0.1096226097167012 0.3837452462788459 0
+400 -0.06634186364953411 0.3907630341289159 0
+401 -0.1448995568794845 0.3888420668158148 0
+402 -0.1119547077365072 0.428420198441395 0
+403 -0.02800298336267222 0.3941013451767896 0
+404 -0.3964215807926591 0.06377234641077351 0
+405 -0.3946757645628753 0.03180708424912152 0
+406 -0.3246757645627995 0.03180708424912152 0
+407 -0.3218953416529975 0.06957117705052834 0
+408 -0.03589671516879613 0.2855422541204607 0
+409 -0.02800298336267222 0.3241013451768655 0
+410 -0.02800298336267222 0.3591013451768871 0
+411 -0.3596757645627918 0.03180708424912152 0
+412 -0.09529699369832934 0.1819274176908341 0
+413 -0.3611335569422475 0.08918670227180248 0
+414 -0.3094181993753699 0.310083668429299 0
+415 0.1224866355280155 0.1629072024975547 0
+416 0.3808849436885997 0.210277224031109 0
+417 0.206743501399355 0.07464099728276744 0
+418 0.3593515291260043 0.06361416849824304 0
+419 0.2373889375053712 0.4000946023341276 0
+420 0.05600596672534444 0.3582026903534058 0
+421 0.3654446467373352 0.3654437046554016 0
+422 0.07667776057372377 0.4233233779044261 0
+423 0.4334916324593139 0.06393052432330396 0
+424 0.07179343033759224 0.2810845082405963 0
+425 0.06810735186864313 0.2009476328841135 0
+426 0.1441955258379768 0.2303966446545607 0
+427 0.2844391541799908 0.07552818560281363 0
+428 0.1883841865915948 0.1499536144563917 0
+429 0.2533917520134046 0.2547236322031965 0
+430 0.2785219510541916 0.1476215722506409 0
+431 0.1425674588596785 0.3441671146532657 0
+432 0.3629155847584906 0.1147592360453619 0
+433 0.1472316548992905 0.4335170189783639 0
+434 0.4354584321812809 0.1336982203911391 0
+435 0.1899781981825249 0.3721308584936966 0
+436 0.1979796054365416 0.2994453734282311 0
+437 0.2453903447593879 0.3274091172686621 0
+438 0.1554354110598052 0.1564304084769732 0
+439 0.1662898562147858 0.1901751295554762 0
+440 0.1333410806829962 0.1966519235760577 0
+441 0.1261952230477678 0.1189536012489036 0
+442 0.09874331776391088 0.1464055065326662 0
+443 0.2208879693024997 0.2023386233297941 0
+444 0.1987936389256907 0.2425601384288786 0
+445 0.1591439985795574 0.1124768072283221 0
+446 0.2833906089244816 0.4500473011670638 0
+447 0.3014167921213532 0.3827691534947646 0
+448 0.3474184635404636 0.4327218523277008 0
+449 0.4327223233686676 0.3474179924989554 0
+450 0.3731647952129674 0.2878604643432553 0
+451 0.4404424718442999 0.2698347521868091 0
+452 0.3171383478510021 0.2325004281171527 0
+453 0.2659568515337981 0.2011726022269187 0
+454 0.3297034473713957 0.178949398140875 0
+455 0.3207187679063411 0.1311904041480014 0
+456 0.3719002642235452 0.1625182300382355 0
+457 0.4327223233686676 0.4327218523277008 0
+458 0.1704723055956265 0.466758509489182 0
+459 0.1923102962023309 0.4168058106562458 0
+460 0.2155509468986668 0.4500473011670638 0
+461 0.4404424718442999 0.2019950901608922 0
+462 0.4081716879349403 0.1719877222111241 0
+463 0.4677292160906404 0.1637055883409073 0
+464 0.03405367593432156 0.2104738164421327 0
+465 0.06995039110311768 0.2410160705623549 0
+466 0.03589671516879612 0.2505422541203741 0
+467 0.1433814923488277 0.2872818796539132 0
+468 0.4677292160906404 0.1097546908281923 0
+469 0.1165214080825037 0.466758509489182 0
+470 0.2522195770899168 0.03776409280140682 0
+471 0.2455913277896729 0.07508459144279053 0
+472 0.213371750699599 0.03732049864138372 0
+473 0.4344750323202974 0.09881437235722154 0
+474 0.3991870084698858 0.1242287282182505 0
+475 0.3982036086089022 0.08934488018433294 0
+476 0.2334530688228932 0.1487875933535163 0
+477 0.03833888028686189 0.461661688952213 0
+478 0.08124446091972032 0.461661688952213 0
+479 0.4667458162296569 0.07487084279427469 0
+480 0.4667458162296569 0.03196526216165198 0
+481 0.10615143885331 0.2156721387693371 0
+482 0.1079944780877845 0.2557405764475785 0
+483 0.2814805526170912 0.1115748789267273 0
+484 0.2426327262267733 0.1111312847667042 0
+485 0.1783717506996775 0.03732049864138372 0
+486 0.1683236559834375 0.07482049864151 0
+487 0.3236773694692406 0.09514371082408778 0
+488 0.03833888028686189 0.4266616889522997 0
+489 0.4317458162295301 0.03196526216165198 0
+490 0.2872195770897927 0.03776409280140682 0
+491 0.07155367593422468 0.1654257217259456 0
+492 0.03405367593432156 0.1754738164420567 0
+493 0.1975638439954749 0.1122973058695796 0
+494 0.06389969853146835 0.319643599297001 0
+495 0.1071804445986354 0.312625811446931 0
+496 0.09928671279251149 0.3511849025033358 0
+497 0.1096226097167012 0.3837452462788459 0
+498 0.06634186364953411 0.3907630341289159 0
+499 0.1448995568794845 0.3888420668158148 0
+500 0.1119547077365072 0.428420198441395 0
+501 0.02800298336267222 0.3941013451767896 0
+502 0.3964215807926591 0.06377234641077351 0
+503 0.3946757645628752 0.03180708424912152 0
+504 0.3246757645627995 0.03180708424912152 0
+505 0.3218953416529975 0.06957117705052834 0
+506 0.03589671516879612 0.2855422541204607 0
+507 0.02800298336267222 0.3241013451768655 0
+508 0.02800298336267222 0.3591013451768871 0
+509 0.3596757645627918 0.03180708424912152 0
+510 0.09529699369832932 0.1819274176908341 0
+511 0.3611335569422474 0.08918670227180248 0
+512 0.3094181993753699 0.310083668429299 0
+$EndNodes
+$Elements
+266
+1 8 2 4 2 2 22 25
+2 8 2 4 2 22 23 26
+3 8 2 4 2 23 24 27
+4 8 2 4 2 24 3 28
+5 8 2 1 3 3 29 32
+6 8 2 1 3 29 30 33
+7 8 2 1 3 30 31 34
+8 8 2 1 3 31 4 35
+9 8 2 2 9 6 50 53
+10 8 2 2 9 50 51 54
+11 8 2 2 9 51 52 55
+12 8 2 2 9 52 7 56
+13 8 2 1 10 7 57 60
+14 8 2 1 10 57 58 61
+15 8 2 1 10 58 59 62
+16 8 2 1 10 59 4 63
+17 8 2 4 15 2 78 81
+18 8 2 4 15 78 79 82
+19 8 2 4 15 79 80 83
+20 8 2 4 15 80 9 84
+21 8 2 3 16 9 85 88
+22 8 2 3 16 85 86 89
+23 8 2 3 16 86 87 90
+24 8 2 3 16 87 10 91
+25 8 2 2 21 6 106 109
+26 8 2 2 21 106 107 110
+27 8 2 2 21 107 108 111
+28 8 2 2 21 108 12 112
+29 8 2 3 22 12 113 116
+30 8 2 3 22 113 114 117
+31 8 2 3 22 114 115 118
+32 8 2 3 22 115 10 119
+33 9 2 11 7 129 139 141 144 145 146
+34 9 2 11 7 30 133 142 147 148 149
+35 9 2 11 7 125 136 138 150 151 152
+36 9 2 11 7 46 125 138 153 152 154
+37 9 2 11 7 136 139 138 155 156 151
+38 9 2 11 7 24 131 129 157 158 159
+39 9 2 11 7 29 126 131 160 161 162
+40 9 2 11 7 30 31 133 34 163 147
+41 9 2 11 7 45 125 46 164 153 48
+42 9 2 11 7 30 142 126 149 165 166
+43 9 2 11 7 126 140 139 167 168 169
+44 9 2 11 7 127 137 142 170 171 172
+45 9 2 11 7 137 140 142 173 174 171
+46 9 2 11 7 3 131 24 175 157 28
+47 9 2 11 7 3 29 131 32 162 175
+48 9 2 11 7 23 129 143 176 177 178
+49 9 2 11 7 23 24 129 27 159 176
+50 9 2 11 7 13 134 135 179 180 181
+51 9 2 11 7 29 30 126 33 166 160
+52 9 2 11 7 38 137 127 182 170 183
+53 9 2 11 7 136 141 139 184 145 155
+54 9 2 11 7 22 23 143 26 178 185
+55 9 2 11 7 126 142 140 165 174 167
+56 9 2 11 7 2 22 132 25 186 187
+57 9 2 11 7 4 133 31 188 163 35
+58 9 2 11 7 134 136 135 189 190 180
+59 9 2 11 7 138 139 140 156 168 191
+60 9 2 11 7 2 132 16 187 192 21
+61 9 2 11 7 5 46 128 49 193 194
+62 9 2 11 7 4 36 133 40 195 188
+63 9 2 11 7 1 135 45 196 197 47
+64 9 2 11 7 130 141 134 198 199 200
+65 9 2 11 7 130 143 141 201 202 198
+66 9 2 11 7 16 132 130 192 203 204
+67 9 2 11 7 36 127 133 205 206 195
+68 9 2 11 7 128 138 137 207 208 209
+69 9 2 11 7 137 138 140 208 191 173
+70 9 2 11 7 134 141 136 199 184 189
+71 9 2 11 7 46 138 128 154 207 193
+72 9 2 11 7 13 14 134 18 210 179
+73 9 2 11 7 5 128 39 194 211 44
+74 9 2 11 7 1 13 135 17 181 196
+75 9 2 11 7 38 39 137 43 212 182
+76 9 2 11 7 14 15 130 19 213 214
+77 9 2 11 7 15 16 130 20 204 213
+78 9 2 11 7 37 38 127 42 183 215
+79 9 2 11 7 36 37 127 41 215 205
+80 9 2 11 7 130 132 143 203 216 201
+81 9 2 11 7 125 135 136 217 190 150
+82 9 2 11 7 129 141 143 146 202 177
+83 9 2 11 7 39 128 137 211 209 212
+84 9 2 11 7 14 130 134 214 200 210
+85 9 2 11 7 22 143 132 185 216 186
+86 9 2 11 7 45 135 125 197 217 164
+87 9 2 11 7 127 142 133 172 148 206
+88 9 2 11 7 126 139 131 169 218 161
+89 9 2 11 7 129 131 139 158 218 144
+90 9 2 11 8 223 235 233 239 240 241
+91 9 2 11 8 219 232 230 242 243 244
+92 9 2 11 8 64 65 219 67 245 246
+93 9 2 11 8 230 232 233 243 247 248
+94 9 2 11 8 65 232 219 249 242 245
+95 9 2 11 8 57 223 225 250 251 252
+96 9 2 11 8 52 225 220 253 254 255
+97 9 2 11 8 220 233 234 256 257 258
+98 9 2 11 8 220 234 236 258 259 260
+99 9 2 11 8 7 225 52 261 253 56
+100 9 2 11 8 7 57 225 60 252 261
+101 9 2 11 8 58 237 223 262 263 264
+102 9 2 11 8 57 58 223 61 264 250
+103 9 2 11 8 51 220 238 265 266 267
+104 9 2 11 8 51 52 220 55 255 265
+105 9 2 11 8 39 229 228 268 269 270
+106 9 2 11 8 230 233 235 248 240 271
+107 9 2 11 8 50 51 238 54 267 272
+108 9 2 11 8 58 59 237 62 273 262
+109 9 2 11 8 69 231 221 274 275 276
+110 9 2 11 8 227 238 236 277 278 279
+111 9 2 11 8 232 234 233 280 257 247
+112 9 2 11 8 4 226 59 281 282 63
+113 9 2 11 8 6 50 227 53 283 284
+114 9 2 11 8 228 229 230 269 285 286
+115 9 2 11 8 221 231 234 275 287 288
+116 9 2 11 8 8 221 65 289 290 68
+117 9 2 11 8 231 236 234 291 259 287
+118 9 2 11 8 4 36 226 40 292 281
+119 9 2 11 8 6 227 72 284 293 77
+120 9 2 11 8 69 70 231 74 294 274
+121 9 2 11 8 5 64 229 66 295 296
+122 9 2 11 8 221 234 232 288 280 297
+123 9 2 11 8 220 236 238 260 278 266
+124 9 2 11 8 224 228 235 298 299 300
+125 9 2 11 8 224 235 226 300 301 302
+126 9 2 11 8 226 235 237 301 303 304
+127 9 2 11 8 36 224 226 305 302 292
+128 9 2 11 8 72 227 222 293 306 307
+129 9 2 11 8 70 222 231 308 309 294
+130 9 2 11 8 8 69 221 73 276 289
+131 9 2 11 8 228 230 235 286 271 299
+132 9 2 11 8 38 39 228 43 270 310
+133 9 2 11 8 65 221 232 290 297 249
+134 9 2 11 8 5 229 39 296 268 44
+135 9 2 11 8 37 38 224 42 311 312
+136 9 2 11 8 36 37 224 41 312 305
+137 9 2 11 8 70 71 222 75 313 308
+138 9 2 11 8 71 72 222 76 307 313
+139 9 2 11 8 219 230 229 244 285 314
+140 9 2 11 8 223 237 235 263 303 239
+141 9 2 11 8 38 228 224 310 298 311
+142 9 2 11 8 222 236 231 315 291 309
+143 9 2 11 8 50 238 227 272 277 283
+144 9 2 11 8 59 226 237 282 304 273
+145 9 2 11 8 64 219 229 246 314 295
+146 9 2 11 8 222 227 236 306 279 315
+147 9 2 11 8 220 225 233 254 316 256
+148 9 2 11 8 223 233 225 241 316 251
+149 9 2 11 14 321 333 331 337 338 339
+150 9 2 11 14 317 330 328 340 341 342
+151 9 2 11 14 101 102 317 104 343 344
+152 9 2 11 14 328 330 331 341 345 346
+153 9 2 11 14 102 330 317 347 340 343
+154 9 2 11 14 85 321 323 348 349 350
+155 9 2 11 14 80 323 318 351 352 353
+156 9 2 11 14 318 331 332 354 355 356
+157 9 2 11 14 318 332 334 356 357 358
+158 9 2 11 14 9 323 80 359 351 84
+159 9 2 11 14 9 85 323 88 350 359
+160 9 2 11 14 86 335 321 360 361 362
+161 9 2 11 14 85 86 321 89 362 348
+162 9 2 11 14 79 318 336 363 364 365
+163 9 2 11 14 79 80 318 83 353 363
+164 9 2 11 14 95 327 326 366 367 368
+165 9 2 11 14 328 331 333 346 338 369
+166 9 2 11 14 78 79 336 82 365 370
+167 9 2 11 14 86 87 335 90 371 360
+168 9 2 11 14 13 329 319 372 373 374
+169 9 2 11 14 325 336 334 375 376 377
+170 9 2 11 14 330 332 331 378 355 345
+171 9 2 11 14 10 324 87 379 380 91
+172 9 2 11 14 2 78 325 81 381 382
+173 9 2 11 14 326 327 328 367 383 384
+174 9 2 11 14 319 329 332 373 385 386
+175 9 2 11 14 1 319 102 387 388 105
+176 9 2 11 14 329 334 332 389 357 385
+177 9 2 11 14 10 92 324 96 390 379
+178 9 2 11 14 2 325 16 382 391 21
+179 9 2 11 14 13 14 329 18 392 372
+180 9 2 11 14 11 101 327 103 393 394
+181 9 2 11 14 319 332 330 386 378 395
+182 9 2 11 14 318 334 336 358 376 364
+183 9 2 11 14 322 326 333 396 397 398
+184 9 2 11 14 322 333 324 398 399 400
+185 9 2 11 14 324 333 335 399 401 402
+186 9 2 11 14 92 322 324 403 400 390
+187 9 2 11 14 16 325 320 391 404 405
+188 9 2 11 14 14 320 329 406 407 392
+189 9 2 11 14 1 13 319 17 374 387
+190 9 2 11 14 326 328 333 384 369 397
+191 9 2 11 14 94 95 326 99 368 408
+192 9 2 11 14 102 319 330 388 395 347
+193 9 2 11 14 11 327 95 394 366 100
+194 9 2 11 14 93 94 322 98 409 410
+195 9 2 11 14 92 93 322 97 410 403
+196 9 2 11 14 14 15 320 19 411 406
+197 9 2 11 14 15 16 320 20 405 411
+198 9 2 11 14 317 328 327 342 383 412
+199 9 2 11 14 321 335 333 361 401 337
+200 9 2 11 14 94 326 322 408 396 409
+201 9 2 11 14 320 334 329 413 389 407
+202 9 2 11 14 78 336 325 370 375 381
+203 9 2 11 14 87 324 335 380 402 371
+204 9 2 11 14 101 317 327 344 412 393
+205 9 2 11 14 320 325 334 404 377 413
+206 9 2 11 14 318 323 331 352 414 354
+207 9 2 11 14 321 331 323 339 414 349
+208 9 2 11 20 419 431 429 435 436 437
+209 9 2 11 20 415 428 426 438 439 440
+210 9 2 11 20 120 121 415 123 441 442
+211 9 2 11 20 426 428 429 439 443 444
+212 9 2 11 20 121 428 415 445 438 441
+213 9 2 11 20 113 419 421 446 447 448
+214 9 2 11 20 108 421 416 449 450 451
+215 9 2 11 20 416 429 430 452 453 454
+216 9 2 11 20 416 430 432 454 455 456
+217 9 2 11 20 12 421 108 457 449 112
+218 9 2 11 20 12 113 421 116 448 457
+219 9 2 11 20 114 433 419 458 459 460
+220 9 2 11 20 113 114 419 117 460 446
+221 9 2 11 20 107 416 434 461 462 463
+222 9 2 11 20 107 108 416 111 451 461
+223 9 2 11 20 95 425 424 464 465 466
+224 9 2 11 20 426 429 431 444 436 467
+225 9 2 11 20 106 107 434 110 463 468
+226 9 2 11 20 114 115 433 118 469 458
+227 9 2 11 20 69 427 417 470 471 472
+228 9 2 11 20 423 434 432 473 474 475
+229 9 2 11 20 428 430 429 476 453 443
+230 9 2 11 20 10 422 115 477 478 119
+231 9 2 11 20 6 106 423 109 479 480
+232 9 2 11 20 424 425 426 465 481 482
+233 9 2 11 20 417 427 430 471 483 484
+234 9 2 11 20 8 417 121 485 486 124
+235 9 2 11 20 427 432 430 487 455 483
+236 9 2 11 20 10 92 422 96 488 477
+237 9 2 11 20 6 423 72 480 489 77
+238 9 2 11 20 69 70 427 74 490 470
+239 9 2 11 20 11 120 425 122 491 492
+240 9 2 11 20 417 430 428 484 476 493
+241 9 2 11 20 416 432 434 456 474 462
+242 9 2 11 20 420 424 431 494 495 496
+243 9 2 11 20 420 431 422 496 497 498
+244 9 2 11 20 422 431 433 497 499 500
+245 9 2 11 20 92 420 422 501 498 488
+246 9 2 11 20 72 423 418 489 502 503
+247 9 2 11 20 70 418 427 504 505 490
+248 9 2 11 20 8 69 417 73 472 485
+249 9 2 11 20 424 426 431 482 467 495
+250 9 2 11 20 94 95 424 99 466 506
+251 9 2 11 20 121 417 428 486 493 445
+252 9 2 11 20 11 425 95 492 464 100
+253 9 2 11 20 93 94 420 98 507 508
+254 9 2 11 20 92 93 420 97 508 501
+255 9 2 11 20 70 71 418 75 509 504
+256 9 2 11 20 71 72 418 76 503 509
+257 9 2 11 20 415 426 425 440 481 510
+258 9 2 11 20 419 433 431 459 499 435
+259 9 2 11 20 94 424 420 506 494 507
+260 9 2 11 20 418 432 427 511 487 505
+261 9 2 11 20 106 434 423 468 473 479
+262 9 2 11 20 115 422 433 478 500 469
+263 9 2 11 20 120 415 425 442 510 491
+264 9 2 11 20 418 423 432 502 475 511
+265 9 2 11 20 416 421 429 450 512 452
+266 9 2 11 20 419 429 421 437 512 447
+$EndElements
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_changeBCAfterFailure/model.geo b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_changeBCAfterFailure/model.geo
new file mode 100644
index 0000000000000000000000000000000000000000..53aaf58a7c3e5bb390202cddd619a49372114450
--- /dev/null
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_changeBCAfterFailure/model.geo
@@ -0,0 +1,47 @@
+
+mm=1.0;
+L=1.*mm;
+H = 1*mm; 
+sl1=0.5*L;
+Point(1)={0,0,0,sl1};
+Point(2)={L,0,0,sl1};
+Point(3)={L,H,0,sl1};
+Point(4)={0,H,0,sl1};
+Point(5)={2*L,0,0,sl1};
+Point(6)={2*L,H,0,sl1};
+Line(1)={1,2};
+Line(2)={2,3};
+Line(3)={3,4};
+Line(4)={4,1};
+Line(5)={2,5};
+Line(6)={5,6};
+Line(7)={6,3};
+
+l[0]=newreg;
+Line Loop(l[0])={1,2,3,4};
+Plane Surface(11)={l[0]};
+
+l[1]=newreg;
+Line Loop(l[1])={5,6,7,-2};
+Plane Surface(12)={l[1]};
+
+Physical Surface(11)={11};
+Physical Point(1)={1}; 
+Physical Point(2)={2};
+Physical Point(3)={5};
+Physical Point(4)={6}; 
+
+Transfinite Line {4, 2,6} = 2 Using Progression 1;
+Transfinite Line {3, 1,5,7} = 2 Using Progression 1;
+Transfinite Surface {11, 12};
+Recombine Surface {11,12};
+
+Physical Surface(12) = {12};
+Physical Line(1) = {1, 5};
+Physical Line(2) = {6};
+Physical Line(3) = {7,3};
+Physical Line(4) = {4};
+//+
+Translate {0.3, 0, 0} {
+  Point{3}; 
+}
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_changeBCAfterFailure/model.msh b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_changeBCAfterFailure/model.msh
new file mode 100644
index 0000000000000000000000000000000000000000..aba0ca64c6428748d97a1abbb98a659e4cd28836
--- /dev/null
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_changeBCAfterFailure/model.msh
@@ -0,0 +1,27 @@
+$MeshFormat
+2.2 0 8
+$EndMeshFormat
+$Nodes
+6
+1 0 0 0
+2 1 0 0
+3 1.3 1 0
+4 0 1 0
+5 2 0 0
+6 2 1 0
+$EndNodes
+$Elements
+12
+1 15 2 1 1 1
+2 15 2 2 2 2
+3 15 2 3 5 5
+4 15 2 4 6 6
+5 1 2 1 1 1 2
+6 1 2 3 3 3 4
+7 1 2 4 4 4 1
+8 1 2 1 5 2 5
+9 1 2 2 6 5 6
+10 1 2 3 7 6 3
+11 3 2 11 11 1 2 3 4
+12 3 2 12 12 2 5 6 3
+$EndElements
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_changeBCAfterFailure/model.py b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_changeBCAfterFailure/model.py
new file mode 100644
index 0000000000000000000000000000000000000000..d79286bae1d18977d465d461778443a77b47e248
--- /dev/null
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_changeBCAfterFailure/model.py
@@ -0,0 +1,219 @@
+#coding-Utf-8-*-
+from gmshpy import *
+from dG3Dpy import*
+
+#script to launch PBC problem with a python script
+
+#DEFINE MICRO PROBLEM
+
+# micro-material law
+lawnum1 = 11 # unique number of law
+
+
+rho   = 7850e-9
+young = 28.9e3
+nu    = 0.3 
+sy0   = 99.
+h     = young/20.
+
+harden = LinearExponentialJ2IsotropicHardening(1, sy0, h, 0., 10.)
+cl     = IsotropicCLengthLaw(1, 1e-2)
+damlaw = SimpleSaturateDamageLaw(1, 50.,1.,0.,1.)
+law1   = NonLocalDamageJ2HyperDG3DMaterialLaw(lawnum1,rho,young,nu,harden,cl,damlaw)
+
+
+micromeshfile="micro.msh" # name of mesh file
+#micromeshfile="square.msh" # name of mesh file
+
+# creation of part Domain
+nfield = 11 # number of the field (physical number of entity)
+myfield1 = nonLocalDamageDG3DDomain(1000,nfield,0,lawnum1,0,1e3,2,1)
+
+microBC = nonLinearPeriodicBC(1000,2)
+microBC.setOrder(1)
+microBC.setBCPhysical(1,4,3,2)
+# periodiodic BC
+method = 1 # Periodic mesh = 0 Langrange interpolation = 1 Cubic spline interpolation =2
+degree = 5 
+addvertex = False
+microBC.setPeriodicBCOptions(method, degree,addvertex)
+
+# DEFINE MACROPROBLEM
+matnum1 = 1;
+macromat1 = dG3DMultiscaleMaterialLaw(matnum1, 1000)
+macromat1.loadModel(micromeshfile);
+macromat1.addDomain(myfield1)
+macromat1.addMaterialLaw(law1);
+macromat1.setPeriodicity(1.,0,0,"x")
+macromat1.setPeriodicity(0,1.,0,"y")
+macromat1.setPeriodicity(0,0,1.,"z")
+macromat1.addMicroBC(microBC)
+
+macromat1.setNumStep(3)
+macromat1.setTolerance(1e-6,1e-10)
+macromat1.setSystemType(1)
+macromat1.Solver(2)
+#for i in range(0,1):
+macromat1.setViewAllMicroProblems(True,0)
+
+macromat1.setBlockDamageAfterFailureOnset(True)
+
+macromat1.Scheme(1)
+macromat1.setSameStateCriterion(1e-16)
+macromat1.stressAveragingFlag(True) # set stress averaging ON- 0 , OFF-1
+macromat1.setStressAveragingMethod(0)
+macromat1.tangentAveragingFlag(True) # set tangent averaging ON -0, OFF -1
+macromat1.setTangentAveragingMethod(2,1e-6);
+
+macromat1.internalPointBuildView("Green-Lagrange_xx",IPField.STRAIN_XX);
+macromat1.internalPointBuildView("Green-Lagrange_yy",IPField.STRAIN_YY);
+macromat1.internalPointBuildView("Green-Lagrange_xy",IPField.STRAIN_XY);
+macromat1.internalPointBuildView("Green-Lagrange_zz",IPField.STRAIN_ZZ);
+macromat1.internalPointBuildView("Green-Lagrange_yz",IPField.STRAIN_YZ);
+macromat1.internalPointBuildView("Green-Lagrange_xz",IPField.STRAIN_XZ);
+macromat1.internalPointBuildView("sig_xx",IPField.SIG_XX);
+macromat1.internalPointBuildView("sig_yy",IPField.SIG_YY);
+macromat1.internalPointBuildView("sig_xy",IPField.SIG_XY);
+macromat1.internalPointBuildView("sig_xz",IPField.SIG_XZ);
+macromat1.internalPointBuildView("sig_zz",IPField.SIG_ZZ);
+macromat1.internalPointBuildView("sig_yz",IPField.SIG_YZ);
+macromat1.internalPointBuildView("sig_VM",IPField.SVM);
+
+macromat1.internalPointBuildView("F_xx",IPField.F_XX);
+macromat1.internalPointBuildView("F_yy",IPField.F_YY);
+macromat1.internalPointBuildView("F_xy",IPField.F_XY);
+macromat1.internalPointBuildView("F_yx",IPField.F_YX);
+
+macromat1.internalPointBuildView("P_xx",IPField.P_XX);
+macromat1.internalPointBuildView("P_yy",IPField.P_YY);
+macromat1.internalPointBuildView("P_xy",IPField.P_XY);
+macromat1.internalPointBuildView("P_yx",IPField.P_YX);
+
+macromat1.internalPointBuildView("Equivalent plastic strain",IPField.PLASTICSTRAIN);
+macromat1.internalPointBuildView("Damage",IPField.DAMAGE);
+
+macromat1.dirichletBC("Face",11,2,0.)
+
+
+lcohNum = 13
+lawCoh = dG3DMultiscaleCohesiveLaw(lcohNum,0.7)
+lawCoh.setCharacteristicLength(1.)
+lawCoh.setLostSolutionUniquenssTolerance(0.1)
+
+microBCFailure = nonLinearPeriodicBC(1000,2)
+microBCFailure.setOrder(1)
+microBCFailure.setBCPhysical(1,4,3,2)
+# periodiodic BC
+method = 1 # Periodic mesh = 0 Langrange interpolation = 1 Cubic spline interpolation =2
+degree = 5 
+addvertex = False
+microBCFailure.setPeriodicBCOptions(method, degree,addvertex)
+microBCFailure.setShiftedBC(True) # shifted BC at interface only
+
+lawCoh.addMicroBCFailure(microBCFailure)
+
+macromeshfile="model.msh" # name of mesh file
+
+# solver
+sol = 2  # Gmm=0 (default) Taucs=1 PETsc=2
+soltype =1 # StaticLinear=0 (default) StaticNonLinear=1
+nstep = 100  # number of step (used only if soltype=1)
+ftime =1.   # Final time (used only if soltype=1)
+tol=1.e-5  # relative tolerance for NR scheme (used only if soltype=1)
+nstepArch=1 # Number of step between 2 archiving (used only if soltype=1)
+
+
+# creation of  macro part Domain
+
+dim =2
+beta1 = 50;
+fullDG = False;
+
+averageStrainBased = True
+
+# non DG domain
+nfield1 = 11
+macrodomain1 = dG3DDomain(10,nfield1,0,matnum1,fullDG,dim)
+macrodomain1.stabilityParameters(beta1)
+macrodomain1.setDistributedOtherRanks(True)
+macrodomain1.distributeOnRootRank(False)
+
+nfield2 = 12
+macrodomain2 = dG3DDomain(11,nfield2,0,matnum1,fullDG,dim)
+macrodomain2.stabilityParameters(beta1)
+macrodomain2.setDistributedOtherRanks(True)
+macrodomain2.distributeOnRootRank(False)
+
+# interface domain
+beta1 = 100;
+interdomain1 =  interDomainBetween3D(12,macrodomain1,macrodomain2,lcohNum,matnum1)
+interdomain1.stabilityParameters(beta1)
+interdomain1.averageStrainBased(averageStrainBased)
+interdomain1.setDistributedOtherRanks(True)
+interdomain1.distributeOnRootRank(False)
+
+# creation of Solver
+mysolver = nonLinearMechSolver(1000)
+mysolver.loadModel(macromeshfile)
+mysolver.addDomain(macrodomain1)
+mysolver.addDomain(macrodomain2)
+mysolver.addDomain(interdomain1)
+mysolver.addMaterialLaw(macromat1)
+
+mysolver.addMaterialLaw(lawCoh)
+mysolver.setMultiscaleFlag(True)
+mysolver.Scheme(soltype)
+mysolver.Solver(sol)
+mysolver.snlData(nstep,ftime,tol)
+mysolver.options("-ksp_type preonly -pc_type lu -pc_factor_shift_type NONZERO -pc_factor_mat_solver_package petsc")
+
+
+# boundary condition
+mysolver.displacementBC("Face",11,2,0.0)
+mysolver.displacementBC("Face",12,2,0.0)
+
+mysolver.displacementBC("Face",11,1,0.0)
+mysolver.displacementBC("Face",12,1,0.0)
+
+
+mysolver.displacementBC("Edge",1,1,0.0)
+mysolver.displacementBC("Edge",2,0,0.02)
+mysolver.displacementBC("Edge",4,0,0.0)
+
+
+# archivage
+mysolver.internalPointBuildView("Green-Lagrange_xx",IPField.STRAIN_XX, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_yy",IPField.STRAIN_YY, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_zz",IPField.STRAIN_ZZ, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_xy",IPField.STRAIN_XY, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_yz",IPField.STRAIN_YZ, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_xz",IPField.STRAIN_XZ, 1, 1);
+mysolver.internalPointBuildView("sig_xx",IPField.SIG_XX, 1, 1);
+mysolver.internalPointBuildView("sig_yy",IPField.SIG_YY, 1, 1);
+mysolver.internalPointBuildView("sig_zz",IPField.SIG_ZZ, 1, 1);
+mysolver.internalPointBuildView("sig_xy",IPField.SIG_XY, 1, 1);
+mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, 1);
+mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, 1);
+mysolver.internalPointBuildView("sig_VM",IPField.SVM, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange equivalent strain",IPField.GL_EQUIVALENT_STRAIN, 1, 1);
+mysolver.internalPointBuildView("Equivalent plastic strain",IPField.PLASTICSTRAIN, 1, 1);
+mysolver.internalPointBuildView("Damage",IPField.DAMAGE,1,1);
+
+mysolver.archivingForceOnPhysicalGroup("Edge",4,0)
+
+mysolver.archivingInterfaceElementIP(11,12,IPField.DISP_JUMP_X,4,0,1)
+mysolver.archivingInterfaceElementIP(11,12,IPField.DISP_JUMP_Y,4,0,1)
+
+mysolver.archivingInterfaceElementIP(11,12,IPField.COHESIVE_JUMP_X,4,0,1)
+mysolver.archivingInterfaceElementIP(11,12,IPField.COHESIVE_JUMP_Y,4,0,1)
+
+mysolver.archivingInterfaceElementIP(11,12,IPField.INCOMPATIBLE_STRAIN_X,4,0,1)
+mysolver.archivingInterfaceElementIP(11,12,IPField.INCOMPATIBLE_STRAIN_Y,4,0,1)
+
+
+# solve
+mysolver.solve()
+
+check = TestCheck()
+check.equal(-2.186671e+01,mysolver.getArchivedForceOnPhysicalGroup("Edge", 4, 0),1.e-4)
+
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_rotateRVE/CMakeLists.txt b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_rotateRVE/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..bc54bc2ce5018e76600e6490a5013c6c5d8aed59
--- /dev/null
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_rotateRVE/CMakeLists.txt
@@ -0,0 +1,14 @@
+# test file
+
+set(PYFILE model.py)
+
+set(FILES2DELETE
+	E_*.msh
+	*.txt 
+  *.csv
+  disp*
+  stress*
+	*Rotated*.msh
+)
+
+add_cm3python_mpi_test(4 ${PYFILE} "${FILES2DELETE}")
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_rotateRVE/micro.geo b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_rotateRVE/micro.geo
new file mode 100644
index 0000000000000000000000000000000000000000..5e0b62d6d05215e12989e4cd6bfebc54d1a5517e
--- /dev/null
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_rotateRVE/micro.geo
@@ -0,0 +1,45 @@
+mm = 1.;
+L = 1.*mm;
+R = 0.15*L;
+lsca1 = 0.2*L;
+lsca2 = 0.4*lsca1;
+
+Point(1) = {0,0,0,lsca1};
+Point(2) = {-R,0,0,lsca2};
+Point(3) = {-0.5*L,0,0,lsca2};
+Point(4) = {-0.5*L,-0.5*L,0,lsca1};
+Point(5) = {0,-0.5*L,0,lsca2};
+Point(6) = {0,-R,0,lsca2};
+
+
+Line(1) = {2, 3};
+Line(2) = {3, 4};
+Line(3) = {4, 5};
+Line(4) = {5, 6};
+Circle(5) = {2, 1, 6};
+Line Loop(6) = {2, 3, 4, -5, 1};
+Plane Surface(7) = {6};
+Symmetry {1, 0, 0, 0} {
+  Duplicata { Surface{7}; }
+}
+Symmetry {0, 1, 0, 0} {
+  Duplicata { Surface{7, 8}; }
+}
+
+//Recombine Surface{14, 20, 8, 7};
+Physical Line(1) = {3, 10};
+Physical Line(2) = {9, 21};
+Physical Line(3) = {22, 16};
+Physical Line(4) = {15, 2};
+Physical Surface(11) = {14, 20, 8, 7};
+
+
+/*
+Translate {0.1, 0, 0} {
+  Line{17, 24, 18, 5, 12, 4};
+}
+
+Translate {0, 0.1, 0} {
+  Line{18, 24, 13, 12, 5, 1};
+}
+*/
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_rotateRVE/micro.msh b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_rotateRVE/micro.msh
new file mode 100644
index 0000000000000000000000000000000000000000..c6acd5b31b792077590d064be2f4fe7779b47c89
--- /dev/null
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_rotateRVE/micro.msh
@@ -0,0 +1,787 @@
+$MeshFormat
+2.2 0 8
+$EndMeshFormat
+$Nodes
+512
+1 -0.15 0 0
+2 -0.5 0 0
+3 -0.5 -0.5 0
+4 0 -0.5 0
+5 0 -0.15 0
+6 0.5 0 0
+7 0.5 -0.5 0
+8 0.15 0 0
+9 -0.5 0.5 0
+10 0 0.5 0
+11 0 0.15 0
+12 0.5 0.5 0
+13 -0.2199999999998429 0 0
+14 -0.2899999999995946 0 0
+15 -0.3599999999995793 0 0
+16 -0.4299999999997463 0 0
+17 -0.1849999999999308 0 0
+18 -0.2549999999996413 0 0
+19 -0.3249999999994754 0 0
+20 -0.3949999999996151 0 0
+21 -0.4649999999998321 0 0
+22 -0.5 -0.08581116126524545 0
+23 -0.5 -0.1937129562906754 0
+24 -0.5 -0.3293922803425093 0
+25 -0.5 -0.04290558063262855 0
+26 -0.5 -0.1397620587779604 0
+27 -0.5 -0.261552618316445 0
+28 -0.5 -0.4146961401712547 0
+29 -0.329392280343592 -0.5 0
+30 -0.1937129562919624 -0.5 0
+31 -0.08581116126571686 -0.5 0
+32 -0.4146961401717154 -0.5 0
+33 -0.2615526183179323 -0.5 0
+34 -0.1397620587788396 -0.5 0
+35 -0.04290558063285843 -0.5 0
+36 0 -0.4300000000001734 0
+37 0 -0.3600000000003685 0
+38 0 -0.2900000000003252 0
+39 0 -0.2200000000001519 0
+40 0 -0.4650000000000867 0
+41 0 -0.3950000000003007 0
+42 0 -0.3250000000004448 0
+43 0 -0.2550000000002834 0
+44 0 -0.1850000000000817 0
+45 -0.1299038105677715 -0.07499999999981691 0
+46 -0.07500000000016267 -0.1299038105675719 0
+47 -0.1448888739433795 -0.03882285676530619 0
+48 -0.106066017178175 -0.1060660171777893 0
+49 -0.03882285676546777 -0.1448888739433362 0
+50 0.5 -0.08581116126524545 0
+51 0.5 -0.1937129562906754 0
+52 0.5 -0.3293922803425093 0
+53 0.5 -0.04290558063262855 0
+54 0.5 -0.1397620587779604 0
+55 0.5 -0.261552618316445 0
+56 0.5 -0.4146961401712547 0
+57 0.329392280343592 -0.5 0
+58 0.1937129562919624 -0.5 0
+59 0.08581116126571686 -0.5 0
+60 0.4146961401717154 -0.5 0
+61 0.2615526183179323 -0.5 0
+62 0.1397620587788396 -0.5 0
+63 0.04290558063285843 -0.5 0
+64 0.07499999999980624 -0.1299038105677777 0
+65 0.12990381056752 -0.07500000000025255 0
+66 0.03882285676529234 -0.1448888739433832 0
+67 0.1060660171777162 -0.1060660171782481 0
+68 0.1448888739433208 -0.03882285676552522 0
+69 0.2199999999998429 0 0
+70 0.2899999999995946 0 0
+71 0.3599999999995793 0 0
+72 0.4299999999997463 0 0
+73 0.1849999999999308 0 0
+74 0.2549999999996413 0 0
+75 0.3249999999994754 0 0
+76 0.3949999999996151 0 0
+77 0.4649999999998321 0 0
+78 -0.5 0.08581116126524545 0
+79 -0.5 0.1937129562906754 0
+80 -0.5 0.3293922803425093 0
+81 -0.5 0.04290558063262855 0
+82 -0.5 0.1397620587779604 0
+83 -0.5 0.261552618316445 0
+84 -0.5 0.4146961401712547 0
+85 -0.329392280343592 0.5 0
+86 -0.1937129562919624 0.5 0
+87 -0.08581116126571686 0.5 0
+88 -0.4146961401717154 0.5 0
+89 -0.2615526183179323 0.5 0
+90 -0.1397620587788396 0.5 0
+91 -0.04290558063285843 0.5 0
+92 0 0.4300000000001734 0
+93 0 0.3600000000003685 0
+94 0 0.2900000000003252 0
+95 0 0.2200000000001519 0
+96 0 0.4650000000000867 0
+97 0 0.3950000000003007 0
+98 0 0.3250000000004448 0
+99 0 0.2550000000002834 0
+100 0 0.1850000000000817 0
+101 -0.07499999999980624 0.1299038105677777 0
+102 -0.12990381056752 0.07500000000025255 0
+103 -0.03882285676529234 0.1448888739433832 0
+104 -0.1060660171777162 0.1060660171782481 0
+105 -0.1448888739433208 0.03882285676552522 0
+106 0.5 0.08581116126524545 0
+107 0.5 0.1937129562906754 0
+108 0.5 0.3293922803425093 0
+109 0.5 0.04290558063262855 0
+110 0.5 0.1397620587779604 0
+111 0.5 0.261552618316445 0
+112 0.5 0.4146961401712547 0
+113 0.329392280343592 0.5 0
+114 0.1937129562919624 0.5 0
+115 0.08581116126571686 0.5 0
+116 0.4146961401717154 0.5 0
+117 0.2615526183179323 0.5 0
+118 0.1397620587788396 0.5 0
+119 0.04290558063285843 0.5 0
+120 0.07499999999980624 0.1299038105677777 0
+121 0.12990381056752 0.07500000000025255 0
+122 0.03882285676529234 0.1448888739433832 0
+123 0.1060660171777162 0.1060660171782481 0
+124 0.1448888739433208 0.03882285676552522 0
+125 -0.1632048750113544 -0.1232644810194541 0
+126 -0.2185144679483137 -0.3801534959448527 0
+127 -0.05089028167349786 -0.3584631613501202 0
+128 -0.06084793484707645 -0.1951430174291601 0
+129 -0.3999414826379826 -0.2373669670280938 0
+130 -0.3599999999994629 -0.06999999999986822 0
+131 -0.3654446467373357 -0.3654437046554025 0
+132 -0.4395424499711516 -0.06153088004804232 0
+133 -0.07529335399327118 -0.4336732331852045 0
+134 -0.281150983089465 -0.07390248292404106 0
+135 -0.2004047094340141 -0.06731430289221857 0
+136 -0.2306851351003935 -0.1453676244057918 0
+137 -0.07468286925234641 -0.2723686030373706 0
+138 -0.1452917775342399 -0.193626272412306 0
+139 -0.2595592816824605 -0.2528029361930984 0
+140 -0.1622839878484807 -0.2944285423531688 0
+141 -0.3285804443445061 -0.150165777374023 0
+142 -0.1292296528346454 -0.3731811726451194 0
+143 -0.4267159830345902 -0.1297998703416353 0
+144 -0.3297503821602216 -0.2450849516105961 0
+145 -0.2940698630134833 -0.2014843567835607 0
+146 -0.3642609634912444 -0.1937663722010584 0
+147 -0.1345031551426168 -0.4668366165926022 0
+148 -0.1022615034139583 -0.4034272029151619 0
+149 -0.1614713045633039 -0.4365905863225597 0
+150 -0.1969450050558739 -0.134316052712623 0
+151 -0.1879884563173167 -0.1694969484090489 0
+152 -0.1542483262727972 -0.1584453767158801 0
+153 -0.1191024375057585 -0.126584145793513 0
+154 -0.1101458887672013 -0.1617650414899389 0
+155 -0.245122208391427 -0.1990852802994451 0
+156 -0.2024255296083502 -0.2232146043027022 0
+157 -0.4327223233686679 -0.3474179924989559 0
+158 -0.3826930646876592 -0.3014053358417482 0
+159 -0.4499707413189913 -0.2833796236853016 0
+160 -0.2739533741459528 -0.4400767479724264 0
+161 -0.2919795573428247 -0.3727986003001276 0
+162 -0.3474184635404639 -0.4327218523277012 0
+163 -0.08055225762949403 -0.4668366165926022 0
+164 -0.1465543427895629 -0.09913224050963552 0
+165 -0.1738720603914795 -0.3766673342949861 0
+166 -0.206113712120138 -0.4400767479724264 0
+167 -0.1903992278983972 -0.3372910191490107 0
+168 -0.2109216347654706 -0.2736157392731336 0
+169 -0.239036874815387 -0.3164782160689755 0
+170 -0.06278657546292213 -0.3154158821937454 0
+171 -0.1019562610434959 -0.322774887841245 0
+172 -0.09005996725407162 -0.3658221669976198 0
+173 -0.1184834285504136 -0.2833985726952697 0
+174 -0.145756820341563 -0.3338048574991441 0
+175 -0.4327223233686679 -0.4327218523277012 0
+176 -0.4499707413189913 -0.2155399616593846 0
+177 -0.4133287328362865 -0.1835834186848646 0
+178 -0.4633579915172951 -0.1617564133161554 0
+179 -0.250575491544654 -0.03695124146202053 0
+180 -0.2407778462617395 -0.07060839290812981 0
+181 -0.2102023547169285 -0.03365715144610928 0
+182 -0.0373414346261732 -0.2811843015188479 0
+183 -0.02544514083674893 -0.3242315806752227 0
+184 -0.2796327897224498 -0.1477667008899074 0
+185 -0.4633579915172951 -0.1078055158034404 0
+186 -0.4697712249855758 -0.07367102065664388 0
+187 -0.4697712249855758 -0.03076544002402116 0
+188 -0.03764667699663559 -0.4668366165926022 0
+189 -0.2559180590949293 -0.1096350536649164 0
+190 -0.2155449222672038 -0.1063409636490052 0
+191 -0.1537878826913603 -0.2440274073827374 0
+192 -0.434771224985449 -0.03076544002402116 0
+193 -0.06792396742361956 -0.162523413998366 0
+194 -0.03042396742353823 -0.17257150871458 0
+195 -0.03764667699663559 -0.4318366165926889 0
+196 -0.175202354717007 -0.03365715144610928 0
+197 -0.1651542600008928 -0.07115715144601774 0
+198 -0.3442902221719845 -0.1100828886869456 0
+199 -0.3048657137169856 -0.112034130149032 0
+200 -0.320575491544464 -0.07195124146195464 0
+201 -0.3933579915170266 -0.09989993517075177 0
+202 -0.3776482136895482 -0.1399828238578292 0
+203 -0.3997712249853073 -0.06576544002395526 0
+204 -0.3949999999996046 -0.03499999999993411 0
+205 -0.02544514083674893 -0.3942315806751467 0
+206 -0.06309181783338452 -0.3960681972676623 0
+207 -0.1030698561906582 -0.194384644920733 0
+208 -0.1099873233932932 -0.2329974377248383 0
+209 -0.06776540204971143 -0.2337558102332654 0
+210 -0.2855754915445298 -0.03695124146202053 0
+211 -0.03042396742353823 -0.207571508714656 0
+212 -0.0373414346261732 -0.2461843015187613 0
+213 -0.3599999999995211 -0.03499999999993411 0
+214 -0.3249999999995288 -0.03499999999993411 0
+215 -0.02544514083674893 -0.3592315806752443 0
+216 -0.433129216502871 -0.09566537519483881 0
+217 -0.1818047922226842 -0.09528939195583636 0
+218 -0.3125019642098981 -0.3091233204242504 0
+219 0.1224866355280155 -0.1629072024975547 0
+220 0.3808849436885997 -0.210277224031109 0
+221 0.206743501399355 -0.07464099728276744 0
+222 0.3593515291260043 -0.06361416849824304 0
+223 0.2373889375053712 -0.4000946023341276 0
+224 0.05600596672534444 -0.3582026903534058 0
+225 0.3654446467373352 -0.3654437046554016 0
+226 0.07667776057372377 -0.4233233779044261 0
+227 0.4334916324593139 -0.06393052432330396 0
+228 0.07179343033759225 -0.2810845082405963 0
+229 0.06810735186864317 -0.2009476328841135 0
+230 0.1441955258379768 -0.2303966446545607 0
+231 0.2844391541799908 -0.07552818560281363 0
+232 0.1883841865915948 -0.1499536144563917 0
+233 0.2533917520134046 -0.2547236322031965 0
+234 0.2785219510541916 -0.1476215722506409 0
+235 0.1425674588596785 -0.3441671146532657 0
+236 0.3629155847584906 -0.1147592360453619 0
+237 0.1472316548992905 -0.4335170189783639 0
+238 0.4354584321812809 -0.1336982203911391 0
+239 0.1899781981825249 -0.3721308584936966 0
+240 0.1979796054365416 -0.2994453734282311 0
+241 0.2453903447593879 -0.3274091172686621 0
+242 0.1554354110598052 -0.1564304084769732 0
+243 0.1662898562147858 -0.1901751295554762 0
+244 0.1333410806829962 -0.1966519235760577 0
+245 0.1261952230477678 -0.1189536012489036 0
+246 0.09874331776391088 -0.1464055065326662 0
+247 0.2208879693024997 -0.2023386233297941 0
+248 0.1987936389256907 -0.2425601384288786 0
+249 0.1591439985795574 -0.1124768072283221 0
+250 0.2833906089244816 -0.4500473011670638 0
+251 0.3014167921213532 -0.3827691534947646 0
+252 0.3474184635404636 -0.4327218523277008 0
+253 0.4327223233686676 -0.3474179924989554 0
+254 0.3731647952129674 -0.2878604643432553 0
+255 0.4404424718442999 -0.2698347521868091 0
+256 0.3171383478510021 -0.2325004281171527 0
+257 0.2659568515337981 -0.2011726022269187 0
+258 0.3297034473713957 -0.178949398140875 0
+259 0.3207187679063411 -0.1311904041480014 0
+260 0.3719002642235452 -0.1625182300382355 0
+261 0.4327223233686676 -0.4327218523277008 0
+262 0.1704723055956265 -0.466758509489182 0
+263 0.1923102962023309 -0.4168058106562458 0
+264 0.2155509468986668 -0.4500473011670638 0
+265 0.4404424718442999 -0.2019950901608922 0
+266 0.4081716879349403 -0.1719877222111241 0
+267 0.4677292160906404 -0.1637055883409073 0
+268 0.03405367593432158 -0.2104738164421327 0
+269 0.06995039110311771 -0.2410160705623549 0
+270 0.03589671516879613 -0.2505422541203741 0
+271 0.1433814923488277 -0.2872818796539132 0
+272 0.4677292160906404 -0.1097546908281923 0
+273 0.1165214080825037 -0.466758509489182 0
+274 0.2522195770899168 -0.03776409280140682 0
+275 0.2455913277896729 -0.07508459144279053 0
+276 0.213371750699599 -0.03732049864138372 0
+277 0.4344750323202974 -0.09881437235722154 0
+278 0.3991870084698858 -0.1242287282182505 0
+279 0.3982036086089022 -0.08934488018433293 0
+280 0.2334530688228932 -0.1487875933535163 0
+281 0.03833888028686189 -0.461661688952213 0
+282 0.08124446091972032 -0.461661688952213 0
+283 0.4667458162296569 -0.07487084279427469 0
+284 0.4667458162296569 -0.03196526216165198 0
+285 0.10615143885331 -0.2156721387693371 0
+286 0.1079944780877845 -0.2557405764475785 0
+287 0.2814805526170912 -0.1115748789267273 0
+288 0.2426327262267733 -0.1111312847667042 0
+289 0.1783717506996775 -0.03732049864138372 0
+290 0.1683236559834375 -0.07482049864151 0
+291 0.3236773694692406 -0.09514371082408776 0
+292 0.03833888028686189 -0.4266616889522997 0
+293 0.4317458162295301 -0.03196526216165198 0
+294 0.2872195770897927 -0.03776409280140682 0
+295 0.07155367593422471 -0.1654257217259456 0
+296 0.03405367593432158 -0.1754738164420568 0
+297 0.1975638439954749 -0.1122973058695796 0
+298 0.06389969853146835 -0.319643599297001 0
+299 0.1071804445986354 -0.312625811446931 0
+300 0.09928671279251149 -0.3511849025033358 0
+301 0.1096226097167012 -0.3837452462788459 0
+302 0.06634186364953411 -0.3907630341289159 0
+303 0.1448995568794845 -0.3888420668158148 0
+304 0.1119547077365072 -0.428420198441395 0
+305 0.02800298336267222 -0.3941013451767896 0
+306 0.3964215807926591 -0.06377234641077351 0
+307 0.3946757645628752 -0.03180708424912152 0
+308 0.3246757645627995 -0.03180708424912152 0
+309 0.3218953416529975 -0.06957117705052834 0
+310 0.03589671516879613 -0.2855422541204607 0
+311 0.02800298336267222 -0.3241013451768655 0
+312 0.02800298336267222 -0.3591013451768871 0
+313 0.3596757645627918 -0.03180708424912152 0
+314 0.09529699369832934 -0.1819274176908341 0
+315 0.3611335569422474 -0.08918670227180248 0
+316 0.3094181993753699 -0.310083668429299 0
+317 -0.1224866355280155 0.1629072024975547 0
+318 -0.3808849436885997 0.210277224031109 0
+319 -0.206743501399355 0.07464099728276744 0
+320 -0.3593515291260043 0.06361416849824304 0
+321 -0.2373889375053712 0.4000946023341276 0
+322 -0.05600596672534444 0.3582026903534058 0
+323 -0.3654446467373352 0.3654437046554016 0
+324 -0.07667776057372377 0.4233233779044261 0
+325 -0.4334916324593139 0.06393052432330396 0
+326 -0.07179343033759225 0.2810845082405963 0
+327 -0.06810735186864317 0.2009476328841135 0
+328 -0.1441955258379768 0.2303966446545607 0
+329 -0.2844391541799908 0.07552818560281363 0
+330 -0.1883841865915948 0.1499536144563917 0
+331 -0.2533917520134046 0.2547236322031965 0
+332 -0.2785219510541917 0.1476215722506409 0
+333 -0.1425674588596785 0.3441671146532657 0
+334 -0.3629155847584906 0.1147592360453619 0
+335 -0.1472316548992905 0.4335170189783639 0
+336 -0.4354584321812809 0.1336982203911391 0
+337 -0.1899781981825249 0.3721308584936966 0
+338 -0.1979796054365416 0.2994453734282311 0
+339 -0.2453903447593879 0.3274091172686621 0
+340 -0.1554354110598052 0.1564304084769732 0
+341 -0.1662898562147858 0.1901751295554762 0
+342 -0.1333410806829962 0.1966519235760577 0
+343 -0.1261952230477678 0.1189536012489036 0
+344 -0.09874331776391088 0.1464055065326662 0
+345 -0.2208879693024997 0.2023386233297941 0
+346 -0.1987936389256907 0.2425601384288786 0
+347 -0.1591439985795574 0.1124768072283221 0
+348 -0.2833906089244816 0.4500473011670638 0
+349 -0.3014167921213532 0.3827691534947646 0
+350 -0.3474184635404636 0.4327218523277008 0
+351 -0.4327223233686676 0.3474179924989554 0
+352 -0.3731647952129674 0.2878604643432553 0
+353 -0.4404424718442999 0.2698347521868091 0
+354 -0.3171383478510021 0.2325004281171527 0
+355 -0.2659568515337981 0.2011726022269187 0
+356 -0.3297034473713957 0.178949398140875 0
+357 -0.3207187679063411 0.1311904041480014 0
+358 -0.3719002642235452 0.1625182300382355 0
+359 -0.4327223233686676 0.4327218523277008 0
+360 -0.1704723055956265 0.466758509489182 0
+361 -0.1923102962023309 0.4168058106562458 0
+362 -0.2155509468986668 0.4500473011670638 0
+363 -0.4404424718442999 0.2019950901608922 0
+364 -0.4081716879349403 0.1719877222111241 0
+365 -0.4677292160906404 0.1637055883409073 0
+366 -0.03405367593432158 0.2104738164421327 0
+367 -0.06995039110311771 0.2410160705623549 0
+368 -0.03589671516879613 0.2505422541203741 0
+369 -0.1433814923488277 0.2872818796539132 0
+370 -0.4677292160906404 0.1097546908281923 0
+371 -0.1165214080825037 0.466758509489182 0
+372 -0.2522195770899168 0.03776409280140682 0
+373 -0.2455913277896729 0.07508459144279053 0
+374 -0.213371750699599 0.03732049864138372 0
+375 -0.4344750323202974 0.09881437235722154 0
+376 -0.3991870084698858 0.1242287282182505 0
+377 -0.3982036086089022 0.08934488018433293 0
+378 -0.2334530688228932 0.1487875933535163 0
+379 -0.03833888028686189 0.461661688952213 0
+380 -0.08124446091972032 0.461661688952213 0
+381 -0.4667458162296569 0.07487084279427469 0
+382 -0.4667458162296569 0.03196526216165198 0
+383 -0.10615143885331 0.2156721387693371 0
+384 -0.1079944780877845 0.2557405764475785 0
+385 -0.2814805526170913 0.1115748789267273 0
+386 -0.2426327262267734 0.1111312847667042 0
+387 -0.1783717506996775 0.03732049864138372 0
+388 -0.1683236559834375 0.07482049864151 0
+389 -0.3236773694692406 0.09514371082408776 0
+390 -0.03833888028686189 0.4266616889522997 0
+391 -0.4317458162295301 0.03196526216165198 0
+392 -0.2872195770897927 0.03776409280140682 0
+393 -0.07155367593422471 0.1654257217259456 0
+394 -0.03405367593432158 0.1754738164420568 0
+395 -0.1975638439954749 0.1122973058695796 0
+396 -0.06389969853146835 0.319643599297001 0
+397 -0.1071804445986354 0.312625811446931 0
+398 -0.09928671279251149 0.3511849025033358 0
+399 -0.1096226097167012 0.3837452462788459 0
+400 -0.06634186364953411 0.3907630341289159 0
+401 -0.1448995568794845 0.3888420668158148 0
+402 -0.1119547077365072 0.428420198441395 0
+403 -0.02800298336267222 0.3941013451767896 0
+404 -0.3964215807926591 0.06377234641077351 0
+405 -0.3946757645628753 0.03180708424912152 0
+406 -0.3246757645627995 0.03180708424912152 0
+407 -0.3218953416529975 0.06957117705052834 0
+408 -0.03589671516879613 0.2855422541204607 0
+409 -0.02800298336267222 0.3241013451768655 0
+410 -0.02800298336267222 0.3591013451768871 0
+411 -0.3596757645627918 0.03180708424912152 0
+412 -0.09529699369832934 0.1819274176908341 0
+413 -0.3611335569422475 0.08918670227180248 0
+414 -0.3094181993753699 0.310083668429299 0
+415 0.1224866355280155 0.1629072024975547 0
+416 0.3808849436885997 0.210277224031109 0
+417 0.206743501399355 0.07464099728276744 0
+418 0.3593515291260043 0.06361416849824304 0
+419 0.2373889375053712 0.4000946023341276 0
+420 0.05600596672534444 0.3582026903534058 0
+421 0.3654446467373352 0.3654437046554016 0
+422 0.07667776057372377 0.4233233779044261 0
+423 0.4334916324593139 0.06393052432330396 0
+424 0.07179343033759224 0.2810845082405963 0
+425 0.06810735186864313 0.2009476328841135 0
+426 0.1441955258379768 0.2303966446545607 0
+427 0.2844391541799908 0.07552818560281363 0
+428 0.1883841865915948 0.1499536144563917 0
+429 0.2533917520134046 0.2547236322031965 0
+430 0.2785219510541916 0.1476215722506409 0
+431 0.1425674588596785 0.3441671146532657 0
+432 0.3629155847584906 0.1147592360453619 0
+433 0.1472316548992905 0.4335170189783639 0
+434 0.4354584321812809 0.1336982203911391 0
+435 0.1899781981825249 0.3721308584936966 0
+436 0.1979796054365416 0.2994453734282311 0
+437 0.2453903447593879 0.3274091172686621 0
+438 0.1554354110598052 0.1564304084769732 0
+439 0.1662898562147858 0.1901751295554762 0
+440 0.1333410806829962 0.1966519235760577 0
+441 0.1261952230477678 0.1189536012489036 0
+442 0.09874331776391088 0.1464055065326662 0
+443 0.2208879693024997 0.2023386233297941 0
+444 0.1987936389256907 0.2425601384288786 0
+445 0.1591439985795574 0.1124768072283221 0
+446 0.2833906089244816 0.4500473011670638 0
+447 0.3014167921213532 0.3827691534947646 0
+448 0.3474184635404636 0.4327218523277008 0
+449 0.4327223233686676 0.3474179924989554 0
+450 0.3731647952129674 0.2878604643432553 0
+451 0.4404424718442999 0.2698347521868091 0
+452 0.3171383478510021 0.2325004281171527 0
+453 0.2659568515337981 0.2011726022269187 0
+454 0.3297034473713957 0.178949398140875 0
+455 0.3207187679063411 0.1311904041480014 0
+456 0.3719002642235452 0.1625182300382355 0
+457 0.4327223233686676 0.4327218523277008 0
+458 0.1704723055956265 0.466758509489182 0
+459 0.1923102962023309 0.4168058106562458 0
+460 0.2155509468986668 0.4500473011670638 0
+461 0.4404424718442999 0.2019950901608922 0
+462 0.4081716879349403 0.1719877222111241 0
+463 0.4677292160906404 0.1637055883409073 0
+464 0.03405367593432156 0.2104738164421327 0
+465 0.06995039110311768 0.2410160705623549 0
+466 0.03589671516879612 0.2505422541203741 0
+467 0.1433814923488277 0.2872818796539132 0
+468 0.4677292160906404 0.1097546908281923 0
+469 0.1165214080825037 0.466758509489182 0
+470 0.2522195770899168 0.03776409280140682 0
+471 0.2455913277896729 0.07508459144279053 0
+472 0.213371750699599 0.03732049864138372 0
+473 0.4344750323202974 0.09881437235722154 0
+474 0.3991870084698858 0.1242287282182505 0
+475 0.3982036086089022 0.08934488018433294 0
+476 0.2334530688228932 0.1487875933535163 0
+477 0.03833888028686189 0.461661688952213 0
+478 0.08124446091972032 0.461661688952213 0
+479 0.4667458162296569 0.07487084279427469 0
+480 0.4667458162296569 0.03196526216165198 0
+481 0.10615143885331 0.2156721387693371 0
+482 0.1079944780877845 0.2557405764475785 0
+483 0.2814805526170912 0.1115748789267273 0
+484 0.2426327262267733 0.1111312847667042 0
+485 0.1783717506996775 0.03732049864138372 0
+486 0.1683236559834375 0.07482049864151 0
+487 0.3236773694692406 0.09514371082408778 0
+488 0.03833888028686189 0.4266616889522997 0
+489 0.4317458162295301 0.03196526216165198 0
+490 0.2872195770897927 0.03776409280140682 0
+491 0.07155367593422468 0.1654257217259456 0
+492 0.03405367593432156 0.1754738164420567 0
+493 0.1975638439954749 0.1122973058695796 0
+494 0.06389969853146835 0.319643599297001 0
+495 0.1071804445986354 0.312625811446931 0
+496 0.09928671279251149 0.3511849025033358 0
+497 0.1096226097167012 0.3837452462788459 0
+498 0.06634186364953411 0.3907630341289159 0
+499 0.1448995568794845 0.3888420668158148 0
+500 0.1119547077365072 0.428420198441395 0
+501 0.02800298336267222 0.3941013451767896 0
+502 0.3964215807926591 0.06377234641077351 0
+503 0.3946757645628752 0.03180708424912152 0
+504 0.3246757645627995 0.03180708424912152 0
+505 0.3218953416529975 0.06957117705052834 0
+506 0.03589671516879612 0.2855422541204607 0
+507 0.02800298336267222 0.3241013451768655 0
+508 0.02800298336267222 0.3591013451768871 0
+509 0.3596757645627918 0.03180708424912152 0
+510 0.09529699369832932 0.1819274176908341 0
+511 0.3611335569422474 0.08918670227180248 0
+512 0.3094181993753699 0.310083668429299 0
+$EndNodes
+$Elements
+266
+1 8 2 4 2 2 22 25
+2 8 2 4 2 22 23 26
+3 8 2 4 2 23 24 27
+4 8 2 4 2 24 3 28
+5 8 2 1 3 3 29 32
+6 8 2 1 3 29 30 33
+7 8 2 1 3 30 31 34
+8 8 2 1 3 31 4 35
+9 8 2 2 9 6 50 53
+10 8 2 2 9 50 51 54
+11 8 2 2 9 51 52 55
+12 8 2 2 9 52 7 56
+13 8 2 1 10 7 57 60
+14 8 2 1 10 57 58 61
+15 8 2 1 10 58 59 62
+16 8 2 1 10 59 4 63
+17 8 2 4 15 2 78 81
+18 8 2 4 15 78 79 82
+19 8 2 4 15 79 80 83
+20 8 2 4 15 80 9 84
+21 8 2 3 16 9 85 88
+22 8 2 3 16 85 86 89
+23 8 2 3 16 86 87 90
+24 8 2 3 16 87 10 91
+25 8 2 2 21 6 106 109
+26 8 2 2 21 106 107 110
+27 8 2 2 21 107 108 111
+28 8 2 2 21 108 12 112
+29 8 2 3 22 12 113 116
+30 8 2 3 22 113 114 117
+31 8 2 3 22 114 115 118
+32 8 2 3 22 115 10 119
+33 9 2 11 7 129 139 141 144 145 146
+34 9 2 11 7 30 133 142 147 148 149
+35 9 2 11 7 125 136 138 150 151 152
+36 9 2 11 7 46 125 138 153 152 154
+37 9 2 11 7 136 139 138 155 156 151
+38 9 2 11 7 24 131 129 157 158 159
+39 9 2 11 7 29 126 131 160 161 162
+40 9 2 11 7 30 31 133 34 163 147
+41 9 2 11 7 45 125 46 164 153 48
+42 9 2 11 7 30 142 126 149 165 166
+43 9 2 11 7 126 140 139 167 168 169
+44 9 2 11 7 127 137 142 170 171 172
+45 9 2 11 7 137 140 142 173 174 171
+46 9 2 11 7 3 131 24 175 157 28
+47 9 2 11 7 3 29 131 32 162 175
+48 9 2 11 7 23 129 143 176 177 178
+49 9 2 11 7 23 24 129 27 159 176
+50 9 2 11 7 13 134 135 179 180 181
+51 9 2 11 7 29 30 126 33 166 160
+52 9 2 11 7 38 137 127 182 170 183
+53 9 2 11 7 136 141 139 184 145 155
+54 9 2 11 7 22 23 143 26 178 185
+55 9 2 11 7 126 142 140 165 174 167
+56 9 2 11 7 2 22 132 25 186 187
+57 9 2 11 7 4 133 31 188 163 35
+58 9 2 11 7 134 136 135 189 190 180
+59 9 2 11 7 138 139 140 156 168 191
+60 9 2 11 7 2 132 16 187 192 21
+61 9 2 11 7 5 46 128 49 193 194
+62 9 2 11 7 4 36 133 40 195 188
+63 9 2 11 7 1 135 45 196 197 47
+64 9 2 11 7 130 141 134 198 199 200
+65 9 2 11 7 130 143 141 201 202 198
+66 9 2 11 7 16 132 130 192 203 204
+67 9 2 11 7 36 127 133 205 206 195
+68 9 2 11 7 128 138 137 207 208 209
+69 9 2 11 7 137 138 140 208 191 173
+70 9 2 11 7 134 141 136 199 184 189
+71 9 2 11 7 46 138 128 154 207 193
+72 9 2 11 7 13 14 134 18 210 179
+73 9 2 11 7 5 128 39 194 211 44
+74 9 2 11 7 1 13 135 17 181 196
+75 9 2 11 7 38 39 137 43 212 182
+76 9 2 11 7 14 15 130 19 213 214
+77 9 2 11 7 15 16 130 20 204 213
+78 9 2 11 7 37 38 127 42 183 215
+79 9 2 11 7 36 37 127 41 215 205
+80 9 2 11 7 130 132 143 203 216 201
+81 9 2 11 7 125 135 136 217 190 150
+82 9 2 11 7 129 141 143 146 202 177
+83 9 2 11 7 39 128 137 211 209 212
+84 9 2 11 7 14 130 134 214 200 210
+85 9 2 11 7 22 143 132 185 216 186
+86 9 2 11 7 45 135 125 197 217 164
+87 9 2 11 7 127 142 133 172 148 206
+88 9 2 11 7 126 139 131 169 218 161
+89 9 2 11 7 129 131 139 158 218 144
+90 9 2 11 8 223 235 233 239 240 241
+91 9 2 11 8 219 232 230 242 243 244
+92 9 2 11 8 64 65 219 67 245 246
+93 9 2 11 8 230 232 233 243 247 248
+94 9 2 11 8 65 232 219 249 242 245
+95 9 2 11 8 57 223 225 250 251 252
+96 9 2 11 8 52 225 220 253 254 255
+97 9 2 11 8 220 233 234 256 257 258
+98 9 2 11 8 220 234 236 258 259 260
+99 9 2 11 8 7 225 52 261 253 56
+100 9 2 11 8 7 57 225 60 252 261
+101 9 2 11 8 58 237 223 262 263 264
+102 9 2 11 8 57 58 223 61 264 250
+103 9 2 11 8 51 220 238 265 266 267
+104 9 2 11 8 51 52 220 55 255 265
+105 9 2 11 8 39 229 228 268 269 270
+106 9 2 11 8 230 233 235 248 240 271
+107 9 2 11 8 50 51 238 54 267 272
+108 9 2 11 8 58 59 237 62 273 262
+109 9 2 11 8 69 231 221 274 275 276
+110 9 2 11 8 227 238 236 277 278 279
+111 9 2 11 8 232 234 233 280 257 247
+112 9 2 11 8 4 226 59 281 282 63
+113 9 2 11 8 6 50 227 53 283 284
+114 9 2 11 8 228 229 230 269 285 286
+115 9 2 11 8 221 231 234 275 287 288
+116 9 2 11 8 8 221 65 289 290 68
+117 9 2 11 8 231 236 234 291 259 287
+118 9 2 11 8 4 36 226 40 292 281
+119 9 2 11 8 6 227 72 284 293 77
+120 9 2 11 8 69 70 231 74 294 274
+121 9 2 11 8 5 64 229 66 295 296
+122 9 2 11 8 221 234 232 288 280 297
+123 9 2 11 8 220 236 238 260 278 266
+124 9 2 11 8 224 228 235 298 299 300
+125 9 2 11 8 224 235 226 300 301 302
+126 9 2 11 8 226 235 237 301 303 304
+127 9 2 11 8 36 224 226 305 302 292
+128 9 2 11 8 72 227 222 293 306 307
+129 9 2 11 8 70 222 231 308 309 294
+130 9 2 11 8 8 69 221 73 276 289
+131 9 2 11 8 228 230 235 286 271 299
+132 9 2 11 8 38 39 228 43 270 310
+133 9 2 11 8 65 221 232 290 297 249
+134 9 2 11 8 5 229 39 296 268 44
+135 9 2 11 8 37 38 224 42 311 312
+136 9 2 11 8 36 37 224 41 312 305
+137 9 2 11 8 70 71 222 75 313 308
+138 9 2 11 8 71 72 222 76 307 313
+139 9 2 11 8 219 230 229 244 285 314
+140 9 2 11 8 223 237 235 263 303 239
+141 9 2 11 8 38 228 224 310 298 311
+142 9 2 11 8 222 236 231 315 291 309
+143 9 2 11 8 50 238 227 272 277 283
+144 9 2 11 8 59 226 237 282 304 273
+145 9 2 11 8 64 219 229 246 314 295
+146 9 2 11 8 222 227 236 306 279 315
+147 9 2 11 8 220 225 233 254 316 256
+148 9 2 11 8 223 233 225 241 316 251
+149 9 2 11 14 321 333 331 337 338 339
+150 9 2 11 14 317 330 328 340 341 342
+151 9 2 11 14 101 102 317 104 343 344
+152 9 2 11 14 328 330 331 341 345 346
+153 9 2 11 14 102 330 317 347 340 343
+154 9 2 11 14 85 321 323 348 349 350
+155 9 2 11 14 80 323 318 351 352 353
+156 9 2 11 14 318 331 332 354 355 356
+157 9 2 11 14 318 332 334 356 357 358
+158 9 2 11 14 9 323 80 359 351 84
+159 9 2 11 14 9 85 323 88 350 359
+160 9 2 11 14 86 335 321 360 361 362
+161 9 2 11 14 85 86 321 89 362 348
+162 9 2 11 14 79 318 336 363 364 365
+163 9 2 11 14 79 80 318 83 353 363
+164 9 2 11 14 95 327 326 366 367 368
+165 9 2 11 14 328 331 333 346 338 369
+166 9 2 11 14 78 79 336 82 365 370
+167 9 2 11 14 86 87 335 90 371 360
+168 9 2 11 14 13 329 319 372 373 374
+169 9 2 11 14 325 336 334 375 376 377
+170 9 2 11 14 330 332 331 378 355 345
+171 9 2 11 14 10 324 87 379 380 91
+172 9 2 11 14 2 78 325 81 381 382
+173 9 2 11 14 326 327 328 367 383 384
+174 9 2 11 14 319 329 332 373 385 386
+175 9 2 11 14 1 319 102 387 388 105
+176 9 2 11 14 329 334 332 389 357 385
+177 9 2 11 14 10 92 324 96 390 379
+178 9 2 11 14 2 325 16 382 391 21
+179 9 2 11 14 13 14 329 18 392 372
+180 9 2 11 14 11 101 327 103 393 394
+181 9 2 11 14 319 332 330 386 378 395
+182 9 2 11 14 318 334 336 358 376 364
+183 9 2 11 14 322 326 333 396 397 398
+184 9 2 11 14 322 333 324 398 399 400
+185 9 2 11 14 324 333 335 399 401 402
+186 9 2 11 14 92 322 324 403 400 390
+187 9 2 11 14 16 325 320 391 404 405
+188 9 2 11 14 14 320 329 406 407 392
+189 9 2 11 14 1 13 319 17 374 387
+190 9 2 11 14 326 328 333 384 369 397
+191 9 2 11 14 94 95 326 99 368 408
+192 9 2 11 14 102 319 330 388 395 347
+193 9 2 11 14 11 327 95 394 366 100
+194 9 2 11 14 93 94 322 98 409 410
+195 9 2 11 14 92 93 322 97 410 403
+196 9 2 11 14 14 15 320 19 411 406
+197 9 2 11 14 15 16 320 20 405 411
+198 9 2 11 14 317 328 327 342 383 412
+199 9 2 11 14 321 335 333 361 401 337
+200 9 2 11 14 94 326 322 408 396 409
+201 9 2 11 14 320 334 329 413 389 407
+202 9 2 11 14 78 336 325 370 375 381
+203 9 2 11 14 87 324 335 380 402 371
+204 9 2 11 14 101 317 327 344 412 393
+205 9 2 11 14 320 325 334 404 377 413
+206 9 2 11 14 318 323 331 352 414 354
+207 9 2 11 14 321 331 323 339 414 349
+208 9 2 11 20 419 431 429 435 436 437
+209 9 2 11 20 415 428 426 438 439 440
+210 9 2 11 20 120 121 415 123 441 442
+211 9 2 11 20 426 428 429 439 443 444
+212 9 2 11 20 121 428 415 445 438 441
+213 9 2 11 20 113 419 421 446 447 448
+214 9 2 11 20 108 421 416 449 450 451
+215 9 2 11 20 416 429 430 452 453 454
+216 9 2 11 20 416 430 432 454 455 456
+217 9 2 11 20 12 421 108 457 449 112
+218 9 2 11 20 12 113 421 116 448 457
+219 9 2 11 20 114 433 419 458 459 460
+220 9 2 11 20 113 114 419 117 460 446
+221 9 2 11 20 107 416 434 461 462 463
+222 9 2 11 20 107 108 416 111 451 461
+223 9 2 11 20 95 425 424 464 465 466
+224 9 2 11 20 426 429 431 444 436 467
+225 9 2 11 20 106 107 434 110 463 468
+226 9 2 11 20 114 115 433 118 469 458
+227 9 2 11 20 69 427 417 470 471 472
+228 9 2 11 20 423 434 432 473 474 475
+229 9 2 11 20 428 430 429 476 453 443
+230 9 2 11 20 10 422 115 477 478 119
+231 9 2 11 20 6 106 423 109 479 480
+232 9 2 11 20 424 425 426 465 481 482
+233 9 2 11 20 417 427 430 471 483 484
+234 9 2 11 20 8 417 121 485 486 124
+235 9 2 11 20 427 432 430 487 455 483
+236 9 2 11 20 10 92 422 96 488 477
+237 9 2 11 20 6 423 72 480 489 77
+238 9 2 11 20 69 70 427 74 490 470
+239 9 2 11 20 11 120 425 122 491 492
+240 9 2 11 20 417 430 428 484 476 493
+241 9 2 11 20 416 432 434 456 474 462
+242 9 2 11 20 420 424 431 494 495 496
+243 9 2 11 20 420 431 422 496 497 498
+244 9 2 11 20 422 431 433 497 499 500
+245 9 2 11 20 92 420 422 501 498 488
+246 9 2 11 20 72 423 418 489 502 503
+247 9 2 11 20 70 418 427 504 505 490
+248 9 2 11 20 8 69 417 73 472 485
+249 9 2 11 20 424 426 431 482 467 495
+250 9 2 11 20 94 95 424 99 466 506
+251 9 2 11 20 121 417 428 486 493 445
+252 9 2 11 20 11 425 95 492 464 100
+253 9 2 11 20 93 94 420 98 507 508
+254 9 2 11 20 92 93 420 97 508 501
+255 9 2 11 20 70 71 418 75 509 504
+256 9 2 11 20 71 72 418 76 503 509
+257 9 2 11 20 415 426 425 440 481 510
+258 9 2 11 20 419 433 431 459 499 435
+259 9 2 11 20 94 424 420 506 494 507
+260 9 2 11 20 418 432 427 511 487 505
+261 9 2 11 20 106 434 423 468 473 479
+262 9 2 11 20 115 422 433 478 500 469
+263 9 2 11 20 120 415 425 442 510 491
+264 9 2 11 20 418 423 432 502 475 511
+265 9 2 11 20 416 421 429 450 512 452
+266 9 2 11 20 419 429 421 437 512 447
+$EndElements
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_rotateRVE/model.geo b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_rotateRVE/model.geo
new file mode 100644
index 0000000000000000000000000000000000000000..53aaf58a7c3e5bb390202cddd619a49372114450
--- /dev/null
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_rotateRVE/model.geo
@@ -0,0 +1,47 @@
+
+mm=1.0;
+L=1.*mm;
+H = 1*mm; 
+sl1=0.5*L;
+Point(1)={0,0,0,sl1};
+Point(2)={L,0,0,sl1};
+Point(3)={L,H,0,sl1};
+Point(4)={0,H,0,sl1};
+Point(5)={2*L,0,0,sl1};
+Point(6)={2*L,H,0,sl1};
+Line(1)={1,2};
+Line(2)={2,3};
+Line(3)={3,4};
+Line(4)={4,1};
+Line(5)={2,5};
+Line(6)={5,6};
+Line(7)={6,3};
+
+l[0]=newreg;
+Line Loop(l[0])={1,2,3,4};
+Plane Surface(11)={l[0]};
+
+l[1]=newreg;
+Line Loop(l[1])={5,6,7,-2};
+Plane Surface(12)={l[1]};
+
+Physical Surface(11)={11};
+Physical Point(1)={1}; 
+Physical Point(2)={2};
+Physical Point(3)={5};
+Physical Point(4)={6}; 
+
+Transfinite Line {4, 2,6} = 2 Using Progression 1;
+Transfinite Line {3, 1,5,7} = 2 Using Progression 1;
+Transfinite Surface {11, 12};
+Recombine Surface {11,12};
+
+Physical Surface(12) = {12};
+Physical Line(1) = {1, 5};
+Physical Line(2) = {6};
+Physical Line(3) = {7,3};
+Physical Line(4) = {4};
+//+
+Translate {0.3, 0, 0} {
+  Point{3}; 
+}
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_rotateRVE/model.msh b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_rotateRVE/model.msh
new file mode 100644
index 0000000000000000000000000000000000000000..aba0ca64c6428748d97a1abbb98a659e4cd28836
--- /dev/null
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_rotateRVE/model.msh
@@ -0,0 +1,27 @@
+$MeshFormat
+2.2 0 8
+$EndMeshFormat
+$Nodes
+6
+1 0 0 0
+2 1 0 0
+3 1.3 1 0
+4 0 1 0
+5 2 0 0
+6 2 1 0
+$EndNodes
+$Elements
+12
+1 15 2 1 1 1
+2 15 2 2 2 2
+3 15 2 3 5 5
+4 15 2 4 6 6
+5 1 2 1 1 1 2
+6 1 2 3 3 3 4
+7 1 2 4 4 4 1
+8 1 2 1 5 2 5
+9 1 2 2 6 5 6
+10 1 2 3 7 6 3
+11 3 2 11 11 1 2 3 4
+12 3 2 12 12 2 5 6 3
+$EndElements
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_rotateRVE/model.py b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_rotateRVE/model.py
new file mode 100644
index 0000000000000000000000000000000000000000..a26653258a12ccaf1968f69ee84c258adbe789ad
--- /dev/null
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_rotateRVE/model.py
@@ -0,0 +1,208 @@
+#coding-Utf-8-*-
+from gmshpy import *
+from dG3Dpy import*
+
+#script to launch PBC problem with a python script
+
+#DEFINE MICRO PROBLEM
+
+# micro-material law
+lawnum1 = 11 # unique number of law
+
+
+rho   = 7850e-9
+young = 28.9e3
+nu    = 0.3 
+sy0   = 99.
+h     = young/20.
+
+harden = LinearExponentialJ2IsotropicHardening(1, sy0, h, 0., 10.)
+cl     = IsotropicCLengthLaw(1, 1e-2)
+damlaw = SimpleSaturateDamageLaw(1, 50.,1.,0.,1.)
+law1   = NonLocalDamageJ2HyperDG3DMaterialLaw(lawnum1,rho,young,nu,harden,cl,damlaw)
+
+
+micromeshfile="micro.msh" # name of mesh file
+#micromeshfile="square.msh" # name of mesh file
+
+# creation of part Domain
+nfield = 11 # number of the field (physical number of entity)
+myfield1 = nonLocalDamageDG3DDomain(1000,nfield,0,lawnum1,0,1e3,2,1)
+
+microBC = nonLinearPeriodicBC(1000,2)
+microBC.setOrder(1)
+microBC.setBCPhysical(1,4,3,2)
+# periodiodic BC
+method = 0 # Periodic mesh = 0 Langrange interpolation = 1 Cubic spline interpolation =2
+degree = 5 
+addvertex = False
+microBC.setPeriodicBCOptions(method, degree,addvertex)
+
+# DEFINE MACROPROBLEM
+matnum1 = 1;
+macromat1 = dG3DMultiscaleMaterialLaw(matnum1, 1000)
+macromat1.loadModel(micromeshfile);
+macromat1.addDomain(myfield1)
+macromat1.addMaterialLaw(law1);
+macromat1.setPeriodicity(1.,0,0,"x")
+macromat1.setPeriodicity(0,1.,0,"y")
+macromat1.setPeriodicity(0,0,1.,"z")
+macromat1.addMicroBC(microBC)
+
+macromat1.setNumStep(3)
+macromat1.setTolerance(1e-6,1e-10)
+macromat1.setSystemType(1)
+macromat1.Solver(2)
+#for i in range(0,1):
+macromat1.setViewAllMicroProblems(True,0)
+
+macromat1.setBlockDamageAfterFailureOnset(True)
+
+macromat1.Scheme(1)
+macromat1.setSameStateCriterion(1e-16)
+macromat1.stressAveragingFlag(True) # set stress averaging ON- 0 , OFF-1
+macromat1.setStressAveragingMethod(0)
+macromat1.tangentAveragingFlag(True) # set tangent averaging ON -0, OFF -1
+macromat1.setTangentAveragingMethod(2,1e-6);
+
+macromat1.internalPointBuildView("Green-Lagrange_xx",IPField.STRAIN_XX);
+macromat1.internalPointBuildView("Green-Lagrange_yy",IPField.STRAIN_YY);
+macromat1.internalPointBuildView("Green-Lagrange_xy",IPField.STRAIN_XY);
+macromat1.internalPointBuildView("Green-Lagrange_zz",IPField.STRAIN_ZZ);
+macromat1.internalPointBuildView("Green-Lagrange_yz",IPField.STRAIN_YZ);
+macromat1.internalPointBuildView("Green-Lagrange_xz",IPField.STRAIN_XZ);
+macromat1.internalPointBuildView("sig_xx",IPField.SIG_XX);
+macromat1.internalPointBuildView("sig_yy",IPField.SIG_YY);
+macromat1.internalPointBuildView("sig_xy",IPField.SIG_XY);
+macromat1.internalPointBuildView("sig_xz",IPField.SIG_XZ);
+macromat1.internalPointBuildView("sig_zz",IPField.SIG_ZZ);
+macromat1.internalPointBuildView("sig_yz",IPField.SIG_YZ);
+macromat1.internalPointBuildView("sig_VM",IPField.SVM);
+
+macromat1.internalPointBuildView("F_xx",IPField.F_XX);
+macromat1.internalPointBuildView("F_yy",IPField.F_YY);
+macromat1.internalPointBuildView("F_xy",IPField.F_XY);
+macromat1.internalPointBuildView("F_yx",IPField.F_YX);
+
+macromat1.internalPointBuildView("P_xx",IPField.P_XX);
+macromat1.internalPointBuildView("P_yy",IPField.P_YY);
+macromat1.internalPointBuildView("P_xy",IPField.P_XY);
+macromat1.internalPointBuildView("P_yx",IPField.P_YX);
+
+macromat1.internalPointBuildView("Equivalent plastic strain",IPField.PLASTICSTRAIN);
+macromat1.internalPointBuildView("Damage",IPField.DAMAGE);
+
+macromat1.dirichletBC("Face",11,2,0.)
+
+
+lcohNum = 13
+lawCoh = dG3DMultiscaleCohesiveLaw(lcohNum,0.7)
+lawCoh.setCharacteristicLength(1.)
+lawCoh.setLostSolutionUniquenssTolerance(0.)
+lawCoh.setRotationOfRVEFollowingInterfaceLocalBasis(True)
+
+macromeshfile="model.msh" # name of mesh file
+
+# solver
+sol = 2  # Gmm=0 (default) Taucs=1 PETsc=2
+soltype =1 # StaticLinear=0 (default) StaticNonLinear=1
+nstep = 100  # number of step (used only if soltype=1)
+ftime =1.   # Final time (used only if soltype=1)
+tol=1.e-5  # relative tolerance for NR scheme (used only if soltype=1)
+nstepArch=1 # Number of step between 2 archiving (used only if soltype=1)
+
+
+# creation of  macro part Domain
+
+dim =2
+beta1 = 50;
+fullDG = False;
+
+averageStrainBased = True
+
+# non DG domain
+nfield1 = 11
+macrodomain1 = dG3DDomain(10,nfield1,0,matnum1,fullDG,dim)
+macrodomain1.stabilityParameters(beta1)
+macrodomain1.setDistributedOtherRanks(True)
+macrodomain1.distributeOnRootRank(False)
+
+nfield2 = 12
+macrodomain2 = dG3DDomain(11,nfield2,0,matnum1,fullDG,dim)
+macrodomain2.stabilityParameters(beta1)
+macrodomain2.setDistributedOtherRanks(True)
+macrodomain2.distributeOnRootRank(False)
+
+# interface domain
+beta1 = 100;
+interdomain1 =  interDomainBetween3D(12,macrodomain1,macrodomain2,lcohNum,matnum1)
+interdomain1.stabilityParameters(beta1)
+interdomain1.averageStrainBased(averageStrainBased)
+interdomain1.setDistributedOtherRanks(True)
+interdomain1.distributeOnRootRank(False)
+
+# creation of Solver
+mysolver = nonLinearMechSolver(1000)
+mysolver.loadModel(macromeshfile)
+mysolver.addDomain(macrodomain1)
+mysolver.addDomain(macrodomain2)
+mysolver.addDomain(interdomain1)
+mysolver.addMaterialLaw(macromat1)
+
+mysolver.addMaterialLaw(lawCoh)
+mysolver.setMultiscaleFlag(True)
+mysolver.Scheme(soltype)
+mysolver.Solver(sol)
+mysolver.snlData(nstep,ftime,tol)
+mysolver.options("-ksp_type preonly -pc_type lu -pc_factor_shift_type NONZERO -pc_factor_mat_solver_package petsc")
+
+
+# boundary condition
+mysolver.displacementBC("Face",11,2,0.0)
+mysolver.displacementBC("Face",12,2,0.0)
+
+mysolver.displacementBC("Face",11,1,0.0)
+mysolver.displacementBC("Face",12,1,0.0)
+
+
+mysolver.displacementBC("Edge",1,1,0.0)
+mysolver.displacementBC("Edge",2,0,0.02)
+mysolver.displacementBC("Edge",4,0,0.0)
+
+
+# archivage
+mysolver.internalPointBuildView("Green-Lagrange_xx",IPField.STRAIN_XX, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_yy",IPField.STRAIN_YY, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_zz",IPField.STRAIN_ZZ, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_xy",IPField.STRAIN_XY, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_yz",IPField.STRAIN_YZ, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_xz",IPField.STRAIN_XZ, 1, 1);
+mysolver.internalPointBuildView("sig_xx",IPField.SIG_XX, 1, 1);
+mysolver.internalPointBuildView("sig_yy",IPField.SIG_YY, 1, 1);
+mysolver.internalPointBuildView("sig_zz",IPField.SIG_ZZ, 1, 1);
+mysolver.internalPointBuildView("sig_xy",IPField.SIG_XY, 1, 1);
+mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, 1);
+mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, 1);
+mysolver.internalPointBuildView("sig_VM",IPField.SVM, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange equivalent strain",IPField.GL_EQUIVALENT_STRAIN, 1, 1);
+mysolver.internalPointBuildView("Equivalent plastic strain",IPField.PLASTICSTRAIN, 1, 1);
+mysolver.internalPointBuildView("Damage",IPField.DAMAGE,1,1);
+
+mysolver.archivingForceOnPhysicalGroup("Edge",4,0)
+
+mysolver.archivingInterfaceElementIP(11,12,IPField.DISP_JUMP_X,4,0,1)
+mysolver.archivingInterfaceElementIP(11,12,IPField.DISP_JUMP_Y,4,0,1)
+
+mysolver.archivingInterfaceElementIP(11,12,IPField.COHESIVE_JUMP_X,4,0,1)
+mysolver.archivingInterfaceElementIP(11,12,IPField.COHESIVE_JUMP_Y,4,0,1)
+
+mysolver.archivingInterfaceElementIP(11,12,IPField.INCOMPATIBLE_STRAIN_X,4,0,1)
+mysolver.archivingInterfaceElementIP(11,12,IPField.INCOMPATIBLE_STRAIN_Y,4,0,1)
+
+
+# solve
+mysolver.solve()
+
+check = TestCheck()
+check.equal(-1.306794e+01,mysolver.getArchivedForceOnPhysicalGroup("Edge", 4, 0),1.e-4)
+
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_shiftedBC/CMakeLists.txt b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_shiftedBC/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..bc54bc2ce5018e76600e6490a5013c6c5d8aed59
--- /dev/null
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_shiftedBC/CMakeLists.txt
@@ -0,0 +1,14 @@
+# test file
+
+set(PYFILE model.py)
+
+set(FILES2DELETE
+	E_*.msh
+	*.txt 
+  *.csv
+  disp*
+  stress*
+	*Rotated*.msh
+)
+
+add_cm3python_mpi_test(4 ${PYFILE} "${FILES2DELETE}")
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_shiftedBC/micro.geo b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_shiftedBC/micro.geo
new file mode 100644
index 0000000000000000000000000000000000000000..5e0b62d6d05215e12989e4cd6bfebc54d1a5517e
--- /dev/null
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_shiftedBC/micro.geo
@@ -0,0 +1,45 @@
+mm = 1.;
+L = 1.*mm;
+R = 0.15*L;
+lsca1 = 0.2*L;
+lsca2 = 0.4*lsca1;
+
+Point(1) = {0,0,0,lsca1};
+Point(2) = {-R,0,0,lsca2};
+Point(3) = {-0.5*L,0,0,lsca2};
+Point(4) = {-0.5*L,-0.5*L,0,lsca1};
+Point(5) = {0,-0.5*L,0,lsca2};
+Point(6) = {0,-R,0,lsca2};
+
+
+Line(1) = {2, 3};
+Line(2) = {3, 4};
+Line(3) = {4, 5};
+Line(4) = {5, 6};
+Circle(5) = {2, 1, 6};
+Line Loop(6) = {2, 3, 4, -5, 1};
+Plane Surface(7) = {6};
+Symmetry {1, 0, 0, 0} {
+  Duplicata { Surface{7}; }
+}
+Symmetry {0, 1, 0, 0} {
+  Duplicata { Surface{7, 8}; }
+}
+
+//Recombine Surface{14, 20, 8, 7};
+Physical Line(1) = {3, 10};
+Physical Line(2) = {9, 21};
+Physical Line(3) = {22, 16};
+Physical Line(4) = {15, 2};
+Physical Surface(11) = {14, 20, 8, 7};
+
+
+/*
+Translate {0.1, 0, 0} {
+  Line{17, 24, 18, 5, 12, 4};
+}
+
+Translate {0, 0.1, 0} {
+  Line{18, 24, 13, 12, 5, 1};
+}
+*/
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_shiftedBC/micro.msh b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_shiftedBC/micro.msh
new file mode 100644
index 0000000000000000000000000000000000000000..c6acd5b31b792077590d064be2f4fe7779b47c89
--- /dev/null
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_shiftedBC/micro.msh
@@ -0,0 +1,787 @@
+$MeshFormat
+2.2 0 8
+$EndMeshFormat
+$Nodes
+512
+1 -0.15 0 0
+2 -0.5 0 0
+3 -0.5 -0.5 0
+4 0 -0.5 0
+5 0 -0.15 0
+6 0.5 0 0
+7 0.5 -0.5 0
+8 0.15 0 0
+9 -0.5 0.5 0
+10 0 0.5 0
+11 0 0.15 0
+12 0.5 0.5 0
+13 -0.2199999999998429 0 0
+14 -0.2899999999995946 0 0
+15 -0.3599999999995793 0 0
+16 -0.4299999999997463 0 0
+17 -0.1849999999999308 0 0
+18 -0.2549999999996413 0 0
+19 -0.3249999999994754 0 0
+20 -0.3949999999996151 0 0
+21 -0.4649999999998321 0 0
+22 -0.5 -0.08581116126524545 0
+23 -0.5 -0.1937129562906754 0
+24 -0.5 -0.3293922803425093 0
+25 -0.5 -0.04290558063262855 0
+26 -0.5 -0.1397620587779604 0
+27 -0.5 -0.261552618316445 0
+28 -0.5 -0.4146961401712547 0
+29 -0.329392280343592 -0.5 0
+30 -0.1937129562919624 -0.5 0
+31 -0.08581116126571686 -0.5 0
+32 -0.4146961401717154 -0.5 0
+33 -0.2615526183179323 -0.5 0
+34 -0.1397620587788396 -0.5 0
+35 -0.04290558063285843 -0.5 0
+36 0 -0.4300000000001734 0
+37 0 -0.3600000000003685 0
+38 0 -0.2900000000003252 0
+39 0 -0.2200000000001519 0
+40 0 -0.4650000000000867 0
+41 0 -0.3950000000003007 0
+42 0 -0.3250000000004448 0
+43 0 -0.2550000000002834 0
+44 0 -0.1850000000000817 0
+45 -0.1299038105677715 -0.07499999999981691 0
+46 -0.07500000000016267 -0.1299038105675719 0
+47 -0.1448888739433795 -0.03882285676530619 0
+48 -0.106066017178175 -0.1060660171777893 0
+49 -0.03882285676546777 -0.1448888739433362 0
+50 0.5 -0.08581116126524545 0
+51 0.5 -0.1937129562906754 0
+52 0.5 -0.3293922803425093 0
+53 0.5 -0.04290558063262855 0
+54 0.5 -0.1397620587779604 0
+55 0.5 -0.261552618316445 0
+56 0.5 -0.4146961401712547 0
+57 0.329392280343592 -0.5 0
+58 0.1937129562919624 -0.5 0
+59 0.08581116126571686 -0.5 0
+60 0.4146961401717154 -0.5 0
+61 0.2615526183179323 -0.5 0
+62 0.1397620587788396 -0.5 0
+63 0.04290558063285843 -0.5 0
+64 0.07499999999980624 -0.1299038105677777 0
+65 0.12990381056752 -0.07500000000025255 0
+66 0.03882285676529234 -0.1448888739433832 0
+67 0.1060660171777162 -0.1060660171782481 0
+68 0.1448888739433208 -0.03882285676552522 0
+69 0.2199999999998429 0 0
+70 0.2899999999995946 0 0
+71 0.3599999999995793 0 0
+72 0.4299999999997463 0 0
+73 0.1849999999999308 0 0
+74 0.2549999999996413 0 0
+75 0.3249999999994754 0 0
+76 0.3949999999996151 0 0
+77 0.4649999999998321 0 0
+78 -0.5 0.08581116126524545 0
+79 -0.5 0.1937129562906754 0
+80 -0.5 0.3293922803425093 0
+81 -0.5 0.04290558063262855 0
+82 -0.5 0.1397620587779604 0
+83 -0.5 0.261552618316445 0
+84 -0.5 0.4146961401712547 0
+85 -0.329392280343592 0.5 0
+86 -0.1937129562919624 0.5 0
+87 -0.08581116126571686 0.5 0
+88 -0.4146961401717154 0.5 0
+89 -0.2615526183179323 0.5 0
+90 -0.1397620587788396 0.5 0
+91 -0.04290558063285843 0.5 0
+92 0 0.4300000000001734 0
+93 0 0.3600000000003685 0
+94 0 0.2900000000003252 0
+95 0 0.2200000000001519 0
+96 0 0.4650000000000867 0
+97 0 0.3950000000003007 0
+98 0 0.3250000000004448 0
+99 0 0.2550000000002834 0
+100 0 0.1850000000000817 0
+101 -0.07499999999980624 0.1299038105677777 0
+102 -0.12990381056752 0.07500000000025255 0
+103 -0.03882285676529234 0.1448888739433832 0
+104 -0.1060660171777162 0.1060660171782481 0
+105 -0.1448888739433208 0.03882285676552522 0
+106 0.5 0.08581116126524545 0
+107 0.5 0.1937129562906754 0
+108 0.5 0.3293922803425093 0
+109 0.5 0.04290558063262855 0
+110 0.5 0.1397620587779604 0
+111 0.5 0.261552618316445 0
+112 0.5 0.4146961401712547 0
+113 0.329392280343592 0.5 0
+114 0.1937129562919624 0.5 0
+115 0.08581116126571686 0.5 0
+116 0.4146961401717154 0.5 0
+117 0.2615526183179323 0.5 0
+118 0.1397620587788396 0.5 0
+119 0.04290558063285843 0.5 0
+120 0.07499999999980624 0.1299038105677777 0
+121 0.12990381056752 0.07500000000025255 0
+122 0.03882285676529234 0.1448888739433832 0
+123 0.1060660171777162 0.1060660171782481 0
+124 0.1448888739433208 0.03882285676552522 0
+125 -0.1632048750113544 -0.1232644810194541 0
+126 -0.2185144679483137 -0.3801534959448527 0
+127 -0.05089028167349786 -0.3584631613501202 0
+128 -0.06084793484707645 -0.1951430174291601 0
+129 -0.3999414826379826 -0.2373669670280938 0
+130 -0.3599999999994629 -0.06999999999986822 0
+131 -0.3654446467373357 -0.3654437046554025 0
+132 -0.4395424499711516 -0.06153088004804232 0
+133 -0.07529335399327118 -0.4336732331852045 0
+134 -0.281150983089465 -0.07390248292404106 0
+135 -0.2004047094340141 -0.06731430289221857 0
+136 -0.2306851351003935 -0.1453676244057918 0
+137 -0.07468286925234641 -0.2723686030373706 0
+138 -0.1452917775342399 -0.193626272412306 0
+139 -0.2595592816824605 -0.2528029361930984 0
+140 -0.1622839878484807 -0.2944285423531688 0
+141 -0.3285804443445061 -0.150165777374023 0
+142 -0.1292296528346454 -0.3731811726451194 0
+143 -0.4267159830345902 -0.1297998703416353 0
+144 -0.3297503821602216 -0.2450849516105961 0
+145 -0.2940698630134833 -0.2014843567835607 0
+146 -0.3642609634912444 -0.1937663722010584 0
+147 -0.1345031551426168 -0.4668366165926022 0
+148 -0.1022615034139583 -0.4034272029151619 0
+149 -0.1614713045633039 -0.4365905863225597 0
+150 -0.1969450050558739 -0.134316052712623 0
+151 -0.1879884563173167 -0.1694969484090489 0
+152 -0.1542483262727972 -0.1584453767158801 0
+153 -0.1191024375057585 -0.126584145793513 0
+154 -0.1101458887672013 -0.1617650414899389 0
+155 -0.245122208391427 -0.1990852802994451 0
+156 -0.2024255296083502 -0.2232146043027022 0
+157 -0.4327223233686679 -0.3474179924989559 0
+158 -0.3826930646876592 -0.3014053358417482 0
+159 -0.4499707413189913 -0.2833796236853016 0
+160 -0.2739533741459528 -0.4400767479724264 0
+161 -0.2919795573428247 -0.3727986003001276 0
+162 -0.3474184635404639 -0.4327218523277012 0
+163 -0.08055225762949403 -0.4668366165926022 0
+164 -0.1465543427895629 -0.09913224050963552 0
+165 -0.1738720603914795 -0.3766673342949861 0
+166 -0.206113712120138 -0.4400767479724264 0
+167 -0.1903992278983972 -0.3372910191490107 0
+168 -0.2109216347654706 -0.2736157392731336 0
+169 -0.239036874815387 -0.3164782160689755 0
+170 -0.06278657546292213 -0.3154158821937454 0
+171 -0.1019562610434959 -0.322774887841245 0
+172 -0.09005996725407162 -0.3658221669976198 0
+173 -0.1184834285504136 -0.2833985726952697 0
+174 -0.145756820341563 -0.3338048574991441 0
+175 -0.4327223233686679 -0.4327218523277012 0
+176 -0.4499707413189913 -0.2155399616593846 0
+177 -0.4133287328362865 -0.1835834186848646 0
+178 -0.4633579915172951 -0.1617564133161554 0
+179 -0.250575491544654 -0.03695124146202053 0
+180 -0.2407778462617395 -0.07060839290812981 0
+181 -0.2102023547169285 -0.03365715144610928 0
+182 -0.0373414346261732 -0.2811843015188479 0
+183 -0.02544514083674893 -0.3242315806752227 0
+184 -0.2796327897224498 -0.1477667008899074 0
+185 -0.4633579915172951 -0.1078055158034404 0
+186 -0.4697712249855758 -0.07367102065664388 0
+187 -0.4697712249855758 -0.03076544002402116 0
+188 -0.03764667699663559 -0.4668366165926022 0
+189 -0.2559180590949293 -0.1096350536649164 0
+190 -0.2155449222672038 -0.1063409636490052 0
+191 -0.1537878826913603 -0.2440274073827374 0
+192 -0.434771224985449 -0.03076544002402116 0
+193 -0.06792396742361956 -0.162523413998366 0
+194 -0.03042396742353823 -0.17257150871458 0
+195 -0.03764667699663559 -0.4318366165926889 0
+196 -0.175202354717007 -0.03365715144610928 0
+197 -0.1651542600008928 -0.07115715144601774 0
+198 -0.3442902221719845 -0.1100828886869456 0
+199 -0.3048657137169856 -0.112034130149032 0
+200 -0.320575491544464 -0.07195124146195464 0
+201 -0.3933579915170266 -0.09989993517075177 0
+202 -0.3776482136895482 -0.1399828238578292 0
+203 -0.3997712249853073 -0.06576544002395526 0
+204 -0.3949999999996046 -0.03499999999993411 0
+205 -0.02544514083674893 -0.3942315806751467 0
+206 -0.06309181783338452 -0.3960681972676623 0
+207 -0.1030698561906582 -0.194384644920733 0
+208 -0.1099873233932932 -0.2329974377248383 0
+209 -0.06776540204971143 -0.2337558102332654 0
+210 -0.2855754915445298 -0.03695124146202053 0
+211 -0.03042396742353823 -0.207571508714656 0
+212 -0.0373414346261732 -0.2461843015187613 0
+213 -0.3599999999995211 -0.03499999999993411 0
+214 -0.3249999999995288 -0.03499999999993411 0
+215 -0.02544514083674893 -0.3592315806752443 0
+216 -0.433129216502871 -0.09566537519483881 0
+217 -0.1818047922226842 -0.09528939195583636 0
+218 -0.3125019642098981 -0.3091233204242504 0
+219 0.1224866355280155 -0.1629072024975547 0
+220 0.3808849436885997 -0.210277224031109 0
+221 0.206743501399355 -0.07464099728276744 0
+222 0.3593515291260043 -0.06361416849824304 0
+223 0.2373889375053712 -0.4000946023341276 0
+224 0.05600596672534444 -0.3582026903534058 0
+225 0.3654446467373352 -0.3654437046554016 0
+226 0.07667776057372377 -0.4233233779044261 0
+227 0.4334916324593139 -0.06393052432330396 0
+228 0.07179343033759225 -0.2810845082405963 0
+229 0.06810735186864317 -0.2009476328841135 0
+230 0.1441955258379768 -0.2303966446545607 0
+231 0.2844391541799908 -0.07552818560281363 0
+232 0.1883841865915948 -0.1499536144563917 0
+233 0.2533917520134046 -0.2547236322031965 0
+234 0.2785219510541916 -0.1476215722506409 0
+235 0.1425674588596785 -0.3441671146532657 0
+236 0.3629155847584906 -0.1147592360453619 0
+237 0.1472316548992905 -0.4335170189783639 0
+238 0.4354584321812809 -0.1336982203911391 0
+239 0.1899781981825249 -0.3721308584936966 0
+240 0.1979796054365416 -0.2994453734282311 0
+241 0.2453903447593879 -0.3274091172686621 0
+242 0.1554354110598052 -0.1564304084769732 0
+243 0.1662898562147858 -0.1901751295554762 0
+244 0.1333410806829962 -0.1966519235760577 0
+245 0.1261952230477678 -0.1189536012489036 0
+246 0.09874331776391088 -0.1464055065326662 0
+247 0.2208879693024997 -0.2023386233297941 0
+248 0.1987936389256907 -0.2425601384288786 0
+249 0.1591439985795574 -0.1124768072283221 0
+250 0.2833906089244816 -0.4500473011670638 0
+251 0.3014167921213532 -0.3827691534947646 0
+252 0.3474184635404636 -0.4327218523277008 0
+253 0.4327223233686676 -0.3474179924989554 0
+254 0.3731647952129674 -0.2878604643432553 0
+255 0.4404424718442999 -0.2698347521868091 0
+256 0.3171383478510021 -0.2325004281171527 0
+257 0.2659568515337981 -0.2011726022269187 0
+258 0.3297034473713957 -0.178949398140875 0
+259 0.3207187679063411 -0.1311904041480014 0
+260 0.3719002642235452 -0.1625182300382355 0
+261 0.4327223233686676 -0.4327218523277008 0
+262 0.1704723055956265 -0.466758509489182 0
+263 0.1923102962023309 -0.4168058106562458 0
+264 0.2155509468986668 -0.4500473011670638 0
+265 0.4404424718442999 -0.2019950901608922 0
+266 0.4081716879349403 -0.1719877222111241 0
+267 0.4677292160906404 -0.1637055883409073 0
+268 0.03405367593432158 -0.2104738164421327 0
+269 0.06995039110311771 -0.2410160705623549 0
+270 0.03589671516879613 -0.2505422541203741 0
+271 0.1433814923488277 -0.2872818796539132 0
+272 0.4677292160906404 -0.1097546908281923 0
+273 0.1165214080825037 -0.466758509489182 0
+274 0.2522195770899168 -0.03776409280140682 0
+275 0.2455913277896729 -0.07508459144279053 0
+276 0.213371750699599 -0.03732049864138372 0
+277 0.4344750323202974 -0.09881437235722154 0
+278 0.3991870084698858 -0.1242287282182505 0
+279 0.3982036086089022 -0.08934488018433293 0
+280 0.2334530688228932 -0.1487875933535163 0
+281 0.03833888028686189 -0.461661688952213 0
+282 0.08124446091972032 -0.461661688952213 0
+283 0.4667458162296569 -0.07487084279427469 0
+284 0.4667458162296569 -0.03196526216165198 0
+285 0.10615143885331 -0.2156721387693371 0
+286 0.1079944780877845 -0.2557405764475785 0
+287 0.2814805526170912 -0.1115748789267273 0
+288 0.2426327262267733 -0.1111312847667042 0
+289 0.1783717506996775 -0.03732049864138372 0
+290 0.1683236559834375 -0.07482049864151 0
+291 0.3236773694692406 -0.09514371082408776 0
+292 0.03833888028686189 -0.4266616889522997 0
+293 0.4317458162295301 -0.03196526216165198 0
+294 0.2872195770897927 -0.03776409280140682 0
+295 0.07155367593422471 -0.1654257217259456 0
+296 0.03405367593432158 -0.1754738164420568 0
+297 0.1975638439954749 -0.1122973058695796 0
+298 0.06389969853146835 -0.319643599297001 0
+299 0.1071804445986354 -0.312625811446931 0
+300 0.09928671279251149 -0.3511849025033358 0
+301 0.1096226097167012 -0.3837452462788459 0
+302 0.06634186364953411 -0.3907630341289159 0
+303 0.1448995568794845 -0.3888420668158148 0
+304 0.1119547077365072 -0.428420198441395 0
+305 0.02800298336267222 -0.3941013451767896 0
+306 0.3964215807926591 -0.06377234641077351 0
+307 0.3946757645628752 -0.03180708424912152 0
+308 0.3246757645627995 -0.03180708424912152 0
+309 0.3218953416529975 -0.06957117705052834 0
+310 0.03589671516879613 -0.2855422541204607 0
+311 0.02800298336267222 -0.3241013451768655 0
+312 0.02800298336267222 -0.3591013451768871 0
+313 0.3596757645627918 -0.03180708424912152 0
+314 0.09529699369832934 -0.1819274176908341 0
+315 0.3611335569422474 -0.08918670227180248 0
+316 0.3094181993753699 -0.310083668429299 0
+317 -0.1224866355280155 0.1629072024975547 0
+318 -0.3808849436885997 0.210277224031109 0
+319 -0.206743501399355 0.07464099728276744 0
+320 -0.3593515291260043 0.06361416849824304 0
+321 -0.2373889375053712 0.4000946023341276 0
+322 -0.05600596672534444 0.3582026903534058 0
+323 -0.3654446467373352 0.3654437046554016 0
+324 -0.07667776057372377 0.4233233779044261 0
+325 -0.4334916324593139 0.06393052432330396 0
+326 -0.07179343033759225 0.2810845082405963 0
+327 -0.06810735186864317 0.2009476328841135 0
+328 -0.1441955258379768 0.2303966446545607 0
+329 -0.2844391541799908 0.07552818560281363 0
+330 -0.1883841865915948 0.1499536144563917 0
+331 -0.2533917520134046 0.2547236322031965 0
+332 -0.2785219510541917 0.1476215722506409 0
+333 -0.1425674588596785 0.3441671146532657 0
+334 -0.3629155847584906 0.1147592360453619 0
+335 -0.1472316548992905 0.4335170189783639 0
+336 -0.4354584321812809 0.1336982203911391 0
+337 -0.1899781981825249 0.3721308584936966 0
+338 -0.1979796054365416 0.2994453734282311 0
+339 -0.2453903447593879 0.3274091172686621 0
+340 -0.1554354110598052 0.1564304084769732 0
+341 -0.1662898562147858 0.1901751295554762 0
+342 -0.1333410806829962 0.1966519235760577 0
+343 -0.1261952230477678 0.1189536012489036 0
+344 -0.09874331776391088 0.1464055065326662 0
+345 -0.2208879693024997 0.2023386233297941 0
+346 -0.1987936389256907 0.2425601384288786 0
+347 -0.1591439985795574 0.1124768072283221 0
+348 -0.2833906089244816 0.4500473011670638 0
+349 -0.3014167921213532 0.3827691534947646 0
+350 -0.3474184635404636 0.4327218523277008 0
+351 -0.4327223233686676 0.3474179924989554 0
+352 -0.3731647952129674 0.2878604643432553 0
+353 -0.4404424718442999 0.2698347521868091 0
+354 -0.3171383478510021 0.2325004281171527 0
+355 -0.2659568515337981 0.2011726022269187 0
+356 -0.3297034473713957 0.178949398140875 0
+357 -0.3207187679063411 0.1311904041480014 0
+358 -0.3719002642235452 0.1625182300382355 0
+359 -0.4327223233686676 0.4327218523277008 0
+360 -0.1704723055956265 0.466758509489182 0
+361 -0.1923102962023309 0.4168058106562458 0
+362 -0.2155509468986668 0.4500473011670638 0
+363 -0.4404424718442999 0.2019950901608922 0
+364 -0.4081716879349403 0.1719877222111241 0
+365 -0.4677292160906404 0.1637055883409073 0
+366 -0.03405367593432158 0.2104738164421327 0
+367 -0.06995039110311771 0.2410160705623549 0
+368 -0.03589671516879613 0.2505422541203741 0
+369 -0.1433814923488277 0.2872818796539132 0
+370 -0.4677292160906404 0.1097546908281923 0
+371 -0.1165214080825037 0.466758509489182 0
+372 -0.2522195770899168 0.03776409280140682 0
+373 -0.2455913277896729 0.07508459144279053 0
+374 -0.213371750699599 0.03732049864138372 0
+375 -0.4344750323202974 0.09881437235722154 0
+376 -0.3991870084698858 0.1242287282182505 0
+377 -0.3982036086089022 0.08934488018433293 0
+378 -0.2334530688228932 0.1487875933535163 0
+379 -0.03833888028686189 0.461661688952213 0
+380 -0.08124446091972032 0.461661688952213 0
+381 -0.4667458162296569 0.07487084279427469 0
+382 -0.4667458162296569 0.03196526216165198 0
+383 -0.10615143885331 0.2156721387693371 0
+384 -0.1079944780877845 0.2557405764475785 0
+385 -0.2814805526170913 0.1115748789267273 0
+386 -0.2426327262267734 0.1111312847667042 0
+387 -0.1783717506996775 0.03732049864138372 0
+388 -0.1683236559834375 0.07482049864151 0
+389 -0.3236773694692406 0.09514371082408776 0
+390 -0.03833888028686189 0.4266616889522997 0
+391 -0.4317458162295301 0.03196526216165198 0
+392 -0.2872195770897927 0.03776409280140682 0
+393 -0.07155367593422471 0.1654257217259456 0
+394 -0.03405367593432158 0.1754738164420568 0
+395 -0.1975638439954749 0.1122973058695796 0
+396 -0.06389969853146835 0.319643599297001 0
+397 -0.1071804445986354 0.312625811446931 0
+398 -0.09928671279251149 0.3511849025033358 0
+399 -0.1096226097167012 0.3837452462788459 0
+400 -0.06634186364953411 0.3907630341289159 0
+401 -0.1448995568794845 0.3888420668158148 0
+402 -0.1119547077365072 0.428420198441395 0
+403 -0.02800298336267222 0.3941013451767896 0
+404 -0.3964215807926591 0.06377234641077351 0
+405 -0.3946757645628753 0.03180708424912152 0
+406 -0.3246757645627995 0.03180708424912152 0
+407 -0.3218953416529975 0.06957117705052834 0
+408 -0.03589671516879613 0.2855422541204607 0
+409 -0.02800298336267222 0.3241013451768655 0
+410 -0.02800298336267222 0.3591013451768871 0
+411 -0.3596757645627918 0.03180708424912152 0
+412 -0.09529699369832934 0.1819274176908341 0
+413 -0.3611335569422475 0.08918670227180248 0
+414 -0.3094181993753699 0.310083668429299 0
+415 0.1224866355280155 0.1629072024975547 0
+416 0.3808849436885997 0.210277224031109 0
+417 0.206743501399355 0.07464099728276744 0
+418 0.3593515291260043 0.06361416849824304 0
+419 0.2373889375053712 0.4000946023341276 0
+420 0.05600596672534444 0.3582026903534058 0
+421 0.3654446467373352 0.3654437046554016 0
+422 0.07667776057372377 0.4233233779044261 0
+423 0.4334916324593139 0.06393052432330396 0
+424 0.07179343033759224 0.2810845082405963 0
+425 0.06810735186864313 0.2009476328841135 0
+426 0.1441955258379768 0.2303966446545607 0
+427 0.2844391541799908 0.07552818560281363 0
+428 0.1883841865915948 0.1499536144563917 0
+429 0.2533917520134046 0.2547236322031965 0
+430 0.2785219510541916 0.1476215722506409 0
+431 0.1425674588596785 0.3441671146532657 0
+432 0.3629155847584906 0.1147592360453619 0
+433 0.1472316548992905 0.4335170189783639 0
+434 0.4354584321812809 0.1336982203911391 0
+435 0.1899781981825249 0.3721308584936966 0
+436 0.1979796054365416 0.2994453734282311 0
+437 0.2453903447593879 0.3274091172686621 0
+438 0.1554354110598052 0.1564304084769732 0
+439 0.1662898562147858 0.1901751295554762 0
+440 0.1333410806829962 0.1966519235760577 0
+441 0.1261952230477678 0.1189536012489036 0
+442 0.09874331776391088 0.1464055065326662 0
+443 0.2208879693024997 0.2023386233297941 0
+444 0.1987936389256907 0.2425601384288786 0
+445 0.1591439985795574 0.1124768072283221 0
+446 0.2833906089244816 0.4500473011670638 0
+447 0.3014167921213532 0.3827691534947646 0
+448 0.3474184635404636 0.4327218523277008 0
+449 0.4327223233686676 0.3474179924989554 0
+450 0.3731647952129674 0.2878604643432553 0
+451 0.4404424718442999 0.2698347521868091 0
+452 0.3171383478510021 0.2325004281171527 0
+453 0.2659568515337981 0.2011726022269187 0
+454 0.3297034473713957 0.178949398140875 0
+455 0.3207187679063411 0.1311904041480014 0
+456 0.3719002642235452 0.1625182300382355 0
+457 0.4327223233686676 0.4327218523277008 0
+458 0.1704723055956265 0.466758509489182 0
+459 0.1923102962023309 0.4168058106562458 0
+460 0.2155509468986668 0.4500473011670638 0
+461 0.4404424718442999 0.2019950901608922 0
+462 0.4081716879349403 0.1719877222111241 0
+463 0.4677292160906404 0.1637055883409073 0
+464 0.03405367593432156 0.2104738164421327 0
+465 0.06995039110311768 0.2410160705623549 0
+466 0.03589671516879612 0.2505422541203741 0
+467 0.1433814923488277 0.2872818796539132 0
+468 0.4677292160906404 0.1097546908281923 0
+469 0.1165214080825037 0.466758509489182 0
+470 0.2522195770899168 0.03776409280140682 0
+471 0.2455913277896729 0.07508459144279053 0
+472 0.213371750699599 0.03732049864138372 0
+473 0.4344750323202974 0.09881437235722154 0
+474 0.3991870084698858 0.1242287282182505 0
+475 0.3982036086089022 0.08934488018433294 0
+476 0.2334530688228932 0.1487875933535163 0
+477 0.03833888028686189 0.461661688952213 0
+478 0.08124446091972032 0.461661688952213 0
+479 0.4667458162296569 0.07487084279427469 0
+480 0.4667458162296569 0.03196526216165198 0
+481 0.10615143885331 0.2156721387693371 0
+482 0.1079944780877845 0.2557405764475785 0
+483 0.2814805526170912 0.1115748789267273 0
+484 0.2426327262267733 0.1111312847667042 0
+485 0.1783717506996775 0.03732049864138372 0
+486 0.1683236559834375 0.07482049864151 0
+487 0.3236773694692406 0.09514371082408778 0
+488 0.03833888028686189 0.4266616889522997 0
+489 0.4317458162295301 0.03196526216165198 0
+490 0.2872195770897927 0.03776409280140682 0
+491 0.07155367593422468 0.1654257217259456 0
+492 0.03405367593432156 0.1754738164420567 0
+493 0.1975638439954749 0.1122973058695796 0
+494 0.06389969853146835 0.319643599297001 0
+495 0.1071804445986354 0.312625811446931 0
+496 0.09928671279251149 0.3511849025033358 0
+497 0.1096226097167012 0.3837452462788459 0
+498 0.06634186364953411 0.3907630341289159 0
+499 0.1448995568794845 0.3888420668158148 0
+500 0.1119547077365072 0.428420198441395 0
+501 0.02800298336267222 0.3941013451767896 0
+502 0.3964215807926591 0.06377234641077351 0
+503 0.3946757645628752 0.03180708424912152 0
+504 0.3246757645627995 0.03180708424912152 0
+505 0.3218953416529975 0.06957117705052834 0
+506 0.03589671516879612 0.2855422541204607 0
+507 0.02800298336267222 0.3241013451768655 0
+508 0.02800298336267222 0.3591013451768871 0
+509 0.3596757645627918 0.03180708424912152 0
+510 0.09529699369832932 0.1819274176908341 0
+511 0.3611335569422474 0.08918670227180248 0
+512 0.3094181993753699 0.310083668429299 0
+$EndNodes
+$Elements
+266
+1 8 2 4 2 2 22 25
+2 8 2 4 2 22 23 26
+3 8 2 4 2 23 24 27
+4 8 2 4 2 24 3 28
+5 8 2 1 3 3 29 32
+6 8 2 1 3 29 30 33
+7 8 2 1 3 30 31 34
+8 8 2 1 3 31 4 35
+9 8 2 2 9 6 50 53
+10 8 2 2 9 50 51 54
+11 8 2 2 9 51 52 55
+12 8 2 2 9 52 7 56
+13 8 2 1 10 7 57 60
+14 8 2 1 10 57 58 61
+15 8 2 1 10 58 59 62
+16 8 2 1 10 59 4 63
+17 8 2 4 15 2 78 81
+18 8 2 4 15 78 79 82
+19 8 2 4 15 79 80 83
+20 8 2 4 15 80 9 84
+21 8 2 3 16 9 85 88
+22 8 2 3 16 85 86 89
+23 8 2 3 16 86 87 90
+24 8 2 3 16 87 10 91
+25 8 2 2 21 6 106 109
+26 8 2 2 21 106 107 110
+27 8 2 2 21 107 108 111
+28 8 2 2 21 108 12 112
+29 8 2 3 22 12 113 116
+30 8 2 3 22 113 114 117
+31 8 2 3 22 114 115 118
+32 8 2 3 22 115 10 119
+33 9 2 11 7 129 139 141 144 145 146
+34 9 2 11 7 30 133 142 147 148 149
+35 9 2 11 7 125 136 138 150 151 152
+36 9 2 11 7 46 125 138 153 152 154
+37 9 2 11 7 136 139 138 155 156 151
+38 9 2 11 7 24 131 129 157 158 159
+39 9 2 11 7 29 126 131 160 161 162
+40 9 2 11 7 30 31 133 34 163 147
+41 9 2 11 7 45 125 46 164 153 48
+42 9 2 11 7 30 142 126 149 165 166
+43 9 2 11 7 126 140 139 167 168 169
+44 9 2 11 7 127 137 142 170 171 172
+45 9 2 11 7 137 140 142 173 174 171
+46 9 2 11 7 3 131 24 175 157 28
+47 9 2 11 7 3 29 131 32 162 175
+48 9 2 11 7 23 129 143 176 177 178
+49 9 2 11 7 23 24 129 27 159 176
+50 9 2 11 7 13 134 135 179 180 181
+51 9 2 11 7 29 30 126 33 166 160
+52 9 2 11 7 38 137 127 182 170 183
+53 9 2 11 7 136 141 139 184 145 155
+54 9 2 11 7 22 23 143 26 178 185
+55 9 2 11 7 126 142 140 165 174 167
+56 9 2 11 7 2 22 132 25 186 187
+57 9 2 11 7 4 133 31 188 163 35
+58 9 2 11 7 134 136 135 189 190 180
+59 9 2 11 7 138 139 140 156 168 191
+60 9 2 11 7 2 132 16 187 192 21
+61 9 2 11 7 5 46 128 49 193 194
+62 9 2 11 7 4 36 133 40 195 188
+63 9 2 11 7 1 135 45 196 197 47
+64 9 2 11 7 130 141 134 198 199 200
+65 9 2 11 7 130 143 141 201 202 198
+66 9 2 11 7 16 132 130 192 203 204
+67 9 2 11 7 36 127 133 205 206 195
+68 9 2 11 7 128 138 137 207 208 209
+69 9 2 11 7 137 138 140 208 191 173
+70 9 2 11 7 134 141 136 199 184 189
+71 9 2 11 7 46 138 128 154 207 193
+72 9 2 11 7 13 14 134 18 210 179
+73 9 2 11 7 5 128 39 194 211 44
+74 9 2 11 7 1 13 135 17 181 196
+75 9 2 11 7 38 39 137 43 212 182
+76 9 2 11 7 14 15 130 19 213 214
+77 9 2 11 7 15 16 130 20 204 213
+78 9 2 11 7 37 38 127 42 183 215
+79 9 2 11 7 36 37 127 41 215 205
+80 9 2 11 7 130 132 143 203 216 201
+81 9 2 11 7 125 135 136 217 190 150
+82 9 2 11 7 129 141 143 146 202 177
+83 9 2 11 7 39 128 137 211 209 212
+84 9 2 11 7 14 130 134 214 200 210
+85 9 2 11 7 22 143 132 185 216 186
+86 9 2 11 7 45 135 125 197 217 164
+87 9 2 11 7 127 142 133 172 148 206
+88 9 2 11 7 126 139 131 169 218 161
+89 9 2 11 7 129 131 139 158 218 144
+90 9 2 11 8 223 235 233 239 240 241
+91 9 2 11 8 219 232 230 242 243 244
+92 9 2 11 8 64 65 219 67 245 246
+93 9 2 11 8 230 232 233 243 247 248
+94 9 2 11 8 65 232 219 249 242 245
+95 9 2 11 8 57 223 225 250 251 252
+96 9 2 11 8 52 225 220 253 254 255
+97 9 2 11 8 220 233 234 256 257 258
+98 9 2 11 8 220 234 236 258 259 260
+99 9 2 11 8 7 225 52 261 253 56
+100 9 2 11 8 7 57 225 60 252 261
+101 9 2 11 8 58 237 223 262 263 264
+102 9 2 11 8 57 58 223 61 264 250
+103 9 2 11 8 51 220 238 265 266 267
+104 9 2 11 8 51 52 220 55 255 265
+105 9 2 11 8 39 229 228 268 269 270
+106 9 2 11 8 230 233 235 248 240 271
+107 9 2 11 8 50 51 238 54 267 272
+108 9 2 11 8 58 59 237 62 273 262
+109 9 2 11 8 69 231 221 274 275 276
+110 9 2 11 8 227 238 236 277 278 279
+111 9 2 11 8 232 234 233 280 257 247
+112 9 2 11 8 4 226 59 281 282 63
+113 9 2 11 8 6 50 227 53 283 284
+114 9 2 11 8 228 229 230 269 285 286
+115 9 2 11 8 221 231 234 275 287 288
+116 9 2 11 8 8 221 65 289 290 68
+117 9 2 11 8 231 236 234 291 259 287
+118 9 2 11 8 4 36 226 40 292 281
+119 9 2 11 8 6 227 72 284 293 77
+120 9 2 11 8 69 70 231 74 294 274
+121 9 2 11 8 5 64 229 66 295 296
+122 9 2 11 8 221 234 232 288 280 297
+123 9 2 11 8 220 236 238 260 278 266
+124 9 2 11 8 224 228 235 298 299 300
+125 9 2 11 8 224 235 226 300 301 302
+126 9 2 11 8 226 235 237 301 303 304
+127 9 2 11 8 36 224 226 305 302 292
+128 9 2 11 8 72 227 222 293 306 307
+129 9 2 11 8 70 222 231 308 309 294
+130 9 2 11 8 8 69 221 73 276 289
+131 9 2 11 8 228 230 235 286 271 299
+132 9 2 11 8 38 39 228 43 270 310
+133 9 2 11 8 65 221 232 290 297 249
+134 9 2 11 8 5 229 39 296 268 44
+135 9 2 11 8 37 38 224 42 311 312
+136 9 2 11 8 36 37 224 41 312 305
+137 9 2 11 8 70 71 222 75 313 308
+138 9 2 11 8 71 72 222 76 307 313
+139 9 2 11 8 219 230 229 244 285 314
+140 9 2 11 8 223 237 235 263 303 239
+141 9 2 11 8 38 228 224 310 298 311
+142 9 2 11 8 222 236 231 315 291 309
+143 9 2 11 8 50 238 227 272 277 283
+144 9 2 11 8 59 226 237 282 304 273
+145 9 2 11 8 64 219 229 246 314 295
+146 9 2 11 8 222 227 236 306 279 315
+147 9 2 11 8 220 225 233 254 316 256
+148 9 2 11 8 223 233 225 241 316 251
+149 9 2 11 14 321 333 331 337 338 339
+150 9 2 11 14 317 330 328 340 341 342
+151 9 2 11 14 101 102 317 104 343 344
+152 9 2 11 14 328 330 331 341 345 346
+153 9 2 11 14 102 330 317 347 340 343
+154 9 2 11 14 85 321 323 348 349 350
+155 9 2 11 14 80 323 318 351 352 353
+156 9 2 11 14 318 331 332 354 355 356
+157 9 2 11 14 318 332 334 356 357 358
+158 9 2 11 14 9 323 80 359 351 84
+159 9 2 11 14 9 85 323 88 350 359
+160 9 2 11 14 86 335 321 360 361 362
+161 9 2 11 14 85 86 321 89 362 348
+162 9 2 11 14 79 318 336 363 364 365
+163 9 2 11 14 79 80 318 83 353 363
+164 9 2 11 14 95 327 326 366 367 368
+165 9 2 11 14 328 331 333 346 338 369
+166 9 2 11 14 78 79 336 82 365 370
+167 9 2 11 14 86 87 335 90 371 360
+168 9 2 11 14 13 329 319 372 373 374
+169 9 2 11 14 325 336 334 375 376 377
+170 9 2 11 14 330 332 331 378 355 345
+171 9 2 11 14 10 324 87 379 380 91
+172 9 2 11 14 2 78 325 81 381 382
+173 9 2 11 14 326 327 328 367 383 384
+174 9 2 11 14 319 329 332 373 385 386
+175 9 2 11 14 1 319 102 387 388 105
+176 9 2 11 14 329 334 332 389 357 385
+177 9 2 11 14 10 92 324 96 390 379
+178 9 2 11 14 2 325 16 382 391 21
+179 9 2 11 14 13 14 329 18 392 372
+180 9 2 11 14 11 101 327 103 393 394
+181 9 2 11 14 319 332 330 386 378 395
+182 9 2 11 14 318 334 336 358 376 364
+183 9 2 11 14 322 326 333 396 397 398
+184 9 2 11 14 322 333 324 398 399 400
+185 9 2 11 14 324 333 335 399 401 402
+186 9 2 11 14 92 322 324 403 400 390
+187 9 2 11 14 16 325 320 391 404 405
+188 9 2 11 14 14 320 329 406 407 392
+189 9 2 11 14 1 13 319 17 374 387
+190 9 2 11 14 326 328 333 384 369 397
+191 9 2 11 14 94 95 326 99 368 408
+192 9 2 11 14 102 319 330 388 395 347
+193 9 2 11 14 11 327 95 394 366 100
+194 9 2 11 14 93 94 322 98 409 410
+195 9 2 11 14 92 93 322 97 410 403
+196 9 2 11 14 14 15 320 19 411 406
+197 9 2 11 14 15 16 320 20 405 411
+198 9 2 11 14 317 328 327 342 383 412
+199 9 2 11 14 321 335 333 361 401 337
+200 9 2 11 14 94 326 322 408 396 409
+201 9 2 11 14 320 334 329 413 389 407
+202 9 2 11 14 78 336 325 370 375 381
+203 9 2 11 14 87 324 335 380 402 371
+204 9 2 11 14 101 317 327 344 412 393
+205 9 2 11 14 320 325 334 404 377 413
+206 9 2 11 14 318 323 331 352 414 354
+207 9 2 11 14 321 331 323 339 414 349
+208 9 2 11 20 419 431 429 435 436 437
+209 9 2 11 20 415 428 426 438 439 440
+210 9 2 11 20 120 121 415 123 441 442
+211 9 2 11 20 426 428 429 439 443 444
+212 9 2 11 20 121 428 415 445 438 441
+213 9 2 11 20 113 419 421 446 447 448
+214 9 2 11 20 108 421 416 449 450 451
+215 9 2 11 20 416 429 430 452 453 454
+216 9 2 11 20 416 430 432 454 455 456
+217 9 2 11 20 12 421 108 457 449 112
+218 9 2 11 20 12 113 421 116 448 457
+219 9 2 11 20 114 433 419 458 459 460
+220 9 2 11 20 113 114 419 117 460 446
+221 9 2 11 20 107 416 434 461 462 463
+222 9 2 11 20 107 108 416 111 451 461
+223 9 2 11 20 95 425 424 464 465 466
+224 9 2 11 20 426 429 431 444 436 467
+225 9 2 11 20 106 107 434 110 463 468
+226 9 2 11 20 114 115 433 118 469 458
+227 9 2 11 20 69 427 417 470 471 472
+228 9 2 11 20 423 434 432 473 474 475
+229 9 2 11 20 428 430 429 476 453 443
+230 9 2 11 20 10 422 115 477 478 119
+231 9 2 11 20 6 106 423 109 479 480
+232 9 2 11 20 424 425 426 465 481 482
+233 9 2 11 20 417 427 430 471 483 484
+234 9 2 11 20 8 417 121 485 486 124
+235 9 2 11 20 427 432 430 487 455 483
+236 9 2 11 20 10 92 422 96 488 477
+237 9 2 11 20 6 423 72 480 489 77
+238 9 2 11 20 69 70 427 74 490 470
+239 9 2 11 20 11 120 425 122 491 492
+240 9 2 11 20 417 430 428 484 476 493
+241 9 2 11 20 416 432 434 456 474 462
+242 9 2 11 20 420 424 431 494 495 496
+243 9 2 11 20 420 431 422 496 497 498
+244 9 2 11 20 422 431 433 497 499 500
+245 9 2 11 20 92 420 422 501 498 488
+246 9 2 11 20 72 423 418 489 502 503
+247 9 2 11 20 70 418 427 504 505 490
+248 9 2 11 20 8 69 417 73 472 485
+249 9 2 11 20 424 426 431 482 467 495
+250 9 2 11 20 94 95 424 99 466 506
+251 9 2 11 20 121 417 428 486 493 445
+252 9 2 11 20 11 425 95 492 464 100
+253 9 2 11 20 93 94 420 98 507 508
+254 9 2 11 20 92 93 420 97 508 501
+255 9 2 11 20 70 71 418 75 509 504
+256 9 2 11 20 71 72 418 76 503 509
+257 9 2 11 20 415 426 425 440 481 510
+258 9 2 11 20 419 433 431 459 499 435
+259 9 2 11 20 94 424 420 506 494 507
+260 9 2 11 20 418 432 427 511 487 505
+261 9 2 11 20 106 434 423 468 473 479
+262 9 2 11 20 115 422 433 478 500 469
+263 9 2 11 20 120 415 425 442 510 491
+264 9 2 11 20 418 423 432 502 475 511
+265 9 2 11 20 416 421 429 450 512 452
+266 9 2 11 20 419 429 421 437 512 447
+$EndElements
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_shiftedBC/model.geo b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_shiftedBC/model.geo
new file mode 100644
index 0000000000000000000000000000000000000000..53aaf58a7c3e5bb390202cddd619a49372114450
--- /dev/null
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_shiftedBC/model.geo
@@ -0,0 +1,47 @@
+
+mm=1.0;
+L=1.*mm;
+H = 1*mm; 
+sl1=0.5*L;
+Point(1)={0,0,0,sl1};
+Point(2)={L,0,0,sl1};
+Point(3)={L,H,0,sl1};
+Point(4)={0,H,0,sl1};
+Point(5)={2*L,0,0,sl1};
+Point(6)={2*L,H,0,sl1};
+Line(1)={1,2};
+Line(2)={2,3};
+Line(3)={3,4};
+Line(4)={4,1};
+Line(5)={2,5};
+Line(6)={5,6};
+Line(7)={6,3};
+
+l[0]=newreg;
+Line Loop(l[0])={1,2,3,4};
+Plane Surface(11)={l[0]};
+
+l[1]=newreg;
+Line Loop(l[1])={5,6,7,-2};
+Plane Surface(12)={l[1]};
+
+Physical Surface(11)={11};
+Physical Point(1)={1}; 
+Physical Point(2)={2};
+Physical Point(3)={5};
+Physical Point(4)={6}; 
+
+Transfinite Line {4, 2,6} = 2 Using Progression 1;
+Transfinite Line {3, 1,5,7} = 2 Using Progression 1;
+Transfinite Surface {11, 12};
+Recombine Surface {11,12};
+
+Physical Surface(12) = {12};
+Physical Line(1) = {1, 5};
+Physical Line(2) = {6};
+Physical Line(3) = {7,3};
+Physical Line(4) = {4};
+//+
+Translate {0.3, 0, 0} {
+  Point{3}; 
+}
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_shiftedBC/model.msh b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_shiftedBC/model.msh
new file mode 100644
index 0000000000000000000000000000000000000000..aba0ca64c6428748d97a1abbb98a659e4cd28836
--- /dev/null
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_shiftedBC/model.msh
@@ -0,0 +1,27 @@
+$MeshFormat
+2.2 0 8
+$EndMeshFormat
+$Nodes
+6
+1 0 0 0
+2 1 0 0
+3 1.3 1 0
+4 0 1 0
+5 2 0 0
+6 2 1 0
+$EndNodes
+$Elements
+12
+1 15 2 1 1 1
+2 15 2 2 2 2
+3 15 2 3 5 5
+4 15 2 4 6 6
+5 1 2 1 1 1 2
+6 1 2 3 3 3 4
+7 1 2 4 4 4 1
+8 1 2 1 5 2 5
+9 1 2 2 6 5 6
+10 1 2 3 7 6 3
+11 3 2 11 11 1 2 3 4
+12 3 2 12 12 2 5 6 3
+$EndElements
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_shiftedBC/model.py b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_shiftedBC/model.py
new file mode 100644
index 0000000000000000000000000000000000000000..88b0c000f402c1c1fc0d1d6b1adc112949a99c14
--- /dev/null
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_fullDG_shiftedBC/model.py
@@ -0,0 +1,209 @@
+#coding-Utf-8-*-
+from gmshpy import *
+from dG3Dpy import*
+
+#script to launch PBC problem with a python script
+
+#DEFINE MICRO PROBLEM
+
+# micro-material law
+lawnum1 = 11 # unique number of law
+
+
+rho   = 7850e-9
+young = 28.9e3
+nu    = 0.3 
+sy0   = 99.
+h     = young/20.
+
+harden = LinearExponentialJ2IsotropicHardening(1, sy0, h, 0., 10.)
+cl     = IsotropicCLengthLaw(1, 1e-2)
+damlaw = SimpleSaturateDamageLaw(1, 50.,1.,0.,1.)
+law1   = NonLocalDamageJ2HyperDG3DMaterialLaw(lawnum1,rho,young,nu,harden,cl,damlaw)
+
+
+micromeshfile="micro.msh" # name of mesh file
+#micromeshfile="square.msh" # name of mesh file
+
+# creation of part Domain
+nfield = 11 # number of the field (physical number of entity)
+myfield1 = nonLocalDamageDG3DDomain(1000,nfield,0,lawnum1,0,1e3,2,1)
+
+microBC = nonLinearPeriodicBC(1000,2)
+microBC.setOrder(1)
+microBC.setBCPhysical(1,4,3,2)
+# periodiodic BC
+method = 1 # Periodic mesh = 0 Langrange interpolation = 1 Cubic spline interpolation =2
+degree = 5 
+addvertex = False
+microBC.setPeriodicBCOptions(method, degree,addvertex)
+microBC.setShiftedBC(True) # shifted BC at interface only
+
+# DEFINE MACROPROBLEM
+matnum1 = 1;
+macromat1 = dG3DMultiscaleMaterialLaw(matnum1, 1000)
+macromat1.loadModel(micromeshfile);
+macromat1.addDomain(myfield1)
+macromat1.addMaterialLaw(law1);
+macromat1.setPeriodicity(1.,0,0,"x")
+macromat1.setPeriodicity(0,1.,0,"y")
+macromat1.setPeriodicity(0,0,1.,"z")
+macromat1.addMicroBC(microBC)
+
+macromat1.setNumStep(3)
+macromat1.setTolerance(1e-6,1e-10)
+macromat1.setSystemType(1)
+macromat1.Solver(2)
+#for i in range(0,1):
+macromat1.setViewAllMicroProblems(True,0)
+
+macromat1.setBlockDamageAfterFailureOnset(True)
+
+macromat1.Scheme(1)
+macromat1.setSameStateCriterion(1e-16)
+macromat1.stressAveragingFlag(True) # set stress averaging ON- 0 , OFF-1
+macromat1.setStressAveragingMethod(0)
+macromat1.tangentAveragingFlag(True) # set tangent averaging ON -0, OFF -1
+macromat1.setTangentAveragingMethod(2,1e-6);
+
+macromat1.internalPointBuildView("Green-Lagrange_xx",IPField.STRAIN_XX);
+macromat1.internalPointBuildView("Green-Lagrange_yy",IPField.STRAIN_YY);
+macromat1.internalPointBuildView("Green-Lagrange_xy",IPField.STRAIN_XY);
+macromat1.internalPointBuildView("Green-Lagrange_zz",IPField.STRAIN_ZZ);
+macromat1.internalPointBuildView("Green-Lagrange_yz",IPField.STRAIN_YZ);
+macromat1.internalPointBuildView("Green-Lagrange_xz",IPField.STRAIN_XZ);
+macromat1.internalPointBuildView("sig_xx",IPField.SIG_XX);
+macromat1.internalPointBuildView("sig_yy",IPField.SIG_YY);
+macromat1.internalPointBuildView("sig_xy",IPField.SIG_XY);
+macromat1.internalPointBuildView("sig_xz",IPField.SIG_XZ);
+macromat1.internalPointBuildView("sig_zz",IPField.SIG_ZZ);
+macromat1.internalPointBuildView("sig_yz",IPField.SIG_YZ);
+macromat1.internalPointBuildView("sig_VM",IPField.SVM);
+
+macromat1.internalPointBuildView("F_xx",IPField.F_XX);
+macromat1.internalPointBuildView("F_yy",IPField.F_YY);
+macromat1.internalPointBuildView("F_xy",IPField.F_XY);
+macromat1.internalPointBuildView("F_yx",IPField.F_YX);
+
+macromat1.internalPointBuildView("P_xx",IPField.P_XX);
+macromat1.internalPointBuildView("P_yy",IPField.P_YY);
+macromat1.internalPointBuildView("P_xy",IPField.P_XY);
+macromat1.internalPointBuildView("P_yx",IPField.P_YX);
+
+macromat1.internalPointBuildView("Equivalent plastic strain",IPField.PLASTICSTRAIN);
+macromat1.internalPointBuildView("Damage",IPField.DAMAGE);
+
+macromat1.dirichletBC("Face",11,2,0.)
+
+
+lcohNum = 13
+lawCoh = dG3DMultiscaleCohesiveLaw(lcohNum,0.7)
+lawCoh.setCharacteristicLength(1.)
+lawCoh.setLostSolutionUniquenssTolerance(0.)
+#lawCoh.setRotationOfRVEFollowingInterfaceLocalBasis(True)
+
+macromeshfile="model.msh" # name of mesh file
+
+# solver
+sol = 2  # Gmm=0 (default) Taucs=1 PETsc=2
+soltype =1 # StaticLinear=0 (default) StaticNonLinear=1
+nstep = 100  # number of step (used only if soltype=1)
+ftime =1.   # Final time (used only if soltype=1)
+tol=1.e-5  # relative tolerance for NR scheme (used only if soltype=1)
+nstepArch=1 # Number of step between 2 archiving (used only if soltype=1)
+
+
+# creation of  macro part Domain
+
+dim =2
+beta1 = 50;
+fullDG = False;
+
+averageStrainBased = True
+
+# non DG domain
+nfield1 = 11
+macrodomain1 = dG3DDomain(10,nfield1,0,matnum1,fullDG,dim)
+macrodomain1.stabilityParameters(beta1)
+macrodomain1.setDistributedOtherRanks(True)
+macrodomain1.distributeOnRootRank(False)
+
+nfield2 = 12
+macrodomain2 = dG3DDomain(11,nfield2,0,matnum1,fullDG,dim)
+macrodomain2.stabilityParameters(beta1)
+macrodomain2.setDistributedOtherRanks(True)
+macrodomain2.distributeOnRootRank(False)
+
+# interface domain
+beta1 = 100;
+interdomain1 =  interDomainBetween3D(12,macrodomain1,macrodomain2,lcohNum,matnum1)
+interdomain1.stabilityParameters(beta1)
+interdomain1.averageStrainBased(averageStrainBased)
+interdomain1.setDistributedOtherRanks(True)
+interdomain1.distributeOnRootRank(False)
+
+# creation of Solver
+mysolver = nonLinearMechSolver(1000)
+mysolver.loadModel(macromeshfile)
+mysolver.addDomain(macrodomain1)
+mysolver.addDomain(macrodomain2)
+mysolver.addDomain(interdomain1)
+mysolver.addMaterialLaw(macromat1)
+
+mysolver.addMaterialLaw(lawCoh)
+mysolver.setMultiscaleFlag(True)
+mysolver.Scheme(soltype)
+mysolver.Solver(sol)
+mysolver.snlData(nstep,ftime,tol)
+mysolver.options("-ksp_type preonly -pc_type lu -pc_factor_shift_type NONZERO -pc_factor_mat_solver_package petsc")
+
+
+# boundary condition
+mysolver.displacementBC("Face",11,2,0.0)
+mysolver.displacementBC("Face",12,2,0.0)
+
+mysolver.displacementBC("Face",11,1,0.0)
+mysolver.displacementBC("Face",12,1,0.0)
+
+
+mysolver.displacementBC("Edge",1,1,0.0)
+mysolver.displacementBC("Edge",2,0,0.02)
+mysolver.displacementBC("Edge",4,0,0.0)
+
+
+# archivage
+mysolver.internalPointBuildView("Green-Lagrange_xx",IPField.STRAIN_XX, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_yy",IPField.STRAIN_YY, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_zz",IPField.STRAIN_ZZ, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_xy",IPField.STRAIN_XY, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_yz",IPField.STRAIN_YZ, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_xz",IPField.STRAIN_XZ, 1, 1);
+mysolver.internalPointBuildView("sig_xx",IPField.SIG_XX, 1, 1);
+mysolver.internalPointBuildView("sig_yy",IPField.SIG_YY, 1, 1);
+mysolver.internalPointBuildView("sig_zz",IPField.SIG_ZZ, 1, 1);
+mysolver.internalPointBuildView("sig_xy",IPField.SIG_XY, 1, 1);
+mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, 1);
+mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, 1);
+mysolver.internalPointBuildView("sig_VM",IPField.SVM, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange equivalent strain",IPField.GL_EQUIVALENT_STRAIN, 1, 1);
+mysolver.internalPointBuildView("Equivalent plastic strain",IPField.PLASTICSTRAIN, 1, 1);
+mysolver.internalPointBuildView("Damage",IPField.DAMAGE,1,1);
+
+mysolver.archivingForceOnPhysicalGroup("Edge",4,0)
+
+mysolver.archivingInterfaceElementIP(11,12,IPField.DISP_JUMP_X,4,0,1)
+mysolver.archivingInterfaceElementIP(11,12,IPField.DISP_JUMP_Y,4,0,1)
+
+mysolver.archivingInterfaceElementIP(11,12,IPField.COHESIVE_JUMP_X,4,0,1)
+mysolver.archivingInterfaceElementIP(11,12,IPField.COHESIVE_JUMP_Y,4,0,1)
+
+mysolver.archivingInterfaceElementIP(11,12,IPField.INCOMPATIBLE_STRAIN_X,4,0,1)
+mysolver.archivingInterfaceElementIP(11,12,IPField.INCOMPATIBLE_STRAIN_Y,4,0,1)
+
+
+# solve
+mysolver.solve()
+
+check = TestCheck()
+check.equal(-2.226306e+01,mysolver.getArchivedForceOnPhysicalGroup("Edge", 4, 0),1.e-4)
+
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_mixedMode/model.py b/dG3D/benchmarks/multiscaleCohesiveTest2D_mixedMode/model.py
index d14fe05c0b4848cd1fe4dde4d64049c3ced32222..f0c9bb508531c950eb19bfbe11e84741cd33b674 100644
--- a/dG3D/benchmarks/multiscaleCohesiveTest2D_mixedMode/model.py
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_mixedMode/model.py
@@ -31,7 +31,7 @@ myfield1 = nonLocalDamageDG3DDomain(1000,nfield,0,lawnum1,0,1e3,2,1)
 
 microBC = nonLinearPeriodicBC(1000,2)
 microBC.setOrder(1)
-microBC.setBCPhysical(1,2,3,4)
+microBC.setBCPhysical(1,4,3,2)
 # periodiodic BC
 method = 0 # Periodic mesh = 0 Langrange interpolation = 1 Cubic spline interpolation =2
 degree = 5 
@@ -99,7 +99,6 @@ macromat1.dirichletBC("Face",11,2,0.)
 lcohNum = 13
 lawCoh = TwoFieldMultiscaleCohesive3DLaw(lcohNum,0.7)
 lawCoh.setCharacteristicLength(1.)
-lawCoh.setExtractCohesiveLawFromMicroDamage(True)
 lawCoh.setLostSolutionUniquenssTolerance(0.05)
 
 macromeshfile="model.msh" # name of mesh file
@@ -167,8 +166,8 @@ mysolver.displacementBC("Face",12,2,0.0)
 #mysolver.displacementBC("Face",11,1,0.0)
 #mysolver.displacementBC("Face",12,1,0.0)
 
-mysolver.periodicBC("Edge",1,3,0)
-mysolver.periodicBC("Edge",1,3,1)
+mysolver.periodicBC("Edge",1,3,1,4,0)
+mysolver.periodicBC("Edge",1,3,1,4,1)
 
 #mysolver.displacementBC("Edge",1,1,0.0)
 #mysolver.displacementBC("Edge",3,1,0.01)
@@ -202,5 +201,5 @@ mysolver.archivingForceOnPhysicalGroup("Edge",4,0)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(-2.565563e+01,mysolver.getArchivedForceOnPhysicalGroup("Edge", 4, 0),1.e-3)
+check.equal(-2.565628e+01,mysolver.getArchivedForceOnPhysicalGroup("Edge", 4, 0),1.e-3)
 
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_tangentByPert/model.py b/dG3D/benchmarks/multiscaleCohesiveTest2D_tangentByPert/model.py
index 7a41fcd10f56d5bf0f3b5c65b9889b433fc2ae50..f334e5d25f598a8a94be3c3526eb6b97cf80ffc6 100644
--- a/dG3D/benchmarks/multiscaleCohesiveTest2D_tangentByPert/model.py
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_tangentByPert/model.py
@@ -31,7 +31,7 @@ myfield1 = nonLocalDamageDG3DDomain(1000,nfield,0,lawnum1,0,1e3,2,1)
 
 microBC = nonLinearPeriodicBC(1000,2)
 microBC.setOrder(1)
-microBC.setBCPhysical(1,2,3,4)
+microBC.setBCPhysical(1,4,3,2)
 # periodiodic BC
 method = 0 # Periodic mesh = 0 Langrange interpolation = 1 Cubic spline interpolation =2
 degree = 5 
@@ -98,7 +98,6 @@ macromat1.dirichletBC("Face",11,2,0.)
 lcohNum = 13
 lawCoh = TwoFieldMultiscaleCohesive3DLaw(lcohNum,0.7)
 lawCoh.setCharacteristicLength(1.)
-lawCoh.setExtractCohesiveLawFromMicroDamage(True)
 lawCoh.setLostSolutionUniquenssTolerance(0.9)
 
 macromeshfile="model.msh" # name of mesh file
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_unloading/model.py b/dG3D/benchmarks/multiscaleCohesiveTest2D_unloading/model.py
index 24a58dfade722417dbf648ef0471ec3e19bcbb87..c5a9e4c9451f82b63658f3ab775cc2c57713de57 100644
--- a/dG3D/benchmarks/multiscaleCohesiveTest2D_unloading/model.py
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_unloading/model.py
@@ -31,7 +31,7 @@ myfield1 = nonLocalDamageDG3DDomain(1000,nfield,0,lawnum1,0,1e3,2,1)
 
 microBC = nonLinearPeriodicBC(1000,2)
 microBC.setOrder(1)
-microBC.setBCPhysical(1,2,3,4)
+microBC.setBCPhysical(1,4,3,2)
 # periodiodic BC
 method = 0 # Periodic mesh = 0 Langrange interpolation = 1 Cubic spline interpolation =2
 degree = 5 
@@ -99,7 +99,6 @@ macromat1.dirichletBC("Face",11,2,0.)
 lcohNum = 13
 lawCoh = TwoFieldMultiscaleCohesive3DLaw(lcohNum,0.7)
 lawCoh.setCharacteristicLength(1.)
-lawCoh.setExtractCohesiveLawFromMicroDamage(True)
 lawCoh.setLostSolutionUniquenssTolerance(0.9)
 lawCoh.setLocationForStressExtraction(0)
 
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_unloadingElastic/model.py b/dG3D/benchmarks/multiscaleCohesiveTest2D_unloadingElastic/model.py
index 12158929d6f62f0245a3c036539ad42713cc6e0b..7be901a9eab9100dc18e8062ac03f07eb7958f68 100644
--- a/dG3D/benchmarks/multiscaleCohesiveTest2D_unloadingElastic/model.py
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_unloadingElastic/model.py
@@ -34,7 +34,7 @@ myfield1.nonLocalStabilityParameters(1e2,True)
 # periodiodic BC
 microBC = nonLinearPeriodicBC(1000,2)
 microBC.setOrder(1)
-microBC.setBCPhysical(1,2,3,4)
+microBC.setBCPhysical(1,4,3,2)
 # periodiodic BC
 method = 0 # Periodic mesh = 0 Langrange interpolation = 1 Cubic spline interpolation =2
 degree = 5 
@@ -102,7 +102,6 @@ macromat1.dirichletBC("Face",11,2,0.)
 lcohNum = 13
 lawCoh = TwoFieldMultiscaleCohesive3DLaw(lcohNum,0.7)
 lawCoh.setCharacteristicLength(1.)
-lawCoh.setExtractCohesiveLawFromMicroDamage(True)
 lawCoh.setLostSolutionUniquenssTolerance(0.95)
 
 macromeshfile="model.msh" # name of mesh file
diff --git a/dG3D/benchmarks/multiscaleEnforceCrackPath/model.py b/dG3D/benchmarks/multiscaleEnforceCrackPath/model.py
index 873ff6c3da9f0dc6e86fd065620f8fb67523a1b2..a6ba395b3dd4f1b7f7a21ce9f6d187a166ba80a8 100644
--- a/dG3D/benchmarks/multiscaleEnforceCrackPath/model.py
+++ b/dG3D/benchmarks/multiscaleEnforceCrackPath/model.py
@@ -30,7 +30,7 @@ myfield2 = nonLocalDamageDG3DDomain(10,12,0,12,0,EqRatio,2,1)
 
 microBC = nonLinearPeriodicBC(1000,2)
 microBC.setOrder(1)
-microBC.setBCPhysical(1,2,3,4)
+microBC.setBCPhysical(1,4,3,2)
 # periodiodic BC
 method = 0 # Periodic mesh = 0 Langrange interpolation = 1 Cubic spline interpolation =2
 degree = 5 
diff --git a/dG3D/benchmarks/multiscaleEnhanceStrain/model.py b/dG3D/benchmarks/multiscaleEnhanceStrain/model.py
index 7cc8176a7177e50eaa45d0c24f51d96433775170..45f1903316f53e77aa7de33c4e2004a389a64d16 100644
--- a/dG3D/benchmarks/multiscaleEnhanceStrain/model.py
+++ b/dG3D/benchmarks/multiscaleEnhanceStrain/model.py
@@ -37,7 +37,7 @@ myfield1 = nonLocalDamageDG3DDomain(1000,nfield,0,lawnum1,0,1e3,2,1)
 
 microBC = nonLinearPeriodicBC(1000,2)
 microBC.setOrder(1)
-microBC.setBCPhysical(1,2,3,4)
+microBC.setBCPhysical(1,4,3,2)
 # periodiodic BC
 method = 0 # Periodic mesh = 0 Langrange interpolation = 1 Cubic spline interpolation =2
 degree = 5 
@@ -69,6 +69,7 @@ macromat1.Solver(2)
 macromat1.setViewAllMicroProblems(True,0)
 
 macromat1.setLostSolutionUniquenssTolerance(0.)
+macromat1.setCharacteristicLength(1,0.7)
 
 macromat1.Scheme(1)
 macromat1.setSameStateCriterion(1e-16)
@@ -146,6 +147,7 @@ mysolver.displacementBC("Edge",1,1,0.0)
 mysolver.displacementBC("Edge",2,0,0.04)
 mysolver.displacementBC("Edge",4,0,0.0)
 
+mysolver.options("-ksp_type preonly -pc_type lu -pc_factor_mat_solver_package petsc -pc_factor_shift_type NONZERO")
 
 # archivage
 mysolver.internalPointBuildView("Green-Lagrange_xx",IPField.STRAIN_XX, 1, 1);
@@ -183,5 +185,5 @@ mysolver.archivingForceOnPhysicalGroup("Edge",4,0)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(-8.943046e+00,mysolver.getArchivedForceOnPhysicalGroup("Edge", 4, 0),1.e-4)
+check.equal(-3.988271e+01,mysolver.getArchivedForceOnPhysicalGroup("Edge", 4, 0),1.e-4)
 
diff --git a/dG3D/benchmarks/nonLinearMixedBC_2D/CMakeLists.txt b/dG3D/benchmarks/nonLinearMixedBC_2D/CMakeLists.txt
index 689506adade2a1900accc0c3a4e3ea99cb915545..80f072bb65ce022a9c558683c7d80db4a603143f 100644
--- a/dG3D/benchmarks/nonLinearMixedBC_2D/CMakeLists.txt
+++ b/dG3D/benchmarks/nonLinearMixedBC_2D/CMakeLists.txt
@@ -3,7 +3,6 @@
 set(PYFILE idealHole_mixBC.py)
 
 set(FILES2DELETE 
-  idealHole.msh
   E_0_GP_0_out.txt
   E_0_GP_0_disp.msh
   E_0_GP_0_stress.msh
diff --git a/dG3D/benchmarks/nonLinearMixedBC_2D/idealHole.msh b/dG3D/benchmarks/nonLinearMixedBC_2D/idealHole.msh
deleted file mode 100644
index c0af9112317192d97826ea8c5c1f5290694e70f5..0000000000000000000000000000000000000000
--- a/dG3D/benchmarks/nonLinearMixedBC_2D/idealHole.msh
+++ /dev/null
@@ -1,1910 +0,0 @@
-$MeshFormat
-3 0 8
-$EndMeshFormat
-$Entities
-9 8 1 0
-1 1 1 
-2 1 2 
-3 1 3 
-4 1 4 
-5 0 
-6 0 
-7 0 
-8 0 
-9 0 
-1 2 1 2 1 1 
-2 2 2 3 1 2 
-3 2 3 4 1 3 
-4 2 4 1 1 4 
-5 2 5 6 0 
-6 2 6 7 0 
-7 2 7 8 0 
-8 2 8 5 0 
-11 8 1 2 3 4 8 7 6 5 1 11 
-$EndEntities
-$Nodes
-1244
-1 -0.5 -0.5 0 0
-2 0.5 -0.5 0 0
-3 0.5 0.5 0 0
-4 -0.5 0.5 0 0
-5 -0.3 0 0 0
-6 0 0.3 0 0
-7 0.3 0 0 0
-8 0 -0.3 0 0
-10 -0.4333333333335185 -0.5 0 0
-11 -0.3666666666670372 -0.5 0 0
-12 -0.3000000000005556 -0.5 0 0
-13 -0.233333333334074 -0.5 0 0
-14 -0.1666666666675924 -0.5 0 0
-15 -0.1000000000011109 -0.5 0 0
-16 -0.0333333333346294 -0.5 0 0
-17 0.03333333333203714 -0.5 0 0
-18 0.09999999999888864 -0.5 0 0
-19 0.1666666666657406 -0.5 0 0
-20 0.2333333333325924 -0.5 0 0
-21 0.2999999999994443 -0.5 0 0
-22 0.3666666666662962 -0.5 0 0
-23 0.4333333333331481 -0.5 0 0
-338 -0.4666666666667362 -0.5 0 0
-339 -0.4000000000002779 -0.5 0 0
-340 -0.3333333333337964 -0.5 0 0
-341 -0.2666666666673148 -0.5 0 0
-342 -0.2000000000008332 -0.5 0 0
-343 -0.1333333333343517 -0.5 0 0
-344 -0.06666666666787019 -0.5 0 0
-345 -1.388611448049915e-12 -0.5 0 0
-346 0.06666666666546295 -0.5 0 0
-347 0.1333333333323146 -0.5 0 0
-348 0.1999999999991665 -0.5 0 0
-349 0.2666666666660183 -0.5 0 0
-350 0.3333333333328703 -0.5 0 0
-351 0.3999999999997221 -0.5 0 0
-352 0.466666666666574 -0.5 0 0
-24 0.5 -0.4333333333335185 0 0
-25 0.5 -0.3666666666670372 0 0
-26 0.5 -0.3000000000005556 0 0
-27 0.5 -0.233333333334074 0 0
-28 0.5 -0.1666666666675924 0 0
-29 0.5 -0.1000000000011109 0 0
-30 0.5 -0.0333333333346294 0 0
-31 0.5 0.03333333333203714 0 0
-32 0.5 0.09999999999888864 0 0
-33 0.5 0.1666666666657406 0 0
-34 0.5 0.2333333333325924 0 0
-35 0.5 0.2999999999994443 0 0
-36 0.5 0.3666666666662962 0 0
-37 0.5 0.4333333333331481 0 0
-353 0.5 -0.4666666666667362 0 0
-354 0.5 -0.4000000000002779 0 0
-355 0.5 -0.3333333333337964 0 0
-356 0.5 -0.2666666666673148 0 0
-357 0.5 -0.2000000000008332 0 0
-358 0.5 -0.1333333333343517 0 0
-359 0.5 -0.06666666666787019 0 0
-360 0.5 -1.388611448049915e-12 0 0
-361 0.5 0.06666666666546295 0 0
-362 0.5 0.1333333333323146 0 0
-363 0.5 0.1999999999991665 0 0
-364 0.5 0.2666666666660183 0 0
-365 0.5 0.3333333333328703 0 0
-366 0.5 0.3999999999997221 0 0
-367 0.5 0.466666666666574 0 0
-38 0.4333333333335185 0.5 0 0
-39 0.3666666666670372 0.5 0 0
-40 0.3000000000005556 0.5 0 0
-41 0.233333333334074 0.5 0 0
-42 0.1666666666675924 0.5 0 0
-43 0.1000000000011109 0.5 0 0
-44 0.0333333333346294 0.5 0 0
-45 -0.03333333333203714 0.5 0 0
-46 -0.09999999999888864 0.5 0 0
-47 -0.1666666666657406 0.5 0 0
-48 -0.2333333333325924 0.5 0 0
-49 -0.2999999999994443 0.5 0 0
-50 -0.3666666666662962 0.5 0 0
-51 -0.4333333333331481 0.5 0 0
-368 0.4666666666667362 0.5 0 0
-369 0.4000000000002779 0.5 0 0
-370 0.3333333333337964 0.5 0 0
-371 0.2666666666673148 0.5 0 0
-372 0.2000000000008332 0.5 0 0
-373 0.1333333333343517 0.5 0 0
-374 0.06666666666787019 0.5 0 0
-375 1.388611448049915e-12 0.5 0 0
-376 -0.06666666666546295 0.5 0 0
-377 -0.1333333333323146 0.5 0 0
-378 -0.1999999999991665 0.5 0 0
-379 -0.2666666666660183 0.5 0 0
-380 -0.3333333333328703 0.5 0 0
-381 -0.3999999999997221 0.5 0 0
-382 -0.466666666666574 0.5 0 0
-52 -0.5 0.4333333333335185 0 0
-53 -0.5 0.3666666666670372 0 0
-54 -0.5 0.3000000000005556 0 0
-55 -0.5 0.233333333334074 0 0
-56 -0.5 0.1666666666675924 0 0
-57 -0.5 0.1000000000011109 0 0
-58 -0.5 0.0333333333346294 0 0
-59 -0.5 -0.03333333333203714 0 0
-60 -0.5 -0.09999999999888864 0 0
-61 -0.5 -0.1666666666657406 0 0
-62 -0.5 -0.2333333333325924 0 0
-63 -0.5 -0.2999999999994443 0 0
-64 -0.5 -0.3666666666662962 0 0
-65 -0.5 -0.4333333333331481 0 0
-383 -0.5 0.4666666666667362 0 0
-384 -0.5 0.4000000000002779 0 0
-385 -0.5 0.3333333333337964 0 0
-386 -0.5 0.2666666666673148 0 0
-387 -0.5 0.2000000000008332 0 0
-388 -0.5 0.1333333333343517 0 0
-389 -0.5 0.06666666666787019 0 0
-390 -0.5 1.388611448049915e-12 0 0
-391 -0.5 -0.06666666666546295 0 0
-392 -0.5 -0.1333333333323146 0 0
-393 -0.5 -0.1999999999991665 0 0
-394 -0.5 -0.2666666666660183 0 0
-395 -0.5 -0.3333333333328703 0 0
-396 -0.5 -0.3999999999997221 0 0
-397 -0.5 -0.466666666666574 0 0
-66 -0.2963065021785618 0.04693033951193976 0 0
-67 -0.2853169548886216 0.09270509831225152 0 0
-68 -0.2673019572566858 0.1361971499215198 0 0
-69 -0.2427050983127755 0.1763355756873411 0 0
-70 -0.2121320343563539 0.2121320343555746 0 0
-71 -0.1763355756880876 0.2427050983122331 0 0
-72 -0.1361971499221597 0.2673019572563597 0 0
-73 -0.09270509831268438 0.285316954888481 0 0
-74 -0.04693033951214172 0.2963065021785298 0 0
-398 -0.2990752001199439 0.02353772871828358 0 0
-399 -0.2917109761193448 0.07003360915659761 0 0
-400 -0.277163859753509 0.11480502970923 0 0
-401 -0.2557920493064547 0.1567495694144141 0 0
-402 -0.2281217896803501 0.194834414498656 0 0
-403 -0.194834414499431 0.2281217896796882 0 0
-404 -0.1567495694151313 0.2557920493060153 0 0
-405 -0.1148050297097722 0.2771638597532844 0 0
-406 -0.07003360915691879 0.2917109761192677 0 0
-407 -0.02353772871838557 0.2990752001199358 0 0
-75 0.04693033951193831 0.2963065021785621 0 0
-76 0.09270509831225777 0.2853169548886197 0 0
-77 0.1361971499215386 0.2673019572566762 0 0
-78 0.1763355756873479 0.2427050983127706 0 0
-79 0.2121320343555504 0.2121320343563781 0 0
-80 0.2427050983122078 0.1763355756881225 0 0
-81 0.2673019572563631 0.1361971499221531 0 0
-82 0.2853169548884814 0.09270509831268338 0 0
-83 0.2963065021785298 0.04693033951214185 0 0
-408 0.02353772871828261 0.299075200119944 0 0
-409 0.07003360915660113 0.2917109761193439 0 0
-410 0.1148050297092418 0.2771638597535042 0 0
-411 0.1567495694144169 0.2557920493064531 0 0
-412 0.1948344144986518 0.2281217896803538 0 0
-413 0.2281217896796723 0.1948344144994497 0 0
-414 0.25579204930602 0.1567495694151236 0 0
-415 0.2771638597532806 0.1148050297097817 0 0
-416 0.2917109761192712 0.07003360915690404 0 0
-417 0.2990752001199352 0.02353772871839455 0 0
-84 0.2963065021785621 -0.04693033951193831 0 0
-85 0.2853169548886197 -0.09270509831225777 0 0
-86 0.2673019572566762 -0.1361971499215386 0 0
-87 0.2427050983127706 -0.1763355756873479 0 0
-88 0.2121320343563781 -0.2121320343555504 0 0
-89 0.1763355756881225 -0.2427050983122078 0 0
-90 0.1361971499221531 -0.2673019572563631 0 0
-91 0.09270509831268338 -0.2853169548884814 0 0
-92 0.04693033951214185 -0.2963065021785298 0 0
-418 0.299075200119944 -0.02353772871828261 0 0
-419 0.2917109761193439 -0.07003360915660113 0 0
-420 0.2771638597535042 -0.1148050297092418 0 0
-421 0.2557920493064531 -0.1567495694144169 0 0
-422 0.2281217896803538 -0.1948344144986518 0 0
-423 0.1948344144994497 -0.2281217896796723 0 0
-424 0.1567495694151236 -0.25579204930602 0 0
-425 0.1148050297097817 -0.2771638597532806 0 0
-426 0.07003360915690404 -0.2917109761192712 0 0
-427 0.02353772871839455 -0.2990752001199352 0 0
-93 -0.04693033951193976 -0.2963065021785618 0 0
-94 -0.09270509831225152 -0.2853169548886216 0 0
-95 -0.1361971499215198 -0.2673019572566858 0 0
-96 -0.1763355756873411 -0.2427050983127755 0 0
-97 -0.2121320343555746 -0.2121320343563539 0 0
-98 -0.2427050983122331 -0.1763355756880876 0 0
-99 -0.2673019572563597 -0.1361971499221597 0 0
-100 -0.285316954888481 -0.09270509831268438 0 0
-101 -0.2963065021785298 -0.04693033951214172 0 0
-428 -0.02353772871828358 -0.2990752001199439 0 0
-429 -0.07003360915659761 -0.2917109761193448 0 0
-430 -0.11480502970923 -0.277163859753509 0 0
-431 -0.1567495694144141 -0.2557920493064547 0 0
-432 -0.194834414498656 -0.2281217896803501 0 0
-433 -0.2281217896796882 -0.194834414499431 0 0
-434 -0.2557920493060153 -0.1567495694151313 0 0
-435 -0.2771638597532844 -0.1148050297097722 0 0
-436 -0.2917109761192677 -0.07003360915691879 0 0
-437 -0.2990752001199358 -0.02353772871838557 0 0
-102 0.2976128756863607 0.3438233958265596 0 0
-103 0.3438233958265599 -0.2976128756863605 0 0
-104 -0.3438233958265542 0.2976128756863772 0 0
-105 -0.2976128756863773 -0.3438233958265542 0 0
-106 -0.3658199316021812 -0.2357183067822589 0 0
-107 -0.2357183067822588 0.3658199316021811 0 0
-108 0.2357183067822882 -0.3658199316021781 0 0
-109 0.3658199316021781 0.235718306782288 0 0
-110 -0.3869893628278939 0.1593082504507001 0 0
-111 -0.1593082504507002 -0.3869893628278938 0 0
-112 0.1593082504507105 0.3869893628278935 0 0
-113 0.3869893628278936 -0.1593082504507103 0 0
-114 0.09260554770520583 -0.4050229820193118 0 0
-115 0.4050229820193117 0.09260554770520572 0 0
-116 -0.09260554770520212 0.4050229820193072 0 0
-117 -0.4050229820193072 -0.09260554770520246 0 0
-118 0.03274250429275821 0.4061698672533651 0 0
-119 0.4061698672533651 -0.03274250429275841 0 0
-120 -0.406169867253365 0.03274250429275905 0 0
-121 -0.03274250429275914 -0.406169867253365 0 0
-122 0.3193413284160062 -0.3944650720776799 0 0
-123 0.39446507207768 0.319341328416006 0 0
-124 -0.3193413284159798 0.3944650720776839 0 0
-125 -0.3944650720776841 -0.31934132841598 0 0
-126 0.2472286174155229 -0.2853673567695257 0 0
-127 0.2853673567695257 0.2472286174155228 0 0
-128 -0.2853673567695424 -0.2472286174154936 0 0
-129 -0.2472286174154935 0.2853673567695423 0 0
-130 0.3185917792774567 -0.2136535511359512 0 0
-131 0.2136535511359514 0.3185917792774567 0 0
-132 -0.213653551135953 -0.3185917792774673 0 0
-133 -0.3185917792774673 0.2136535511359528 0 0
-134 0.351416271885539 0.4082299730693547 0 0
-135 0.4082299730693548 -0.351416271885539 0 0
-136 -0.4082299730693374 0.3514162718855596 0 0
-137 -0.3514162718855597 -0.4082299730693375 0 0
-138 -0.4130504522170933 0.2403157457767974 0 0
-139 -0.2403157457767976 -0.4130504522170934 0 0
-140 0.2403157457767989 0.413050452217104 0 0
-141 0.4130504522171042 -0.2403157457767984 0 0
-142 -0.1521594365015742 0.3423514592071319 0 0
-143 -0.342351459207132 -0.1521594365015745 0 0
-144 0.1521594365015861 -0.3423514592071376 0 0
-145 0.3423514592071374 0.152159436501586 0 0
-146 0.1671041200147039 -0.4179513459738288 0 0
-147 0.4179513459738285 0.1671041200147037 0 0
-148 -0.1671041200146819 0.417951345973791 0 0
-149 -0.4179513459737911 -0.1671041200146822 0 0
-150 -0.08499329528049787 -0.3540225532920613 0 0
-151 -0.3540225532920613 0.08499329528049787 0 0
-152 0.0849932952805013 0.3540225532920622 0 0
-153 0.3540225532920622 -0.0849932952805013 0 0
-154 -0.0285655580411626 0.3629598288735253 0 0
-155 0.3629598288735255 0.02856555804116265 0 0
-156 -0.3629598288735258 -0.02856555804116251 0 0
-157 0.02856555804116255 -0.3629598288735258 0 0
-158 -0.09854262346762482 -0.4312116810030627 0 0
-159 -0.4312116810030627 0.09854262346762471 0 0
-160 0.4312116810030634 -0.09854262346762385 0 0
-161 0.09854262346762385 0.4312116810030634 0 0
-162 0.2863941728550313 -0.3337925263882989 0 0
-163 0.333792526388299 0.2863941728550311 0 0
-164 -0.2863941728550068 0.3337925263883137 0 0
-165 -0.3337925263883139 -0.2863941728550068 0 0
-166 0.4341063111766396 0.262251156333017 0 0
-167 0.2622511563330173 -0.4341063111766396 0 0
-168 -0.2622511563329954 0.4341063111766404 0 0
-169 -0.4341063111766404 -0.2622511563329954 0 0
-170 -0.3285797405736567 0.1271985513199089 0 0
-171 -0.1271985513199089 -0.3285797405736567 0 0
-172 0.1271985513199187 0.3285797405736535 0 0
-173 0.3285797405736535 -0.1271985513199187 0 0
-174 0.4382621631365854 0.03293511283444112 0 0
-175 0.03293511283444132 -0.4382621631365857 0 0
-176 -0.03293511283444148 0.4382621631365855 0 0
-177 -0.4382621631365857 -0.03293511283444176 0 0
-178 0.4511746832191377 0.4008117690436821 0 0
-179 0.4008117690436822 -0.4511746832191379 0 0
-180 -0.4008117690436742 0.4511746832191524 0 0
-181 -0.4511746832191524 -0.4008117690436743 0 0
-182 0.1847341130578008 -0.2919275361989445 0 0
-183 0.2919275361989445 0.1847341130578007 0 0
-184 -0.1847341130577764 0.2919275361989517 0 0
-185 -0.2919275361989517 -0.1847341130577765 0 0
-186 0.2605518249706062 -0.2271045764517622 0 0
-187 0.2271045764517622 0.2605518249706061 0 0
-188 -0.2605518249705924 0.2271045764517749 0 0
-189 -0.227104576451775 -0.2605518249705925 0 0
-190 0.08216618960374746 -0.3407239368113333 0 0
-191 0.3407239368113331 0.08216618960374741 0 0
-192 -0.08216618960374694 0.3407239368113317 0 0
-193 -0.3407239368113317 -0.08216618960374697 0 0
-194 0.02715906882733193 0.3450886889649151 0 0
-195 0.3450886889649151 -0.02715906882733193 0 0
-196 -0.02715906882733281 -0.3450886889649146 0 0
-197 -0.3450886889649147 0.02715906882733281 0 0
-198 -0.2006222855842369 -0.4411604369627216 0 0
-199 -0.4411604369627216 0.2006222855842368 0 0
-200 0.2006222855842401 0.441160436962723 0 0
-201 0.4411604369627231 -0.2006222855842399 0 0
-202 -0.4313177261924054 0.2984436908951634 0 0
-203 -0.2984436908951636 -0.4313177261924054 0 0
-204 0.4313177261924121 -0.2984436908951518 0 0
-205 0.2984436908951519 0.431317726192412 0 0
-206 0.2985640856234482 -0.2689496666993785 0 0
-207 0.2689496666993785 0.2985640856234481 0 0
-208 -0.2689496666994063 -0.2985640856234297 0 0
-209 -0.2985640856234297 0.2689496666994061 0 0
-210 -0.1763926459347944 -0.2921251006128341 0 0
-211 -0.2921251006128342 0.1763926459347943 0 0
-212 0.1763926459348017 0.2921251006128286 0 0
-213 0.2921251006128286 -0.1763926459348016 0 0
-214 -0.1168486455222268 0.4453146575376071 0 0
-215 -0.4453146575376072 -0.1168486455222271 0 0
-216 0.1168486455222277 -0.4453146575376072 0 0
-217 0.4453146575376073 0.1168486455222278 0 0
-218 0.3992328269702413 0.4414452957423528 0 0
-219 0.4414452957423529 -0.3992328269702414 0 0
-220 -0.4414452957423448 0.3992328269702546 0 0
-221 -0.3992328269702546 -0.4414452957423448 0 0
-222 0.2127001936694901 0.3735111599834766 0 0
-223 0.3735111599834767 -0.2127001936694898 0 0
-224 -0.2127001936694798 -0.3735111599834826 0 0
-225 -0.3735111599834827 0.2127001936694795 0 0
-226 0.3536365243034468 -0.3493868496222119 0 0
-227 0.349386849622212 0.3536365243034468 0 0
-228 -0.3536365243034386 0.3493868496222288 0 0
-229 -0.3493868496222289 -0.3536365243034388 0 0
-230 -0.4491447100744376 0.01411158003312582 0 0
-231 0.4491447100744378 -0.0141115800331266 0 0
-232 0.0141115800331259 0.4491447100744378 0 0
-233 -0.01411158003312633 -0.4491447100744376 0 0
-234 0.2518473204175981 0.216196433097686 0 0
-235 0.2161964330976861 -0.2518473204175981 0 0
-236 -0.2518473204176154 -0.2161964330976608 0 0
-237 -0.2161964330976608 0.2518473204176153 0 0
-238 0.3349521015712314 -0.4495111961210611 0 0
-239 0.4495111961210611 0.3349521015712313 0 0
-240 -0.3349521015712228 0.4495111961210635 0 0
-241 -0.4495111961210636 -0.3349521015712228 0 0
-242 -0.2097585829029079 0.451275154547815 0 0
-243 -0.451275154547815 -0.209758582902908 0 0
-244 0.451275154547812 0.2097585829029444 0 0
-245 0.2097585829029447 -0.4512751545478119 0 0
-246 -0.3055243688724512 -0.1295923974795884 0 0
-247 -0.1295923974795883 0.3055243688724512 0 0
-248 0.1295923974795942 -0.305524368872452 0 0
-249 0.3055243688724518 0.1295923974795941 0 0
-250 0.268370396066007 -0.3847394215802594 0 0
-251 0.3847394215802595 0.2683703960660067 0 0
-252 -0.268370396065984 0.3847394215802622 0 0
-253 -0.3847394215802623 -0.268370396065984 0 0
-254 -0.1772256790845458 -0.340454802198597 0 0
-255 -0.3404548021985971 0.1772256790845456 0 0
-256 0.1772256790845546 0.3404548021985933 0 0
-257 0.3404548021985934 -0.1772256790845544 0 0
-258 -0.3436816764651542 0.2530312319765282 0 0
-259 -0.2530312319765284 -0.3436816764651542 0 0
-260 0.2530312319765179 0.3436816764651526 0 0
-261 0.3436816764651529 -0.2530312319765177 0 0
-262 -0.4497857874410114 0.1387005658852932 0 0
-263 -0.1387005658852933 -0.4497857874410113 0 0
-264 0.449785787441012 -0.1387005658852944 0 0
-265 0.1387005658852947 0.4497857874410119 0 0
-266 0.385362219884707 -0.3142243060120655 0 0
-267 0.3142243060120656 0.3853622198847066 0 0
-268 -0.385362219884704 0.3142243060120813 0 0
-269 -0.3142243060120814 -0.385362219884704 0 0
-270 -0.4564699538406921 0.06152753573091185 0 0
-271 -0.06152753573091208 -0.4564699538406923 0 0
-272 0.4564699538406928 -0.06152753573091118 0 0
-273 0.06152753573091077 0.4564699538406926 0 0
-274 0.3263037667334781 0.2212075419835406 0 0
-275 0.2212075419835408 -0.326303766733478 0 0
-276 -0.2212075419835016 0.3263037667334912 0 0
-277 -0.3263037667334912 -0.2212075419835017 0 0
-278 0.1349298665238687 -0.3861753611926261 0 0
-279 0.1869355524200216 -0.3744134770093779 0 0
-280 0.386175361192626 0.1349298665238687 0 0
-281 0.3744134770093779 0.1869355524200215 0 0
-282 -0.1349298665238549 0.3861753611926105 0 0
-283 -0.1869355524199963 0.3744134770093717 0 0
-284 -0.3861753611926105 -0.1349298665238551 0 0
-285 -0.3744134770093717 -0.1869355524199965 0 0
-286 0.1135979267251047 0.3907528924949697 0 0
-287 0.3907528924949698 -0.1135979267251046 0 0
-288 -0.1135979267251008 -0.39075289249497 0 0
-289 -0.39075289249497 0.1135979267251007 0 0
-290 0.456198599000824 -0.343151891283705 0 0
-291 0.3431518912837049 0.4561985990008239 0 0
-292 -0.4561985990008176 0.3431518912837141 0 0
-293 -0.3431518912837141 -0.4561985990008176 0 0
-294 -0.2570474677826419 -0.4579299359148114 0 0
-295 -0.4579299359148115 0.2570474677826418 0 0
-296 0.4579299359148162 -0.2570474677826353 0 0
-297 0.2570474677826354 0.4579299359148162 0 0
-298 0.4553618635342114 0.455361863534089 0 0
-299 0.4553618635340894 -0.4553618635342119 0 0
-300 -0.4553618635342376 -0.4553618635341151 0 0
-301 -0.4553618635341152 0.4553618635342376 0 0
-302 -0.318273609027202 0.07641073310298986 0 0
-303 -0.07641073310298986 -0.318273609027202 0 0
-304 0.07641073310299251 0.3182736090272009 0 0
-305 0.3182736090272009 -0.07641073310299251 0 0
-306 0.326308404911571 0.02568102841779958 0 0
-307 -0.02568102841779951 0.3263084049115709 0 0
-308 0.02568102841779948 -0.326308404911571 0 0
-309 -0.3263084049115711 -0.02568102841779944 0 0
-310 0.4542955572480689 0.07224131456710739 0 0
-311 0.07224131456710754 -0.4542955572480691 0 0
-312 -0.07224131456710686 0.4542955572480688 0 0
-313 -0.4542955572480688 -0.07224131456710738 0 0
-314 -0.07284427394657993 -0.3939282298321343 0 0
-315 -0.3939282298321343 0.07284427394657983 0 0
-316 0.07284427394657889 0.3939282298321337 0 0
-317 0.3939282298321337 -0.07284427394657889 0 0
-318 -0.404717606981677 -0.2216896857531375 0 0
-319 -0.2216896857531374 0.4047176069816768 0 0
-320 0.4047176069816826 0.2216896857531635 0 0
-321 0.2216896857531637 -0.4047176069816826 0 0
-322 0.008904462313015143 -0.3997666310557169 0 0
-323 -0.3997666310557169 -0.008904462313015215 0 0
-324 0.3997666310557162 0.008904462313015511 0 0
-325 -0.008904462313015764 0.3997666310557164 0 0
-326 0.3839179616148227 -0.2722398726914085 0 0
-327 0.2722398726914086 0.3839179616148221 0 0
-328 -0.2722398726914255 -0.3839179616148369 0 0
-329 -0.3839179616148371 0.2722398726914254 0 0
-330 0.374563678309362 -0.3969152678293756 0 0
-331 0.3969152678293756 0.3745636783093619 0 0
-332 -0.3745636783093398 0.3969152678293885 0 0
-333 -0.3969152678293885 -0.37456367830934 0 0
-334 0.3944457125295155 0.05390584111545343 0 0
-335 0.05390584111545379 -0.3944457125295159 0 0
-336 -0.05390584111545403 0.3944457125295153 0 0
-337 -0.3944457125295154 -0.05390584111545441 0 0
-438 0.1171628130526668 -0.3415376980092354 0 0
-439 0.1085480280638081 -0.3634496490019797 0 0
-440 0.1435446515127274 -0.3642634101998818 0 0
-441 0.3415376980092353 0.1171628130526667 0 0
-442 0.3634496490019795 0.108548028063808 0 0
-443 0.3642634101998817 0.1435446515127273 0 0
-444 -0.3415376980092318 -0.1171628130526607 0 0
-445 -0.3634496490019711 -0.1085480280638011 0 0
-446 -0.3642634101998713 -0.1435446515127148 0 0
-447 -0.1171628130526606 0.3415376980092318 0 0
-448 -0.1085480280638009 0.3634496490019711 0 0
-449 -0.1435446515127145 0.3642634101998712 0 0
-450 -0.4183875751344526 0.1490044081679966 0 0
-451 -0.4202693399679907 0.1261492463051969 0 0
-452 -0.3888711276614319 0.1364530885879004 0 0
-453 -0.1490044081679967 -0.4183875751344526 0 0
-454 -0.1261492463051971 -0.4202693399679907 0 0
-455 -0.1364530885879005 -0.3888711276614319 0 0
-456 0.4183875751344528 -0.1490044081680024 0 0
-457 0.4202693399679909 -0.1261492463051995 0 0
-458 0.3888711276614317 -0.1364530885879074 0 0
-459 0.1490044081680026 0.4183875751344527 0 0
-460 0.1261492463051997 0.4202693399679908 0 0
-461 0.1364530885879076 0.3888711276614316 0 0
-462 0.3343276129703078 0.1866834892425633 0 0
-463 0.3091156514662112 0.2029708275206707 0 0
-464 0.317139497703041 0.1684467747796933 0 0
-465 0.1866834892425634 -0.3343276129703078 0 0
-466 0.2029708275206707 -0.3091156514662112 0 0
-467 0.1684467747796934 -0.3171394977030411 0 0
-468 -0.1866834892425379 0.3343276129703115 0 0
-469 -0.202970827520639 0.3091156514662214 0 0
-470 -0.1684467747796753 0.3171394977030418 0 0
-471 -0.3343276129703116 -0.1866834892425381 0 0
-472 -0.3091156514662214 -0.2029708275206391 0 0
-473 -0.3171394977030418 -0.1684467747796755 0 0
-474 0.1408759169905902 -0.3239379140397948 0 0
-475 0.1058792935416708 -0.3231241528418927 0 0
-476 0.3239379140397947 0.14087591699059 0 0
-477 0.3231241528418924 0.1058792935416708 0 0
-478 -0.3239379140397916 -0.1408759169905814 0 0
-479 -0.3231241528418914 -0.1058792935416677 0 0
-480 -0.1408759169905812 0.3239379140397916 0 0
-481 -0.1058792935416676 0.3231241528418914 0 0
-482 -0.1060702750963628 -0.4109822867490164 0 0
-483 -0.1186215946764591 -0.440498734222037 0 0
-484 -0.4109822867490163 0.1060702750963627 0 0
-485 -0.440498734222037 0.1186215946764589 0 0
-486 0.4109822867490166 -0.1060702750963642 0 0
-487 0.4404987342220377 -0.1186215946764591 0 0
-488 0.1060702750963643 0.4109822867490165 0 0
-489 0.1186215946764593 0.4404987342220377 0 0
-490 0.3583824681082577 0.1695474944608037 0 0
-491 0.350358621871428 0.2040715472017811 0 0
-492 0.1695474944608039 -0.3583824681082577 0 0
-493 0.2040715472017812 -0.350358621871428 0 0
-494 -0.1695474944607853 0.3583824681082518 0 0
-495 -0.2040715472017489 0.3503586218714314 0 0
-496 -0.3583824681082518 -0.1695474944607855 0 0
-497 -0.3503586218714314 -0.2040715472017491 0 0
-498 0.3095799415789123 0.266811395135277 0 0
-499 0.3013710965438388 0.2924791292392396 0 0
-500 0.2771585117344521 0.2728963515194854 0 0
-501 0.2668113951352771 -0.3095799415789123 0 0
-502 0.2924791292392397 -0.3013710965438388 0 0
-503 0.2728963515194855 -0.2771585117344522 0 0
-504 -0.2668113951352502 0.309579941578928 0 0
-505 -0.2924791292392183 0.30137109654386 0 0
-506 -0.2728963515194616 0.2771585117344742 0 0
-507 -0.3095799415789281 -0.2668113951352502 0 0
-508 -0.3013710965438601 -0.2924791292392183 0 0
-509 -0.2771585117344744 -0.2728963515194617 0 0
-510 -0.1668853933402113 0.4589756729868955 0 0
-511 -0.1419763827684544 0.4316330017556991 0 0
-512 -0.1417576560939837 0.4726573287688036 0 0
-513 -0.4589756729868956 -0.1668853933402114 0 0
-514 -0.4316330017556991 -0.1419763827684546 0 0
-515 -0.4726573287688036 -0.1417576560939839 0 0
-516 0.4589756729869142 0.1668853933402221 0 0
-517 0.4316330017557179 0.1419763827684657 0 0
-518 0.4726573287688036 0.1417576560939842 0 0
-519 0.1668853933402222 -0.4589756729869144 0 0
-520 0.1419763827684658 -0.431633001755718 0 0
-521 0.1417576560939841 -0.4726573287688036 0 0
-522 0.1604656314899769 -0.2796147467276539 0 0
-523 0.1805348443729616 -0.2673163172555761 0 0
-524 0.2796147467276538 0.1604656314899769 0 0
-525 0.2673163172555761 0.1805348443729616 0 0
-526 -0.2796147467276557 -0.1604656314899681 0 0
-527 -0.2673163172555924 -0.180534844372932 0 0
-528 -0.160465631489968 0.2796147467276557 0 0
-529 -0.180534844372932 0.2673163172555924 0 0
-530 0.1328947737008737 -0.2864131630644076 0 0
-531 0.1571632552686975 -0.2987259525356982 0 0
-532 0.2864131630644074 0.1328947737008736 0 0
-533 0.2987259525356981 0.1571632552686974 0 0
-534 -0.2864131630644055 -0.132894773700874 0 0
-535 -0.2987259525357014 -0.1571632552686824 0 0
-536 -0.132894773700874 0.2864131630644055 0 0
-537 -0.1571632552686824 0.2987259525357014 0 0
-538 -0.2610562398186328 0.3498062289952474 0 0
-539 -0.2538008574192542 0.3300481465609024 0 0
-540 -0.2284629243828802 0.3460618491678361 0 0
-541 -0.3498062289952475 -0.2610562398186329 0 0
-542 -0.3300481465609025 -0.2538008574192543 0 0
-543 -0.3460618491678362 -0.2284629243828803 0 0
-544 0.2610562398186597 -0.3498062289952385 0 0
-545 0.253800857419286 -0.3300481465608884 0 0
-546 0.2284629243829145 -0.346061849167828 0 0
-547 0.3498062289952386 0.2610562398186596 0 0
-548 0.3300481465608885 0.2538008574192859 0 0
-549 0.3460618491678281 0.2284629243829143 0 0
-550 0.3955991716059688 0.1137677071145372 0 0
-551 0.3728734594153224 0.08738586865447656 0 0
-552 0.1137677071145373 -0.3955991716059689 0 0
-553 0.08738586865447664 -0.3728734594153226 0 0
-554 -0.3955991716059589 -0.1137677071145288 0 0
-555 -0.3728734594153195 -0.08738586865447472 0 0
-556 -0.1137677071145285 0.3955991716059588 0 0
-557 -0.08738586865447454 0.3728734594153195 0 0
-558 0.2342180796995318 -0.3058355617515018 0 0
-559 0.3058355617515018 0.2342180796995317 0 0
-560 -0.2342180796994975 0.3058355617515167 0 0
-561 -0.3058355617515168 -0.2342180796994977 0 0
-562 0.4140748998953083 -0.1799652680174751 0 0
-563 0.4454731122018675 -0.1696614257347672 0 0
-564 0.1799652680174753 0.4140748998953083 0 0
-565 0.1696614257347674 0.4454731122018675 0 0
-566 -0.4140748998953077 0.1799652680174684 0 0
-567 -0.4454731122018665 0.169661425734765 0 0
-568 -0.1799652680174685 -0.4140748998953077 0 0
-569 -0.1696614257347651 -0.4454731122018665 0 0
-570 0.2832812711928696 0.3211937407250038 0 0
-571 0.3157027010373298 0.3151087843407954 0 0
-572 0.3211937407250041 -0.2832812711928695 0 0
-573 0.3151087843407956 -0.3157027010373297 0 0
-574 -0.2832812711928918 -0.321193740724992 0 0
-575 -0.3157027010373455 -0.3151087843407805 0 0
-576 -0.321193740724992 0.2832812711928916 0 0
-577 -0.3151087843407805 0.3157027010373454 0 0
-578 -0.2811255781662199 0.4670531555883202 0 0
-579 -0.2477922448327939 0.4670531555883202 0 0
-580 -0.4670531555883202 -0.2811255781662199 0 0
-581 -0.4670531555883202 -0.2477922448327939 0 0
-582 0.4670531555883198 0.2811255781662306 0 0
-583 0.4670531555883198 0.2477922448328047 0 0
-584 0.2811255781662307 -0.4670531555883198 0 0
-585 0.2477922448328048 -0.4670531555883198 0 0
-586 -0.4170725511884111 0.4755873416095762 0 0
-587 -0.3837392178549852 0.4755873416095762 0 0
-588 -0.4755873416095762 -0.4170725511884112 0 0
-589 -0.4755873416095762 -0.3837392178549853 0 0
-590 0.4755873416095688 0.4170725511884151 0 0
-591 0.4755873416095688 0.3837392178549892 0 0
-592 0.4170725511884151 -0.4755873416095689 0 0
-593 0.3837392178549892 -0.4755873416095689 0 0
-594 -0.1882126247843242 0.4756375772739075 0 0
-595 -0.1884313514587949 0.434613250260803 0 0
-596 -0.4756375772739075 -0.1882126247843243 0 0
-597 -0.4346132502608031 -0.1884313514587951 0 0
-598 0.475637577273906 0.1882126247843425 0 0
-599 0.4346132502608203 0.1884313514588241 0 0
-600 0.1882126247843427 -0.475637577273906 0 0
-601 0.1884313514588243 -0.4346132502608204 0 0
-602 -0.1316978506207143 -0.2979408489151713 0 0
-603 -0.1099518248160802 -0.3069483477311392 0 0
-604 -0.2979408489151713 0.1316978506207143 0 0
-605 -0.3069483477311392 0.1099518248160802 0 0
-606 0.1316978506207286 0.2979408489151649 0 0
-607 0.1099518248160882 0.3069483477311366 0 0
-608 0.2979408489151649 -0.1316978506207286 0 0
-609 0.3069483477311366 -0.1099518248160882 0 0
-610 -0.4747555980605318 -0.3174760507853335 0 0
-611 -0.441808753648852 -0.2986016289521091 0 0
-612 -0.3174760507853335 0.4747555980605317 0 0
-613 -0.2986016289521091 0.441808753648852 0 0
-614 0.4747555980605305 0.3174760507853378 0 0
-615 0.4418087536488503 0.2986016289521242 0 0
-616 0.3174760507853378 -0.4747555980605305 0 0
-617 0.2986016289521243 -0.4418087536488503 0 0
-618 -0.4142856916271622 -0.2907962423744877 0 0
-619 -0.4219881340993739 -0.3271467149936014 0 0
-620 -0.2907962423744876 0.4142856916271622 0 0
-621 -0.3271467149936013 0.4219881340993737 0 0
-622 0.4142856916271598 0.2907962423745115 0 0
-623 0.4219881340993705 0.3271467149936187 0 0
-624 0.2907962423745117 -0.4142856916271598 0 0
-625 0.3271467149936188 -0.4219881340993705 0 0
-626 0.1860042220601003 0.3802502614056851 0 0
-627 0.2066612396268651 0.4073357984730998 0 0
-628 0.3802502614056852 -0.1860042220601001 0 0
-629 0.4073357984730999 -0.2066612396268649 0 0
-630 -0.18600422206009 -0.3802502614056882 0 0
-631 -0.2066612396268583 -0.4073357984731021 0 0
-632 -0.3802502614056883 0.1860042220600898 0 0
-633 -0.4073357984731021 0.2066612396268582 0 0
-634 -0.2169778094591555 -0.4705802184813608 0 0
-635 -0.2288348766834394 -0.4495451864387665 0 0
-636 -0.2451904005583579 -0.4789649679574057 0 0
-637 -0.4705802184813608 0.2169778094591554 0 0
-638 -0.4495451864387665 0.2288348766834393 0 0
-639 -0.4789649679574057 0.2451904005583579 0 0
-640 0.4705802184813616 -0.216977809459157 0 0
-641 0.4495451864387696 -0.2288348766834376 0 0
-642 0.4789649679574081 -0.2451904005583546 0 0
-643 0.2169778094591571 0.4705802184813615 0 0
-644 0.2288348766834378 0.4495451864387696 0 0
-645 0.2451904005583547 0.4789649679574081 0 0
-646 0.2538902211930645 -0.256235966610644 0 0
-647 0.2383741290341462 -0.2394759484346802 0 0
-648 0.2317125252566045 -0.2686073385935619 0 0
-649 0.256235966610644 0.2538902211930645 0 0
-650 0.2394759484346802 0.2383741290341461 0 0
-651 0.2686073385935619 0.2317125252566044 0 0
-652 -0.2562359666106587 -0.2538902211930431 0 0
-653 -0.2394759484346952 -0.2383741290341267 0 0
-654 -0.2686073385935789 -0.2317125252565772 0 0
-655 -0.253890221193043 0.2562359666106586 0 0
-656 -0.2383741290341266 0.2394759484346951 0 0
-657 -0.2317125252565772 0.2686073385935788 0 0
-658 0.3997343472744136 0.07325569441032959 0 0
-659 0.4243706348887922 0.06307357784128041 0 0
-660 0.4296592696336903 0.08242343113615655 0 0
-661 0.07325569441032981 -0.3997343472744139 0 0
-662 0.06307357784128066 -0.4243706348887926 0 0
-663 0.08242343113615669 -0.4296592696336905 0 0
-664 -0.07325569441032807 0.3997343472744113 0 0
-665 -0.06307357784128045 0.424370634888792 0 0
-666 -0.0824234311361545 0.429659269633688 0 0
-667 -0.3997343472744113 -0.07325569441032843 0 0
-668 -0.4243706348887921 -0.0630735778412809 0 0
-669 -0.429659269633688 -0.08242343113615491 0 0
-670 0.2480271215755704 0.2795579552970271 0 0
-671 0.2795579552970272 -0.2480271215755704 0 0
-672 -0.2480271215755907 -0.2795579552970111 0 0
-673 -0.2795579552970111 0.2480271215755905 0 0
-674 0.2196183054036563 0.2363419296634922 0 0
-675 0.2017200760695551 0.2516284616416883 0 0
-676 0.2363419296634922 -0.2196183054036563 0 0
-677 0.2516284616416884 -0.2017200760695551 0 0
-678 -0.2196183054036748 -0.2363419296634732 0 0
-679 -0.2017200760695581 -0.251628461641684 0 0
-680 -0.2363419296634732 0.2196183054036747 0 0
-681 -0.251628461641684 0.201720076069558 0 0
-682 0.06454826455794466 -0.3185152194949316 0 0
-683 0.08743564395821542 -0.3130204458499073 0 0
-684 0.3185152194949314 0.06454826455794463 0 0
-685 0.3130204458499072 0.0874356439582154 0 0
-686 -0.06454826455794432 0.3185152194949308 0 0
-687 -0.08743564395821565 0.3130204458499063 0 0
-688 -0.3185152194949308 -0.06454826455794435 0 0
-689 -0.3130204458499064 -0.08743564395821568 0 0
-690 -0.07891878461353891 -0.3739753915620978 0 0
-691 -0.05000167138695637 -0.3695084593985244 0 0
-692 -0.05607618205391535 -0.349555621128488 0 0
-693 -0.3739753915620978 0.07891878461353885 0 0
-694 -0.3695084593985245 0.05000167138695633 0 0
-695 -0.349555621128488 0.05607618205391535 0 0
-696 0.0789187846135401 0.373975391562098 0 0
-697 0.05000167138695541 0.3695084593985244 0 0
-698 0.05607618205391662 0.3495556211284886 0 0
-699 0.373975391562098 -0.0789187846135401 0 0
-700 0.3695084593985244 -0.05000167138695541 0 0
-701 0.3495556211284886 -0.05607618205391662 0 0
-702 -0.27971352893476 0.156294897928157 0 0
-703 -0.3103524205932455 0.1517955986273516 0 0
-704 -0.1562948979281571 -0.27971352893476 0 0
-705 -0.1517955986273516 -0.3103524205932454 0 0
-706 0.1562948979281701 0.2797135289347524 0 0
-707 0.1517955986273602 0.3103524205932411 0 0
-708 0.2797135289347524 -0.1562948979281701 0 0
-709 0.3103524205932411 -0.1517955986273601 0 0
-710 0.3752796765912188 0.2520443514241474 0 0
-711 0.3592659739842792 0.2773822844605189 0 0
-712 0.2520443514241476 -0.3752796765912187 0 0
-713 0.2773822844605192 -0.3592659739842792 0 0
-714 -0.2520443514241214 0.3752796765912216 0 0
-715 -0.2773822844604954 0.3592659739842879 0 0
-716 -0.3752796765912217 -0.2520443514241214 0 0
-717 -0.3592659739842881 -0.2773822844604954 0 0
-718 0.2204690156805195 0.4271054445899135 0 0
-719 0.2265079697231445 0.3932808061002903 0 0
-720 0.4271054445899136 -0.2204690156805192 0 0
-721 0.3932808061002905 -0.2265079697231441 0 0
-722 -0.2204690156805172 -0.4271054445899075 0 0
-723 -0.2265079697231387 -0.393280806100288 0 0
-724 -0.4271054445899074 0.2204690156805171 0 0
-725 -0.393280806100288 0.2265079697231385 0 0
-726 -0.4705802184813608 0.1836444761259146 0 0
-727 -0.1836444761259147 -0.4705802184813608 0 0
-728 0.4705802184813616 -0.1836444761259162 0 0
-729 0.1836444761259163 0.4705802184813615 0 0
-730 0.0007032446069148678 -0.3540242589192202 0 0
-731 -0.009127303257158836 -0.3724276600103157 0 0
-732 0.01873501017708885 -0.3813632299646214 0 0
-733 0.3540242589192203 0.000703244606915357 0 0
-734 0.3724276600103157 -0.009127303257158211 0 0
-735 0.3813632299646209 0.01873501017708908 0 0
-736 -0.3540242589192203 -0.0007032446069148469 0 0
-737 -0.3724276600103158 0.009127303257158801 0 0
-738 -0.3813632299646214 -0.01873501017708886 0 0
-739 -0.0007032446069153327 0.3540242589192202 0 0
-740 0.009127303257158083 0.3724276600103157 0 0
-741 -0.01873501017708918 0.3813632299646209 0 0
-742 0.3200153485792391 -0.3415896880052554 0 0
-743 0.3487299600650033 -0.3234998626542862 0 0
-744 0.3415896880052555 0.320015348579239 0 0
-745 0.3234998626542863 0.3487299600650032 0 0
-746 -0.3415896880052714 -0.3200153485792228 0 0
-747 -0.3234998626543031 -0.3487299600649965 0 0
-748 -0.3200153485792227 0.3415896880052712 0 0
-749 -0.3487299600649965 0.323499862654303 0 0
-750 0.1018046422114556 0.3234266748004272 0 0
-751 0.08455791570762514 0.3017952819579103 0 0
-752 0.3234266748004272 -0.1018046422114556 0 0
-753 0.3017952819579103 -0.08455791570762514 0 0
-754 -0.3234266748004294 0.1018046422114494 0 0
-755 -0.3017952819579118 0.0845579157076207 0 0
-756 -0.1018046422114494 -0.3234266748004293 0 0
-757 -0.0845579157076207 -0.3017952819579118 0 0
-758 -0.4443475984336316 0.4776809317671188 0 0
-759 -0.4280868162888947 0.4532682733766951 0 0
-760 -0.4776809317671188 -0.4443475984336316 0 0
-761 -0.453268273376695 -0.4280868162888947 0 0
-762 0.4443475984336187 -0.4776809317671059 0 0
-763 0.4280868162888858 -0.4532682733766749 0 0
-764 0.4776809317671057 0.4443475984336185 0 0
-765 0.4532682733766746 0.4280868162888856 0 0
-766 -0.220379063793864 -0.2895718021240299 0 0
-767 -0.2413016089176797 -0.3085779324504485 0 0
-768 -0.2895718021240299 0.2203790637938638 0 0
-769 -0.3085779324504485 0.2413016089176795 0 0
-770 0.2895718021240314 -0.2203790637938567 0 0
-771 0.3085779324504525 -0.2413016089176649 0 0
-772 0.2203790637938569 0.2895718021240314 0 0
-773 0.2413016089176649 0.3085779324504524 0 0
-774 -0.2763384627917133 0.2017486111932846 0 0
-775 -0.2674150994628048 0.1763641108110677 0 0
-776 -0.2017486111932847 -0.2763384627917134 0 0
-777 -0.1763641108110677 -0.2674150994628048 0 0
-778 0.2763384627917174 -0.2017486111932819 0 0
-779 0.2674150994627996 -0.1763641108110748 0 0
-780 0.201748611193282 0.2763384627917174 0 0
-781 0.1763641108110748 0.2674150994627996 0 0
-782 -0.3596663165343134 0.1203982390225048 0 0
-783 -0.3577845517007753 0.1432534008853045 0 0
-784 -0.1203982390225049 -0.3596663165343134 0 0
-785 -0.1432534008853046 -0.3577845517007753 0 0
-786 0.1203982390225117 0.3596663165343116 0 0
-787 0.1432534008853146 0.3577845517007735 0 0
-788 0.3596663165343116 -0.1203982390225116 0 0
-789 0.3577845517007736 -0.1432534008853145 0 0
-790 -0.4354901940659524 0.2486816067797196 0 0
-791 -0.2486816067797197 -0.4354901940659524 0 0
-792 0.4354901940659602 -0.2486816067797168 0 0
-793 0.2486816067797172 0.4354901940659601 0 0
-794 -0.05279338911966953 -0.4000490485427496 0 0
-795 -0.06718590483874601 -0.4251990918364132 0 0
-796 -0.04713502001183561 -0.4313199105470287 0 0
-797 -0.4000490485427496 0.05279338911966944 0 0
-798 -0.4251990918364131 0.06718590483874584 0 0
-799 -0.4313199105470286 0.04713502001183545 0 0
-800 0.4000490485427494 -0.05279338911966865 0 0
-801 0.4251990918364132 -0.06718590483874504 0 0
-802 0.431319910547029 -0.0471350200118348 0 0
-803 0.05279338911966855 0.4000490485427494 0 0
-804 0.06718590483874483 0.4251990918364131 0 0
-805 0.04713502001183449 0.4313199105470288 0 0
-806 -0.4080044870258423 0.3980740473998216 0 0
-807 -0.4248376344058411 0.3753245494279072 0 0
-808 -0.3913968256893386 0.3741657698574741 0 0
-809 -0.3980740473998216 -0.4080044870258424 0 0
-810 -0.3753245494279072 -0.4248376344058412 0 0
-811 -0.3741657698574741 -0.3913968256893388 0 0
-812 0.3980740473998085 0.4080044870258573 0 0
-813 0.3753245494278902 0.4248376344058538 0 0
-814 0.3741657698574573 0.3913968256893583 0 0
-815 0.4080044870258575 -0.3980740473998085 0 0
-816 0.4248376344058539 -0.3753245494278902 0 0
-817 0.3913968256893584 -0.3741657698574573 0 0
-818 -0.3413011469328591 0.1060959233002034 0 0
-819 -0.3723877228935156 0.09929561100279929 0 0
-820 -0.1060959233002034 -0.341301146932859 0 0
-821 -0.09929561100279935 -0.3723877228935156 0 0
-822 0.10609592330021 0.3413011469328578 0 0
-823 0.09929561100280299 0.372387722893516 0 0
-824 0.3413011469328578 -0.10609592330021 0 0
-825 0.372387722893516 -0.09929561100280293 0 0
-826 -0.02995078656004597 -0.3756292781091398 0 0
-827 -0.3756292781091398 0.02995078656004593 0 0
-828 0.02995078656004507 0.3756292781091401 0 0
-829 0.37562927810914 -0.02995078656004517 0 0
-830 -0.05258821370077417 0.4462788601923272 0 0
-831 -0.04342047697494776 0.4163539378330504 0 0
-832 -0.4462788601923272 -0.05258821370077457 0 0
-833 -0.4163539378330505 -0.04342047697494809 0 0
-834 0.4462788601923272 0.05258821370077425 0 0
-835 0.4163539378330505 0.04342047697494728 0 0
-836 0.05258821370077443 -0.4462788601923274 0 0
-837 0.04342047697494755 -0.4163539378330509 0 0
-838 0.2319896773865743 0.2141642337270321 0 0
-839 0.2141642337270321 -0.2319896773865743 0 0
-840 -0.231989677386595 -0.2141642337270074 0 0
-841 -0.2141642337270074 0.2319896773865949 0 0
-842 0.03704470416963512 0.3206975955717386 0 0
-843 0.01357953441366597 0.3225443444824576 0 0
-844 0.3206975955717386 -0.03704470416963512 0 0
-845 0.3225443444824576 -0.01357953441366597 0 0
-846 -0.3206975955717383 0.03704470416963629 0 0
-847 -0.3225443444824573 0.01357953441366641 0 0
-848 -0.03704470416963628 -0.3206975955717382 0 0
-849 -0.01357953441366641 -0.3225443444824573 0 0
-850 -0.4211285323930095 0.4252037550947035 0 0
-851 -0.387687723676507 0.4240449755242705 0 0
-852 -0.4252037550947035 -0.4211285323930096 0 0
-853 -0.4240449755242705 -0.3876877236765072 0 0
-854 0.4252037550946896 0.4211285323930174 0 0
-855 0.4240449755242567 0.387687723676522 0 0
-856 0.4211285323930176 -0.4252037550946897 0 0
-857 0.3876877236765221 -0.4240449755242567 0 0
-858 0.371925960849946 0.3364889263597264 0 0
-859 0.3641287992329895 0.3028677506355186 0 0
-860 0.3364889263597265 -0.3719259608499459 0 0
-861 0.3028677506355187 -0.3641287992329894 0 0
-862 -0.3364889263597092 0.3719259608499563 0 0
-863 -0.3028677506354933 0.3641287992329988 0 0
-864 -0.3719259608499565 -0.3364889263597094 0 0
-865 -0.364128799232999 -0.3028677506354934 0 0
-866 0.2004652730777434 -0.2718874283082713 0 0
-867 0.1962660043929043 -0.247276209364903 0 0
-868 0.2718874283082713 0.2004652730777434 0 0
-869 0.247276209364903 0.1962660043929043 0 0
-870 -0.2004652730777186 0.2718874283082835 0 0
-871 -0.1962660043928742 0.2472762093649242 0 0
-872 -0.2718874283082836 -0.2004652730777187 0 0
-873 -0.2472762093649242 -0.1962660043928742 0 0
-874 -0.1111487478961363 0.2954206618804661 0 0
-875 -0.2954206618804661 -0.1111487478961364 0 0
-876 0.1111487478961388 -0.2954206618804667 0 0
-877 0.2954206618804666 0.1111487478961387 0 0
-878 -0.011919020989872 -0.4029682491545409 0 0
-879 -0.402968249154541 0.01191902098987192 0 0
-880 0.01191902098987122 0.4029682491545408 0 0
-881 0.4029682491545407 -0.01191902098987145 0 0
-882 0.3113074535450504 0.03630568396497071 0 0
-883 0.333516170861452 0.05392360901077349 0 0
-884 0.03630568396497066 -0.3113074535450504 0 0
-885 0.05392360901077347 -0.3335161708614521 0 0
-886 -0.03630568396497062 0.3113074535450503 0 0
-887 -0.05392360901077323 0.3335161708614512 0 0
-888 -0.3113074535450505 -0.03630568396497058 0 0
-889 -0.3335161708614514 -0.0539236090107732 0 0
-890 0.4691310815682927 0.03313422308323913 0 0
-891 0.4437034366055116 0.009411766400657263 0 0
-892 0.474572355037219 0.009610876649455273 0 0
-893 0.03313422308323923 -0.4691310815682929 0 0
-894 0.009411766400657499 -0.4437034366055116 0 0
-895 0.009610876649455405 -0.4745723550372188 0 0
-896 -0.03313422308323931 0.4691310815682928 0 0
-897 -0.009411766400657794 0.4437034366055116 0 0
-898 -0.009610876649455622 0.4745723550372189 0 0
-899 -0.4691310815682929 -0.03313422308323945 0 0
-900 -0.4437034366055116 -0.009411766400657971 0 0
-901 -0.4745723550372188 -0.00961087664945566 0 0
-902 0.370116704305778 0.2113269296011547 0 0
-903 0.2113269296011549 -0.370116704305778 0 0
-904 -0.2113269296011276 0.3701167043057764 0 0
-905 -0.3701167043057764 -0.2113269296011277 0 0
-906 0.4498051073928381 0.0945449800446676 0 0
-907 0.4251688197784595 0.1047270966137168 0 0
-908 0.0945449800446676 -0.4498051073928382 0 0
-909 0.1047270966137167 -0.4251688197784595 0 0
-910 -0.09454498004466684 0.449805107392838 0 0
-911 -0.1047270966137145 0.4251688197784572 0 0
-912 -0.449805107392838 -0.09454498004466726 0 0
-913 -0.4251688197784572 -0.1047270966137148 0 0
-914 0.3896022468289697 0.2938558622410063 0 0
-915 0.4094228663784495 0.2653107761995118 0 0
-916 0.2938558622410066 -0.3896022468289697 0 0
-917 0.2653107761995122 -0.4094228663784495 0 0
-918 -0.3896022468289732 -0.2938558622409819 0 0
-919 -0.4094228663784514 -0.2653107761994897 0 0
-920 -0.2938558622409819 0.389602246828973 0 0
-921 -0.2653107761994897 0.4094228663784513 0 0
-922 -0.1084243227605577 0.4726573287688036 0 0
-923 0.1084243227605582 -0.4726573287688036 0 0
-924 -0.4726573287688036 -0.1084243227605579 0 0
-925 0.4726573287688036 0.1084243227605582 0 0
-926 0.08070201419174691 0.3361480811596316 0 0
-927 0.3361480811596316 -0.08070201419174691 0 0
-928 -0.08070201419174386 -0.3361480811596317 0 0
-929 -0.3361480811596317 0.08070201419174386 0 0
-930 0.3787027707015205 0.04123569957830804 0 0
-931 0.3675848246704243 0.06803601535960042 0 0
-932 0.3518418828424292 0.05536587382245503 0 0
-933 0.04123569957830817 -0.3787027707015209 0 0
-934 0.06803601535960062 -0.3675848246704246 0 0
-935 0.055365873822455 -0.3518418828424296 0 0
-936 -0.04123569957830831 0.3787027707015203 0 0
-937 -0.06803601535960049 0.3675848246704235 0 0
-938 -0.05536587382245477 0.3518418828424285 0 0
-939 -0.3787027707015206 -0.04123569957830846 0 0
-940 -0.3675848246704235 -0.06803601535960069 0 0
-941 -0.3518418828424288 -0.05536587382245474 0 0
-942 0.3446341168925482 0.02712329322948111 0 0
-943 0.02712329322948102 -0.3446341168925484 0 0
-944 -0.02712329322948105 0.3446341168925481 0 0
-945 -0.3446341168925485 -0.02712329322948097 0 0
-946 -0.05178490096516133 -0.3316811489960583 0 0
-947 -0.3316811489960583 0.05178490096516133 0 0
-948 0.05178490096516222 0.3316811489960579 0 0
-949 0.3316811489960579 -0.05178490096516222 0 0
-950 -0.0007390202047666619 -0.3356985469382429 0 0
-951 0.335698546938243 -0.0007390202047661797 0 0
-952 0.0007390202047662144 0.335698546938243 0 0
-953 -0.3356985469382429 0.0007390202047666897 0 0
-954 0.06167053630746541 0.3072900556028815 0 0
-955 0.3072900556028815 -0.06167053630746541 0 0
-956 -0.3072900556028819 0.06167053630746481 0 0
-957 -0.06167053630746481 -0.3072900556028819 0 0
-958 0.3131542024557855 0.01284051420889979 0 0
-959 -0.01284051420889975 0.3131542024557855 0 0
-960 -0.3131542024557855 -0.01284051420889972 0 0
-961 0.01284051420889974 -0.3131542024557855 0 0
-962 -0.3053584399451508 0.1950230985353736 0 0
-963 -0.1950230985353737 -0.3053584399451507 0 0
-964 0.3053584399451427 -0.1950230985353764 0 0
-965 0.1950230985353766 0.3053584399451427 0 0
-966 -0.4656058405015313 0.09927131173436782 0 0
-967 -0.4748928937205057 0.119350282943202 0 0
-968 -0.09927131173436787 -0.4656058405015314 0 0
-969 -0.1193502829432021 -0.4748928937205057 0 0
-970 0.4656058405015317 -0.09927131173436739 0 0
-971 0.474892893720506 -0.1193502829432027 0 0
-972 0.09927131173436739 0.4656058405015317 0 0
-973 0.1193502829432028 0.4748928937205059 0 0
-974 -0.478234976920346 0.08076376786601139 0 0
-975 -0.4438408174218774 0.08003507959926828 0 0
-976 -0.0807637678660115 -0.4782349769203461 0 0
-977 -0.08003507959926845 -0.4438408174218775 0 0
-978 0.08076376786601085 0.4782349769203463 0 0
-979 0.08003507959926731 0.443840817421878 0 0
-980 0.4782349769203464 -0.08076376786601105 0 0
-981 0.4438408174218781 -0.08003507959926752 0 0
-982 -0.0378195578820192 -0.452807331957565 0 0
-983 -0.02342704216294274 -0.4276572886639013 0 0
-984 0.4528073319575653 -0.03781955788201889 0 0
-985 0.4276572886639015 -0.0234270421629425 0 0
-986 -0.4528073319575648 0.03781955788201884 0 0
-987 -0.4276572886639013 0.02342704216294244 0 0
-988 0.03781955788201834 0.4528073319575652 0 0
-989 0.02342704216294205 0.4276572886639015 0 0
-990 0.2159813652366618 -0.2886474464842351 0 0
-991 0.2886474464842351 0.2159813652366618 0 0
-992 -0.215981365236635 0.288647446484247 0 0
-993 -0.2886474464842471 -0.2159813652366351 0 0
-994 0.4503429396700994 0.3678819353074567 0 0
-995 0.4747555980605305 0.3508093841187638 0 0
-996 0.3678819353074568 -0.4503429396700995 0 0
-997 0.3508093841187638 -0.4747555980605305 0 0
-998 -0.3678819353074485 0.450342939670108 0 0
-999 -0.3508093841187595 0.4747555980605317 0 0
-1000 -0.450342939670108 -0.3678819353074486 0 0
-1001 -0.4747555980605318 -0.3508093841187595 0 0
-1002 -0.334517271386127 0.1522121152022273 0 0
-1003 -0.3637220825132455 0.1682669647676229 0 0
-1004 -0.1522121152022274 -0.3345172713861269 0 0
-1005 -0.168266964767623 -0.3637220825132454 0 0
-1006 0.1522121152022367 0.3345172713861234 0 0
-1007 0.1682669647676326 0.3637220825132434 0 0
-1008 0.3345172713861235 -0.1522121152022365 0 0
-1009 0.3637220825132436 -0.1682669647676324 0 0
-1010 -0.321122881044292 0.2609904493379671 0 0
-1011 -0.3311367278713108 0.2333423915562405 0 0
-1012 -0.2609904493379673 -0.3211228810442919 0 0
-1013 -0.2333423915562407 -0.3311367278713108 0 0
-1014 0.3211228810443005 -0.2609904493379481 0 0
-1015 0.3311367278713048 -0.2333423915562345 0 0
-1016 0.2609904493379482 0.3211228810443003 0 0
-1017 0.2333423915562347 0.3311367278713047 0 0
-1018 0.236004869617981 -0.4426907328622258 0 0
-1019 0.2215459581177686 -0.475637577273906 0 0
-1020 0.4426907328622258 0.2360048696179807 0 0
-1021 0.475637577273906 0.2215459581177684 0 0
-1022 -0.2360048696179516 0.4426907328622277 0 0
-1023 -0.2215459581177501 0.4756375772739075 0 0
-1024 -0.4426907328622277 -0.2360048696179518 0 0
-1025 -0.4756375772739075 -0.2215459581177502 0 0
-1026 0.3547578899402967 -0.4232132319752183 0 0
-1027 0.3469525033626841 -0.3956901699535277 0 0
-1028 0.4232132319752183 0.3547578899402966 0 0
-1029 0.3956901699535278 0.346952503362684 0 0
-1030 -0.4232132319752261 -0.3547578899402813 0 0
-1031 -0.3956901699535363 -0.3469525033626599 0 0
-1032 -0.3547578899402813 0.423213231975226 0 0
-1033 -0.3469525033626598 0.3956901699535362 0 0
-1034 -0.02372245668387787 -0.4745723550372188 0 0
-1035 0.474572355037219 -0.023722456683878 0 0
-1036 -0.4745723550372188 0.02372245668387761 0 0
-1037 0.02372245668387765 0.4745723550372189 0 0
-1038 0.316289951405711 -0.176809162509678 0 0
-1039 0.1768091625096782 0.3162899514057109 0 0
-1040 -0.3162899514057157 0.17680916250967 0 0
-1041 -0.1768091625096701 -0.3162899514057156 0 0
-1042 -0.3829497468186459 -0.4707226478711724 0 0
-1043 -0.4162830801518865 -0.4707226478711724 0 0
-1044 -0.4707226478711724 0.3829497468186459 0 0
-1045 -0.4707226478711724 0.4162830801518866 0 0
-1046 0.4707226478711765 -0.3829497468186393 0 0
-1047 0.4707226478711765 -0.41628308015188 0 0
-1048 0.3829497468186392 0.4707226478711763 0 0
-1049 0.4162830801518799 0.4707226478711763 0 0
-1050 -0.1258892560230409 0.4157450093651088 0 0
-1051 -0.4157450093651088 -0.1258892560230411 0 0
-1052 0.4157450093651166 0.1258892560230482 0 0
-1053 0.1258892560230482 -0.4157450093651166 0 0
-1054 -0.08569344870710238 -0.4125699554175985 0 0
-1055 -0.4125699554175984 0.08569344870710227 0 0
-1056 0.4125699554175986 -0.08569344870710137 0 0
-1057 0.08569344870710137 0.4125699554175986 0 0
-1058 -0.2287039962676981 0.3852687692919289 0 0
-1059 -0.2450300409095607 0.3947285142809695 0 0
-1060 -0.3852687692919291 -0.2287039962676982 0 0
-1061 -0.3947285142809697 -0.2450300409095607 0 0
-1062 0.2287039962677259 -0.3852687692919303 0 0
-1063 0.2450300409095854 -0.394728514280971 0 0
-1064 0.3852687692919303 0.2287039962677258 0 0
-1065 0.394728514280971 0.2450300409095851 0 0
-1066 -0.1510169932692684 0.4020633535832008 0 0
-1067 -0.4020633535832008 -0.1510169932692687 0 0
-1068 0.4020633535832272 0.1510169932692862 0 0
-1069 0.1510169932692863 -0.4020633535832274 0 0
-1070 -0.3585964182243185 0.2328657128230038 0 0
-1071 -0.3637998190399957 0.2626355523339767 0 0
-1072 -0.3787145607991599 0.2424700331804524 0 0
-1073 -0.2328657128230041 -0.3585964182243184 0 0
-1074 -0.262635552333977 -0.3637998190399955 0 0
-1075 -0.2424700331804526 -0.3787145607991598 0 0
-1076 0.3585964182243148 -0.2328657128230038 0 0
-1077 0.3637998190399878 -0.2626355523339631 0 0
-1078 0.3787145607991497 -0.2424700331804492 0 0
-1079 0.232865712823004 0.3585964182243145 0 0
-1080 0.2626355523339633 0.3637998190399873 0 0
-1081 0.2424700331804494 0.3787145607991493 0 0
-1082 -0.2419704210430664 0.4194119590791586 0 0
-1083 -0.4194119590791587 -0.2419704210430665 0 0
-1084 0.2419704210430905 -0.4194119590791611 0 0
-1085 0.4194119590791611 0.2419704210430902 0 0
-1086 0.4771477786240345 0.05278732394957227 0 0
-1087 0.05278732394957234 -0.4771477786240346 0 0
-1088 -0.052787323949572 0.4771477786240344 0 0
-1089 -0.4771477786240344 -0.05278732394957226 0 0
-1090 -0.3984842069159652 0.2562778092341114 0 0
-1091 -0.2562778092341115 -0.3984842069159651 0 0
-1092 0.3984842069159635 -0.2562778092341035 0 0
-1093 0.2562778092341038 0.398484206915963 0 0
-1094 -0.44840357963823 0.4272973452522462 0 0
-1095 -0.4272973452522461 -0.44840357963823 0 0
-1096 0.4484035796382212 -0.4272973452522266 0 0
-1097 0.4272973452522264 0.4484035796382209 0 0
-1098 0.2853417817932803 0.407617843903617 0 0
-1099 0.2693797183359754 0.422184089204758 0 0
-1100 0.4076178439036174 -0.2853417817932801 0 0
-1101 0.4221840892047581 -0.2693797183359751 0 0
-1102 -0.4076178439036213 0.2853417817932944 0 0
-1103 -0.4221840892047494 0.2693797183359804 0 0
-1104 -0.2853417817932945 -0.4076178439036212 0 0
-1105 -0.2693797183359806 -0.4221840892047494 0 0
-1106 -0.2992218454478596 -0.4656588630962027 0 0
-1107 -0.3207977910894388 -0.4437581625966115 0 0
-1108 -0.3215759456421349 -0.4780992995004088 0 0
-1109 -0.4656588630962027 0.2992218454478595 0 0
-1110 -0.4437581625966115 0.3207977910894387 0 0
-1111 -0.4780992995004088 0.3215759456421349 0 0
-1112 0.4656588630962061 -0.2992218454478537 0 0
-1113 0.443758162596618 -0.3207977910894284 0 0
-1114 0.478099299500412 -0.3215759456421303 0 0
-1115 0.2992218454478537 0.465658863096206 0 0
-1116 0.3207977910894284 0.4437581625966179 0 0
-1117 0.3215759456421303 0.478099299500412 0 0
-1118 -0.3549092789753757 -0.4780992995004088 0 0
-1119 -0.3711923591269843 -0.4488219473715812 0 0
-1120 -0.4780992995004088 0.3549092789753756 0 0
-1121 -0.4488219473715812 0.3711923591269843 0 0
-1122 0.478099299500412 -0.3549092789753711 0 0
-1123 0.4488219473715884 -0.3711923591269732 0 0
-1124 0.3549092789753711 0.478099299500412 0 0
-1125 0.3711923591269731 0.4488219473715883 0 0
-1126 -0.3437525361458542 0.2753220538314527 0 0
-1127 -0.2753220538314528 -0.3437525361458542 0 0
-1128 0.3437525361458564 -0.2753220538314392 0 0
-1129 0.2753220538314393 0.3437525361458561 0 0
-1130 0.4776809317671057 0.4776809317670445 0 0
-1131 0.4776809317670447 -0.4776809317671059 0 0
-1132 -0.4776809317671188 -0.4776809317670576 0 0
-1133 -0.4776809317670576 0.4776809317671188 0 0
-1134 0.444347598433865 0.4776809317670445 0 0
-1135 0.4776809317670447 -0.4443475984338652 0 0
-1136 -0.4443475984338781 -0.4776809317670576 0 0
-1137 -0.4776809317670576 0.4443475984338781 0 0
-1138 0.3295232907380251 -0.1954396151102528 0 0
-1139 0.195439615110253 0.329523290738025 0 0
-1140 -0.3295232907380322 0.1954396151102492 0 0
-1141 -0.1954396151102494 -0.3295232907380322 0 0
-1142 -0.2785237338915987 -0.4789649679574057 0 0
-1143 -0.4789649679574057 0.2785237338915987 0 0
-1144 0.4789649679574081 -0.2785237338915955 0 0
-1145 0.2785237338915955 0.4789649679574081 0 0
-1146 -0.2777455793389028 -0.4446238310536084 0 0
-1147 -0.4446238310536085 0.2777455793389026 0 0
-1148 0.4446238310536141 -0.2777455793388935 0 0
-1149 0.2777455793388937 0.4446238310536141 0 0
-1150 -0.1526836162764429 -0.4748928937205057 0 0
-1151 -0.4748928937205057 0.1526836162764428 0 0
-1152 0.1526836162764436 0.4748928937205059 0 0
-1153 0.474892893720506 -0.1526836162764434 0 0
-1154 -0.4197738496308714 0.3249299813903616 0 0
-1155 -0.4083399730385547 0.3063339984536224 0 0
-1156 -0.3967960964770207 0.3328202889488205 0 0
-1157 -0.3249299813903617 -0.4197738496308715 0 0
-1158 -0.3063339984536225 -0.4083399730385547 0 0
-1159 -0.3328202889488205 -0.3967960964770207 0 0
-1160 0.3249299813903455 0.4197738496308834 0 0
-1161 0.3063339984536088 0.4083399730385593 0 0
-1162 0.3328202889488023 0.3967960964770306 0 0
-1163 0.4197738496308835 -0.3249299813903454 0 0
-1164 0.4083399730385595 -0.3063339984536086 0 0
-1165 0.3967960964770309 -0.3328202889488023 0 0
-1166 -0.478234976920346 0.04743043453277063 0 0
-1167 -0.04743043453277074 -0.4782349769203461 0 0
-1168 0.04743043453277009 0.4782349769203463 0 0
-1169 0.4782349769203464 -0.04743043453277029 0 0
-1170 -0.3472840815846369 -0.4322142860350776 0 0
-1171 -0.4322142860350775 0.3472840815846369 0 0
-1172 0.4322142860350894 -0.347284081584622 0 0
-1173 0.347284081584622 0.4322142860350893 0 0
-1174 0.4771477786240345 0.08612065728299802 0 0
-1175 0.08612065728299809 -0.4771477786240346 0 0
-1176 -0.4771477786240344 -0.086120657282998 0 0
-1177 -0.08612065728299775 0.4771477786240344 0 0
-1178 0.424455670565077 -0.002603558860055541 0 0
-1179 0.002603558860055066 0.4244556705650771 0 0
-1180 -0.002603558860055593 -0.4244556705650772 0 0
-1181 -0.4244556705650773 0.002603558860055304 0 0
-1182 0.3460514696304667 -0.2131768724027205 0 0
-1183 0.3569829810910351 -0.1949629363770221 0 0
-1184 0.2131768724027208 0.3460514696304666 0 0
-1185 0.1949629363770223 0.3569829810910349 0 0
-1186 -0.3460514696304751 0.2131768724027162 0 0
-1187 -0.3569829810910399 0.1949629363770126 0 0
-1188 -0.2131768724027164 -0.346051469630475 0 0
-1189 -0.1949629363770128 -0.3569829810910398 0 0
-1190 0.4190143970961508 0.02091978757372832 0 0
-1191 -0.02091978757372862 0.419014397096151 0 0
-1192 0.02091978757372823 -0.4190143970961513 0 0
-1193 -0.4190143970961513 -0.02091978757372849 0 0
-1194 0.3694993720940769 -0.3318055778171387 0 0
-1195 0.3645928078556334 -0.305918590849213 0 0
-1196 0.3318055778171388 0.3694993720940767 0 0
-1197 0.3059185908492131 0.3645928078556331 0 0
-1198 -0.3694993720940713 0.331805577817155 0 0
-1199 -0.3645928078556291 0.3059185908492292 0 0
-1200 -0.3318055778171551 -0.3694993720940714 0 0
-1201 -0.3059185908492293 -0.3645928078556291 0 0
-1202 0.2932320893517371 0.3846400907497644 0 0
-1203 0.3846400907497649 -0.293232089351737 0 0
-1204 -0.2932320893517534 -0.3846400907497705 0 0
-1205 -0.3846400907497706 0.2932320893517534 0 0
-1206 0.3809332486864008 -0.3504015607538755 0 0
-1207 0.3504015607538755 0.3809332486864008 0 0
-1208 -0.380933248686388 0.3504015607538942 0 0
-1209 -0.3504015607538943 -0.3809332486863881 0 0
-1210 -0.2157241343280226 0.4279963807647459 0 0
-1211 -0.427996380764746 -0.2157241343280227 0 0
-1212 0.2157241343280542 -0.4279963807647472 0 0
-1213 0.4279963807647473 0.215724134328054 0 0
-1214 0.3641001013064044 -0.3731510587257937 0 0
-1215 0.3731510587257938 0.3641001013064044 0 0
-1216 -0.3641001013063892 0.3731510587258087 0 0
-1217 -0.3731510587258087 -0.3641001013063894 0 0
-1218 0.1609327094719452 -0.380294419101002 0 0
-1219 0.3802944191010019 0.160932709471945 0 0
-1220 -0.1609327094719256 0.380294419100991 0 0
-1221 -0.3802944191009911 -0.1609327094719258 0 0
-1222 -0.1943969028839097 0.4113344764777339 0 0
-1223 -0.411334476477734 -0.1943969028839098 0 0
-1224 0.4113344764777556 0.1943969028839336 0 0
-1225 0.1943969028839338 -0.4113344764777557 0 0
-1226 0.09322110033584177 0.3923405611635517 0 0
-1227 0.3923405611635518 -0.09322110033584172 0 0
-1228 -0.3923405611635521 0.09322110033584027 0 0
-1229 -0.09322110033584038 -0.3923405611635521 0 0
-1230 0.3638706787206913 -0.2849263741888845 0 0
-1231 0.2849263741888847 0.3638706787206908 0 0
-1232 -0.3638706787206957 0.2849263741889013 0 0
-1233 -0.2849263741889014 -0.3638706787206956 0 0
-1234 0.1770198362173627 -0.3961824114916034 0 0
-1235 0.3961824114916032 0.1770198362173626 0 0
-1236 -0.3961824114915814 -0.1770198362173394 0 0
-1237 -0.1770198362173391 0.3961824114915813 0 0
-1238 0.03140515171423447 -0.3971061717926164 0 0
-1239 -0.3971061717926161 -0.03140515171423482 0 0
-1240 0.3971061717926159 0.03140515171423447 0 0
-1241 -0.0314051517142349 0.3971061717926159 0 0
-1242 -0.2043126190865668 0.3895655419955242 0 0
-1243 -0.3895655419955243 -0.204312619086567 0 0
-1244 0.3895655419955303 0.2043126190865925 0 0
-1245 0.2043126190865927 -0.3895655419955303 0 0
-$EndNodes
-$Elements
-636
-7030 9 11 6 144 190 278 438 439 440
-7031 9 11 6 145 191 280 441 442 443
-7032 9 11 6 143 193 284 444 445 446
-7033 9 11 6 142 192 282 447 448 449
-7034 9 11 6 110 262 289 450 451 452
-7035 9 11 6 111 263 288 453 454 455
-7036 9 11 6 113 264 287 456 457 458
-7037 9 11 6 112 265 286 459 460 461
-7038 9 11 6 145 274 183 462 463 464
-7039 9 11 6 144 275 182 465 466 467
-7040 9 11 6 142 276 184 468 469 470
-7041 9 11 6 143 277 185 471 472 473
-7042 9 11 6 144 248 190 474 475 438
-7043 9 11 6 145 249 191 476 477 441
-7044 9 11 6 143 246 193 478 479 444
-7045 9 11 6 142 247 192 480 481 447
-7046 9 11 6 158 288 263 482 454 483
-7047 9 11 6 159 289 262 484 451 485
-7048 9 11 6 160 287 264 486 457 487
-7049 9 11 6 161 286 265 488 460 489
-7050 9 11 6 145 281 274 490 491 462
-7051 9 11 6 144 279 275 492 493 465
-7052 9 11 6 142 283 276 494 495 468
-7053 9 11 6 143 285 277 496 497 471
-7054 9 11 6 127 163 207 498 499 500
-7055 9 11 6 126 162 206 501 502 503
-7056 9 11 6 129 164 209 504 505 506
-7057 9 11 6 128 165 208 507 508 509
-7058 9 11 6 47 148 214 510 511 512
-7059 9 11 6 61 149 215 513 514 515
-7060 9 11 6 33 147 217 516 517 518
-7061 9 11 6 19 146 216 519 520 521
-7062 9 11 6 89 90 182 424 522 523
-7063 9 11 6 80 81 183 414 524 525
-7064 9 11 6 98 99 185 434 526 527
-7065 9 11 6 71 72 184 404 528 529
-7066 9 11 6 90 248 182 530 531 522
-7067 9 11 6 81 249 183 532 533 524
-7068 9 11 6 99 246 185 534 535 526
-7069 9 11 6 72 247 184 536 537 528
-7070 9 11 6 107 164 276 538 539 540
-7071 9 11 6 106 165 277 541 542 543
-7072 9 11 6 108 162 275 544 545 546
-7073 9 11 6 109 163 274 547 548 549
-7074 9 11 6 115 280 191 550 442 551
-7075 9 11 6 114 278 190 552 439 553
-7076 9 11 6 117 284 193 554 445 555
-7077 9 11 6 116 282 192 556 448 557
-7078 9 11 6 126 275 162 558 545 501
-7079 9 11 6 127 274 163 559 548 498
-7080 9 11 6 129 276 164 560 539 504
-7081 9 11 6 128 277 165 561 542 507
-7082 9 11 6 113 201 264 562 563 456
-7083 9 11 6 112 200 265 564 565 459
-7084 9 11 6 110 199 262 566 567 450
-7085 9 11 6 111 198 263 568 569 453
-7086 9 11 6 102 207 163 570 499 571
-7087 9 11 6 103 206 162 572 502 573
-7088 9 11 6 105 208 165 574 508 575
-7089 9 11 6 104 209 164 576 505 577
-7090 9 11 6 48 49 168 379 578 579
-7091 9 11 6 62 63 169 394 580 581
-7092 9 11 6 34 35 166 364 582 583
-7093 9 11 6 20 21 167 349 584 585
-7094 9 11 6 50 51 180 381 586 587
-7095 9 11 6 64 65 181 396 588 589
-7096 9 11 6 36 37 178 366 590 591
-7097 9 11 6 22 23 179 351 592 593
-7098 9 11 6 47 242 148 594 595 510
-7099 9 11 6 61 243 149 596 597 513
-7100 9 11 6 33 244 147 598 599 516
-7101 9 11 6 19 245 146 600 601 519
-7102 9 11 6 94 95 171 430 602 603
-7103 9 11 6 67 68 170 400 604 605
-7104 9 11 6 76 77 172 410 606 607
-7105 9 11 6 85 86 173 420 608 609
-7106 9 11 6 63 241 169 610 611 580
-7107 9 11 6 49 240 168 612 613 578
-7108 9 11 6 35 239 166 614 615 582
-7109 9 11 6 21 238 167 616 617 584
-7110 9 11 6 125 169 241 618 611 619
-7111 9 11 6 124 168 240 620 613 621
-7112 9 11 6 123 166 239 622 615 623
-7113 9 11 6 122 167 238 624 617 625
-7114 9 11 6 112 222 200 626 627 564
-7115 9 11 6 113 223 201 628 629 562
-7116 9 11 6 111 224 198 630 631 568
-7117 9 11 6 110 225 199 632 633 566
-7118 9 11 6 13 198 294 634 635 636
-7119 9 11 6 55 199 295 637 638 639
-7120 9 11 6 27 201 296 640 641 642
-7121 9 11 6 41 200 297 643 644 645
-7122 9 11 6 126 186 235 646 647 648
-7123 9 11 6 127 187 234 649 650 651
-7124 9 11 6 128 189 236 652 653 654
-7125 9 11 6 129 188 237 655 656 657
-7126 9 11 6 115 334 310 658 659 660
-7127 9 11 6 114 335 311 661 662 663
-7128 9 11 6 116 336 312 664 665 666
-7129 9 11 6 117 337 313 667 668 669
-7130 9 11 6 127 207 187 500 670 649
-7131 9 11 6 126 206 186 503 671 646
-7132 9 11 6 128 208 189 509 672 652
-7133 9 11 6 129 209 188 506 673 655
-7134 9 11 6 78 79 187 412 674 675
-7135 9 11 6 87 88 186 422 676 677
-7136 9 11 6 96 97 189 432 678 679
-7137 9 11 6 69 70 188 402 680 681
-7138 9 11 6 91 92 190 426 682 683
-7139 9 11 6 82 83 191 416 684 685
-7140 9 11 6 73 74 192 406 686 687
-7141 9 11 6 100 101 193 436 688 689
-7142 9 11 6 150 314 196 690 691 692
-7143 9 11 6 151 315 197 693 694 695
-7144 9 11 6 152 316 194 696 697 698
-7145 9 11 6 153 317 195 699 700 701
-7146 9 11 6 68 211 170 702 703 604
-7147 9 11 6 95 210 171 704 705 602
-7148 9 11 6 77 212 172 706 707 606
-7149 9 11 6 86 213 173 708 709 608
-7150 9 11 6 109 251 163 710 711 547
-7151 9 11 6 108 250 162 712 713 544
-7152 9 11 6 107 252 164 714 715 538
-7153 9 11 6 106 253 165 716 717 541
-7154 9 11 6 140 200 222 718 627 719
-7155 9 11 6 141 201 223 720 629 721
-7156 9 11 6 139 198 224 722 631 723
-7157 9 11 6 138 199 225 724 633 725
-7158 9 11 6 55 56 199 387 726 637
-7159 9 11 6 13 14 198 342 727 634
-7160 9 11 6 27 28 201 357 728 640
-7161 9 11 6 41 42 200 372 729 643
-7162 9 11 6 157 196 322 730 731 732
-7163 9 11 6 155 195 324 733 734 735
-7164 9 11 6 156 197 323 736 737 738
-7165 9 11 6 154 194 325 739 740 741
-7166 9 11 6 103 162 226 573 742 743
-7167 9 11 6 102 163 227 571 744 745
-7168 9 11 6 105 165 229 575 746 747
-7169 9 11 6 104 164 228 577 748 749
-7170 9 11 6 144 182 248 467 531 474
-7171 9 11 6 145 183 249 464 533 476
-7172 9 11 6 143 185 246 473 535 478
-7173 9 11 6 142 184 247 470 537 480
-7174 9 11 6 76 172 304 607 750 751
-7175 9 11 6 85 173 305 609 752 753
-7176 9 11 6 67 170 302 605 754 755
-7177 9 11 6 94 171 303 603 756 757
-7178 9 11 6 51 301 180 758 759 586
-7179 9 11 6 65 300 181 760 761 588
-7180 9 11 6 23 299 179 762 763 592
-7181 9 11 6 37 298 178 764 765 590
-7182 9 11 6 132 189 208 766 672 767
-7183 9 11 6 133 188 209 768 673 769
-7184 9 11 6 130 186 206 770 671 771
-7185 9 11 6 131 187 207 772 670 773
-7186 9 11 6 69 188 211 681 774 775
-7187 9 11 6 96 189 210 679 776 777
-7188 9 11 6 87 186 213 677 778 779
-7189 9 11 6 78 187 212 675 780 781
-7190 9 11 6 110 289 170 452 782 783
-7191 9 11 6 111 288 171 455 784 785
-7192 9 11 6 112 286 172 461 786 787
-7193 9 11 6 113 287 173 458 788 789
-7194 9 11 6 138 295 199 790 638 724
-7195 9 11 6 139 294 198 791 635 722
-7196 9 11 6 141 296 201 792 641 720
-7197 9 11 6 140 297 200 793 644 718
-7198 9 11 6 121 314 271 794 795 796
-7199 9 11 6 120 315 270 797 798 799
-7200 9 11 6 119 317 272 800 801 802
-7201 9 11 6 118 316 273 803 804 805
-7202 9 11 6 332 220 136 806 807 808
-7203 9 11 6 333 221 137 809 810 811
-7204 9 11 6 331 218 134 812 813 814
-7205 9 11 6 330 219 135 815 816 817
-7206 9 11 6 151 170 289 818 782 819
-7207 9 11 6 150 171 288 820 784 821
-7208 9 11 6 152 172 286 822 786 823
-7209 9 11 6 153 173 287 824 788 825
-7210 9 11 6 121 196 314 826 691 794
-7211 9 11 6 120 197 315 827 694 797
-7212 9 11 6 118 194 316 828 697 803
-7213 9 11 6 119 195 317 829 700 800
-7214 9 11 6 176 312 336 830 665 831
-7215 9 11 6 177 313 337 832 668 833
-7216 9 11 6 174 310 334 834 659 835
-7217 9 11 6 175 311 335 836 662 837
-7218 9 11 6 79 234 187 838 650 674
-7219 9 11 6 88 235 186 839 647 676
-7220 9 11 6 97 236 189 840 653 678
-7221 9 11 6 70 237 188 841 656 680
-7222 9 11 6 6 75 194 408 842 843
-7223 9 11 6 7 84 195 418 844 845
-7224 9 11 6 5 66 197 398 846 847
-7225 9 11 6 8 93 196 428 848 849
-7226 9 11 6 180 220 332 850 806 851
-7227 9 11 6 181 221 333 852 809 853
-7228 9 11 6 178 218 331 854 812 855
-7229 9 11 6 179 219 330 856 815 857
-7230 9 11 6 123 227 163 858 744 859
-7231 9 11 6 122 226 162 860 742 861
-7232 9 11 6 124 228 164 862 748 863
-7233 9 11 6 125 229 165 864 746 865
-7234 9 11 6 89 182 235 523 866 867
-7235 9 11 6 80 183 234 525 868 869
-7236 9 11 6 71 184 237 529 870 871
-7237 9 11 6 98 185 236 527 872 873
-7238 9 11 6 73 192 247 687 481 874
-7239 9 11 6 100 193 246 689 479 875
-7240 9 11 6 91 190 248 683 475 876
-7241 9 11 6 82 191 249 685 477 877
-7242 9 11 6 121 322 196 878 731 826
-7243 9 11 6 120 323 197 879 737 827
-7244 9 11 6 118 325 194 880 740 828
-7245 9 11 6 119 324 195 881 734 829
-7246 9 11 6 83 306 191 882 883 684
-7247 9 11 6 92 308 190 884 885 682
-7248 9 11 6 74 307 192 886 887 686
-7249 9 11 6 101 309 193 888 889 688
-7250 9 11 6 31 174 231 890 891 892
-7251 9 11 6 17 175 233 893 894 895
-7252 9 11 6 45 176 232 896 897 898
-7253 9 11 6 59 177 230 899 900 901
-7254 9 11 6 109 274 281 549 491 902
-7255 9 11 6 108 275 279 546 493 903
-7256 9 11 6 107 276 283 540 495 904
-7257 9 11 6 106 277 285 543 497 905
-7258 9 11 6 115 310 217 660 906 907
-7259 9 11 6 114 311 216 663 908 909
-7260 9 11 6 116 312 214 666 910 911
-7261 9 11 6 117 313 215 669 912 913
-7262 9 11 6 123 251 166 914 915 622
-7263 9 11 6 122 250 167 916 917 624
-7264 9 11 6 125 253 169 918 919 618
-7265 9 11 6 124 252 168 920 921 620
-7266 9 11 6 46 47 214 377 512 922
-7267 9 11 6 18 19 216 347 521 923
-7268 9 11 6 60 61 215 392 515 924
-7269 9 11 6 32 33 217 362 518 925
-7270 9 11 6 152 304 172 926 750 822
-7271 9 11 6 153 305 173 927 752 824
-7272 9 11 6 150 303 171 928 756 820
-7273 9 11 6 151 302 170 929 754 818
-7274 9 11 6 155 334 191 930 931 932
-7275 9 11 6 157 335 190 933 934 935
-7276 9 11 6 154 336 192 936 937 938
-7277 9 11 6 156 337 193 939 940 941
-7278 9 11 6 155 191 306 932 883 942
-7279 9 11 6 157 190 308 935 885 943
-7280 9 11 6 154 192 307 938 887 944
-7281 9 11 6 156 193 309 941 889 945
-7282 9 11 6 150 196 303 692 946 928
-7283 9 11 6 151 197 302 695 947 929
-7284 9 11 6 152 194 304 698 948 926
-7285 9 11 6 153 195 305 701 949 927
-7286 9 11 6 157 308 196 943 950 730
-7287 9 11 6 155 306 195 942 951 733
-7288 9 11 6 154 307 194 944 952 739
-7289 9 11 6 156 309 197 945 953 736
-7290 9 11 6 75 304 194 954 948 842
-7291 9 11 6 84 305 195 955 949 844
-7292 9 11 6 66 302 197 956 947 846
-7293 9 11 6 93 303 196 957 946 848
-7294 9 11 6 7 195 306 845 951 958
-7295 9 11 6 6 194 307 843 952 959
-7296 9 11 6 5 197 309 847 953 960
-7297 9 11 6 8 196 308 849 950 961
-7298 9 11 6 133 211 188 962 774 768
-7299 9 11 6 132 210 189 963 776 766
-7300 9 11 6 130 213 186 964 778 770
-7301 9 11 6 131 212 187 965 780 772
-7302 9 11 6 57 159 262 966 485 967
-7303 9 11 6 15 158 263 968 483 969
-7304 9 11 6 29 160 264 970 487 971
-7305 9 11 6 43 161 265 972 489 973
-7306 9 11 6 57 270 159 974 975 966
-7307 9 11 6 15 271 158 976 977 968
-7308 9 11 6 43 273 161 978 979 972
-7309 9 11 6 29 272 160 980 981 970
-7310 9 11 6 121 271 233 796 982 983
-7311 9 11 6 119 272 231 802 984 985
-7312 9 11 6 120 270 230 799 986 987
-7313 9 11 6 118 273 232 805 988 989
-7314 9 11 6 126 235 182 648 866 990
-7315 9 11 6 127 234 183 651 868 991
-7316 9 11 6 129 237 184 657 870 992
-7317 9 11 6 128 236 185 654 872 993
-7318 9 11 6 36 178 239 591 994 995
-7319 9 11 6 22 179 238 593 996 997
-7320 9 11 6 50 180 240 587 998 999
-7321 9 11 6 64 181 241 589 1000 1001
-7322 9 11 6 122 162 250 861 713 916
-7323 9 11 6 123 163 251 859 711 914
-7324 9 11 6 125 165 253 865 717 918
-7325 9 11 6 124 164 252 863 715 920
-7326 9 11 6 110 170 255 783 1002 1003
-7327 9 11 6 111 171 254 785 1004 1005
-7328 9 11 6 112 172 256 787 1006 1007
-7329 9 11 6 113 173 257 789 1008 1009
-7330 9 11 6 133 209 258 769 1010 1011
-7331 9 11 6 132 208 259 767 1012 1013
-7332 9 11 6 130 206 261 771 1014 1015
-7333 9 11 6 131 207 260 773 1016 1017
-7334 9 11 6 20 167 245 585 1018 1019
-7335 9 11 6 34 166 244 583 1020 1021
-7336 9 11 6 48 168 242 579 1022 1023
-7337 9 11 6 62 169 243 581 1024 1025
-7338 9 11 6 122 238 330 625 1026 1027
-7339 9 11 6 123 239 331 623 1028 1029
-7340 9 11 6 125 241 333 619 1030 1031
-7341 9 11 6 124 240 332 621 1032 1033
-7342 9 11 6 16 17 233 345 895 1034
-7343 9 11 6 30 31 231 360 892 1035
-7344 9 11 6 58 59 230 390 901 1036
-7345 9 11 6 44 45 232 375 898 1037
-7346 9 11 6 115 191 334 551 931 658
-7347 9 11 6 114 190 335 553 934 661
-7348 9 11 6 116 192 336 557 937 664
-7349 9 11 6 117 193 337 555 940 667
-7350 9 11 6 178 331 239 855 1028 994
-7351 9 11 6 179 330 238 857 1026 996
-7352 9 11 6 180 332 240 851 1032 998
-7353 9 11 6 181 333 241 853 1030 1000
-7354 9 11 6 173 213 257 709 1038 1008
-7355 9 11 6 172 212 256 707 1039 1006
-7356 9 11 6 170 211 255 703 1040 1002
-7357 9 11 6 171 210 254 705 1041 1004
-7358 9 11 6 10 11 221 339 1042 1043
-7359 9 11 6 52 53 220 384 1044 1045
-7360 9 11 6 24 25 219 354 1046 1047
-7361 9 11 6 38 39 218 369 1048 1049
-7362 9 11 6 116 214 282 911 1050 556
-7363 9 11 6 117 215 284 913 1051 554
-7364 9 11 6 115 217 280 907 1052 550
-7365 9 11 6 114 216 278 909 1053 552
-7366 9 11 6 68 69 211 401 775 702
-7367 9 11 6 95 96 210 431 777 704
-7368 9 11 6 77 78 212 411 781 706
-7369 9 11 6 86 87 213 421 779 708
-7370 9 11 6 158 271 314 977 795 1054
-7371 9 11 6 159 270 315 975 798 1055
-7372 9 11 6 160 272 317 981 801 1056
-7373 9 11 6 161 273 316 979 804 1057
-7374 9 11 6 107 319 252 1058 1059 714
-7375 9 11 6 106 318 253 1060 1061 716
-7376 9 11 6 108 321 250 1062 1063 712
-7377 9 11 6 109 320 251 1064 1065 710
-7378 9 11 6 148 282 214 1066 1050 511
-7379 9 11 6 149 284 215 1067 1051 514
-7380 9 11 6 147 280 217 1068 1052 517
-7381 9 11 6 146 278 216 1069 1053 520
-7382 9 11 6 225 258 329 1070 1071 1072
-7383 9 11 6 224 259 328 1073 1074 1075
-7384 9 11 6 223 261 326 1076 1077 1078
-7385 9 11 6 222 260 327 1079 1080 1081
-7386 9 11 6 19 20 245 348 1019 600
-7387 9 11 6 33 34 244 363 1021 598
-7388 9 11 6 47 48 242 378 1023 594
-7389 9 11 6 61 62 243 393 1025 596
-7390 9 11 6 168 252 319 921 1059 1082
-7391 9 11 6 169 253 318 919 1061 1083
-7392 9 11 6 167 250 321 917 1063 1084
-7393 9 11 6 166 251 320 915 1065 1085
-7394 9 11 6 31 310 174 1086 834 890
-7395 9 11 6 17 311 175 1087 836 893
-7396 9 11 6 45 312 176 1088 830 896
-7397 9 11 6 59 313 177 1089 832 899
-7398 9 11 6 138 225 329 725 1072 1090
-7399 9 11 6 139 224 328 723 1075 1091
-7400 9 11 6 141 223 326 721 1078 1092
-7401 9 11 6 140 222 327 719 1081 1093
-7402 9 11 6 127 183 274 991 463 559
-7403 9 11 6 126 182 275 990 466 558
-7404 9 11 6 129 184 276 992 469 560
-7405 9 11 6 128 185 277 993 472 561
-7406 9 11 6 180 301 220 759 1094 850
-7407 9 11 6 181 300 221 761 1095 852
-7408 9 11 6 179 299 219 763 1096 856
-7409 9 11 6 178 298 218 765 1097 854
-7410 9 11 6 140 327 205 1093 1098 1099
-7411 9 11 6 141 326 204 1092 1100 1101
-7412 9 11 6 138 329 202 1090 1102 1103
-7413 9 11 6 139 328 203 1091 1104 1105
-7414 9 11 6 88 89 235 423 867 839
-7415 9 11 6 79 80 234 413 869 838
-7416 9 11 6 97 98 236 433 873 840
-7417 9 11 6 70 71 237 403 871 841
-7418 9 11 6 12 203 293 1106 1107 1108
-7419 9 11 6 54 202 292 1109 1110 1111
-7420 9 11 6 26 204 290 1112 1113 1114
-7421 9 11 6 40 205 291 1115 1116 1117
-7422 9 11 6 11 293 221 1118 1119 1042
-7423 9 11 6 53 292 220 1120 1121 1044
-7424 9 11 6 25 290 219 1122 1123 1046
-7425 9 11 6 39 291 218 1124 1125 1048
-7426 9 11 6 11 12 293 340 1108 1118
-7427 9 11 6 53 54 292 385 1111 1120
-7428 9 11 6 39 40 291 370 1117 1124
-7429 9 11 6 25 26 290 355 1114 1122
-7430 9 11 6 21 22 238 350 997 616
-7431 9 11 6 35 36 239 365 995 614
-7432 9 11 6 49 50 240 380 999 612
-7433 9 11 6 63 64 241 395 1001 610
-7434 9 11 6 104 258 209 1126 1010 576
-7435 9 11 6 105 259 208 1127 1012 574
-7436 9 11 6 103 261 206 1128 1014 572
-7437 9 11 6 102 260 207 1129 1016 570
-7438 9 11 6 3 298 37 1130 764 367
-7439 9 11 6 2 299 23 1131 762 352
-7440 9 11 6 1 300 65 1132 760 397
-7441 9 11 6 4 301 51 1133 758 382
-7442 9 11 6 3 38 298 368 1134 1130
-7443 9 11 6 2 24 299 353 1135 1131
-7444 9 11 6 1 10 300 338 1136 1132
-7445 9 11 6 4 52 301 383 1137 1133
-7446 9 11 6 130 257 213 1138 1038 964
-7447 9 11 6 131 256 212 1139 1039 965
-7448 9 11 6 133 255 211 1140 1040 962
-7449 9 11 6 132 254 210 1141 1041 963
-7450 9 11 6 99 100 246 435 875 534
-7451 9 11 6 72 73 247 405 874 536
-7452 9 11 6 90 91 248 425 876 530
-7453 9 11 6 81 82 249 415 877 532
-7454 9 11 6 12 13 294 341 636 1142
-7455 9 11 6 54 55 295 386 639 1143
-7456 9 11 6 26 27 296 356 642 1144
-7457 9 11 6 40 41 297 371 645 1145
-7458 9 11 6 12 294 203 1142 1146 1106
-7459 9 11 6 54 295 202 1143 1147 1109
-7460 9 11 6 26 296 204 1144 1148 1112
-7461 9 11 6 40 297 205 1145 1149 1115
-7462 9 11 6 14 15 263 343 969 1150
-7463 9 11 6 56 57 262 388 967 1151
-7464 9 11 6 42 43 265 373 973 1152
-7465 9 11 6 28 29 264 358 971 1153
-7466 9 11 6 136 202 268 1154 1155 1156
-7467 9 11 6 137 203 269 1157 1158 1159
-7468 9 11 6 134 205 267 1160 1161 1162
-7469 9 11 6 135 204 266 1163 1164 1165
-7470 9 11 6 57 58 270 389 1166 974
-7471 9 11 6 15 16 271 344 1167 976
-7472 9 11 6 43 44 273 374 1168 978
-7473 9 11 6 29 30 272 359 1169 980
-7474 9 11 6 137 221 293 810 1119 1170
-7475 9 11 6 136 220 292 807 1121 1171
-7476 9 11 6 135 219 290 816 1123 1172
-7477 9 11 6 134 218 291 813 1125 1173
-7478 9 11 6 31 32 310 361 1174 1086
-7479 9 11 6 17 18 311 346 1175 1087
-7480 9 11 6 59 60 313 391 1176 1089
-7481 9 11 6 45 46 312 376 1177 1088
-7482 9 11 6 138 202 295 1103 1147 790
-7483 9 11 6 139 203 294 1105 1146 791
-7484 9 11 6 140 205 297 1099 1149 793
-7485 9 11 6 141 204 296 1101 1148 792
-7486 9 11 6 137 293 203 1170 1107 1157
-7487 9 11 6 136 292 202 1171 1110 1154
-7488 9 11 6 135 290 204 1172 1113 1163
-7489 9 11 6 134 291 205 1173 1116 1160
-7490 9 11 6 119 231 324 985 1178 881
-7491 9 11 6 118 232 325 989 1179 880
-7492 9 11 6 121 233 322 983 1180 878
-7493 9 11 6 120 230 323 987 1181 879
-7494 9 11 6 14 263 198 1150 569 727
-7495 9 11 6 56 262 199 1151 567 726
-7496 9 11 6 42 265 200 1152 565 729
-7497 9 11 6 28 264 201 1153 563 728
-7498 9 11 6 75 76 304 409 751 954
-7499 9 11 6 84 85 305 419 753 955
-7500 9 11 6 66 67 302 399 755 956
-7501 9 11 6 93 94 303 429 757 957
-7502 9 11 6 7 306 83 958 882 417
-7503 9 11 6 6 307 74 959 886 407
-7504 9 11 6 8 308 92 961 884 427
-7505 9 11 6 5 309 101 960 888 437
-7506 9 11 6 130 223 257 1182 1183 1138
-7507 9 11 6 131 222 256 1184 1185 1139
-7508 9 11 6 133 225 255 1186 1187 1140
-7509 9 11 6 132 224 254 1188 1189 1141
-7510 9 11 6 130 261 223 1015 1076 1182
-7511 9 11 6 131 260 222 1017 1079 1184
-7512 9 11 6 132 259 224 1013 1073 1188
-7513 9 11 6 133 258 225 1011 1070 1186
-7514 9 11 6 174 324 231 1190 1178 891
-7515 9 11 6 176 325 232 1191 1179 897
-7516 9 11 6 175 322 233 1192 1180 894
-7517 9 11 6 177 323 230 1193 1181 900
-7518 9 11 6 103 226 266 743 1194 1195
-7519 9 11 6 102 227 267 745 1196 1197
-7520 9 11 6 104 228 268 749 1198 1199
-7521 9 11 6 105 229 269 747 1200 1201
-7522 9 11 6 111 254 224 1005 1189 630
-7523 9 11 6 110 255 225 1003 1187 632
-7524 9 11 6 112 256 222 1007 1185 626
-7525 9 11 6 113 257 223 1009 1183 628
-7526 9 11 6 205 327 267 1098 1202 1161
-7527 9 11 6 204 326 266 1100 1203 1164
-7528 9 11 6 203 328 269 1104 1204 1158
-7529 9 11 6 202 329 268 1102 1205 1155
-7530 9 11 6 135 266 226 1165 1194 1206
-7531 9 11 6 134 267 227 1162 1196 1207
-7532 9 11 6 136 268 228 1156 1198 1208
-7533 9 11 6 137 269 229 1159 1200 1209
-7534 9 11 6 168 319 242 1082 1210 1022
-7535 9 11 6 169 318 243 1083 1211 1024
-7536 9 11 6 167 321 245 1084 1212 1018
-7537 9 11 6 166 320 244 1085 1213 1020
-7538 9 11 6 38 218 298 1049 1097 1134
-7539 9 11 6 24 219 299 1047 1096 1135
-7540 9 11 6 52 220 301 1045 1094 1137
-7541 9 11 6 10 221 300 1043 1095 1136
-7542 9 11 6 135 226 330 1206 1214 817
-7543 9 11 6 134 227 331 1207 1215 814
-7544 9 11 6 136 228 332 1208 1216 808
-7545 9 11 6 137 229 333 1209 1217 811
-7546 9 11 6 58 230 270 1036 986 1166
-7547 9 11 6 16 233 271 1034 982 1167
-7548 9 11 6 44 232 273 1037 988 1168
-7549 9 11 6 30 231 272 1035 984 1169
-7550 9 11 6 32 217 310 925 906 1174
-7551 9 11 6 18 216 311 923 908 1175
-7552 9 11 6 46 214 312 922 910 1177
-7553 9 11 6 60 215 313 924 912 1176
-7554 9 11 6 123 331 227 1029 1215 858
-7555 9 11 6 122 330 226 1027 1214 860
-7556 9 11 6 124 332 228 1033 1216 862
-7557 9 11 6 125 333 229 1031 1217 864
-7558 9 11 6 144 278 279 440 1218 492
-7559 9 11 6 145 280 281 443 1219 490
-7560 9 11 6 142 282 283 449 1220 494
-7561 9 11 6 143 284 285 446 1221 496
-7562 9 11 6 148 242 319 595 1210 1222
-7563 9 11 6 149 243 318 597 1211 1223
-7564 9 11 6 147 244 320 599 1213 1224
-7565 9 11 6 146 245 321 601 1212 1225
-7566 9 11 6 152 286 316 823 1226 696
-7567 9 11 6 153 287 317 825 1227 699
-7568 9 11 6 151 289 315 819 1228 693
-7569 9 11 6 150 288 314 821 1229 690
-7570 9 11 6 103 266 326 1195 1203 1230
-7571 9 11 6 102 267 327 1197 1202 1231
-7572 9 11 6 104 268 329 1199 1205 1232
-7573 9 11 6 105 269 328 1201 1204 1233
-7574 9 11 6 103 326 261 1230 1077 1128
-7575 9 11 6 102 327 260 1231 1080 1129
-7576 9 11 6 104 329 258 1232 1071 1126
-7577 9 11 6 105 328 259 1233 1074 1127
-7578 9 11 6 146 279 278 1234 1218 1069
-7579 9 11 6 147 281 280 1235 1219 1068
-7580 9 11 6 149 285 284 1236 1221 1067
-7581 9 11 6 148 283 282 1237 1220 1066
-7582 9 11 6 157 322 335 732 1238 933
-7583 9 11 6 156 323 337 738 1239 939
-7584 9 11 6 155 324 334 735 1240 930
-7585 9 11 6 154 325 336 741 1241 936
-7586 9 11 6 107 283 319 904 1242 1058
-7587 9 11 6 106 285 318 905 1243 1060
-7588 9 11 6 109 281 320 902 1244 1064
-7589 9 11 6 108 279 321 903 1245 1062
-7590 9 11 6 146 321 279 1225 1245 1234
-7591 9 11 6 147 320 281 1224 1244 1235
-7592 9 11 6 148 319 283 1222 1242 1237
-7593 9 11 6 149 318 285 1223 1243 1236
-7594 9 11 6 160 317 287 1056 1227 486
-7595 9 11 6 161 316 286 1057 1226 488
-7596 9 11 6 158 314 288 1054 1229 482
-7597 9 11 6 159 315 289 1055 1228 484
-7598 9 11 6 177 337 323 833 1239 1193
-7599 9 11 6 175 335 322 837 1238 1192
-7600 9 11 6 174 334 324 835 1240 1190
-7601 9 11 6 176 336 325 831 1241 1191
-6930 8 1 3 1 10 338
-6931 8 1 3 10 11 339
-6932 8 1 3 11 12 340
-6933 8 1 3 12 13 341
-6934 8 1 3 13 14 342
-6935 8 1 3 14 15 343
-6936 8 1 3 15 16 344
-6937 8 1 3 16 17 345
-6938 8 1 3 17 18 346
-6939 8 1 3 18 19 347
-6940 8 1 3 19 20 348
-6941 8 1 3 20 21 349
-6942 8 1 3 21 22 350
-6943 8 1 3 22 23 351
-6944 8 1 3 23 2 352
-6945 8 2 3 2 24 353
-6946 8 2 3 24 25 354
-6947 8 2 3 25 26 355
-6948 8 2 3 26 27 356
-6949 8 2 3 27 28 357
-6950 8 2 3 28 29 358
-6951 8 2 3 29 30 359
-6952 8 2 3 30 31 360
-6953 8 2 3 31 32 361
-6954 8 2 3 32 33 362
-6955 8 2 3 33 34 363
-6956 8 2 3 34 35 364
-6957 8 2 3 35 36 365
-6958 8 2 3 36 37 366
-6959 8 2 3 37 3 367
-6960 8 3 3 3 38 368
-6961 8 3 3 38 39 369
-6962 8 3 3 39 40 370
-6963 8 3 3 40 41 371
-6964 8 3 3 41 42 372
-6965 8 3 3 42 43 373
-6966 8 3 3 43 44 374
-6967 8 3 3 44 45 375
-6968 8 3 3 45 46 376
-6969 8 3 3 46 47 377
-6970 8 3 3 47 48 378
-6971 8 3 3 48 49 379
-6972 8 3 3 49 50 380
-6973 8 3 3 50 51 381
-6974 8 3 3 51 4 382
-6975 8 4 3 4 52 383
-6976 8 4 3 52 53 384
-6977 8 4 3 53 54 385
-6978 8 4 3 54 55 386
-6979 8 4 3 55 56 387
-6980 8 4 3 56 57 388
-6981 8 4 3 57 58 389
-6982 8 4 3 58 59 390
-6983 8 4 3 59 60 391
-6984 8 4 3 60 61 392
-6985 8 4 3 61 62 393
-6986 8 4 3 62 63 394
-6987 8 4 3 63 64 395
-6988 8 4 3 64 65 396
-6989 8 4 3 65 1 397
-1 15 1 1 1
-2 15 2 1 2
-3 15 3 1 3
-4 15 4 1 4
-$EndElements
diff --git a/dG3D/benchmarks/nonLinearMixedBC_2D_DirectionFollowing/CMakeLists.txt b/dG3D/benchmarks/nonLinearMixedBC_2D_DirectionFollowing/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..689506adade2a1900accc0c3a4e3ea99cb915545
--- /dev/null
+++ b/dG3D/benchmarks/nonLinearMixedBC_2D_DirectionFollowing/CMakeLists.txt
@@ -0,0 +1,13 @@
+# test file
+
+set(PYFILE idealHole_mixBC.py)
+
+set(FILES2DELETE 
+  idealHole.msh
+  E_0_GP_0_out.txt
+  E_0_GP_0_disp.msh
+  E_0_GP_0_stress.msh
+  E_0_GP_0*.csv
+)
+
+add_cm3python_test(${PYFILE} "${FILES2DELETE}")
diff --git a/dG3D/benchmarks/nonLinearMixedBC_2D_DirectionFollowing/idealHole.geo b/dG3D/benchmarks/nonLinearMixedBC_2D_DirectionFollowing/idealHole.geo
new file mode 100644
index 0000000000000000000000000000000000000000..ea71db5a835b3024cd654f73ec07b12a82b2fbb2
--- /dev/null
+++ b/dG3D/benchmarks/nonLinearMixedBC_2D_DirectionFollowing/idealHole.geo
@@ -0,0 +1,61 @@
+
+mm=1.0;
+n=1;
+L=1;
+sl1=0.07*L/n;
+Point(1)={0,0,0,sl1};
+Point(2)={L,0,0,sl1};
+Point(3)={L,L,0,sl1};
+Point(4)={0,L,0,sl1};
+Line(1)={1,2};
+Line(2)={2,3};
+Line(3)={3,4};
+Line(4)={4,1};
+x0=0.5*L/n; y0=0.5*L/n; r=0.3*L/n; 
+num=0;
+moyen=0;
+surf=0;
+For i In {0:n-1}
+  	For j In {0:n-1}
+		x=x0*(2*i+1);
+		y=y0*(2*j+1);
+		sl2=0.7*sl1;
+		moyen=moyen+r;
+		surf=surf+Pi*r*r;
+
+		p1=newp; Point(p1)={x-r,y,0,sl2};
+		p2=newp; Point(p2)={x,y+r,0,sl2};
+		p3=newp; Point(p3)={x+r,y,0,sl2};
+		p4=newp; Point(p4)={x,y-r,0,sl2};
+		pc=newp; Point(pc)={x,y,0,sl2};
+
+		c1 = newreg; Circle(c1) = {p1,pc,p2};
+		c2 = newreg; Circle(c2) = {p2,pc,p3};
+		c3 = newreg; Circle(c3) = {p3,pc,p4};
+		c4 = newreg; Circle(c4) = {p4,pc,p1};
+
+//		Transfinite Line {c3, c2, c4, c1} = 4 Using Progression 1;
+		num+=1;
+		l[num]=newreg; Line Loop(l[num]) = {c1,c2,c3,c4}; 
+	EndFor	
+EndFor
+l[0]=newreg;
+Line Loop(l[0])={1,2,3,4};
+Plane Surface(11)={l[]};
+Physical Line(1)={1}; 
+Physical Line(2)={2};
+Physical Line(3)={3};
+Physical Line(4)={4}; 
+Physical Surface(11)={11};
+Physical Point(1)={1}; 
+Physical Point(2)={2};
+Physical Point(3)={3};
+Physical Point(4)={4}; 
+//Transfinite Line {3, 2, 4, 1} = 5*n Using Progression 1;
+//Transfinite Surface{11};
+//Recombine Surface{11};
+
+Translate {-L/2, -L/2, 0} {
+  Surface{11};
+}
+
diff --git a/dG3D/benchmarks/nonLinearMixedBC_2D_DirectionFollowing/idealHole_mixBC.py b/dG3D/benchmarks/nonLinearMixedBC_2D_DirectionFollowing/idealHole_mixBC.py
new file mode 100644
index 0000000000000000000000000000000000000000..31233836f0331c62f661563a95f1bff370ae170e
--- /dev/null
+++ b/dG3D/benchmarks/nonLinearMixedBC_2D_DirectionFollowing/idealHole_mixBC.py
@@ -0,0 +1,118 @@
+#coding-Utf-8-*-
+
+from gmshpy import *
+from dG3Dpy import*
+from math import*
+
+#script to launch PBC problem with a python script
+
+# material law
+lawnum = 11 # unique number of law
+
+
+E = 70E3
+nu = 0.3
+K = E/3./(1.-2.*nu)	# Bulk mudulus
+mu =E/2./(1.+nu)	  # Shear mudulus
+rho = 2.7 # Bulk mass
+sy0 = 507.e100
+h = 200
+
+# creation of material law
+
+law1 = dG3DLinearElasticMaterialLaw(lawnum,rho,E,nu)
+
+# geometry
+geofile="idealHole.geo" # name of mesh file
+meshfile="idealHole.msh" # name of mesh file
+
+
+# creation of part Domain
+nfield = 11 # number of the field (physical number of entity)
+dim =2
+myfield1 = dG3DDomain(10,nfield,0,lawnum,0,dim)
+
+
+# solver
+sol = 2  # Gmm=0 (default) Taucs=1 PETsc=2
+soltype =1 # StaticLinear=0 (default) StaticNonLinear=1
+nstep = 1  # number of step (used only if soltype=1)
+ftime =1.   # Final time (used only if soltype=1)
+tol=1.e-6  # relative tolerance for NR scheme (used only if soltype=1)
+nstepArch=1 # Number of step between 2 archiving (used only if soltype=1)
+system = 3 # Displacement elimination =0 Multiplier elimination = 1 Displacement+ multiplier = 2
+control = 0 # load control = 0 arc length control euler = 12
+# creation of Solver
+mysolver = nonLinearMechSolver(1000)
+mysolver.createModel(geofile,meshfile,2,2)
+#mysolver.loadModel(meshfile)
+mysolver.addDomain(myfield1)
+mysolver.addMaterialLaw(law1)
+mysolver.Scheme(soltype)
+mysolver.Solver(sol)
+mysolver.snlData(nstep,ftime,tol)
+mysolver.setSystemType(system)
+mysolver.setControlType(control)
+mysolver.stiffnessModification(bool(1))
+mysolver.iterativeProcedure(bool(1))
+mysolver.setMessageView(bool(1))
+
+#rve - periodicity
+mysolver.setPeriodicity(0.5,0,0,"x")
+mysolver.setPeriodicity(0,0.5,0,"y")
+mysolver.setPeriodicity(0,0,1.,"z")
+
+#boundary condition
+microBC = nonLinearOrthogonalMixedBCDirectionFollowing(10,2)
+microBC.setOrder(1)
+microBC.setBCPhysical(1,4,3,2)
+
+cs = 0.5
+sn = sqrt(1.-cs*cs)
+
+microBC.setSUBCDirection(cs,sn,0.)
+microBC.setKUBCDirection(-sn,cs,0.)
+
+# Deformation gradient
+microBC.setDeformationGradient(1.01,0.0,0.0,0,1.0,0,0,0,1.)
+
+mysolver.addMicroBC(microBC)
+
+#stress averaging flag and averaging method 0- VOLUME, 1- SURFACE
+mysolver.stressAveragingFlag(bool(1)) # set stress averaging ON- 0 , OFF-1
+mysolver.setStressAveragingMethod(0) # 0 -volume 1- surface
+#tangent averaging flag
+mysolver.tangentAveragingFlag(bool(1)) # set tangent averaging ON -0, OFF -1
+mysolver.setTangentAveragingMethod(2,1e-6) # 0- perturbation 1- condensation
+
+# other BC
+mysolver.displacementBC("Face",11,2,0.)
+
+
+# build view
+mysolver.internalPointBuildView("Green-Lagrange_xx",IPField.STRAIN_XX, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_yy",IPField.STRAIN_YY, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_zz",IPField.STRAIN_ZZ, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_xy",IPField.STRAIN_XY, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_yz",IPField.STRAIN_YZ, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_xz",IPField.STRAIN_XZ, 1, 1);
+mysolver.internalPointBuildView("sig_xx",IPField.SIG_XX, 1, 1);
+mysolver.internalPointBuildView("sig_yy",IPField.SIG_YY, 1, 1);
+mysolver.internalPointBuildView("sig_zz",IPField.SIG_ZZ, 1, 1);
+mysolver.internalPointBuildView("sig_xy",IPField.SIG_XY, 1, 1);
+mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, 1);
+mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, 1);
+mysolver.internalPointBuildView("sig_VM",IPField.SVM, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange equivalent strain",IPField.GL_EQUIVALENT_STRAIN, 1, 1);
+mysolver.internalPointBuildView("Equivalent plastic strain",IPField.PLASTICSTRAIN, 1, 1);
+
+# solve
+mysolver.solve()
+
+# test check
+check = TestCheck()
+check.equal(1.692019e+03,mysolver.getHomogenizedStress(0,0),1.e-5)
+check.equal(1.692019e+05,mysolver.getHomogenizedTangent(0,0,0,0),1.e-5)
+
+
+
diff --git a/dG3D/benchmarks/nonLocalLemaitreChabocheCube/CMakeLists.txt b/dG3D/benchmarks/nonLocalLemaitreChabocheCube/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0ffbe58c0ac10e82490645d46e86b723386b2590
--- /dev/null
+++ b/dG3D/benchmarks/nonLocalLemaitreChabocheCube/CMakeLists.txt
@@ -0,0 +1,12 @@
+# test file
+
+set(PYFILE cubeNonLocalJ2Hyper.py)
+
+set(FILES2DELETE 
+  cube.msh
+  *.csv
+  disp*
+  stress*
+)
+
+add_cm3python_mpi_test(3 ${PYFILE} "${FILES2DELETE}")
diff --git a/dG3D/benchmarks/nonLocalLemaitreChabocheCube/cube.geo b/dG3D/benchmarks/nonLocalLemaitreChabocheCube/cube.geo
new file mode 100644
index 0000000000000000000000000000000000000000..300f7cbeb0184703fa9715ed1d7d1fa202cf5019
--- /dev/null
+++ b/dG3D/benchmarks/nonLocalLemaitreChabocheCube/cube.geo
@@ -0,0 +1,105 @@
+// Test case a SCB with a vertical load at its free extremity
+// Size
+
+//definition of unit
+mm = 1e-03;
+
+// volum fraction
+
+f=0.45;
+
+// characteristic size for fibe
+R=0.05*mm;             // fiber radius
+ly = 2.0*R*Sqrt(Pi/(2.0*Sqrt(3.0)*f));  //distance between fiber
+lx = ly*Sqrt(3.0)/2.0;
+
+
+x=4*ly;
+y=4*lx;
+z=0.5*mm;
+
+// Characteristic length
+Lc1=R/2.5;
+
+// definition of points
+Point(1) = { 0.0 , 0.0 , 0.0 , Lc1};
+Point(2) = {  x  , 0.0 , 0.0 , Lc1};
+Point(3) = {  x  ,  y  , 0.0 , Lc1};
+Point(4) = { 0.0 ,  y  , 0.0 , Lc1};
+Point(5) = { 0.0 , 0.0 , z , Lc1};
+Point(6) = {  x  , 0.0 , z , Lc1};
+Point(7) = {  x  ,  y  , z , Lc1};
+Point(8) = { 0.0 ,  y  , z , Lc1};
+
+// Line between points
+Line(1) = {1,2};
+Line(2) = {2,3};
+Line(3) = {3,4};
+Line(4) = {4,1};
+Line(5) = {5,6};
+Line(6) = {6,7};
+Line(7) = {7,8};
+Line(8) = {8,5};
+Line(9) = {1,5};
+Line(10)= {2,6};
+Line(11)= {3,7};
+Line(12)= {4,8};
+
+// Surface definition
+Line Loop(1) = {1,2,3,4};
+Line Loop(2) = {5,6,7,8};
+Line Loop(3) = {1,10,-5,-9};
+Line Loop(4) = {2,11,-6,-10};
+Line Loop(5) = {3,12,-7,-11};
+Line Loop(6) = {4,9,-8,-12};
+
+Plane Surface(1) = {1};
+Plane Surface(2) = {2};
+Plane Surface(3) = {3};
+Plane Surface(4) = {4};
+Plane Surface(5) = {5};
+Plane Surface(6) = {6};
+
+//VOlume
+
+Surface Loop(7) = {1,2,3,4,5,6};
+Volume(1) = {7};
+
+// Physical objects to applied BC and material
+Physical Surface(1234) = {1};
+Physical Surface(5678) = {2};
+Physical Surface(1265) = {3};
+Physical Surface(2376) = {4};
+Physical Surface(3487) = {5};
+Physical Surface(4158) = {6};
+Physical Line(12) = {1};
+Physical Line(23) = {2};
+Physical Line(34) = {3};
+Physical Line(41) = {4};
+Physical Line(56) = {5};
+Physical Line(67) = {6};
+Physical Line(78) = {7};
+Physical Line(85) = {8};
+Physical Line(15) = {9};
+Physical Line(26) = {10};
+Physical Line(37) = {11};
+Physical Line(48) = {12};
+
+Physical Point(1) ={1};
+Physical Point(2) ={2};
+Physical Point(3) ={3};
+Physical Point(4) ={4};
+Physical Point(5) ={5};
+Physical Point(6) ={6};
+Physical Point(7) ={7};
+Physical Point(8) ={8};
+
+Physical Volume(10) ={1};
+
+// define transfinite mesh
+Transfinite Line {1,2,3,4,5,6,7,8} = 3;
+Transfinite Line {9,10,11,12} = 3;
+Transfinite Surface {1,2,3,4,5,6} ;
+Recombine Surface {1,2,3,4,5,6} ;
+Transfinite Volume {1};
+
diff --git a/dG3D/benchmarks/nonLocalLemaitreChabocheCube/cubeNonLocalJ2Hyper.py b/dG3D/benchmarks/nonLocalLemaitreChabocheCube/cubeNonLocalJ2Hyper.py
new file mode 100644
index 0000000000000000000000000000000000000000..eee502d5684c804bc25ce1985c8c52fe110be2b2
--- /dev/null
+++ b/dG3D/benchmarks/nonLocalLemaitreChabocheCube/cubeNonLocalJ2Hyper.py
@@ -0,0 +1,102 @@
+#coding-Utf-8-*-
+from gmshpy import *
+from dG3Dpy import*
+
+#script to launch beam problem with a python script
+
+# material law
+lawnum = 1 # unique number of law
+rho   = 7850
+young = 2.89e9
+nu    = 0.3 
+sy0   = 35e6
+h     = 73e6
+hexp  = 60
+
+
+# geometry
+geofile="cube.geo" # name of mesh file
+meshfile="cube.msh" # name of mesh file
+
+# solver
+sol = 2  # Gmm=0 (default) Taucs=1 PETsc=2
+soltype = 1 # StaticLinear=0 (default) StaticNonLinear=1
+nstep = 100   # number of step (used only if soltype=1)
+ftime =1.   # Final time (used only if soltype=1)
+tol=1.e-6   # relative tolerance for NR scheme (used only if soltype=1)
+nstepArch=1 # Number of step between 2 archiving (used only if soltype=1)
+fullDg = True #O = CG, 1 = DG
+space1 = 0 # function space (Lagrange=0)
+beta1  = 10.
+
+#lemaitre chaboche
+alpha = 2.0e6
+n     = 0.5            
+p0    = 0.00
+pc    = 10       
+
+#  compute solution and BC (given directly to the solver
+# creation of law
+#law1 = J2LinearDG3DMaterialLaw(lawnum,rho,young,nu,sy0,h)
+harden = ExponentialJ2IsotropicHardening(1,sy0, h, hexp)
+#cl     = AnisotropicCLengthLaw(1, 8.45e-11, 8.45e-11, 2e-6, 0, 90, 0)
+cl     = IsotropicCLengthLaw(1, 2e-6)
+damlaw = LemaitreChabocheDamageLaw(1, p0, pc, n, alpha)
+law1   = NonLocalDamageJ2HyperDG3DMaterialLaw(lawnum,rho,young,nu,harden,cl,damlaw)
+
+# creation of ElasticField
+nfield = 10 # number of the field (physical number of surface)
+#myfield1 = dG3DDomain(1000,nfield,space1,lawnum,fullDg)
+myfield1 = nonLocalDamageDG3DDomain(1000,nfield,space1,lawnum,fullDg,1.e6)
+
+#myfield1.matrixByPerturbation(1,1,1,1e-8)
+myfield1.stabilityParameters(beta1)
+myfield1.nonLocalStabilityParameters(beta1,fullDg)
+# creation of Solver
+mysolver = nonLinearMechSolver(1000)
+mysolver.createModel(geofile,meshfile,3,2)
+mysolver.addDomain(myfield1)
+mysolver.addMaterialLaw(law1)
+mysolver.Scheme(soltype)
+mysolver.Solver(sol)
+mysolver.snlData(nstep,ftime,tol)
+mysolver.stepBetweenArchiving(nstepArch)
+# BC
+#shearing
+#mysolver.displacementBC("Face",1234,0,0.)
+#mysolver.displacementBC("Face",1234,1,0.)
+#mysolver.displacementBC("Face",1234,2,0.)
+#mysolver.displacementBC("Face",5678,1,0.00)
+#mysolver.displacementBC("Face",5678,0,0.00001)
+#mysolver.forceBC("Face",2376,2,100000000)
+#mysolver.forceBC("Face",4158,2,-100000000)
+#mysolver.forceBC("Face",5678,0,100000000)
+#tension along z
+mysolver.displacementBC("Face",1234,2,0.)
+mysolver.displacementBC("Face",5678,2,0.0002)
+mysolver.displacementBC("Face",2376,0,0.)
+mysolver.displacementBC("Face",1265,1,0.)
+
+
+mysolver.internalPointBuildView("svm",IPField.SVM, 1, 1)
+mysolver.internalPointBuildView("sig_xx",IPField.SIG_XX, 1, 1)
+mysolver.internalPointBuildView("sig_yy",IPField.SIG_YY, 1, 1)
+mysolver.internalPointBuildView("sig_zz",IPField.SIG_ZZ, 1, 1)
+mysolver.internalPointBuildView("sig_xy",IPField.SIG_XY, 1, 1)
+mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, 1)
+mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, 1)
+mysolver.internalPointBuildView("epl",IPField.PLASTICSTRAIN, 1, 1)
+mysolver.archivingForceOnPhysicalGroup("Face", 1234, 2)
+mysolver.archivingForceOnPhysicalGroup("Face", 5678, 2)
+mysolver.internalPointBuildView("damage",IPField.DAMAGE,1,1)
+mysolver.archivingNodeIP(1, IPField.PLASTICSTRAIN,1);
+mysolver.archivingIPOnPhysicalGroup("Volume",10, IPField.PLASTICSTRAIN,IPField.MIN_VALUE);
+mysolver.archivingIPOnPhysicalGroup("Volume",10, IPField.PLASTICSTRAIN,IPField.MAX_VALUE);
+mysolver.archivingIPOnPhysicalGroup("Volume",10, IPField.PLASTICSTRAIN,IPField.MEAN_VALUE);
+
+
+mysolver.solve()
+
+check = TestCheck()
+check.equal(-1.651738e+01,mysolver.getArchivedForceOnPhysicalGroup("Face", 1234, 2),1.e-5)
+
diff --git a/dG3D/benchmarks/pathFollowing_cohesive/model.py b/dG3D/benchmarks/pathFollowing_cohesive/model.py
index 597c80bff32a5c22f22af45776585cdff365d414..46d9bbb67fbe4c049ea03a7bca588074a10cc14a 100644
--- a/dG3D/benchmarks/pathFollowing_cohesive/model.py
+++ b/dG3D/benchmarks/pathFollowing_cohesive/model.py
@@ -115,4 +115,4 @@ mysolver.archivingForceOnPhysicalGroup('Face',1,1)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(-1.195570e+03,mysolver.getArchivedForceOnPhysicalGroup("Face", 1, 1),1.e-4)
+check.equal(-1.227989e+03,mysolver.getArchivedForceOnPhysicalGroup("Face", 1, 1),1.e-2)
diff --git a/dG3D/benchmarks/shiftedPBC_2D/CMakeLists.txt b/dG3D/benchmarks/shiftedPBC_2D/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..80f072bb65ce022a9c558683c7d80db4a603143f
--- /dev/null
+++ b/dG3D/benchmarks/shiftedPBC_2D/CMakeLists.txt
@@ -0,0 +1,12 @@
+# test file
+
+set(PYFILE idealHole_mixBC.py)
+
+set(FILES2DELETE 
+  E_0_GP_0_out.txt
+  E_0_GP_0_disp.msh
+  E_0_GP_0_stress.msh
+  E_0_GP_0*.csv
+)
+
+add_cm3python_test(${PYFILE} "${FILES2DELETE}")
diff --git a/dG3D/benchmarks/shiftedPBC_2D/idealHole.geo b/dG3D/benchmarks/shiftedPBC_2D/idealHole.geo
new file mode 100644
index 0000000000000000000000000000000000000000..ea71db5a835b3024cd654f73ec07b12a82b2fbb2
--- /dev/null
+++ b/dG3D/benchmarks/shiftedPBC_2D/idealHole.geo
@@ -0,0 +1,61 @@
+
+mm=1.0;
+n=1;
+L=1;
+sl1=0.07*L/n;
+Point(1)={0,0,0,sl1};
+Point(2)={L,0,0,sl1};
+Point(3)={L,L,0,sl1};
+Point(4)={0,L,0,sl1};
+Line(1)={1,2};
+Line(2)={2,3};
+Line(3)={3,4};
+Line(4)={4,1};
+x0=0.5*L/n; y0=0.5*L/n; r=0.3*L/n; 
+num=0;
+moyen=0;
+surf=0;
+For i In {0:n-1}
+  	For j In {0:n-1}
+		x=x0*(2*i+1);
+		y=y0*(2*j+1);
+		sl2=0.7*sl1;
+		moyen=moyen+r;
+		surf=surf+Pi*r*r;
+
+		p1=newp; Point(p1)={x-r,y,0,sl2};
+		p2=newp; Point(p2)={x,y+r,0,sl2};
+		p3=newp; Point(p3)={x+r,y,0,sl2};
+		p4=newp; Point(p4)={x,y-r,0,sl2};
+		pc=newp; Point(pc)={x,y,0,sl2};
+
+		c1 = newreg; Circle(c1) = {p1,pc,p2};
+		c2 = newreg; Circle(c2) = {p2,pc,p3};
+		c3 = newreg; Circle(c3) = {p3,pc,p4};
+		c4 = newreg; Circle(c4) = {p4,pc,p1};
+
+//		Transfinite Line {c3, c2, c4, c1} = 4 Using Progression 1;
+		num+=1;
+		l[num]=newreg; Line Loop(l[num]) = {c1,c2,c3,c4}; 
+	EndFor	
+EndFor
+l[0]=newreg;
+Line Loop(l[0])={1,2,3,4};
+Plane Surface(11)={l[]};
+Physical Line(1)={1}; 
+Physical Line(2)={2};
+Physical Line(3)={3};
+Physical Line(4)={4}; 
+Physical Surface(11)={11};
+Physical Point(1)={1}; 
+Physical Point(2)={2};
+Physical Point(3)={3};
+Physical Point(4)={4}; 
+//Transfinite Line {3, 2, 4, 1} = 5*n Using Progression 1;
+//Transfinite Surface{11};
+//Recombine Surface{11};
+
+Translate {-L/2, -L/2, 0} {
+  Surface{11};
+}
+
diff --git a/dG3D/benchmarks/shiftedPBC_2D/idealHole_mixBC.py b/dG3D/benchmarks/shiftedPBC_2D/idealHole_mixBC.py
new file mode 100644
index 0000000000000000000000000000000000000000..8fe297bf0d5fb7be0e197146e49fe66afcdfe5bd
--- /dev/null
+++ b/dG3D/benchmarks/shiftedPBC_2D/idealHole_mixBC.py
@@ -0,0 +1,123 @@
+#coding-Utf-8-*-
+
+from gmshpy import *
+from dG3Dpy import*
+from math import*
+
+#script to launch PBC problem with a python script
+
+# material law
+lawnum = 11 # unique number of law
+
+
+E = 70E3
+nu = 0.3
+K = E/3./(1.-2.*nu)	# Bulk mudulus
+mu =E/2./(1.+nu)	  # Shear mudulus
+rho = 2.7 # Bulk mass
+sy0 = 507.e100
+h = 200
+
+# creation of material law
+
+law1 = dG3DLinearElasticMaterialLaw(lawnum,rho,E,nu)
+
+# geometry
+geofile="idealHole.geo" # name of mesh file
+meshfile="idealHole.msh" # name of mesh file
+
+
+# creation of part Domain
+nfield = 11 # number of the field (physical number of entity)
+dim =2
+myfield1 = dG3DDomain(10,nfield,0,lawnum,0,dim)
+
+
+# solver
+sol = 2  # Gmm=0 (default) Taucs=1 PETsc=2
+soltype =1 # StaticLinear=0 (default) StaticNonLinear=1
+nstep = 1  # number of step (used only if soltype=1)
+ftime =1.   # Final time (used only if soltype=1)
+tol=1.e-6  # relative tolerance for NR scheme (used only if soltype=1)
+nstepArch=1 # Number of step between 2 archiving (used only if soltype=1)
+system = 1 # Displacement elimination =0 Multiplier elimination = 1 Displacement+ multiplier = 2
+control = 0 # load control = 0 arc length control euler = 12
+# creation of Solver
+mysolver = nonLinearMechSolver(1000)
+mysolver.createModel(geofile,meshfile,2,2)
+#mysolver.loadModel(meshfile)
+mysolver.addDomain(myfield1)
+mysolver.addMaterialLaw(law1)
+mysolver.Scheme(soltype)
+mysolver.Solver(sol)
+mysolver.snlData(nstep,ftime,tol)
+mysolver.setSystemType(system)
+mysolver.setControlType(control)
+mysolver.stiffnessModification(bool(1))
+mysolver.iterativeProcedure(bool(1))
+mysolver.setMessageView(bool(1))
+
+#rve - periodicity
+mysolver.setPeriodicity(1.,0,0,"x")
+mysolver.setPeriodicity(0,1.,0,"y")
+mysolver.setPeriodicity(0,0,1.,"z")
+
+#boundary condition
+microBC = nonLinearShiftedPeriodicBC(10,2)
+microBC.setOrder(1)
+microBC.setBCPhysical(1,4,3,2)
+
+method =1	# Periodic mesh = 0, Langrange interpolation = 1, Cubic spline interpolation =2,  FE linear= 3, FE Quad = 4
+degree = 9	# Order used for polynomial interpolation 
+addvertex = 0 # Polynomial interpolation by mesh vertex = 0, Polynomial interpolation by virtual vertex 
+microBC.setPeriodicBCOptions(method, degree,bool(addvertex)) 
+theta = 0.8*pi
+cs = cos(theta)
+sn = sin(theta)
+microBC.setShiftPBCNormal(sn,-cs,0)
+
+# Deformation gradient
+microBC.setDeformationGradient(1.01,0.0,0.0,0,1.0,0,0,0,1.)
+
+mysolver.addMicroBC(microBC)
+
+#stress averaging flag and averaging method 0- VOLUME, 1- SURFACE
+mysolver.stressAveragingFlag(bool(1)) # set stress averaging ON- 0 , OFF-1
+mysolver.setStressAveragingMethod(0) # 0 -volume 1- surface
+#tangent averaging flag
+mysolver.tangentAveragingFlag(bool(1)) # set tangent averaging ON -0, OFF -1
+mysolver.setTangentAveragingMethod(2,1e-6) # 0- perturbation 1- condensation
+
+# other BC
+mysolver.displacementBC("Face",11,2,0.)
+
+
+# build view
+mysolver.internalPointBuildView("Green-Lagrange_xx",IPField.STRAIN_XX, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_yy",IPField.STRAIN_YY, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_zz",IPField.STRAIN_ZZ, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_xy",IPField.STRAIN_XY, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_yz",IPField.STRAIN_YZ, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_xz",IPField.STRAIN_XZ, 1, 1);
+mysolver.internalPointBuildView("sig_xx",IPField.SIG_XX, 1, 1);
+mysolver.internalPointBuildView("sig_yy",IPField.SIG_YY, 1, 1);
+mysolver.internalPointBuildView("sig_zz",IPField.SIG_ZZ, 1, 1);
+mysolver.internalPointBuildView("sig_xy",IPField.SIG_XY, 1, 1);
+mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, 1);
+mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, 1);
+mysolver.internalPointBuildView("sig_VM",IPField.SVM, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange equivalent strain",IPField.GL_EQUIVALENT_STRAIN, 1, 1);
+mysolver.internalPointBuildView("Equivalent plastic strain",IPField.PLASTICSTRAIN, 1, 1);
+
+mysolver.OneUnknownBuildView("dispX",0,1);
+mysolver.OneUnknownBuildView("dispY",1,1);
+# solve
+mysolver.solve()
+
+# test check
+check = TestCheck()
+check.equal(4.188761e+02,mysolver.getHomogenizedStress(0,0),1.e-5)
+check.equal(4.188761e+04,mysolver.getHomogenizedTangent(0,0,0,0),1.e-5)
+
+
+
diff --git a/dG3D/benchmarks/smpT22/CMakeLists.txt b/dG3D/benchmarks/smpT22/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0467dd68cafcd6d70ffc74955662359e2d2175ec
--- /dev/null
+++ b/dG3D/benchmarks/smpT22/CMakeLists.txt
@@ -0,0 +1,12 @@
+# test file
+
+set(PYFILE SMP.py)
+
+set(FILES2DELETE 
+  cube.msh
+  *.csv
+  disp*
+  stress*
+)
+
+add_cm3python_mpi_test(3 ${PYFILE} "${FILES2DELETE}")
diff --git a/dG3D/benchmarks/smpT22/SMP.py b/dG3D/benchmarks/smpT22/SMP.py
new file mode 100644
index 0000000000000000000000000000000000000000..6ee679592e47d2d89674fe2b055cccf1e6125225
--- /dev/null
+++ b/dG3D/benchmarks/smpT22/SMP.py
@@ -0,0 +1,190 @@
+#coding-Utf-8-*-
+from gmshpy import *
+
+#from dG3DpyDebug import*
+from dG3Dpy import *
+
+
+#script to launch beam problem with a python script
+
+# material law
+lawnum= 1 # unique number of law
+rho   = 1020.
+#young =Ex=Ey=Ez =2.1e11
+#nu    =Vxy=Vxz=Vyz= 0.3
+#MUxy=MUxz=MUyz=Ex/(2.*(1.+Vxy)) 
+cv=1.
+#Kx=Ky=Kz=51.9
+Kx=Ky=Kz=0.5
+#alphax=alphay=alphaz=12.e-6
+
+mu_groundState3=0.75e6
+Im3=5.
+pi=3.14159
+
+tinitial = 273+22
+#tinitial = 273+58#58  50
+Tr=310
+Nmu_groundState2= 0.045
+mu_groundState2=1.38e6
+Im2=6.3
+Sgl2=58.e6 
+Sr2=3.e2
+Delta=2.6
+m2=0.19
+epsilonr=5.2e-4
+n=2.1
+epsilonp02=5.2e-4
+alphar1=25.e-5
+alphagl1=13.e-5
+Ggl1=156.e6
+Gr1=13.4e6
+Mgl1=7.4e6
+Mr1=0.168e6
+Mugl1=0.35
+Mur1=0.49
+epsilon01=1.73e13
+Qgl1=1.4e-19
+Qr1=0.2e-21
+epsygl1=0.14 
+#epsyr1=0.
+d1=0.015
+Kb=1.3806488e-23
+m1=0.17
+V1=2.16e-27
+alphap=0.058
+Sa0=0.
+ha1=230.
+b1=5850e6
+g1=5.8
+phai01=0.
+Z1=0.083
+r1=1.3
+s1=0.005
+Sb01=0.
+Hgl1=1.56e6
+Lgl1=0.44e6
+Hr1=0.76e6
+Lr1=0.006e6
+l1=0.5
+be1=0.5
+#kb=1.3806488e-23
+v=0.6
+c0=1710.*rho 
+c1=4.1*rho
+
+# geometry
+geofile="cube.geo" # name of mesh file
+meshfile="cube.msh" # name of mesh file
+
+# solver
+sol = 2  # Gmm=0 (default) Taucs=1 PETsc=2
+soltype = 1 # StaticLinear=0 (default) StaticNonLinear=1
+nstep =500# number of step (used only if soltype=1)#640
+ftime1 =630   # Final time (used only if soltype=1)22 = t= 630
+ftime  =640   # Final time (used only if soltype=1)22  t = 680
+#ftime =360#58 330.
+#ftime =308.   # Final time (used only if soltype=1)
+tol=1.e-4   # relative tolerance for NR scheme (used only if soltype=1)
+nstepArch=1 # Number of step between 2 archiving (used only if soltype=1)
+fullDg = True #O = CG, 1 = DG
+space1 = 0 # function space (Lagrange=0)
+beta1  = 40.
+
+alpha = beta=gamma=0.
+#Tangent2
+
+#  compute solution and BC (given directly to the solver
+# creation of law
+
+#law1   = SMPDG3DMaterialLaw( lawnum,rho,Ex, Ey, Ez,Vxy,Vxz,Vyz,MUxy,MUxz,MUyz,alpha,beta,gamma,cv,t0,Kx,Ky,Kz,alphax,alphay,alphaz,mu_groundState3,Im3,pi,
+#Tr,Nmu_groundState2, mu_groundState2,  Im2,Sgl2, Sr2, Delta, m2,epsilonr,n,epsilonp02)
+law1   = SMPDG3DMaterialLaw( lawnum,rho,alpha,beta,gamma,tinitial,Kx,Ky,Kz,mu_groundState3,Im3,pi,
+Tr,Nmu_groundState2, mu_groundState2,  Im2,Sgl2, Sr2, Delta, m2,epsilonr,n,epsilonp02, alphar1, alphagl1, Ggl1, Gr1, Mgl1, Mr1, Mugl1, Mur1, epsilon01, Qgl1,
+		           Qr1, epsygl1 , d1,  m1, V1,  alphap, Sa0, ha1, b1, g1, phai01, Z1,r1, s1, Sb01, Hgl1, Lgl1, Hr1, Lr1, l1, Kb, be1,c0,v,c1)
+
+
+# creation of ElasticField
+nfield = 10 # number of the field (physical number of surface)
+#myfield1 = dG3DDomain(1000,nfield,space1,lawnum,fullDg)
+
+myfield1 = ThermoMechanicsDG3DDomain(1000,nfield,space1,lawnum,fullDg,1.e10)
+
+myfield1.matrixByPerturbation(0,0,0,1e-8)
+#myfield1.matrixByPerturbation(1,1,1,1e-8)
+myfield1.stabilityParameters(beta1)
+myfield1.ThermoMechanicsStabilityParameters(beta1,fullDg)
+# creation of Solver
+mysolver = nonLinearMechSolver(1000)
+mysolver.createModel(geofile,meshfile,3,1)
+mysolver.addDomain(myfield1)
+mysolver.addMaterialLaw(law1)
+mysolver.Scheme(soltype)
+mysolver.Solver(sol)
+mysolver.snlData(nstep,ftime,tol)
+mysolver.snlManageTimeStep(25, 3, 2, 10)
+mysolver.stepBetweenArchiving(nstepArch)
+# BC
+
+#mechanical BC
+
+cyclicFunctionDisp=cycleFunctionTime(0., 0, ftime1, -0.000628, ftime , -0.00056);#22 working
+#cyclicFunctionDisp=cycleFunctionTime(0., 0, ftime/2., -0.000314, ftime , 0.);
+#cyclicFunctionDisp=cycleFunctionTime(0., 0, ftime1,  -0.000315, ftime,  -0.00028);#22 
+#cyclicFunctionDisp=cycleFunctionTime(0., 0, ftime1,  -0.0004, ftime,  -0.00044);#22
+#cyclicFunctionDisp=cycleFunctionTime(0., 0, ftime/2., -0.000613, ftime , 0.);#58   -0.000613
+
+
+mysolver.displacementBC("Face",1234,2,0.)
+mysolver.displacementBC("Face",2376,0,0.)
+mysolver.displacementBC("Face",1265,1,0.)
+mysolver.displacementBC("Face",5678,2,cyclicFunctionDisp)
+#mysolver.displacementBC("Volume",nfield,0,0)#when the michenisms terms dosen t have pressure
+#mysolver.displacementBC("Volume",nfield,1,0)#when the mechnisms terms dosen t have pressure
+
+
+#thermal BC
+cyclicFunctionTemp=cycleFunctionTime(0., tinitial, ftime,  tinitial);
+mysolver.displacementBC("Face",1234,3,cyclicFunctionTemp)
+mysolver.displacementBC("Face",5678,3,cyclicFunctionTemp)
+mysolver.displacementBC("Face",2376,3,cyclicFunctionTemp)
+mysolver.displacementBC("Face",1265,3,cyclicFunctionTemp)
+#mysolver.initialBC("Volume","Position",nfield,3,tinitial)
+mysolver.displacementBC("Volume",nfield,3,cyclicFunctionTemp)
+
+#electrical BC
+cyclicFunctionvolt=cycleFunctionTime(0., 0.0,  ftime,0.0);
+mysolver.initialBC("Volume","Position",nfield,4,cyclicFunctionvolt)
+mysolver.displacementBC("Volume",nfield,4,cyclicFunctionvolt)
+
+mysolver.internalPointBuildView("svm",IPField.SVM, 1, 1)
+mysolver.internalPointBuildView("sig_xx",IPField.SIG_XX, 1, 1)
+mysolver.internalPointBuildView("sig_yy",IPField.SIG_YY, 1, 1)
+mysolver.internalPointBuildView("sig_zz",IPField.SIG_ZZ, 1, 1)
+mysolver.internalPointBuildView("sig_xy",IPField.SIG_XY, 1, 1)
+mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, 1)
+mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, 1)
+mysolver.internalPointBuildView("temperature",IPField.TEMPERATURE, 1, 1)
+mysolver.internalPointBuildView("qx",IPField.THERMALFLUX_X, 1, 1)
+mysolver.internalPointBuildView("qy",IPField.THERMALFLUX_Y, 1, 1)
+mysolver.internalPointBuildView("qz",IPField.THERMALFLUX_Z, 1, 1)
+
+mysolver.internalPointBuildView("voltage",IPField.VOLTAGE, 1, 1)
+mysolver.internalPointBuildView("qx",IPField.ELECTRICALFLUX_X, 1, 1)
+mysolver.internalPointBuildView("qy",IPField.ELECTRICALFLUX_Y, 1, 1)
+mysolver.internalPointBuildView("qz",IPField.ELECTRICALFLUX_Z, 1, 1)
+
+mysolver.archivingForceOnPhysicalGroup("Face", 1234, 2)
+mysolver.archivingForceOnPhysicalGroup("Face", 5678, 2)
+mysolver.archivingForceOnPhysicalGroup("Face", 1234, 3)
+mysolver.archivingForceOnPhysicalGroup("Face", 5678, 3)
+mysolver.archivingIPOnPhysicalGroup("Volume",nfield, IPField.SIG_ZZ,IPField.MEAN_VALUE);
+mysolver.archivingIPOnPhysicalGroup("Volume",nfield, IPField.STRAIN_ZZ,IPField.MEAN_VALUE);
+mysolver.archivingIPOnPhysicalGroup("Volume",nfield, IPField.TEMPERATURE,IPField.MEAN_VALUE);
+
+
+mysolver.solve()
+
+check = TestCheck()
+check.equal(-3.914853e+01,mysolver.getArchivedForceOnPhysicalGroup("Face", 1234, 2),1.e-5)
+
diff --git a/dG3D/benchmarks/smpT22/cube.geo b/dG3D/benchmarks/smpT22/cube.geo
new file mode 100644
index 0000000000000000000000000000000000000000..0dbaad1fcfd2bed978ed031e84a0bff5b2fe240c
--- /dev/null
+++ b/dG3D/benchmarks/smpT22/cube.geo
@@ -0,0 +1,97 @@
+// Test case a SCB with a vertical load at its free extremity
+// Size
+
+//definition of unit
+mm = 1e-03;
+
+// volum fraction
+
+x=1*mm;
+y=1*mm;
+z=1*mm;
+
+// Characteristic length
+Lc1=z/2.5;
+
+// definition of points
+Point(1) = { 0.0 , 0.0 , 0.0 , Lc1};
+Point(2) = {  x  , 0.0 , 0.0 , Lc1};
+Point(3) = {  x  ,  y  , 0.0 , Lc1};
+Point(4) = { 0.0 ,  y  , 0.0 , Lc1};
+Point(5) = { 0.0 , 0.0 , z , Lc1};
+Point(6) = {  x  , 0.0 , z , Lc1};
+Point(7) = {  x  ,  y  , z , Lc1};
+Point(8) = { 0.0 ,  y  , z , Lc1};
+
+// Line between points
+Line(1) = {1,2};
+Line(2) = {2,3};
+Line(3) = {3,4};
+Line(4) = {4,1};
+Line(5) = {5,6};
+Line(6) = {6,7};
+Line(7) = {7,8};
+Line(8) = {8,5};
+Line(9) = {1,5};
+Line(10)= {2,6};
+Line(11)= {3,7};
+Line(12)= {4,8};
+
+// Surface definition
+Line Loop(1) = {1,2,3,4};
+Line Loop(2) = {5,6,7,8};
+Line Loop(3) = {1,10,-5,-9};
+Line Loop(4) = {2,11,-6,-10};
+Line Loop(5) = {3,12,-7,-11};
+Line Loop(6) = {4,9,-8,-12};
+
+Plane Surface(1) = {1};
+Plane Surface(2) = {2};
+Plane Surface(3) = {3};
+Plane Surface(4) = {4};
+Plane Surface(5) = {5};
+Plane Surface(6) = {6};
+
+//VOlume
+
+Surface Loop(7) = {1,2,3,4,5,6};
+Volume(1) = {7};
+
+// Physical objects to applied BC and material
+Physical Surface(1234) = {1};
+Physical Surface(5678) = {2};
+Physical Surface(1265) = {3};
+Physical Surface(2376) = {4};
+Physical Surface(3487) = {5};
+Physical Surface(4158) = {6};
+Physical Line(12) = {1};
+Physical Line(23) = {2};
+Physical Line(34) = {3};
+Physical Line(41) = {4};
+Physical Line(56) = {5};
+Physical Line(67) = {6};
+Physical Line(78) = {7};
+Physical Line(85) = {8};
+Physical Line(15) = {9};
+Physical Line(26) = {10};
+Physical Line(37) = {11};
+Physical Line(48) = {12};
+
+Physical Point(1) ={1};
+Physical Point(2) ={2};
+Physical Point(3) ={3};
+Physical Point(4) ={4};
+Physical Point(5) ={5};
+Physical Point(6) ={6};
+Physical Point(7) ={7};
+Physical Point(8) ={8};
+
+Physical Volume(10) ={1};
+
+// define transfinite mesh
+Transfinite Line {1,2,3,4,5,6,7,8} = 3;
+Transfinite Line {9,10,11,12} =3;
+Transfinite Surface {1,2,3,4,5,6} ;
+Recombine Surface {1,2,3,4,5,6} ;
+Transfinite Volume {1};
+
diff --git a/dG3D/benchmarks/smpT58/CMakeLists.txt b/dG3D/benchmarks/smpT58/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0467dd68cafcd6d70ffc74955662359e2d2175ec
--- /dev/null
+++ b/dG3D/benchmarks/smpT58/CMakeLists.txt
@@ -0,0 +1,12 @@
+# test file
+
+set(PYFILE SMP.py)
+
+set(FILES2DELETE 
+  cube.msh
+  *.csv
+  disp*
+  stress*
+)
+
+add_cm3python_mpi_test(3 ${PYFILE} "${FILES2DELETE}")
diff --git a/dG3D/benchmarks/smpT58/SMP.py b/dG3D/benchmarks/smpT58/SMP.py
new file mode 100644
index 0000000000000000000000000000000000000000..e3e48cfc8926c6cf4f2f64ddecdc36cbdfdda2f8
--- /dev/null
+++ b/dG3D/benchmarks/smpT58/SMP.py
@@ -0,0 +1,190 @@
+#coding-Utf-8-*-
+from gmshpy import *
+
+#from dG3DpyDebug import*
+from dG3Dpy import *
+
+
+#script to launch beam problem with a python script
+
+# material law
+lawnum= 1 # unique number of law
+rho   = 1020.
+#young =Ex=Ey=Ez =2.1e11
+#nu    =Vxy=Vxz=Vyz= 0.3
+#MUxy=MUxz=MUyz=Ex/(2.*(1.+Vxy)) 
+cv=1.
+#Kx=Ky=Kz=51.9
+Kx=Ky=Kz=0.5
+#alphax=alphay=alphaz=12.e-6
+
+mu_groundState3=0.75e6
+Im3=5.
+pi=3.14159
+
+#tinitial = 273+22
+tinitial = 273+58#58  50
+Tr=310
+Nmu_groundState2= 0.045
+mu_groundState2=1.38e6
+Im2=6.3
+Sgl2=58.e6 
+Sr2=3.e2
+Delta=2.6
+m2=0.19
+epsilonr=5.2e-4
+n=2.1
+epsilonp02=5.2e-4
+alphar1=25.e-5
+alphagl1=13.e-5
+Ggl1=156.e6
+Gr1=13.4e6
+Mgl1=7.4e6
+Mr1=0.168e6
+Mugl1=0.35
+Mur1=0.49
+epsilon01=1.73e13
+Qgl1=1.4e-19
+Qr1=0.2e-21
+epsygl1=0.14 
+#epsyr1=0.
+d1=0.015
+Kb=1.3806488e-23
+m1=0.17
+V1=2.16e-27
+alphap=0.058
+Sa0=0.
+ha1=230.
+b1=5850e6
+g1=5.8
+phai01=0.
+Z1=0.083
+r1=1.3
+s1=0.005
+Sb01=0.
+Hgl1=1.56e6
+Lgl1=0.44e6
+Hr1=0.76e6
+Lr1=0.006e6
+l1=0.5
+be1=0.5
+#kb=1.3806488e-23
+v=0.6
+c0=1710.*rho 
+c1=4.1*rho
+
+# geometry
+geofile="cube.geo" # name of mesh file
+meshfile="cube.msh" # name of mesh file
+
+# solver
+sol = 2  # Gmm=0 (default) Taucs=1 PETsc=2
+soltype = 1 # StaticLinear=0 (default) StaticNonLinear=1
+nstep =3000# number of step (used only if soltype=1)#640
+#ftime1 =630   # Final time (used only if soltype=1)22 = t= 630
+#ftime  =640   # Final time (used only if soltype=1)22  t = 680
+ftime =360#58 330.
+#ftime =308.   # Final time (used only if soltype=1)
+tol=1.e-4   # relative tolerance for NR scheme (used only if soltype=1)
+nstepArch=1 # Number of step between 2 archiving (used only if soltype=1)
+fullDg = True #O = CG, 1 = DG
+space1 = 0 # function space (Lagrange=0)
+beta1  = 40
+
+alpha = beta=gamma=0.
+#Tangent2
+
+#  compute solution and BC (given directly to the solver
+# creation of law
+
+#law1   = SMPDG3DMaterialLaw( lawnum,rho,Ex, Ey, Ez,Vxy,Vxz,Vyz,MUxy,MUxz,MUyz,alpha,beta,gamma,cv,t0,Kx,Ky,Kz,alphax,alphay,alphaz,mu_groundState3,Im3,pi,
+#Tr,Nmu_groundState2, mu_groundState2,  Im2,Sgl2, Sr2, Delta, m2,epsilonr,n,epsilonp02)
+law1   = SMPDG3DMaterialLaw( lawnum,rho,alpha,beta,gamma,tinitial,Kx,Ky,Kz,mu_groundState3,Im3,pi,
+Tr,Nmu_groundState2, mu_groundState2,  Im2,Sgl2, Sr2, Delta, m2,epsilonr,n,epsilonp02, alphar1, alphagl1, Ggl1, Gr1, Mgl1, Mr1, Mugl1, Mur1, epsilon01, Qgl1,
+		           Qr1, epsygl1 , d1,  m1, V1,  alphap, Sa0, ha1, b1, g1, phai01, Z1,r1, s1, Sb01, Hgl1, Lgl1, Hr1, Lr1, l1, Kb, be1,c0,v,c1)
+
+
+# creation of ElasticField
+nfield = 10 # number of the field (physical number of surface)
+#myfield1 = dG3DDomain(1000,nfield,space1,lawnum,fullDg)
+
+myfield1 = ThermoMechanicsDG3DDomain(1000,nfield,space1,lawnum,fullDg,1.e10)
+
+myfield1.matrixByPerturbation(0,0,0,1e-8)
+#myfield1.matrixByPerturbation(1,1,1,1e-8)
+myfield1.stabilityParameters(beta1)
+myfield1.ThermoMechanicsStabilityParameters(beta1,fullDg)
+# creation of Solver
+mysolver = nonLinearMechSolver(1000)
+mysolver.createModel(geofile,meshfile,3,1)
+mysolver.addDomain(myfield1)
+mysolver.addMaterialLaw(law1)
+mysolver.Scheme(soltype)
+mysolver.Solver(sol)
+mysolver.snlData(nstep,ftime,tol)
+mysolver.snlManageTimeStep(25, 3, 2, 10)
+mysolver.stepBetweenArchiving(nstepArch)
+# BC
+
+#mechanical BC
+
+#cyclicFunctionDisp=cycleFunctionTime(0., 0, ftime1, -0.000628, ftime , -0.00056);#22 working
+#cyclicFunctionDisp=cycleFunctionTime(0., 0, ftime/2., -0.000314, ftime , 0.);
+#cyclicFunctionDisp=cycleFunctionTime(0., 0, ftime1,  -0.000315, ftime,  -0.00028);#22 
+#cyclicFunctionDisp=cycleFunctionTime(0., 0, ftime1,  -0.0004, ftime,  -0.00044);#22
+#cyclicFunctionDisp=cycleFunctionTime(0., 0, ftime/2., -0.000613, ftime , 0.);#58   -0.000613
+cyclicFunctionDisp=cycleFunctionTime(0., 0, 2.*ftime/3., -0.000613, ftime , -0.000613/2.);#58   -0.000613
+
+mysolver.displacementBC("Face",1234,2,0.)
+mysolver.displacementBC("Face",2376,0,0.)
+mysolver.displacementBC("Face",1265,1,0.)
+mysolver.displacementBC("Face",5678,2,cyclicFunctionDisp)
+#mysolver.displacementBC("Volume",nfield,0,0)#when the michenisms terms dosen t have pressure
+#mysolver.displacementBC("Volume",nfield,1,0)#when the mechnisms terms dosen t have pressure
+
+
+#thermal BC
+cyclicFunctionTemp=cycleFunctionTime(0., tinitial, ftime,  tinitial);
+mysolver.displacementBC("Face",1234,3,cyclicFunctionTemp)
+mysolver.displacementBC("Face",5678,3,cyclicFunctionTemp)
+mysolver.displacementBC("Face",2376,3,cyclicFunctionTemp)
+mysolver.displacementBC("Face",1265,3,cyclicFunctionTemp)
+#mysolver.initialBC("Volume","Position",nfield,3,tinitial)
+mysolver.displacementBC("Volume",nfield,3,cyclicFunctionTemp)
+
+#electrical BC
+cyclicFunctionvolt=cycleFunctionTime(0., 0.0,  ftime,0.0);
+mysolver.initialBC("Volume","Position",nfield,4,cyclicFunctionvolt)
+mysolver.displacementBC("Volume",nfield,4,cyclicFunctionvolt)
+
+mysolver.internalPointBuildView("svm",IPField.SVM, 1, 1)
+mysolver.internalPointBuildView("sig_xx",IPField.SIG_XX, 1, 1)
+mysolver.internalPointBuildView("sig_yy",IPField.SIG_YY, 1, 1)
+mysolver.internalPointBuildView("sig_zz",IPField.SIG_ZZ, 1, 1)
+mysolver.internalPointBuildView("sig_xy",IPField.SIG_XY, 1, 1)
+mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, 1)
+mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, 1)
+mysolver.internalPointBuildView("temperature",IPField.TEMPERATURE, 1, 1)
+mysolver.internalPointBuildView("qx",IPField.THERMALFLUX_X, 1, 1)
+mysolver.internalPointBuildView("qy",IPField.THERMALFLUX_Y, 1, 1)
+mysolver.internalPointBuildView("qz",IPField.THERMALFLUX_Z, 1, 1)
+
+mysolver.internalPointBuildView("voltage",IPField.VOLTAGE, 1, 1)
+mysolver.internalPointBuildView("qx",IPField.ELECTRICALFLUX_X, 1, 1)
+mysolver.internalPointBuildView("qy",IPField.ELECTRICALFLUX_Y, 1, 1)
+mysolver.internalPointBuildView("qz",IPField.ELECTRICALFLUX_Z, 1, 1)
+
+mysolver.archivingForceOnPhysicalGroup("Face", 1234, 2)
+mysolver.archivingForceOnPhysicalGroup("Face", 5678, 2)
+mysolver.archivingForceOnPhysicalGroup("Face", 1234, 3)
+mysolver.archivingForceOnPhysicalGroup("Face", 5678, 3)
+mysolver.archivingIPOnPhysicalGroup("Volume",nfield, IPField.SIG_ZZ,IPField.MEAN_VALUE);
+mysolver.archivingIPOnPhysicalGroup("Volume",nfield, IPField.STRAIN_ZZ,IPField.MEAN_VALUE);
+mysolver.archivingIPOnPhysicalGroup("Volume",nfield, IPField.TEMPERATURE,IPField.MEAN_VALUE);
+
+
+mysolver.solve()
+
+check = TestCheck()
+check.equal(6.768589e-01,mysolver.getArchivedForceOnPhysicalGroup("Face", 1234, 2),1.e-5)
+
diff --git a/dG3D/benchmarks/smpT58/cube.geo b/dG3D/benchmarks/smpT58/cube.geo
new file mode 100644
index 0000000000000000000000000000000000000000..0dbaad1fcfd2bed978ed031e84a0bff5b2fe240c
--- /dev/null
+++ b/dG3D/benchmarks/smpT58/cube.geo
@@ -0,0 +1,97 @@
+// Test case a SCB with a vertical load at its free extremity
+// Size
+
+//definition of unit
+mm = 1e-03;
+
+// volum fraction
+
+x=1*mm;
+y=1*mm;
+z=1*mm;
+
+// Characteristic length
+Lc1=z/2.5;
+
+// definition of points
+Point(1) = { 0.0 , 0.0 , 0.0 , Lc1};
+Point(2) = {  x  , 0.0 , 0.0 , Lc1};
+Point(3) = {  x  ,  y  , 0.0 , Lc1};
+Point(4) = { 0.0 ,  y  , 0.0 , Lc1};
+Point(5) = { 0.0 , 0.0 , z , Lc1};
+Point(6) = {  x  , 0.0 , z , Lc1};
+Point(7) = {  x  ,  y  , z , Lc1};
+Point(8) = { 0.0 ,  y  , z , Lc1};
+
+// Line between points
+Line(1) = {1,2};
+Line(2) = {2,3};
+Line(3) = {3,4};
+Line(4) = {4,1};
+Line(5) = {5,6};
+Line(6) = {6,7};
+Line(7) = {7,8};
+Line(8) = {8,5};
+Line(9) = {1,5};
+Line(10)= {2,6};
+Line(11)= {3,7};
+Line(12)= {4,8};
+
+// Surface definition
+Line Loop(1) = {1,2,3,4};
+Line Loop(2) = {5,6,7,8};
+Line Loop(3) = {1,10,-5,-9};
+Line Loop(4) = {2,11,-6,-10};
+Line Loop(5) = {3,12,-7,-11};
+Line Loop(6) = {4,9,-8,-12};
+
+Plane Surface(1) = {1};
+Plane Surface(2) = {2};
+Plane Surface(3) = {3};
+Plane Surface(4) = {4};
+Plane Surface(5) = {5};
+Plane Surface(6) = {6};
+
+//VOlume
+
+Surface Loop(7) = {1,2,3,4,5,6};
+Volume(1) = {7};
+
+// Physical objects to applied BC and material
+Physical Surface(1234) = {1};
+Physical Surface(5678) = {2};
+Physical Surface(1265) = {3};
+Physical Surface(2376) = {4};
+Physical Surface(3487) = {5};
+Physical Surface(4158) = {6};
+Physical Line(12) = {1};
+Physical Line(23) = {2};
+Physical Line(34) = {3};
+Physical Line(41) = {4};
+Physical Line(56) = {5};
+Physical Line(67) = {6};
+Physical Line(78) = {7};
+Physical Line(85) = {8};
+Physical Line(15) = {9};
+Physical Line(26) = {10};
+Physical Line(37) = {11};
+Physical Line(48) = {12};
+
+Physical Point(1) ={1};
+Physical Point(2) ={2};
+Physical Point(3) ={3};
+Physical Point(4) ={4};
+Physical Point(5) ={5};
+Physical Point(6) ={6};
+Physical Point(7) ={7};
+Physical Point(8) ={8};
+
+Physical Volume(10) ={1};
+
+// define transfinite mesh
+Transfinite Line {1,2,3,4,5,6,7,8} = 3;
+Transfinite Line {9,10,11,12} =3;
+Transfinite Surface {1,2,3,4,5,6} ;
+Recombine Surface {1,2,3,4,5,6} ;
+Transfinite Volume {1};
+
diff --git a/dG3D/benchmarks/thermoMecPBCInSystemCondensationElim/thermoMecPolycrystalCondensation.py b/dG3D/benchmarks/thermoMecPBCInSystemCondensationElim/thermoMecPolycrystalCondensation.py
index 8098bc05428d786c4d67647da44a3cdc881bb0aa..0cdc38c258b41393dacdf7668cc92ee720bcaec1 100644
--- a/dG3D/benchmarks/thermoMecPBCInSystemCondensationElim/thermoMecPolycrystalCondensation.py
+++ b/dG3D/benchmarks/thermoMecPBCInSystemCondensationElim/thermoMecPolycrystalCondensation.py
@@ -161,7 +161,7 @@ mysolver.solve()   # solve BVP
 
 check = TestCheck()
 check.equal(2.534832e+02,mysolver.getArchivedNodalValue(6,3,mysolver.displacement),1.e-4)
-check.equal(-6.959403e-05,mysolver.getArchivedNodalValue(8,0,mysolver.displacement),1.e-3)
+check.equal(-6.972034e-05,mysolver.getArchivedNodalValue(8,0,mysolver.displacement),1.e-2)
 check.equal(7.472013e-04,mysolver.getArchivedNodalValue(8,1,mysolver.displacement),1.e-3)
 check.equal(5.877430e-03,mysolver.getArchivedNodalValue(8,2,mysolver.displacement),1.e-4)
 check.equal(2.659639e+02,mysolver.getArchivedNodalValue(8,3,mysolver.displacement),1.e-4)
diff --git a/dG3D/src/FractureCohesiveDG3DMaterialLaw.h b/dG3D/src/FractureCohesiveDG3DMaterialLaw.h
index 3901ad0757ef7798e5d16378d8a0c7ca69c7f48d..8622c940c5c75eb4d3232b0727bbd659064659b0 100644
--- a/dG3D/src/FractureCohesiveDG3DMaterialLaw.h
+++ b/dG3D/src/FractureCohesiveDG3DMaterialLaw.h
@@ -60,7 +60,7 @@ class FractureByCohesive3DLaw : public dG3DMaterialLaw, public  fractureBy2Laws<
 	virtual double scaleFactor() const{return _mbulk->scaleFactor();};
 	virtual materialLaw* clone() const{ return new FractureByCohesive3DLaw(*this);};
 	
-	virtual void setSolver(nonLinearMechSolver* sv){
+	virtual void setSolver(const nonLinearMechSolver* sv){
 		dG3DMaterialLaw::setSolver(sv);
 		if (_mbulk != NULL){
 			_mbulk->setSolver(sv);
diff --git a/dG3D/src/dG3DMultiscaleIPVariable.cpp b/dG3D/src/dG3DMultiscaleIPVariable.cpp
index 52603513760842a6ab4f805b85cd2fde4c3f3a19..99e94701cfc0054c3bebb482b8b83e973faf0019 100644
--- a/dG3D/src/dG3DMultiscaleIPVariable.cpp
+++ b/dG3D/src/dG3DMultiscaleIPVariable.cpp
@@ -37,7 +37,7 @@ int dG3DMultiscaleIPVariable::getMicroNumberElementDataSendToMacroProblem() cons
 	// we send P, L , failureDamage, broken
 	// elastic energy + plastic energy+irreversible energy+DirreversibleEnergyDF
   // damageIsBlocked
-  return 9+81+4+1+9+1; 
+  return 9+81+4+1+9+1;
 
 };
   // get macroscopic kinematic data to send to microscopic problem
@@ -47,7 +47,7 @@ void dG3DMultiscaleIPVariable::getMacroDataSendToMicroProblem(double* val) const
   const SVector3& refNorm = this->getConstRefToReferenceOutwardNormal();
   const SVector3& curNorm = this->getConstRefToCurrentOutwardNormal();
   const SVector3& fjump = this->getConstRefToIncompatibleStrainVector();
-	
+
 	int row = 0;
 	for (int index=row; index < row+9; index ++){
 		int i,j;
@@ -55,42 +55,42 @@ void dG3DMultiscaleIPVariable::getMacroDataSendToMicroProblem(double* val) const
 		val[index] = F(i,j);
 	}
 	row+= 9;
-	
+
 	for (int index=row; index < row+3; index++){
 		int i;
 		Tensor13::getIntsFromIndex(index-row,i);
 		val[index] = ujump(i);
 	}
 	row+= 3;
-	
+
 	for (int index=row; index < row+3; index++){
 		int i;
 		Tensor13::getIntsFromIndex(index-row,i);
 		val[index] = refNorm(i);
 	}
 	row+= 3;
-	
+
 	for (int index=row; index < row+3; index++){
 		int i;
 		Tensor13::getIntsFromIndex(index-row,i);
 		val[index] = curNorm(i);
 	}
 	row+= 3;
-	
+
 	for (int index=row; index < row+3; index++){
 		int i;
 		Tensor13::getIntsFromIndex(index-row,i);
 		val[index] = fjump(i);
 	}
 	row+= 3;
-	
+
 };
   // get computed data obtaind by microscopic analysis to send to macroscopic analysis
 void dG3DMultiscaleIPVariable::getMicroDataToMacroProblem(double* val) const{
 	const STensor3& P = this->getConstRefToFirstPiolaKirchhoffStress();
   const STensor43& L = this->getConstRefToTangentModuli();
 	const STensor3& dirrEnergdF = this->getConstRefToDIrreversibleEnergyDDeformationGradient();
-	
+
 	int row = 0;
 	for (int index=row; index< row+9; index++){
 		int i,j;
@@ -98,14 +98,14 @@ void dG3DMultiscaleIPVariable::getMicroDataToMacroProblem(double* val) const{
 		val[index] = P(i,j);
 	}
 	row+= 9;
-	
+
 	for (int index=row; index< row+81; index++){
 		int i,j,k,l;
 		Tensor43::getIntsFromIndex(index-row,i,j,k,l);
 		val[index] = L(i,j,k,l);
 	}
 	row+= 81;
-	
+
   val[row] = this->getFailureDamage();
   row += 1;
 	//
@@ -113,17 +113,17 @@ void dG3DMultiscaleIPVariable::getMicroDataToMacroProblem(double* val) const{
   if (_solverBroken) solverIsBroken = 1.;
   val[row] = solverIsBroken;
   row += 1;
-	// 
+	//
 	val[row] = this->defoEnergy();
 	row += 1;
-	
+
 	val[row] = this->plasticEnergy();
 	row += 1;
-	
+
 	val[row] = this->irreversibleEnergy();
 	row+=1;
-	
-	
+
+
 	for (int index=row; index<row+9; index++){
 		int i, j;
 		Tensor23::getIntsFromIndex(index-row,i,j);
@@ -137,7 +137,7 @@ void dG3DMultiscaleIPVariable::getMicroDataToMacroProblem(double* val) const{
   else
     val[row] = -1;
   row +=1;
-	
+
 };
   // set the received data from microscopic analysis to microscopic analysis
 void dG3DMultiscaleIPVariable::setReceivedMacroDataToMicroProblem(const double* val){
@@ -146,7 +146,7 @@ void dG3DMultiscaleIPVariable::setReceivedMacroDataToMicroProblem(const double*
   SVector3& refNorm = this->getRefToReferenceOutwardNormal();
   SVector3& curNorm = this->getRefToCurrentOutwardNormal();
   SVector3& fjump = this->getRefToIncompatibleStrainVector();
-	
+
 	int row = 0;
 	for (int index=row; index < row+9; index ++){
 		int i,j;
@@ -154,28 +154,28 @@ void dG3DMultiscaleIPVariable::setReceivedMacroDataToMicroProblem(const double*
 		F(i,j) = val[index];
 	}
 	row+= 9;
-	
+
 	for (int index=row; index < row+3; index++){
 		int i;
 		Tensor13::getIntsFromIndex(index-row,i);
 		ujump(i) = val[index];
 	}
 	row+= 3;
-	
+
 	for (int index=row; index < row+3; index++){
 		int i;
 		Tensor13::getIntsFromIndex(index-row,i);
 		refNorm(i) = val[index];
 	}
 	row+= 3;
-	
+
 	for (int index=row; index < row+3; index++){
 		int i;
 		Tensor13::getIntsFromIndex(index-row,i);
 		curNorm(i) = val[index];
 	}
 	row+= 3;
-	
+
 	for (int index=row; index < row+3; index++){
 		int i;
 		Tensor13::getIntsFromIndex(index-row,i);
@@ -188,7 +188,7 @@ void dG3DMultiscaleIPVariable::setReceivedMicroDataToMacroProblem(const double*
   STensor3& P = this->getRefToFirstPiolaKirchhoffStress();
   STensor43& L = this->getRefToTangentModuli();
 	STensor3& dirrEnergdF = this->getRefToDIrreversibleEnergyDDeformationGradient();
-	
+
 	int row = 0;
 	for (int index=row; index< row+9; index++){
 		int i,j;
@@ -196,17 +196,17 @@ void dG3DMultiscaleIPVariable::setReceivedMicroDataToMacroProblem(const double*
 		P(i,j) = val[index];
 	}
 	row+= 9;
-	
+
 	for (int index=row; index< row+81; index++){
 		int i,j,k,l;
 		Tensor43::getIntsFromIndex(index-row,i,j,k,l);
 		L(i,j,k,l) = val[index];
 	}
 	row+= 81;
-	
+
   _failureDamage = val[row];
   row += 1;
-	
+
 	if (val[row] > 0) {
 		_solverBroken = true;
 	}
@@ -214,16 +214,16 @@ void dG3DMultiscaleIPVariable::setReceivedMicroDataToMacroProblem(const double*
 		_solverBroken = false;
 	}
   row += 1;
-	
+
 	_elasticEnergy = val[row];
 	row += 1;
-	
+
 	_plasticEnergy = val[row];
 	row += 1;
-	
+
 	_irreversibleEnergy = val[row];
 	row += 1;
-	
+
 	for (int index=row; index<row+9; index++){
 		int i,j;
 		Tensor23::getIntsFromIndex(index-row,i,j);
@@ -249,7 +249,7 @@ void MultiscaleFractureCohesive3DIPVariable::nobroken(){
 		this->getSolver()->getHomogenizationState(IPStateBase::current)->getBrokenFlag() = false;
 	}
 };
-		
+
 
 
 void BulkFollowedCohesive3DIPVariable::restart(){
@@ -267,11 +267,18 @@ void BulkFollowedCohesive3DIPVariable::restart(){
   restartManager::restart(_dFinterfacedF);
   restartManager::restart(_dFinterfacedJump);
   restartManager::restart(_dFinterfacedInStrain);
-	
+
 	restartManager::restart(_irreversibleEnergy);
 	restartManager::restart(_DirreversibleEnergyDjump);
 	restartManager::restart(_DirreversibleEnergyDInStrain);
 	restartManager::restart(_DirreversibleEnergyDF);
+
+	restartManager::restart(_cohesiveTangent);      // cohesive tangent
+  restartManager::restart(_cohesiveBiTangent);    // cohesive bitangent
+    // - Basis in reference config
+  restartManager::restart(_cohesiveRefNormal);    // cohesive normal in reference config
+  restartManager::restart(_cohesiveRefTangent);   // cohesive tangent
+  restartManager::restart(_cohesiveRefBiTangent); // cohesive bitangent
 };
 
 void BulkFollowedCohesive3DIPVariable::initializeFracture(const SVector3 &ujump_,
@@ -300,7 +307,7 @@ void BulkFollowedCohesive3DIPVariable::initializeFracture(const SVector3 &ujump_
   _ujump0  = ipdg->getConstRefToJump();
   _cohesiveJump *= 0.;
   _isTension = ift;
-	
+
 	_irreversibleEnergy = 0.;
 };
 
@@ -310,7 +317,9 @@ void BulkFollowedCohesive3DIPVariable::initializeFracture(const SVector3 &ujump_
 // using in multiscale analysis with MPI
 int MultiscaleCohesive3DIPVariable::getMacroNumberElementDataSendToMicroProblem() const {
   // send Fb0, Fb, ujump0, incompatibleStrain0,to in order to construct the deformationGradient at interface
-  return 9+9+3+3;
+  // reference basis
+  // current basis
+  return 9+9+3+3+3*6;
 };
 int MultiscaleCohesive3DIPVariable::getMicroNumberElementDataSendToMacroProblem() const {
 	// // send interfaceForce, dInterfaceForceDJump, dInterfaceForceDF, dInterfaceForceDInStrain
@@ -323,7 +332,14 @@ void MultiscaleCohesive3DIPVariable::getMacroDataSendToMicroProblem(double* val)
   const STensor3& Fb = this->getBulkDeformationGradient();
   const SVector3& ujump0 = this->getConstRefToDGJump();
   const SVector3& inStrain0 = this->getConstRefToIncompatibleStrainAtFailureOnset();
-	
+  const SVector3& n = this->getConstRefToCohesiveNormal();
+  const SVector3& t = this->getConstRefToCohesiveTangent();
+  const SVector3& b = this->getConstRefToCohesiveBiTangent();
+
+  const SVector3& refN = this->getConstRefToCohesiveReferenceNormal();
+  const SVector3& refT = this->getConstRefToCohesiveReferenceTangent();
+  const SVector3& refB = this->getConstRefToCohesiveReferenceBiTangent();
+
 	int row = 0;
   for (int idex=row; idex<row+9; idex++){
     int i,j;
@@ -331,25 +347,67 @@ void MultiscaleCohesive3DIPVariable::getMacroDataSendToMicroProblem(double* val)
     val[idex] = Fb0(i,j);
   }
 	row+= 9;
-  
+
 	for (int idex=row; idex<row+9; idex++){
     int i,j;
     Tensor23::getIntsFromIndex(idex-row,i,j);
     val[idex] = Fb(i,j);
   }
 	row+=9;
-	
+
   for (int idex=row; idex<row+3; idex++){
     int i;
     Tensor13::getIntsFromIndex(idex-row,i);
     val[idex] = ujump0(i);
   }
 	row+= 3;
-	
+
   for (int idex=row; idex<row+3; idex++){
     int i;
     Tensor13::getIntsFromIndex(idex-row,i);
     val[idex] = inStrain0(i);
+  }
+	row+=3;
+
+	for (int idex=row; idex<row+3; idex++){
+    int i;
+    Tensor13::getIntsFromIndex(idex-row,i);
+    val[idex] = n(i);
+  }
+	row+=3;
+
+	for (int idex=row; idex<row+3; idex++){
+    int i;
+    Tensor13::getIntsFromIndex(idex-row,i);
+    val[idex] = t(i);
+  }
+	row+=3;
+
+	for (int idex=row; idex<row+3; idex++){
+    int i;
+    Tensor13::getIntsFromIndex(idex-row,i);
+    val[idex] = b(i);
+  }
+	row+=3;
+
+	for (int idex=row; idex<row+3; idex++){
+    int i;
+    Tensor13::getIntsFromIndex(idex-row,i);
+    val[idex] = refN(i);
+  }
+	row+=3;
+
+	for (int idex=row; idex<row+3; idex++){
+    int i;
+    Tensor13::getIntsFromIndex(idex-row,i);
+    val[idex] = refT(i);
+  }
+	row+=3;
+
+	for (int idex=row; idex<row+3; idex++){
+    int i;
+    Tensor13::getIntsFromIndex(idex-row,i);
+    val[idex] = refB(i);
   }
 	row+=3;
 };
@@ -358,17 +416,17 @@ void MultiscaleCohesive3DIPVariable::getMicroDataToMacroProblem(double* val) con
   const STensor3& dTdJump = this->getConstRefToDInterfaceForceDjump();
   const STensor33& dTdF = this->getConstRefToDInterfaceForceDDeformationGradient();
   const STensor3& dTdInStrain = this->getConstRefToDInterfaceForceDIncompatibleStrainVector();
-	
+
   const SVector3& cjump = this->getConstRefToCohesiveJump();
   const STensor3& dcjumpdJump = this->getConstRefToDCohesiveJumpDJump();
   const STensor33& dcjumpdF = this->getConstRefToDCohesiveJumpDDeformationGradient();
   const STensor3& dcjumpdInstrain = this->getConstRefToDCohesiveJumpDIncompatibleStrainVector();
-	
+
 	const double& irrEnerg = this->irreversibleEnergy();
 	const SVector3& DirrEnergDjump = this->getConstRefToDIrreversibleEnergyDJump();
 	const SVector3& DirrEnergDInstrain = this->getConstRefToDIrreversibleEnergyDIncompatibleStrainVector();
 	const STensor3& DirrEnergDF = this->getConstRefToDIrreversibleEnergyDDeformationGradient();
-	
+
 	int row = 0;
 	for (int idex=row; idex < row+3; idex++){
     int i;
@@ -397,14 +455,14 @@ void MultiscaleCohesive3DIPVariable::getMicroDataToMacroProblem(double* val) con
     val[idex] = dTdInStrain(i,j);
   }
   row+=9;
-	
+
   for (int idex = row; idex<row+3; idex++){
     int i;
     Tensor13::getIntsFromIndex(idex-row,i);
     val[idex] = cjump(i);
   }
 	row+= 3;
-	
+
   for (int idex = row; idex <row+9; idex ++){
     int type = idex-row;
     int i,j;
@@ -420,7 +478,7 @@ void MultiscaleCohesive3DIPVariable::getMicroDataToMacroProblem(double* val) con
     val[idex] = dcjumpdF(i,j,k);
   };
 	row+= 27;
-	
+
   for (int idex = row; idex <row+9; idex ++){
     int type = idex-row;
     int i,j;
@@ -433,15 +491,15 @@ void MultiscaleCohesive3DIPVariable::getMicroDataToMacroProblem(double* val) con
   if (_isDeleted) isD = 1.;
   val[row] = isD;
 	row += 1;
-	
+
   double isT = -1;
   if (_isTension) isT = 1.;
   val[row] = isT;
 	row += 1;
-	
+
 	val[row] = irrEnerg;
 	row += 1;
-	
+
 	for (int index = row; index < row+3; index++){
 		int type = index-row;
 		int i;
@@ -449,7 +507,7 @@ void MultiscaleCohesive3DIPVariable::getMicroDataToMacroProblem(double* val) con
 		val[index] = DirrEnergDjump(i);
 	}
 	row+= 3;
-	
+
 	for (int index = row; index < row+3; index++){
 		int type = index-row;
 		int i;
@@ -457,7 +515,7 @@ void MultiscaleCohesive3DIPVariable::getMicroDataToMacroProblem(double* val) con
 		val[index] = DirrEnergDInstrain(i);
 	}
 	row += 3;
-	
+
 	for (int index = row; index < row+9; index ++){
 		int type = index - row;
 		int i,j;
@@ -465,13 +523,21 @@ void MultiscaleCohesive3DIPVariable::getMicroDataToMacroProblem(double* val) con
 		val[index] = DirrEnergDF(i,j);
 	}
 	row+= 9;
-	
+
 };
 void MultiscaleCohesive3DIPVariable::setReceivedMacroDataToMicroProblem(const double* val){
   STensor3& Fb0 = this->getRefToBulkDeformationGradientAtFailureOnset();
 	SVector3& ujump0 = this->getRefToDGJump();
 	SVector3& inStrain0 = this->getRefToIncompatibleStrainAtFailureOnset();
-	
+
+	SVector3& n = this->getRefToCohesiveNormal();
+  SVector3& t = this->getRefToCohesiveTangent();
+  SVector3& b = this->getRefToCohesiveBiTangent();
+
+  SVector3& refN = this->getRefToCohesiveReferenceNormal();
+  SVector3& refT = this->getRefToCohesiveReferenceTangent();
+  SVector3& refB = this->getRefToCohesiveReferenceBiTangent();
+
 	int row = 0;
   for (int idex=row; idex<row+9; idex++){
     int i,j;
@@ -479,7 +545,7 @@ void MultiscaleCohesive3DIPVariable::setReceivedMacroDataToMicroProblem(const do
     Fb0(i,j) = val[idex];
   }
 	row+= 9;
-  
+
 	STensor3 Fb(0.);
 	for (int idex=row; idex<row+9; idex++){
     int i,j;
@@ -488,14 +554,14 @@ void MultiscaleCohesive3DIPVariable::setReceivedMacroDataToMicroProblem(const do
   }
 	this->setBulkDeformationGradient(Fb);
 	row+=9;
-	
+
   for (int idex=row; idex<row+3; idex++){
     int i;
     Tensor13::getIntsFromIndex(idex-row,i);
     ujump0(i) = val[idex];
   }
 	row+= 3;
-	
+
   for (int idex=row; idex<row+3; idex++){
     int i;
     Tensor13::getIntsFromIndex(idex-row,i);
@@ -503,18 +569,61 @@ void MultiscaleCohesive3DIPVariable::setReceivedMacroDataToMicroProblem(const do
   }
 	row+=3;
 
+
+	for (int idex=row; idex<row+3; idex++){
+    int i;
+    Tensor13::getIntsFromIndex(idex-row,i);
+    n(i) = val[idex];
+  }
+	row+=3;
+
+	for (int idex=row; idex<row+3; idex++){
+    int i;
+    Tensor13::getIntsFromIndex(idex-row,i);
+    t(i) = val[idex];
+  }
+	row+=3;
+
+	for (int idex=row; idex<row+3; idex++){
+    int i;
+    Tensor13::getIntsFromIndex(idex-row,i);
+    b(i) = val[idex];
+  }
+	row+=3;
+
+	for (int idex=row; idex<row+3; idex++){
+    int i;
+    Tensor13::getIntsFromIndex(idex-row,i);
+    refN(i) = val[idex];
+  }
+	row+=3;
+
+	for (int idex=row; idex<row+3; idex++){
+    int i;
+    Tensor13::getIntsFromIndex(idex-row,i);
+    refT(i) = val[idex];
+  }
+	row+=3;
+
+	for (int idex=row; idex<row+3; idex++){
+    int i;
+    Tensor13::getIntsFromIndex(idex-row,i);
+    refB(i) = val[idex];
+  }
+	row+=3;
+
 };
 void MultiscaleCohesive3DIPVariable::setReceivedMicroDataToMacroProblem(const double* val){
 	SVector3& T = this->getRefToInterfaceForce();
   STensor3& dTdJump = this->getRefToDInterfaceForceDjump();
   STensor33& dTdF = this->getRefToDInterfaceForceDDeformationGradient();
   STensor3& dTdInStrain = this->getRefToDInterfaceForceDIncompatibleStrainVector();
-	
+
   SVector3& cjump = this->getRefToCohesiveJump();
   STensor3& dcjumpdJump = this->getRefToDCohesiveJumpDJump();
   STensor33& dcjumpdF = this->getRefToDCohesiveJumpDDeformationGradient();
   STensor3& dcjumpdInstrain = this->getRefToDCohesiveJumpDIncompatibleStrainVector();
-	
+
 	double& irrEnerg = this->getRefToIrreversibleEnergy();
 	SVector3& DirrEnergDjump = this->getRefToDIrreversibleEnergyDJump();
 	SVector3& DirrEnergDInstrain = this->getRefToDIrreversibleEnergyDIncompatibleStrainVector();
@@ -548,14 +657,14 @@ void MultiscaleCohesive3DIPVariable::setReceivedMicroDataToMacroProblem(const do
     dTdInStrain(i,j) = val[idex];
   }
   row+=9;
-	
+
   for (int idex = row; idex<row+3; idex++){
     int i;
     Tensor13::getIntsFromIndex(idex-row,i);
     cjump(i) = val[idex];
   }
 	row+= 3;
-	
+
   for (int idex = row; idex <row+9; idex ++){
     int type = idex-row;
     int i,j;
@@ -571,7 +680,7 @@ void MultiscaleCohesive3DIPVariable::setReceivedMicroDataToMacroProblem(const do
     dcjumpdF(i,j,k) = val[idex];
   };
 	row+= 27;
-	
+
   for (int idex = row; idex <row+9; idex ++){
     int type = idex-row;
     int i,j;
@@ -579,19 +688,19 @@ void MultiscaleCohesive3DIPVariable::setReceivedMicroDataToMacroProblem(const do
     dcjumpdInstrain(i,j) = val[idex];
   };
 	row += 9;
-  
+
 	// convert bool to double and send +1--> true -1 --> false
   if (val[row] > 0)  _isDeleted = true;
 	else _isDeleted = false;
 	row += 1;
-	
+
   if (val[row] > 0) _isTension = true;
 	else _isTension = false;
 	row += 1;
-	
+
 	irrEnerg = val[row];
 	row += 1;
-	
+
 	for (int index = row; index < row+3; index++){
 		int type = index-row;
 		int i;
@@ -599,7 +708,7 @@ void MultiscaleCohesive3DIPVariable::setReceivedMicroDataToMacroProblem(const do
 		DirrEnergDjump(i) = val[index];
 	}
 	row+= 3;
-	
+
 	for (int index = row; index < row+3; index++){
 		int type = index-row;
 		int i;
@@ -607,7 +716,7 @@ void MultiscaleCohesive3DIPVariable::setReceivedMicroDataToMacroProblem(const do
 		DirrEnergDInstrain(i) = val[index];
 	}
 	row += 3;
-	
+
 	for (int index = row; index < row+9; index ++){
 		int type = index - row;
 		int i,j;
diff --git a/dG3D/src/dG3DMultiscaleIPVariable.h b/dG3D/src/dG3DMultiscaleIPVariable.h
index 37172e491cd640fda8e122904f7359e08fc9d26f..b554616546dd56c9792f4a0170f58e6bd736b584 100644
--- a/dG3D/src/dG3DMultiscaleIPVariable.h
+++ b/dG3D/src/dG3DMultiscaleIPVariable.h
@@ -48,24 +48,24 @@ class dG3DMultiscaleIPVariable : public dG3DIPVariable{
 
     virtual bool damageIsBlocked() const { return _damageBlocked;};
     virtual void blockDamage(const bool bl);
-		
+
 		virtual bool solverIsBroken() const {return _solverBroken;};
 		virtual bool& getRefToSolverBrokenFlag() {return _solverBroken;};
-		
+
     virtual double getFailureDamage() const {return _failureDamage;};
 		virtual double& getRefToFailureDamage(){return _failureDamage;};
-				
+
 		virtual double defoEnergy() const { return _elasticEnergy;};
 		virtual double& getRefToDefoEnergy() { return _elasticEnergy;};
-		
+
 		virtual double plasticEnergy() const { return _plasticEnergy;};
-		virtual double& getRefToPlasticEnergy() { return _plasticEnergy;}; 
-		
+		virtual double& getRefToPlasticEnergy() { return _plasticEnergy;};
+
 		virtual double irreversibleEnergy() const { return _irreversibleEnergy;};
 		virtual double& getRefToIrreversibleEnergy() { return _irreversibleEnergy;};
-		
+
 		virtual const STensor3& getConstRefToDIrreversibleEnergyDDeformationGradient() const { return _DirreversibleEnergyDF;};
-	
+
 		virtual STensor3& getRefToDIrreversibleEnergyDDeformationGradient() { return _DirreversibleEnergyDF;};
 
     virtual double get(const int comp) const;
@@ -81,8 +81,8 @@ class dG3DMultiscaleIPVariable : public dG3DIPVariable{
 			restartManager::restart(_irreversibleEnergy);
 			restartManager::restart(_DirreversibleEnergyDF);
     };
-		
-		
+
+
 
     #if defined(HAVE_MPI)
     virtual int getMacroNumberElementDataSendToMicroProblem() const;
@@ -102,7 +102,7 @@ class dG3DMultiscaleIPVariable : public dG3DIPVariable{
 
 class MultiscaleFractureCohesive3DIPVariable : public FractureCohesive3DIPVariable{
 	protected:
-	
+
   public:
     MultiscaleFractureCohesive3DIPVariable(const double facSigmac=1.):FractureCohesive3DIPVariable(facSigmac){
     };
@@ -111,13 +111,13 @@ class MultiscaleFractureCohesive3DIPVariable : public FractureCohesive3DIPVariab
       FractureCohesive3DIPVariable::operator=(source);
 			const MultiscaleFractureCohesive3DIPVariable* psrc = dynamic_cast<const MultiscaleFractureCohesive3DIPVariable*>(&source);
 			if (psrc!=NULL){
-        
-				
+
+
 			}
       return *this;
     };
     virtual ~MultiscaleFractureCohesive3DIPVariable(){}
-		
+
 		virtual void broken();
 		virtual void nobroken();
 
@@ -143,27 +143,39 @@ class BulkFollowedCohesive3DIPVariable : public Cohesive3DIPVariable{
     STensor43 _dFinterfacedF;
     STensor33 _dFinterfacedJump;
     STensor33 _dFinterfacedInStrain;
-		
+
 		double _irreversibleEnergy;
 		SVector3 _DirreversibleEnergyDjump;
 		SVector3 _DirreversibleEnergyDInStrain;
 		STensor3 _DirreversibleEnergyDF;
 
+    SVector3 _cohesiveTangent;      // cohesive tangent
+    SVector3 _cohesiveBiTangent;    // cohesive bitangent
+    // - Basis in reference config
+    SVector3 _cohesiveRefNormal;    // cohesive normal in reference config
+    SVector3 _cohesiveRefTangent;   // cohesive tangent
+    SVector3 _cohesiveRefBiTangent; // cohesive bitangent
+
+
   public:
     BulkFollowedCohesive3DIPVariable(): Cohesive3DIPVariable(), _isTension(true),
       _isDeleted(false),_DcohesiveJumpDF(0.),_DcohesiveJumpDJump(0.), _DcohesiveJumpDInStrain(0.),
       _Fb0(1.),_Fb(1.), _dFinterfacedF(0.), _dFinterfacedJump(0.),_incompatibleStrain0(0.),_dFinterfacedInStrain(0.),
 			_irreversibleEnergy(0.),_DirreversibleEnergyDjump(0.),_DirreversibleEnergyDInStrain(0.),
-			_DirreversibleEnergyDF(0.){};
+			_DirreversibleEnergyDF(0.), _cohesiveTangent(0.), _cohesiveBiTangent(0.),
+			_cohesiveRefNormal(0.),_cohesiveRefTangent(0.),_cohesiveRefBiTangent(0.){};
     BulkFollowedCohesive3DIPVariable(const BulkFollowedCohesive3DIPVariable& src): Cohesive3DIPVariable(src),
       _isDeleted(src._isDeleted), _isTension(src._isTension),
       _DcohesiveJumpDF(src._DcohesiveJumpDF),_incompatibleStrain0(src._incompatibleStrain0),
       _DcohesiveJumpDJump(src._DcohesiveJumpDJump), _DcohesiveJumpDInStrain(src._DcohesiveJumpDInStrain),
-      _Fb0(src._Fb0),_Fb(src._Fb), 
+      _Fb0(src._Fb0),_Fb(src._Fb),
       _dFinterfacedF(src._dFinterfacedF),_dFinterfacedJump(src._dFinterfacedJump), _dFinterfacedInStrain(src._dFinterfacedInStrain),
 			_irreversibleEnergy(src._irreversibleEnergy),_DirreversibleEnergyDjump(src._DirreversibleEnergyDjump),
 			_DirreversibleEnergyDInStrain(src._DirreversibleEnergyDInStrain),
-			_DirreversibleEnergyDF(src._DirreversibleEnergyDF){};
+			_DirreversibleEnergyDF(src._DirreversibleEnergyDF),
+			_cohesiveTangent(src._cohesiveTangent), _cohesiveBiTangent(src._cohesiveBiTangent),
+			_cohesiveRefNormal(src._cohesiveRefNormal),_cohesiveRefTangent(src._cohesiveRefTangent),
+			_cohesiveRefBiTangent(src._cohesiveRefBiTangent){};
     virtual BulkFollowedCohesive3DIPVariable& operator =(const IPVariable& src){
       Cohesive3DIPVariable::operator=(src);
       const BulkFollowedCohesive3DIPVariable* psrc = dynamic_cast<const BulkFollowedCohesive3DIPVariable*>(&src);
@@ -179,11 +191,18 @@ class BulkFollowedCohesive3DIPVariable : public Cohesive3DIPVariable{
         _dFinterfacedF = psrc->_dFinterfacedF;
         _dFinterfacedJump = psrc->_dFinterfacedJump;
         _dFinterfacedInStrain = psrc->_dFinterfacedInStrain;
-				
+
 				_irreversibleEnergy = psrc->_irreversibleEnergy;
 				_DirreversibleEnergyDjump = psrc->_DirreversibleEnergyDjump;
 				_DirreversibleEnergyDInStrain = psrc->_DirreversibleEnergyDInStrain;
 				_DirreversibleEnergyDF = psrc->_DirreversibleEnergyDF;
+
+				_cohesiveTangent = psrc->_cohesiveTangent;      // cohesive tangent
+        _cohesiveBiTangent = psrc->_cohesiveBiTangent;    // cohesive bitangent
+        // - Basis in reference config
+        _cohesiveRefNormal = psrc->_cohesiveRefNormal;    // cohesive normal in reference config
+        _cohesiveRefTangent = psrc->_cohesiveRefTangent;   // cohesive tangent
+        _cohesiveRefBiTangent = psrc->_cohesiveRefBiTangent; // cohesive bitangent
       }
       return *this;
     };
@@ -200,23 +219,23 @@ class BulkFollowedCohesive3DIPVariable : public Cohesive3DIPVariable{
 
 		/* for current local  at cohesive surface basis*/
 		// cohesive tangent
-		virtual const SVector3& getConstRefToCohesiveTangent() const {};
-		virtual SVector3& getRefToCohesiveTangent() {};
+		virtual const SVector3& getConstRefToCohesiveTangent() const {return _cohesiveTangent;};
+		virtual SVector3& getRefToCohesiveTangent() {return _cohesiveTangent;};
 
-		virtual const SVector3& getConstRefToCohesiveBiTangent() const {};
-		virtual SVector3& getRefToCohesiveBiTangent() {};
+		virtual const SVector3& getConstRefToCohesiveBiTangent() const {return _cohesiveBiTangent;};
+		virtual SVector3& getRefToCohesiveBiTangent() {return _cohesiveBiTangent;};
 
 		/*for reference local basis at cohesive surface*/
-    virtual const SVector3& getConstRefToCohesiveReferenceNormal() const {};
-		virtual SVector3& getRefToCohesiveReferenceNormal() {};
+    virtual const SVector3& getConstRefToCohesiveReferenceNormal() const {return _cohesiveRefNormal;};
+		virtual SVector3& getRefToCohesiveReferenceNormal() {return _cohesiveRefNormal;};
 		// cohesive tangent
-		virtual const SVector3& getConstRefToCohesiveReferenceTangent() const {};
-		virtual SVector3& getRefToCohesiveReferenceTangent() {};
+		virtual const SVector3& getConstRefToCohesiveReferenceTangent() const {return _cohesiveRefTangent;};
+		virtual SVector3& getRefToCohesiveReferenceTangent() {return _cohesiveRefTangent;};
 
-		virtual const SVector3& getConstRefToCohesiveReferenceBiTangent() const {};
-		virtual SVector3& getRefToCohesiveReferenceBiTangent() {};
+		virtual const SVector3& getConstRefToCohesiveReferenceBiTangent() const {return _cohesiveRefBiTangent;};
+		virtual SVector3& getRefToCohesiveReferenceBiTangent() {return _cohesiveRefBiTangent;};
 
-		virtual bool useLocalBasis() const {return false;};
+		virtual bool useLocalBasis() const {return true;};
 
   	// deletion criterion
   	virtual bool isDeleted() const {return _isDeleted;};
@@ -244,16 +263,16 @@ class BulkFollowedCohesive3DIPVariable : public Cohesive3DIPVariable{
 
     virtual const STensor33& getConstRefToDInterfaceDeformationGradientDIncompatibleStrainVector() const {return _dFinterfacedInStrain;};;
     virtual STensor33& getRefToDInterfaceDeformationGradientDIncompatibleStrainVector() {return _dFinterfacedInStrain;};
-		
+
 		virtual double irreversibleEnergy() const {return _irreversibleEnergy;};
 		virtual double& getRefToIrreversibleEnergy() {return _irreversibleEnergy;};
-		
+
 		virtual SVector3& getRefToDIrreversibleEnergyDJump() {return _DirreversibleEnergyDjump;};
 		virtual const SVector3& getConstRefToDIrreversibleEnergyDJump() const {return _DirreversibleEnergyDjump;};
-			
+
 		virtual const SVector3& getConstRefToDIrreversibleEnergyDIncompatibleStrainVector() const {return _DirreversibleEnergyDInStrain;};
 		virtual SVector3& getRefToDIrreversibleEnergyDIncompatibleStrainVector() {return _DirreversibleEnergyDInStrain;};
-		
+
 		virtual const STensor3& getConstRefToDIrreversibleEnergyDDeformationGradient() const {return _DirreversibleEnergyDF;};
 		virtual STensor3& getRefToDIrreversibleEnergyDDeformationGradient() {return _DirreversibleEnergyDF;};
 
@@ -311,7 +330,7 @@ class MultiscaleCohesive3DIPVariable : public BulkFollowedCohesive3DIPVariable{
 class MultiscaleThermoMechanicsDG3DIPVariable : public ThermoMechanicsDG3DIPVariableBase{
 	protected:
 
-		
+
 	public:
 		MultiscaleThermoMechanicsDG3DIPVariable(const bool oninter): ThermoMechanicsDG3DIPVariableBase(oninter){};
 		MultiscaleThermoMechanicsDG3DIPVariable(const MultiscaleThermoMechanicsDG3DIPVariable& src):
@@ -321,16 +340,16 @@ class MultiscaleThermoMechanicsDG3DIPVariable : public ThermoMechanicsDG3DIPVari
 			return *this;
 		};
 		virtual ~MultiscaleThermoMechanicsDG3DIPVariable(){};
-		
+
 		virtual double defoEnergy() const;
 		virtual double getInternalEnergyExtraDofDiffusion() const;
 		virtual double plasticEnergy() const;
-		
+
 		virtual IPVariable* clone() const {return new MultiscaleThermoMechanicsDG3DIPVariable(*this);};
 		virtual void restart(){
 			MultiscaleThermoMechanicsDG3DIPVariable::restart();
 		}
-		
+
 		#if defined(HAVE_MPI)
 		// using in multiscale analysis with MPI
 		// get number of values to set the kinematics of microscopic problem
diff --git a/dG3D/src/dG3DMultiscaleMaterialLaw.cpp b/dG3D/src/dG3DMultiscaleMaterialLaw.cpp
index 0bea7ebb8a9a4f15e8be26dddc616c24e0e2e88d..7dd86d9f7509c1cf10a44f415077b1f3c793349d 100644
--- a/dG3D/src/dG3DMultiscaleMaterialLaw.cpp
+++ b/dG3D/src/dG3DMultiscaleMaterialLaw.cpp
@@ -17,7 +17,7 @@ void dG3DMultiscaleMaterialLaw::fillElasticStiffness(double & rho, STensor43& L)
 	solver->setExtractCohesiveLawFromMicroDamage(false);
 	solver->setExtractIrreversibleEnergyFlag(false);
 	solver->initMicroSolver();
-	
+
 	L = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedTangentOperator_F_F();
   rho = solver->getHomogenizedDensity();
   delete solver;
@@ -30,7 +30,7 @@ dG3DMultiscaleMaterialLaw::dG3DMultiscaleMaterialLaw(const int lnum, const int t
 void dG3DMultiscaleMaterialLaw::initLaws(const std::map<int,materialLaw*> &maplaw){
   if (!_initialized){
     this->fillElasticStiffness(_rho,elasticStiffness);
-		
+
 		if (_blockDamageAfterFailureOnset and (_lostSolutionUniquenssTolerance<=0.)){
 			_lostSolutionUniquenssTolerance = 1e10;
 			for (std::map<int,materialLaw*>::const_iterator it = maplaw.begin(); it != maplaw.end(); it++){
@@ -40,9 +40,9 @@ void dG3DMultiscaleMaterialLaw::initLaws(const std::map<int,materialLaw*> &mapla
 						_lostSolutionUniquenssTolerance = cohLaw->getLostSolutionUniquenssTolerance();
 					}
 				}
-			}			
+			}
 			printf("tolerance of lost of ellipticity at bulk ip %f \n",_lostSolutionUniquenssTolerance);
-			
+
 		}
     _initialized = true;
   }
@@ -63,10 +63,17 @@ void dG3DMultiscaleMaterialLaw::createIPState(const bool isSolve, IPStateBase* &
 	IPVariable* ipv2 = new dG3DMultiscaleIPVariable(oninter);
 	if(ips != NULL) delete ips;
 	ips = new IP3State(state,ipvi,ipv1,ipv2);
-	
+
   if (isSolve){
     int el = ele->getNum();
 		nonLinearMechSolver* solver =  this->createMicroSolver(el,gpt);
+		if (_blockDamageAfterFailureOnset){
+			solver->setLostSolutionUniquenssTolerance(_lostSolutionUniquenssTolerance);
+			solver->setCheckFailureOnset(true);
+		}
+		else{
+			solver->setCheckFailureOnset(false);
+		}
 		solver->initMicroSolver();
 		ips->setSolver(solver);
   }
@@ -82,7 +89,7 @@ void dG3DMultiscaleMaterialLaw::createIPVariable(IPVariable* &ipv,const MElement
 void dG3DMultiscaleMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac){
 	dG3DMultiscaleIPVariable* mipv = NULL;
 	const dG3DMultiscaleIPVariable* mipvprev = NULL;
-	
+
 	FractureCohesive3DIPVariable* ipvFrac = dynamic_cast<FractureCohesive3DIPVariable*>(ipv);
 	if (ipvFrac != NULL){
 		mipv = dynamic_cast<dG3DMultiscaleIPVariable*>(ipvFrac->getIPvBulk());
@@ -93,13 +100,13 @@ void dG3DMultiscaleMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvpre
 		mipv = dynamic_cast<dG3DMultiscaleIPVariable*>(ipv);
 		mipvprev = dynamic_cast<const dG3DMultiscaleIPVariable*>(ipvprev);
 	}
-	
+
   nonLinearMechSolver* solver = mipv->getSolver();
   // set kinematics input
   const STensor3& F = mipv->getConstRefToDeformationGradient();
-  
+
 	solver->getMicroBC()->setDeformationGradient(F);
-	
+
 	if (mipv->isInterface()){
 		SVector3 refN = mipv->getConstRefToReferenceOutwardNormal();
 		refN.normalize();
@@ -114,24 +121,25 @@ void dG3DMultiscaleMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvpre
 	mipv->getRefToDefoEnergy() = solver->getHomogenizationState(IPStateBase::current)->getDeformationEnergy();
 	mipv->getRefToPlasticEnergy() = solver->getHomogenizationState(IPStateBase::current)->getPlasticEnergy();
 	mipv->getRefToIrreversibleEnergy() = solver->getHomogenizationState(IPStateBase::current)->getIrreversibleEnergy();
-  mipv->getRefToFailureDamage() = solver->getHomogenizationState(IPStateBase::current)->getActiveDamage(); 
+  mipv->getRefToFailureDamage() = solver->getHomogenizationState(IPStateBase::current)->getActiveDamage();
 	
-	// check cohesive insertion
-	if (mipv->isInterface() and solver->getDamageToCohesiveJumpFlag()){
-		solver->checkFailureOnset_withNormalVector();
-	}
-	else if (_blockDamageAfterFailureOnset and (!mipvprev->damageIsBlocked())){
-		solver->setLostSolutionUniquenssTolerance(_lostSolutionUniquenssTolerance);
-		solver->checkFailureOnset_withoutNormalVector();
-    if (solver->getHomogenizationState(IPStateBase::current)->getBrokenFlag()){
-      mipv->blockDamage(true);
-    }
-    else{
-      mipv->blockDamage(false);
-    }
+	if (solver->checkFailureOnset()){
+		if (mipv->isInterface()){
+			solver->checkFailureOnset_withNormalVector();
+		}
+		else if (!mipvprev->damageIsBlocked()){
+			solver->checkFailureOnset_withoutNormalVector();
+			if (solver->getHomogenizationState(IPStateBase::current)->getBrokenFlag()){
+				mipv->blockDamage(true);
+			}
+			else{
+				mipv->blockDamage(false);
+			}
+		}
 	}
-	mipv->getRefToSolverBrokenFlag() =  solver->getHomogenizationState(IPStateBase::current)->getBrokenFlag();
 	
+	mipv->getRefToSolverBrokenFlag() =  solver->getHomogenizationState(IPStateBase::current)->getBrokenFlag();
+
 	if (stiff){
     mipv->getRefToTangentModuli() = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedTangentOperator_F_F();
 		mipv->getRefToDIrreversibleEnergyDDeformationGradient() = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedTangentOperator_IrreversibleEnergy_F();
@@ -159,6 +167,7 @@ void dG3DMultiscaleMaterialLaw::initialIPVariable(IPVariable* ipv, bool stiff){
 	};
 };
 
+
 MultiscaleFractureByCohesive3DLaw::MultiscaleFractureByCohesive3DLaw(const int num,const int nbulk, const int ncoh):
       FractureByCohesive3DLaw(num,nbulk,ncoh),numericalMaterialBase(),_nummat(NULL){};
 MultiscaleFractureByCohesive3DLaw::MultiscaleFractureByCohesive3DLaw(const MultiscaleFractureByCohesive3DLaw& src):
@@ -220,29 +229,108 @@ void MultiscaleFractureByCohesive3DLaw::createIPState(const bool isSolve, IPStat
 
     if(ips != NULL) delete ips;
 		ips = new IP3State(state_,ipvi,ipv1,ipv2);
-    
+
     if (isSolve){
 			 // if bulk law is a multiscale law
 			int el = ele->getNum();
 			nonLinearMechSolver* solver   = this->createMicroSolver(el,gpt);
-			const GeneralBulkFollwedCohesive3DLaw* interfaceLaw = dynamic_cast<const GeneralBulkFollwedCohesive3DLaw*>(_mfrac);
+			const GeneralMultiscaleBulkFollwedCohesive3DLaw* interfaceLaw = dynamic_cast<const GeneralMultiscaleBulkFollwedCohesive3DLaw*>(_mfrac);
 			if (interfaceLaw != NULL){
+				solver->setLostSolutionUniquenssTolerance(interfaceLaw->getLostSolutionUniquenssTolerance());
+				if (interfaceLaw->getLocationForStressExtraction()>=0){
+					solver->setLocationForStressExtraction(interfaceLaw->getLocationForStressExtraction());
+				}
+				solver->setCheckFailureOnset(true); // set check failure onset
+					
 				if (interfaceLaw->isDamageToCohesiveJump()){
 					printf("rank %d : extract cohesive law at element %d ip %d \n",Msg::GetCommRank(),el,gpt);
 					solver->setExtractCohesiveLawFromMicroDamage(true);
-					solver->setLostSolutionUniquenssTolerance(interfaceLaw->getLostSolutionUniquenssTolerance());
-					if (interfaceLaw->getLocationForStressExtraction()>=0){
-						solver->setLocationForStressExtraction(interfaceLaw->getLocationForStressExtraction());
-					}
 				}
 				else{
 					solver->setExtractCohesiveLawFromMicroDamage(false);
 				}
+				
+				SVector3 n, t, b;
+				// get macrosolver
+				const nonLinearMechSolver* macroSolver = _mbulk->getSolver();
+				if (macroSolver== NULL){
+					Msg::Fatal("macro solver has not set yet");
+				}
+		
+				macroSolver->getLocalBasis(ele,gpt,n,t,b);
+				
+				if (interfaceLaw->getRotationOfRVEFollowingInterfaceLocalBasis() and !solver->GModelIsRotated()){					
+					solver->rotateModel(n,t,b);
+				}
+				
+				nonLinearMicroBC* mbc  = solver->getMicroBC();
+				if (mbc->getType() == nonLinearMicroBC::OrthogonalDirectionalMixedBC){
+					printf("set pbc %d n = %f %f %f t= %f %f %f",Msg::GetCommRank(),n[0],n[1],n[2],t[0],t[1],t[2]);
+					nonLinearOrthogonalMixedBCDirectionFollowing* mixedBC = static_cast<nonLinearOrthogonalMixedBCDirectionFollowing*>(mbc);
+					mixedBC->clearDirs();
+					if (mbc->getDim() == 2){
+						mixedBC->setKUBCDirection(t);
+						mixedBC->setSUBCDirection(n);
+					}
+					else if (mbc->getDim() == 3){
+						mixedBC->setKUBCDirection(t);
+						mixedBC->setSUBCDirection(n);
+						mixedBC->setKUBCDirection(b);
+					}
+				}
+				else if (mbc->getType() == nonLinearMicroBC::PBC){
+					nonLinearPeriodicBC* pbc = static_cast<nonLinearPeriodicBC*>(mbc);
+					if (mbc->getDim() == 2){
+						if (pbc->isShifted()){
+							pbc->setShiftPBCNormal(n);
+						}
+					}
+					else{
+						Msg::Fatal("shifted BC is not defined for 3D problem");
+					}
+				}
+				
+				if (interfaceLaw->isSwitchedToFailureBC()){
+					printf("set microBC for failure\n");
+					solver->setSwitchMicroBCFlag(true);
+					solver->addMicroBCForFailure(interfaceLaw->getMicroBCFailure());
+					
+					nonLinearMicroBC* failureBC = solver->getMicroBCFailure();
+					if (failureBC->getType() == nonLinearMicroBC::OrthogonalDirectionalMixedBC){
+						printf("set OrthogonalDirectionalMixedBC %d n = %f %f %f t= %f %f %f",Msg::GetCommRank(),n[0],n[1],n[2],t[0],t[1],t[2]);
+						nonLinearOrthogonalMixedBCDirectionFollowing* failuremixedBC = static_cast<nonLinearOrthogonalMixedBCDirectionFollowing*>(mbc);
+						failuremixedBC->clearDirs();
+						if (failureBC->getDim() == 2){
+							failuremixedBC->setKUBCDirection(t);
+							failuremixedBC->setSUBCDirection(n);
+						}
+						else if (failureBC->getDim() == 3){
+							failuremixedBC->setKUBCDirection(t);
+							failuremixedBC->setSUBCDirection(n);
+							failuremixedBC->setKUBCDirection(b);
+						}
+					}
+					else if (failureBC->getType() == nonLinearMicroBC::PBC){
+						printf("set PBC %d n = %f %f %f t= %f %f %f",Msg::GetCommRank(),n[0],n[1],n[2],t[0],t[1],t[2]);
+						nonLinearPeriodicBC* failurepbc = static_cast<nonLinearPeriodicBC*>(failureBC);
+						if (failureBC->getDim() == 2){
+							if (failurepbc->isShifted()){
+								failurepbc->setShiftPBCNormal(n);
+							}
+						}
+						else{
+							Msg::Fatal("shifted BC is not defined for 3D problem");
+						}
+					}
+					
+				}
+				
 			}
+			
 			solver->initMicroSolver();
 			ips->setSolver(solver);
     }
-    
+
   }
   else{
     _nummat->createIPState(isSolve,ips,state_,ele,nbFF_,GP,gpt);
@@ -262,20 +350,20 @@ void MultiscaleFractureByCohesive3DLaw::initialBroken(IPStateBase *ips) const
 		solver->getHomogenizationState(IPStateBase::previous)->getBrokenFlag() = true;
 		solver->getHomogenizationState(IPStateBase::current)->getBrokenFlag() = true;
 	}
-	
 }
 
+void MultiscaleFractureByCohesive3DLaw::stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff, const bool checkfrac){
+
+  FractureByCohesive3DLaw::stress(ipv,ipvprev,stiff,checkfrac);
+};
+
 
 GeneralBulkFollwedCohesive3DLaw::GeneralBulkFollwedCohesive3DLaw(const int num, const bool init):Cohesive3DLaw(num,init),
-  _L(0.),_damageToCohesiveJump(false), _stressExtractLocation(-1),_lostSolutionUniquenssTolerance(0.){};
+  _L(0.),_lostSolutionUniquenssTolerance(0.){};
 GeneralBulkFollwedCohesive3DLaw::GeneralBulkFollwedCohesive3DLaw(const GeneralBulkFollwedCohesive3DLaw& src):
-  Cohesive3DLaw(src),_L(src._L), _damageToCohesiveJump(src._damageToCohesiveJump),_stressExtractLocation(src._stressExtractLocation),
+  Cohesive3DLaw(src),_L(src._L),
 	_lostSolutionUniquenssTolerance(src._lostSolutionUniquenssTolerance){}
 
-void GeneralBulkFollwedCohesive3DLaw::setExtractCohesiveLawFromMicroDamage(const bool flag){
-	_damageToCohesiveJump = flag;
-};
-
 void GeneralBulkFollwedCohesive3DLaw::setLostSolutionUniquenssTolerance(const double tol){
 	_lostSolutionUniquenssTolerance = tol;
 };
@@ -296,9 +384,35 @@ void GeneralBulkFollwedCohesive3DLaw::createIPVariable(IPVariable* &ipv,const ME
   ipv = new BulkFollowedCohesive3DIPVariable();
 }
 
-GeneralMultiscaleBulkFollwedCohesive3DLaw::GeneralMultiscaleBulkFollwedCohesive3DLaw(const int num, const bool init):GeneralBulkFollwedCohesive3DLaw(num,init){};
+GeneralMultiscaleBulkFollwedCohesive3DLaw::GeneralMultiscaleBulkFollwedCohesive3DLaw(const int num, const bool init):
+	GeneralBulkFollwedCohesive3DLaw(num,init),
+_stressExtractLocation(-1),_voidPartInLocalizationBand(0.),_rotateRVEFollowingInterfaceNormal(false),
+_microBCFailure(NULL)
+{};
 GeneralMultiscaleBulkFollwedCohesive3DLaw::GeneralMultiscaleBulkFollwedCohesive3DLaw(const GeneralMultiscaleBulkFollwedCohesive3DLaw& src):
-  GeneralBulkFollwedCohesive3DLaw(src){}
+  GeneralBulkFollwedCohesive3DLaw(src),
+	_stressExtractLocation(src._stressExtractLocation),
+	_voidPartInLocalizationBand(src._voidPartInLocalizationBand),
+	_rotateRVEFollowingInterfaceNormal(src._rotateRVEFollowingInterfaceNormal){
+	_microBCFailure = NULL;
+	if (src._microBCFailure != NULL){
+		_microBCFailure = src._microBCFailure->clone();
+	}
+}
+
+void GeneralMultiscaleBulkFollwedCohesive3DLaw::addMicroBCFailure(const nonLinearMicroBC* mbc){
+	if (_microBCFailure) delete _microBCFailure;
+	_microBCFailure = mbc->clone();
+};
+
+bool GeneralMultiscaleBulkFollwedCohesive3DLaw::isSwitchedToFailureBC() const{
+	if (_microBCFailure == NULL) return false;
+	else return true;
+};
+
+GeneralMultiscaleBulkFollwedCohesive3DLaw::~GeneralMultiscaleBulkFollwedCohesive3DLaw(){
+	if (_microBCFailure != NULL) delete _microBCFailure;
+};
 
 void GeneralMultiscaleBulkFollwedCohesive3DLaw::createIPState(IPStateBase* &ips,const bool* state_,
                                           const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const
@@ -317,7 +431,8 @@ void GeneralMultiscaleBulkFollwedCohesive3DLaw::createIPVariable(IPVariable* &ip
 
 
 dG3DMultiscaleCohesiveLaw::dG3DMultiscaleCohesiveLaw(const int num, const double surfaceRatio):
-			GeneralMultiscaleBulkFollwedCohesive3DLaw(num,true),_surfaceReductionRatio(surfaceRatio){};
+			GeneralMultiscaleBulkFollwedCohesive3DLaw(num,true),_surfaceReductionRatio(surfaceRatio)
+			{};
 dG3DMultiscaleCohesiveLaw::dG3DMultiscaleCohesiveLaw(const dG3DMultiscaleCohesiveLaw& src):
   GeneralMultiscaleBulkFollwedCohesive3DLaw(src),_surfaceReductionRatio(src._surfaceReductionRatio){}
 
@@ -348,10 +463,10 @@ void dG3DMultiscaleCohesiveLaw::checkCohesiveInsertion(IPStateBase* ipsm, IPStat
 		fPlusCur->broken();
 		return;
 	}
-	
+
 	bool  solverIsBrokenMinus = static_cast<const dG3DMultiscaleIPVariable*>(fMinusCur->getIPvBulk())->solverIsBroken();
 	bool  solverIsBrokenPlus = static_cast<const dG3DMultiscaleIPVariable*>(fPlusCur->getIPvBulk())->solverIsBroken();
-	
+
   if (solverIsBrokenMinus or solverIsBrokenPlus){
 		printf("rank %d: cohesive element is inserted \n",Msg::GetCommRank());
     fMinusCur->broken();
@@ -399,40 +514,37 @@ void dG3DMultiscaleCohesiveLaw::transferInterfaceDataToBulk(IPVariable* ipv, con
  		else {
       Msg::Fatal("solver is not available MultiscaleDGCohesive3DLaw::transferInterfaceDataToBulk");
     }
-		
+
 		const homogenizedData* homoData = solver->getHomogenizationState(IPStateBase::current);
     const homogenizedData* homoDataPrev = solver->getHomogenizationState(IPStateBase::previous);
-    
+
 		SVector3 refN = fipv->getConstRefToReferenceOutwardNormal();
     refN.normalize();
-		
-    
+
+
 		const STensor3& Fb0 = fipvprev->getBulkDeformationGradient();
 		const STensor3& Fb = fipv->getBulkDeformationGradient();
-		
+
 		const SVector3& ujump = fipv->getConstRefToJump();
 		const SVector3& ujump0 = fipvprev->getConstRefToJump();
+
+
+		//double beta = (homoData->getActiveDamageVolume() + _voidPartInLocalizationBand)/(_surfaceReductionRatio*solver->getRVEVolume());
+		//double lM = homoData->getAverageLocalizationBandWidth();
+		double GammaM = solver->getHomogenizedCrackFace();
+		double V0 = solver->getRVEVolume();
+		double fact = GammaM/V0;
 		
-		
-		double beta = homoData->getActiveDamageVolume()/(_surfaceReductionRatio*solver->getRVEVolume());
-		double lM = homoData->getAverageLocalizationBandWidth();
-		
+
 		STensor3& F = fipv->getRefToDeformationGradient();
 		F = fipvprev->getConstRefToDeformationGradient();
-		
-		SVector3 dFbN(0.);
-		for (int i=0; i<3; i++){
-			for (int j=0; j<3; j++){
-				dFbN(i) += (Fb(i,j) - Fb0(i,j))*refN(j);
-			}
-		}
-		
+
 		for (int i=0; i<3; i++){
 			for (int j=0; j<3; j++){
-				F(i,j) += Fb(i,j) - Fb0(i,j)-beta*dFbN(i)*refN(j) + (beta/lM)*(ujump(i) - ujump0(i))*refN(j);
+        F(i,j) += Fb(i,j) - Fb0(i,j) + fact*(ujump(i) - ujump0(i))*refN(j);
 			}
 		}
-		
+
 		if (stiff){
 			STensor43& dFinterfacedF = fipv->getRefToDInterfaceDeformationGradientDDeformationGradient();
       STensor33& dFinterfacedJump = fipv->getRefToDInterfaceDeformationGradientDJump();
@@ -443,9 +555,9 @@ void dG3DMultiscaleCohesiveLaw::transferInterfaceDataToBulk(IPVariable* ipv, con
 			for (int i=0; i<3; i++){
         for (int j=0; j<3; j++){
           for (int k=0; k<3; k++){
-            dFinterfacedJump(i,j,k) += I(i,k)*refN(j)*(beta/lM);
+            dFinterfacedJump(i,j,k) += I(i,k)*refN(j)*fact;
             for (int l=0; l<3; l++){
-              dFinterfacedF(i,j,k,l) += I(i,k)*I(j,l) - beta*I(i,k)*refN(j)*refN(l);
+              dFinterfacedF(i,j,k,l) += I(i,k)*I(j,l); // - beta*I(i,k)*refN(j)*refN(l);
             }
           }
 
@@ -455,6 +567,7 @@ void dG3DMultiscaleCohesiveLaw::transferInterfaceDataToBulk(IPVariable* ipv, con
 
     solver->setLocalizationNormal(refN);
     solver->setRVELengthInNormalDirection(_L,_surfaceReductionRatio);
+		solver->setVoidPartInLocalizationBand(_voidPartInLocalizationBand);
   }
 };
 
@@ -474,11 +587,11 @@ void dG3DMultiscaleCohesiveLaw::stress(IPVariable* ipv, const IPVariable* ipvpre
     nonLinearMechSolver* solver = mipv->getSolver();
     const homogenizedData* homoData = solver->getHomogenizationState(IPStateBase::current);
     const homogenizedData* homoDataPrev = solver->getHomogenizationState(IPStateBase::previous);
-		
+
 
     SVector3 refN = fipv->getConstRefToReferenceOutwardNormal();
     refN.normalize();
-		
+
     const STensor3& P = fipv->getConstRefToFirstPiolaKirchhoffStress();
     SVector3& T = fipv->getRefToInterfaceForce();
     T *= 0.;
@@ -490,31 +603,31 @@ void dG3DMultiscaleCohesiveLaw::stress(IPVariable* ipv, const IPVariable* ipvpre
 
     SVector3& cjump = fipv->getRefToCohesiveJump();
     cjump = homoData->getHomogenizedCohesiveJump();
-		
+
 		double normalPart = dot(cjump,refN);
-		
+
 		if (!cohmipvprev->ifTension()){
 			for (int i=0; i<3; i++)
         cjump(i) -= normalPart*refN(i);
 		}
-		
+
     if (normalPart < 0){
 			cohmipv->setTensionFlag(false);
     }
 		else{
 			cohmipv->setTensionFlag(true);
 		}
-		
+
 		const double& lprev = homoDataPrev->getAverageLocalizationBandWidth();
-		
+
 		double& irr = fipv->getRefToIrreversibleEnergy();
 		irr = homoData->getIrreversibleEnergy()*lprev;
 
     if (stiff){
-			
+
 			const STensor43& dFinterfacedF = fipv->getConstRefToDInterfaceDeformationGradientDDeformationGradient();
 			const STensor33& dFinterfacedJump = fipv->getConstRefToDInterfaceDeformationGradientDJump();
-			
+
       const STensor43& dPdFinf = homoData->getHomogenizedTangentOperator_F_F();
       STensor33& dTdF = fipv->getRefToDInterfaceForceDDeformationGradient();
       STensor3& dTdjump = fipv->getRefToDInterfaceForceDjump();
@@ -537,12 +650,12 @@ void dG3DMultiscaleCohesiveLaw::stress(IPVariable* ipv, const IPVariable* ipvpre
 					}
 				}
 			}
-		
+
 			const STensor33& dcjumpdFinf = homoData->getHomogenizedTangentOperator_CohesiveJump_F();
 
       STensor33& dcjumpDF = fipv->getRefToDCohesiveJumpDDeformationGradient();
       STensor3& dcjumpDJump = fipv->getRefToDCohesiveJumpDJump();
-			
+
 			STensor33 dcjumpdFinfNew(dcjumpdFinf);
       if (!cohmipvprev->ifTension()){
 				STensor3 INN(1.);
@@ -551,8 +664,8 @@ void dG3DMultiscaleCohesiveLaw::stress(IPVariable* ipv, const IPVariable* ipvpre
             INN(i,j) -= refN(i)*refN(j);
           }
         }
-				
-				
+
+
 				for (int i=0; i<3; i++){
 					for (int j=0; j<3; j++){
 						for (int k=0; k<3; k++){
@@ -563,12 +676,12 @@ void dG3DMultiscaleCohesiveLaw::stress(IPVariable* ipv, const IPVariable* ipvpre
 					}
 				}
       }
-			
+
 
       dcjumpDF *= 0.;
       dcjumpDJump*= 0.;
-			
-			
+
+
 			for (int i=0; i<3; i++){
 				for (int p=0; p<3; p++){
 					for (int q=0; q<3; q++){
@@ -581,17 +694,17 @@ void dG3DMultiscaleCohesiveLaw::stress(IPVariable* ipv, const IPVariable* ipvpre
 					}
 				}
 			}
-			
+
 			if (homoData->getIrreversibleEnergyExtractionFlag()){
-        
+
 				STensor3& dirrEnergDF = fipv->getRefToDIrreversibleEnergyDDeformationGradient();
 				SVector3& dirrEnergDJump = fipv->getRefToDIrreversibleEnergyDJump();
-				
+
 				dirrEnergDF *=0.;
 				dirrEnergDJump*=0.;
-				
+
 				const STensor3& dirrEnergdFinf = homoData->getHomogenizedTangentOperator_IrreversibleEnergy_F();
-				
+
 				for (int i=0; i<3; i++){
 					for (int j=0; j<3; j++){
 						for (int k=0; k<3; k++){
@@ -600,7 +713,7 @@ void dG3DMultiscaleCohesiveLaw::stress(IPVariable* ipv, const IPVariable* ipvpre
 								dirrEnergDF(k,l) += dirrEnergdFinf(i,j)*dFinterfacedF(i,j,k,l);
 							}
 						}
-						
+
 					}
 				}
 			}
@@ -635,21 +748,20 @@ void TwoFieldMultiscaleCohesive3DLaw::transferInterfaceDataToBulk(IPVariable* ip
  		else {
       Msg::Fatal("solver is not available MultiscaleDGCohesive3DLaw::transferInterfaceDataToBulk");
     }
-		
+
 		const homogenizedData* homoData = solver->getHomogenizationState(IPStateBase::current);
     const homogenizedData* homoDataPrev = solver->getHomogenizationState(IPStateBase::previous);
-    
+
 		SVector3 refN = fipv->getConstRefToReferenceOutwardNormal();
     refN.normalize();
-		
-		
-#if 0
+
+
 		const SVector3& iJump0 = cohIpvprev->getConstRefToIncompatibleStrainAtFailureOnset();
 		const SVector3& iJump = fipv->getConstRefToIncompatibleStrainVector();
- 
+
 		STensor3& F = fipv->getRefToDeformationGradient();
 		F = fipv->getBulkDeformationGradient();
-		
+
     for (int i=0; i<3; i++){
       for (int j=0; j<3; j++){
         F(i,j) += (iJump(i) - iJump0(i))*refN(j);
@@ -676,65 +788,7 @@ void TwoFieldMultiscaleCohesive3DLaw::transferInterfaceDataToBulk(IPVariable* ip
         }
       }
 		}
-#else
-    
-		const SVector3& iJump0 = fipvprev->getConstRefToIncompatibleStrainVector();
-    const SVector3& iJump = fipv->getConstRefToIncompatibleStrainVector();
-    
-		const STensor3& Fb0 = fipvprev->getBulkDeformationGradient();
-		const STensor3& Fb = fipv->getBulkDeformationGradient();
-		
-		const SVector3& ujump = fipv->getConstRefToJump();
-		const SVector3& ujump0 = fipvprev->getConstRefToJump();
-		
-		
-		double beta = homoData->getActiveDamageVolume()/solver->getRVEVolume();
-		double lM = homoData->getAverageLocalizationBandWidth();
-		
-		SVector3 dFbN(0.);
-		for (int i=0; i<3; i++){
-			for (int j=0; j<3; j++){
-				dFbN(i) += (Fb(i,j) - Fb0(i,j))*refN(j);
-			}
-		}
-		
-		STensor3& F = fipv->getRefToDeformationGradient();
-		F = fipvprev->getConstRefToDeformationGradient();
-		
-		for (int i=0; i<3; i++){
-			for (int j=0; j<3; j++){
-				F(i,j) += Fb(i,j) - Fb0(i,j)-beta*dFbN(i)*refN(j)+ beta*(ujump(i)-ujump0(i))*refN(j)/lM + (iJump(i) - iJump0(i))*refN(j);
-        //F(i,j) += (1.-beta)*(Fb(i,j) - Fb0(i,j)) + (iJump(i) - iJump0(i))*refN(j);
-			}
-		}
-		
-		if (stiff){
-			STensor43& dFinterfacedF = fipv->getRefToDInterfaceDeformationGradientDDeformationGradient();
-      STensor33& dFinterfacedJump = fipv->getRefToDInterfaceDeformationGradientDJump();
-      STensor33& dFinterfacedInstrain = fipv->getRefToDInterfaceDeformationGradientDIncompatibleStrainVector();
 
-      dFinterfacedF *= 0.;
-      dFinterfacedJump *= 0.;
-      dFinterfacedInstrain *= 0.;
-      static STensor3 I(1.);
-			for (int i=0; i<3; i++){
-        for (int j=0; j<3; j++){
-          for (int k=0; k<3; k++){
-            dFinterfacedInstrain(i,j,k) += I(i,k)*refN(j);
-						dFinterfacedJump(i,j,k) += I(i,k)*refN(j)*(beta/lM);
-            for (int l=0; l<3; l++){
-              //dFinterfacedF(i,j,k,l) += (1-beta)*I(i,k)*I(j,l);
-              dFinterfacedF(i,j,k,l) += I(i,k)*I(j,l) - beta*I(i,k)*refN(j)*refN(l);
-            }
-          }
-
-        }
-      }
-		}
-			
-#endif //1
-		
-		
 
     solver->setLocalizationNormal(refN);
     solver->setRVELengthInNormalDirection(_L,_surfaceReductionRatio);
@@ -767,11 +821,11 @@ void TwoFieldMultiscaleCohesive3DLaw::stress(IPVariable* ipv, const IPVariable*
     nonLinearMechSolver* solver = mipv->getSolver();
     const homogenizedData* homoData = solver->getHomogenizationState(IPStateBase::current);
     const homogenizedData* homoDataPrev = solver->getHomogenizationState(IPStateBase::previous);
-		
+
 
     SVector3 refN = fipv->getConstRefToReferenceOutwardNormal();
     refN.normalize();
-		
+
     const STensor3& P = fipv->getConstRefToFirstPiolaKirchhoffStress();
     SVector3& T = fipv->getRefToInterfaceForce();
     T *= 0.;
@@ -783,32 +837,32 @@ void TwoFieldMultiscaleCohesive3DLaw::stress(IPVariable* ipv, const IPVariable*
 
     SVector3& cjump = fipv->getRefToCohesiveJump();
     cjump = homoData->getHomogenizedCohesiveJump();
-		
+
 		double normalPart = dot(cjump,refN);
-		
+
 		if (!cohmipvprev->ifTension()){
 			for (int i=0; i<3; i++)
         cjump(i) -= normalPart*refN(i);
 		}
-		
+
     if (normalPart < 0){
 			cohmipv->setTensionFlag(false);
     }
 		else{
 			cohmipv->setTensionFlag(true);
 		}
-		
+
 		const double& lprev = homoDataPrev->getAverageLocalizationBandWidth();
-		
+
 		double& irr = fipv->getRefToIrreversibleEnergy();
 		irr = homoData->getIrreversibleEnergy()*lprev;
 
     if (stiff){
-			
+
 			const STensor43& dFinterfacedF = fipv->getConstRefToDInterfaceDeformationGradientDDeformationGradient();
 			const STensor33& dFinterfacedJump = fipv->getConstRefToDInterfaceDeformationGradientDJump();
 			const STensor33& dFinterfacedInStrain = fipv->getConstRefToDInterfaceDeformationGradientDIncompatibleStrainVector();
-			
+
       const STensor43& dPdFinf = homoData->getHomogenizedTangentOperator_F_F();
       STensor33& dTdF = fipv->getRefToDInterfaceForceDDeformationGradient();
       STensor3& dTdjump = fipv->getRefToDInterfaceForceDjump();
@@ -834,13 +888,13 @@ void TwoFieldMultiscaleCohesive3DLaw::stress(IPVariable* ipv, const IPVariable*
 					}
 				}
 			}
-		
+
 			const STensor33& dcjumpdFinf = homoData->getHomogenizedTangentOperator_CohesiveJump_F();
 
       STensor33& dcjumpDF = fipv->getRefToDCohesiveJumpDDeformationGradient();
       STensor3& dcjumpDJump = fipv->getRefToDCohesiveJumpDJump();
       STensor3& dcjumpDinStrain = fipv->getRefToDCohesiveJumpDIncompatibleStrainVector();
-			
+
 			STensor33 dcjumpdFinfNew(dcjumpdFinf);
       if (!cohmipvprev->ifTension()){
 				STensor3 INN(1.);
@@ -849,8 +903,8 @@ void TwoFieldMultiscaleCohesive3DLaw::stress(IPVariable* ipv, const IPVariable*
             INN(i,j) -= refN(i)*refN(j);
           }
         }
-				
-				
+
+
 				for (int i=0; i<3; i++){
 					for (int j=0; j<3; j++){
 						for (int k=0; k<3; k++){
@@ -861,13 +915,13 @@ void TwoFieldMultiscaleCohesive3DLaw::stress(IPVariable* ipv, const IPVariable*
 					}
 				}
       }
-			
+
 
       dcjumpDF *= 0.;
       dcjumpDJump*= 0.;
       dcjumpDinStrain *= 0.;
-			
-			
+
+
 			for (int i=0; i<3; i++){
 				for (int p=0; p<3; p++){
 					for (int q=0; q<3; q++){
@@ -881,19 +935,19 @@ void TwoFieldMultiscaleCohesive3DLaw::stress(IPVariable* ipv, const IPVariable*
 					}
 				}
 			}
-			
+
 			if (homoData->getIrreversibleEnergyExtractionFlag()){
-        
+
 				STensor3& dirrEnergDF = fipv->getRefToDIrreversibleEnergyDDeformationGradient();
 				SVector3& dirrEnergDJump = fipv->getRefToDIrreversibleEnergyDJump();
 				SVector3& dirrEnergDinStrain = fipv->getRefToDIrreversibleEnergyDIncompatibleStrainVector();
-				
+
 				dirrEnergDF *=0.;
 				dirrEnergDJump*=0.;
 				dirrEnergDinStrain *= 0.;
-				
+
 				const STensor3& dirrEnergdFinf = homoData->getHomogenizedTangentOperator_IrreversibleEnergy_F();
-				
+
 				for (int i=0; i<3; i++){
 					for (int j=0; j<3; j++){
 						dirrEnergDinStrain(i) += dirrEnergdFinf(i,j)*refN(j)*lprev;
@@ -922,10 +976,10 @@ void TwoFieldMultiscaleCohesive3DLaw::checkCohesiveInsertion(IPStateBase* ipsm,
 		fPlusCur->broken();
 		return;
 	}
-	
+
 	bool  solverIsBrokenMinus = static_cast<const dG3DMultiscaleIPVariable*>(fMinusCur->getIPvBulk())->solverIsBroken();
 	bool  solverIsBrokenPlus = static_cast<const dG3DMultiscaleIPVariable*>(fPlusCur->getIPvBulk())->solverIsBroken();
-	
+
   if (solverIsBrokenMinus or solverIsBrokenPlus){
 		printf("rank %d: cohesive element is inserted \n",Msg::GetCommRank());
     fMinusCur->broken();
@@ -1180,21 +1234,21 @@ MultiscaleThermoMechanicsDG3DMaterialLaw::MultiscaleThermoMechanicsDG3DMaterialL
 
 MultiscaleThermoMechanicsDG3DMaterialLaw::MultiscaleThermoMechanicsDG3DMaterialLaw(const MultiscaleThermoMechanicsDG3DMaterialLaw& src):
 	dG3DMaterialLaw(src),numericalMaterial(src),linearK(src.linearK),Stiff_alphaDilatation(src.Stiff_alphaDilatation){};
-	
-	
+
+
 void MultiscaleThermoMechanicsDG3DMaterialLaw::fillElasticStiffness(double& rho, STensor43& L, STensor3& Klinear, STensor3& alphaDilatation){
 	printf("get elastic properties\n");
-  
+
   this->assignMeshId(0,0);
   nonLinearMechSolver* solver = this->createMicroSolver(0,0);
 	solver->tangentAveragingFlag(true);
 	solver->initMicroSolver();
-	
+
 	rho = solver->getHomogenizedDensity();
 	L = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedTangentOperator_F_F();
 	Klinear = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedTangentOperator_gradT_gradT(0,0);
 	alphaDilatation = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedTangentOperator_F_T(0);
-  
+
   delete solver;
 };
 
@@ -1211,7 +1265,7 @@ void MultiscaleThermoMechanicsDG3DMaterialLaw::createIPState(IPStateBase* &ips,c
 
 void MultiscaleThermoMechanicsDG3DMaterialLaw::createIPState(const bool isSolve, IPStateBase* &ips,const bool* state,
                                  const MElement *ele, const int nbFF, const IntPt *GP, const int gpt) const{
-  
+
 	bool oninter = true;
 	const MInterfaceElement* iele = dynamic_cast<const MInterfaceElement*>(ele);
 	if (iele == NULL) oninter = false;
@@ -1221,7 +1275,7 @@ void MultiscaleThermoMechanicsDG3DMaterialLaw::createIPState(const bool isSolve,
 	IPVariable* ipv2 = new MultiscaleThermoMechanicsDG3DIPVariable(oninter);
 	if(ips != NULL) delete ips;
 	ips = new IP3State(state,ipvi,ipv1,ipv2);
-	
+
 	if (isSolve){
 		int el = ele->getNum();
 		nonLinearMechSolver* solver = this->createMicroSolver(el,gpt);
@@ -1255,7 +1309,7 @@ void MultiscaleThermoMechanicsDG3DMaterialLaw::stress(IPVariable* ipv, const IPV
 
   // solve microscopic problem
   double time =solver->microSolve();
-	
+
 	const homogenizedData* homoData = solver->getHomogenizationState(IPStateBase::current);
 
   // get stress
@@ -1263,7 +1317,7 @@ void MultiscaleThermoMechanicsDG3DMaterialLaw::stress(IPVariable* ipv, const IPV
   mipv->getRefToFlux() = homoData->getHomogenizedConstitutiveExtraDofFlux(0);
   mipv->getRefToMechanicalSource() = homoData->getHomogenizedConstitutiveExtraDofMechanicalSource(0);
   mipv->getRefToExtraDofFieldCapacityPerUnitField() = homoData->getHomogenizedConstitutiveExtraDofFieldCapacityPerUnitField(0);
-  
+
 	double&w = mipv->getRefToFieldSource();
   // thermal source is compute from previous step to avoid derivatives
   double Cpprev = mipvprev->getConstRefToExtraDofFieldCapacityPerUnitField();
@@ -1312,7 +1366,7 @@ void MultiscaleThermoMechanicsDG3DMaterialLaw::initialIPVariable(IPVariable* ipv
 		dGipv->setRefToElasticTangentModuli(elasticStiffness);
 		dGipv->setRefTolinearK(this->linearK);
 		dGipv->setRefToStiff_alphaDilatation(this->Stiff_alphaDilatation);
-		
+
 		dGipv->getRefToTangentModuli() = elasticStiffness;
 		dGipv->getRefTodFluxdGradField() = linearK;
 		dGipv->getRefTodPdField() = Stiff_alphaDilatation;
diff --git a/dG3D/src/dG3DMultiscaleMaterialLaw.h b/dG3D/src/dG3DMultiscaleMaterialLaw.h
index 53ee28b251fa2fb9c9998657554dc6e1ae18e7fb..92c3474ad7bf83801b45706a6d0b4faa66d36796 100644
--- a/dG3D/src/dG3DMultiscaleMaterialLaw.h
+++ b/dG3D/src/dG3DMultiscaleMaterialLaw.h
@@ -21,7 +21,7 @@ class dG3DMultiscaleMaterialLaw : public dG3DMaterialLaw, public numericalMateri
   protected:
     virtual void fillElasticStiffness(double & rho, STensor43& L);
   #endif // SWIG
-  
+
 
   public:
     dG3DMultiscaleMaterialLaw(const int lnum, const int tag);
@@ -59,7 +59,7 @@ class dG3DMultiscaleMaterialLaw : public dG3DMaterialLaw, public numericalMateri
     virtual void setElasticStiffness(IPVariable* ipv) const;
     virtual bool isNumeric() const{return true;}
 		virtual void initialIPVariable(IPVariable* ipv, bool stiff);
-		
+
 		virtual materialLaw* clone() const {return new dG3DMultiscaleMaterialLaw(*this);};
     #endif // SWIG
 };
@@ -69,12 +69,11 @@ class MultiscaleFractureByCohesive3DLaw : public FractureByCohesive3DLaw,
   #ifndef SWIG
   protected:
     numericalMaterialBase* _nummat; // point to numerical mat of bulk law
-		
   #endif // SWIG
 
   public:
     MultiscaleFractureByCohesive3DLaw(const int num,const int nbulk, const int ncoh);
-		
+
     #ifndef SWIG
     MultiscaleFractureByCohesive3DLaw(const MultiscaleFractureByCohesive3DLaw& src);
     virtual ~MultiscaleFractureByCohesive3DLaw(){}
@@ -119,6 +118,8 @@ class MultiscaleFractureByCohesive3DLaw : public FractureByCohesive3DLaw,
 		};
 		#endif //HAVE_MPI
 		virtual materialLaw* clone() const {return new MultiscaleFractureByCohesive3DLaw(*this);};
+
+		virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
     #endif // SWIG
 };
 
@@ -126,10 +127,8 @@ class MultiscaleFractureByCohesive3DLaw : public FractureByCohesive3DLaw,
 class GeneralBulkFollwedCohesive3DLaw : public Cohesive3DLaw{
   protected:
     double _L; // RVE length perpendicular to the localization band
-		bool _damageToCohesiveJump; // can be modifed during creating microscopic solver-->avoid problems with readonly function
 		double _lostSolutionUniquenssTolerance;
-		int _stressExtractLocation;
-		
+
 	public:
     #ifndef SWIG
     GeneralBulkFollwedCohesive3DLaw(const int num, const bool init = true);
@@ -145,24 +144,28 @@ class GeneralBulkFollwedCohesive3DLaw : public Cohesive3DLaw{
     virtual void transferInterfaceDataToBulk(IPVariable* ipv, const IPVariable* ipvprev,  const bool stiff) const = 0;
     virtual bool brokenCheck(IPVariable* ipv) const =0;
 		virtual materialLaw* clone() const = 0;
-		bool isDamageToCohesiveJump() const {return _damageToCohesiveJump;};
 		double getLostSolutionUniquenssTolerance() const {return _lostSolutionUniquenssTolerance;};
-		int getLocationForStressExtraction() const {return _stressExtractLocation;};
     #endif // SWIG
-		
+
     void setCharacteristicLength(const double L) {_L= L;}
-		void setExtractCohesiveLawFromMicroDamage(const bool flag);
 		void setLostSolutionUniquenssTolerance(const double tol);
-		void setLocationForStressExtraction(const int loc){_stressExtractLocation = loc;};
+		
 };
 
 
 class GeneralMultiscaleBulkFollwedCohesive3DLaw : public GeneralBulkFollwedCohesive3DLaw{
+	protected:
+		int _stressExtractLocation;
+		double _voidPartInLocalizationBand;
+		bool _rotateRVEFollowingInterfaceNormal; // true if performing rotation of RVE following local basis
+		
+		nonLinearMicroBC* _microBCFailure;
+		
   public:
     #ifndef SWIG
     GeneralMultiscaleBulkFollwedCohesive3DLaw(const int num, const bool init = true);
     GeneralMultiscaleBulkFollwedCohesive3DLaw(const GeneralMultiscaleBulkFollwedCohesive3DLaw& src);
-    virtual ~GeneralMultiscaleBulkFollwedCohesive3DLaw(){}
+    virtual ~GeneralMultiscaleBulkFollwedCohesive3DLaw();
 		virtual bool brokenCheck(IPVariable* ipv) const = 0;
     virtual void initLaws(const std::map<int,materialLaw*> &maplaw){} // nothing to do for this law
     virtual void createIPState(IPStateBase* &ips,const bool* state_=NULL,const MElement *ele=NULL, const int nbFF_=0, const IntPt *GP=NULL, const int gpt = 0) const;
@@ -172,7 +175,19 @@ class GeneralMultiscaleBulkFollwedCohesive3DLaw : public GeneralBulkFollwedCohes
     virtual void checkCohesiveInsertion(IPStateBase* ipsm, IPStateBase* ipsp, const bool forcedInsert= false) const = 0;
     virtual void transferInterfaceDataToBulk(IPVariable* ipv, const IPVariable* ipvprev,  const bool stiff) const = 0;
 		virtual materialLaw* clone() const = 0;
+		virtual bool isDamageToCohesiveJump() const = 0;
+		
+		int getLocationForStressExtraction() const {return _stressExtractLocation;};
+		bool getRotationOfRVEFollowingInterfaceLocalBasis() const {return _rotateRVEFollowingInterfaceNormal;};
+		
+		nonLinearMicroBC* getMicroBCFailure() {return _microBCFailure;}
+		const nonLinearMicroBC* getMicroBCFailure() const {return _microBCFailure;}
+		bool isSwitchedToFailureBC() const;
     #endif // SWIG
+		void addMicroBCFailure(const nonLinearMicroBC* mbc);
+		void setLocationForStressExtraction(const int loc){_stressExtractLocation = loc;};
+		void setVoidPartInLocalizationBand(const double vp){_voidPartInLocalizationBand = vp;};
+		void setRotationOfRVEFollowingInterfaceLocalBasis(const bool fl) {_rotateRVEFollowingInterfaceNormal = fl;};
 };
 
 class dG3DMultiscaleCohesiveLaw : public GeneralMultiscaleBulkFollwedCohesive3DLaw {
@@ -188,6 +203,7 @@ class dG3DMultiscaleCohesiveLaw : public GeneralMultiscaleBulkFollwedCohesive3DL
     virtual void checkCohesiveInsertion(IPStateBase* ipsm, IPStateBase* ipsp, const bool forcedInsert= false) const;
     virtual void transferInterfaceDataToBulk(IPVariable* ipv, const IPVariable* ipvprev,  const bool stiff) const;
 		virtual materialLaw* clone() const {return new dG3DMultiscaleCohesiveLaw(*this);};
+		virtual bool isDamageToCohesiveJump() const {return false;}
     #endif // SWIG
 };
 
@@ -205,6 +221,7 @@ class TwoFieldMultiscaleCohesive3DLaw : public GeneralMultiscaleBulkFollwedCohes
     virtual void checkCohesiveInsertion(IPStateBase* ipsm, IPStateBase* ipsp, const bool forcedInsert= false) const;
     virtual void transferInterfaceDataToBulk(IPVariable* ipv, const IPVariable* ipvprev,  const bool stiff) const;
 		virtual materialLaw* clone() const {return new TwoFieldMultiscaleCohesive3DLaw(*this);};
+		virtual bool isDamageToCohesiveJump() const {return true;}
     #endif // SWIG
 
 };
@@ -222,6 +239,7 @@ class TwoFieldMultiscaleAdhesive3DLaw : public GeneralMultiscaleBulkFollwedCohes
     virtual void checkCohesiveInsertion(IPStateBase* ipsm, IPStateBase* ipsp, const bool forcedInsert= false) const;
     virtual void transferInterfaceDataToBulk(IPVariable* ipv, const IPVariable* ipvprev,  const bool stiff) const;
 		virtual materialLaw* clone() const {return new TwoFieldMultiscaleAdhesive3DLaw(*this);};
+		virtual bool isDamageToCohesiveJump() const {return false;}
     #endif // SWIG
 
 };
@@ -235,13 +253,13 @@ class MultiscaleThermoMechanicsDG3DMaterialLaw : public dG3DMaterialLaw, public
 			Msg::Fatal("MultiscaleThermoMechanicsDG3DMaterialLaw::fillElasticStiffness should not be used");
 		};
 		virtual void fillElasticStiffness(double& rho, STensor43& L, STensor3& Klinear, STensor3& alphaDilatation);
-	
+
 	#endif //SWIG
-	
-	
+
+
 	public:
 		MultiscaleThermoMechanicsDG3DMaterialLaw(const int num, const int tag);
-		
+
 		#ifndef SWIG
 		MultiscaleThermoMechanicsDG3DMaterialLaw(const MultiscaleThermoMechanicsDG3DMaterialLaw&  src);
 		virtual ~MultiscaleThermoMechanicsDG3DMaterialLaw(){}
diff --git a/dG3D/src/embeddedLocalizationBand.cpp b/dG3D/src/embeddedLocalizationBand.cpp
index 0c4bd6d6e93f9d7318b473e4605b1d3018e72001..d56bef42d36929afd9979e42372fa9d8dc25c561 100644
--- a/dG3D/src/embeddedLocalizationBand.cpp
+++ b/dG3D/src/embeddedLocalizationBand.cpp
@@ -83,20 +83,17 @@ double embeddedFiniteBand(MElement* ele, IntPt& GP, const SVector3& normal, cons
 		beta = GP.weight*Q.distance(R)*bandwidth/ele->getVolume();
 		
 		/*
-		Msg::Info(" ele = %d t = %e compute betaE = %e Q[0] = %e Q[1] = %e Q[2] = %e R[0] = %e R[1] = %e R[2] = %e, distance = %e",ele->getNum(), t,beta,Q[0],Q[1],Q[2],R[0],R[1],R[2],Q.distance(R));
-		
-		if (ele->getNum() == 8){
-			nAC.print("nAC");
-			dir.print("dir");
-			normal.print("normal");
-			print(A->point(),"A");
-			print(B->point(),"B");
-			print(C->point(),"C");
-			print(pt,"P");
-			print(Q,"Q");
-			print(R,"R");
-		}
-		 */
+		printf("rank %d element = %d GP.weight %e bandwidth %e beta = %e volume %e \n",Msg::GetCommRank(),ele->getNum(),GP.weight,bandwidth,beta,ele->getVolume());
+		nAC.print("nAC");
+		dir.print("dir");
+		normal.print("normal");
+		print(A->point(),"A");
+		print(B->point(),"B");
+		print(C->point(),"C");
+		print(pt,"P");
+		print(Q,"Q");
+		print(R,"R");
+		 */ 
 	}
 	else{
 		Msg::Fatal("element type %d has not been implemented");
diff --git a/dgshell/src/dgNonLinearShellIPVariable.cpp b/dgshell/src/dgNonLinearShellIPVariable.cpp
index 588d7199391d60282bcf300d5f22bc7c7b9a271b..fd61bded7ef5082e333ac5aaab5c8555989ec1f0 100644
--- a/dgshell/src/dgNonLinearShellIPVariable.cpp
+++ b/dgshell/src/dgNonLinearShellIPVariable.cpp
@@ -309,20 +309,16 @@ J2linearShellIPv::J2linearShellIPv(const double h0,const short int nsimp,
                                    const bool oninter) : IPVariableNonLinearShell(h0,nsimp,oninter),
                                                          _F(nsimp), _tau(nsimp),
                                                          _j2ipv(nsimp,IPJ2linear(_j2law.getJ2IsotropicHardening())){}
-J2linearShellIPv::J2linearShellIPv(const J2linearShellIPv &source) : IPVariableNonLinearShell(source)
+J2linearShellIPv::J2linearShellIPv(const J2linearShellIPv &source) : IPVariableNonLinearShell(source),
+_j2ipv(source._j2ipv),_F(source._F),_tau(source._tau)
 {
-  for(int i=0;i<_nsimp;i++){
-    _j2ipv[i].operator = (source._j2ipv[i]);
-    _F[i] = source._F[i];
-    _tau[i] = source._tau[i];
-  }
 }
 J2linearShellIPv& J2linearShellIPv::operator=(const IPVariable &source)
 {
   IPVariableNonLinearShell::operator=(source);
   const J2linearShellIPv* src = static_cast<const J2linearShellIPv*>(&source);
   for(int i=0;i<_nsimp;i++){
-    _j2ipv[i].operator = (src->_j2ipv[i]);
+    _j2ipv[i].operator= (*dynamic_cast<const IPVariable*>(&src->_j2ipv[i]));
     _F[i] = src->_F[i];
     _tau[i] = src->_tau[i];
   }
diff --git a/dgshell/src/dgNonLinearShellIPVariable.h b/dgshell/src/dgNonLinearShellIPVariable.h
index fdf6b9741decab3957b6defe15928d97a5659e08..30af4c904b07f5d72d9091432eaf8119ecea094d 100644
--- a/dgshell/src/dgNonLinearShellIPVariable.h
+++ b/dgshell/src/dgNonLinearShellIPVariable.h
@@ -30,6 +30,7 @@ class IPVariableNonLinearShell : public IPVariableShell
   IPVariableNonLinearShell(const double h0,const short int nsimp,const bool oninter=false);
   IPVariableNonLinearShell(const IPVariableNonLinearShell &source);
   IPVariableNonLinearShell &operator=(const IPVariable &source);
+	virtual ~IPVariableNonLinearShell(){}
   /* pure virtual functions */
   virtual void setB(const std::vector<TensorialTraits<double>::GradType> &Grads,
                     const std::vector<TensorialTraits<double>::HessType> &Hess)=0;
@@ -113,6 +114,7 @@ class J2linearShellIPv : public IPVariableNonLinearShell // or store data in a d
                    const bool oninter=false);
   J2linearShellIPv(const J2linearShellIPv &source);
   J2linearShellIPv& operator=(const IPVariable &source);
+	virtual ~J2linearShellIPv(){}
   virtual void setB(const std::vector<TensorialTraits<double>::GradType> &Grads,
                     const std::vector<TensorialTraits<double>::HessType> &Hess);
   virtual void strain(const fullVector<double> &disp,const int npoint=-1,const shellLocalBasisBulk* lbinit=NULL);
diff --git a/dgshell/src/shellIPVariable.h b/dgshell/src/shellIPVariable.h
index 9e3a7fbc533fdabfa47802945a3be672da30481c..4fe248f21e595c70dfe2ce94d792525e31a0432f 100644
--- a/dgshell/src/shellIPVariable.h
+++ b/dgshell/src/shellIPVariable.h
@@ -25,6 +25,9 @@ struct tab6{
     double a[6];
   public :
     tab6(){for(int i=0;i<6;i++) a[i]=0.;}
+		tab6(const tab6& src){
+			for(int i=0;i<6;i++) a[i]=src.a[i];
+		}
     ~tab6(){};
     tab6& operator= (tab6 source) {for(int i=0;i<6;i++) a[i]=source[i];}
     double& operator[](const int i){return a[i];}