diff --git a/SlidingSurface2DLin/mrvl.geo b/SlidingSurface2DLin/mrvl.geo
new file mode 100644
index 0000000000000000000000000000000000000000..95a581344ae21d3bbb8ffa4aeef037eae434e20a
--- /dev/null
+++ b/SlidingSurface2DLin/mrvl.geo
@@ -0,0 +1,203 @@
+Include "mrvl_common.pro";
+
+Mesh.SurfaceEdges=0;
+
+lc1 = lc; // fine
+lc2 = 3*lc;
+lc3 = 8*lc; // coarse
+
+// 1. R A I L - S T A T O R
+bnd_slft() = {};
+bnd_srgh() = {};
+bnd_sbot() = {};
+
+// 1.1 Stator core
+pA = newp; Point(pA) = {0,0,0,lc3};
+pB = newp; Point(pB) = {L,0,0,lc3};
+lAB = newl; Line(lAB) = {pA,pB};
+bnd_sbot() += { lAB };
+pD = newp; Point(pD) = {L,cs,0,lc2};
+lBD = newl; Line(lBD) = {pB,pD};
+bnd_srgh() += { lBD };
+
+p5 = pD;
+For i In {0:NbrStaPer-1}
+  p1 = newp; Point(p1) = {L-i*(ws+vs)-vs/2,cs,0,lc2};
+  Line(newl) = {p5,p1};
+  p2 = newp; Point(p2) = {L-i*(ws+vs)-vs/2,cs+hs,0,lc1};
+  Line(newl) = {p1,p2};
+  p3 = newp; Point(p3) = {L-i*(ws+vs)-vs/2-ws,cs+hs,0,lc1};
+  Line(newl) = {p2,p3};
+  p4 = newp; Point(p4) = {L-i*(ws+vs)-vs/2-ws,cs,0,lc2};
+  Line(newl) = {p3,p4};
+  p5 = newp; Point(p5) = {L-i*(ws+vs)-vs-ws,cs,0,lc2};
+  Line(newl) = {p4,p5};
+EndFor
+pC = p5;
+lCA = newl; Line(lCA)={pC,pA};
+bnd_slft() += { lCA };
+
+ll_sc = newll; Line Loop(ll_sc) = { lAB, lBD ... lCA };
+sStatorCore = news; Plane Surface(sStatorCore) = {ll_sc};
+
+// 1.2 Air stator
+pE = newp; Point(pE) = {0,cs+hs+ag/3,0,lc};
+pF = newp; Point(pF) = {L,cs+hs+ag/3,0,lc};
+lDF = newl; Line(lDF)={pD,pF};
+lFE = newl; Line(lFE)={pF,pE};
+lEC = newl; Line(lEC)={pE,pC};
+bnd_srgh() += {lDF};
+bnd_slft() += {lEC};
+lags = lFE;
+
+ll_as = newll; Line Loop(ll_as) = { (-(lCA-1)) ... (-(lBD+1)), lDF, lFE, lEC  };
+sAirStator = news; Plane Surface(sAirStator) = {ll_as};
+
+pGz = newp; Point(pGz) = {0,cs+hs+2*ag/3,SlidingSurfaceShift,lc1};
+pHz = newp; Point(pHz) = {L,cs+hs+2*ag/3,SlidingSurfaceShift,lc1};
+
+l1 = -lFE;
+l2 = newl; Line(l2) = {pF,pHz};
+l3 = newl; Line(l3) = {pHz,pGz};
+l4 = newl; Line(l4) = {pGz,pE};
+bnd_srgh() += {l2};
+bnd_slft() += {l4};
+lags  = l1;
+lagsz = l3;
+
+ll_al = newll; Line Loop(ll_al) = { l1, l2 ... l4 };
+sAirLayer = news; Plane Surface(sAirLayer) = {ll_al};
+
+// 2. T R A N S L A T E U R  ( M O V E R )
+bnd_mrlft() = {};
+bnd_mrgh() = {};
+bnd_mtop() = {};
+
+
+// 2.1 Air gap layer
+pG = newp; Point(pG) = {0,cs+hs+2*ag/3,0,lc1};
+pH = newp; Point(pH) = {L,cs+hs+2*ag/3,0,lc1};
+pI = newp; Point(pI) = {0,cs+hs+hb ,0,lc3};
+pJ = newp; Point(pJ) = {L,cs+hs+hb,0,lc3};
+l1 = newl; Line(l1) = {pG,pH};
+l2 = newl; Line(l2) = {pH,pJ};
+l3 = newl; Line(l3) = {pJ,pI};
+l4 = newl; Line(l4) = {pI,pG};
+bnd_mrgh() += {l2};
+bnd_mtop() += {l3};
+bnd_mlft() += {l4};
+lagm  = l1;
+
+ll_am = newll; Line Loop(ll_am) = { l1, l2 ... l4 };
+
+// 2.2 Mover core and coils
+ym = cs+hs+ag;
+Lm = 6*wt+5*vt;
+
+pI = newp; Point(pI) = {(L-Lm)/2,ym+ht+ct,0,lc2};
+pJ = newp; Point(pJ) = {(L+Lm)/2,ym+ht+vt,0,lc2};
+
+llCoils() = {};
+llCore() = {};
+
+pA = newp+1;
+For i In {0:5}
+  p1 = newp; Point(p1) = {(L-Lm)/2-vw   +i*(wt+vt),ym+ht,0,lc};
+  If(i>0)
+    l0 = newl; Line(l0) = {p4,p1}; // connect with previous tooth
+  EndIf
+  p2 = newp; Point(p2) = {(L-Lm)/2      +i*(wt+vt),ym+ht,0,lc2};
+  p3 = newp; Point(p3) = {(L-Lm)/2+wt   +i*(wt+vt),ym+ht,0,lc2};
+  p4 = newp; Point(p4) = {(L-Lm)/2+wt+vw+i*(wt+vt),ym+ht,0,lc2};
+  p5 = newp; Point(p5) = {(L-Lm)/2-vw   +i*(wt+vt),ym+ht-hw,0,lc2};
+  p6 = newp; Point(p6) = {(L-Lm)/2      +i*(wt+vt),ym+ht-hw,0,lc2};
+  p7 = newp; Point(p7) = {(L-Lm)/2+wt   +i*(wt+vt),ym+ht-hw,0,lc2};
+  p8 = newp; Point(p8) = {(L-Lm)/2+wt+vw+i*(wt+vt),ym+ht-hw,0,lc2};
+  p9 = newp; Point(p9) = {(L-Lm)/2   +i*(wt+vt),ym,0,lc1};
+  p10 = newp; Point(p10) = {(L-Lm)/2+wt+i*(wt+vt),ym,0,lc1};
+
+  l1 = newl; Line(l1) = {p5,p6};
+  l2 = newl; Line(l2) = {p6,p2};
+  l3 = newl; Line(l3) = {p2,p1};
+  l4 = newl; Line(l4) = {p1,p5};
+  ll1 = newll; Line Loop(ll1) = { l1 ... l4 };
+
+  l5 = newl; Line(l5) = {p7,p8};
+  l6 = newl; Line(l6) = {p8,p4};
+  l7 = newl; Line(l7) = {p4,p3};
+  l8 = newl; Line(l8) = {p3,p7};
+  ll2 = newll; Line Loop(ll2) = { l5 ... l8 };
+
+  l9 = newl; Line(l9) = {p6,p9};
+  l10 = newl; Line(l10) = {p9,p10};
+  l11 = newl; Line(l11) = {p10,p7};
+
+  llCoils() += {ll1, ll2};
+
+  llCore() += { -l2, l9 ... l11, -l8};
+  If(i>0)
+    llCore() += {l0,-l3};
+  EndIf
+  If(i<5)
+	llCore() += {-l7};
+  EndIf
+EndFor
+pB = p3;
+l1 = newl; Line(l1) = {pB,pJ};
+l2 = newl; Line(l2) = {pJ,pI};
+l3 = newl; Line(l3) = {pI,pA};
+
+sCoils() = {};
+For i In {0:#llCoils()-1}
+  sc = news; Plane Surface(sc) = {llCoils(i)};
+  sCoils() += {sc};
+EndFor
+
+llc = newll; Line Loop(llc) = { llCore(), l1 ... l3 };
+sMoverCore = news; Plane Surface(sMoverCore) = {llc()};
+
+sAirMover = news; Plane Surface(sAirMover) = {ll_am,-llc,-llCoils()};
+
+Transfinite Line{ lags, lagsz, lagm } = NbrDiv+1 Using Power 1.;
+
+// P H Y S I C A L   R E G I O N S
+
+Physical Surface("StatorCore", 1) = {sStatorCore};
+Physical Surface("MoverCore" , 2) = {sMoverCore};
+Physical Surface("AirStator" , 3) = {sAirStator};
+Physical Surface("AirLayer"  , 4) = {sAirLayer};
+Physical Surface("AirMover"  , 5) = {sAirMover};
+
+Physical Surface("COILAP",  6) = {sCoils(0),sCoils(7)};
+Physical Surface("COILAN",  7) = {sCoils(1),sCoils(6)};
+Physical Surface("COILBP",  8) = {sCoils(2),sCoils(9)};
+Physical Surface("COILBN",  9) = {sCoils(3),sCoils(8)};
+Physical Surface("COILCP", 10) = {sCoils(4),sCoils(11)};
+Physical Surface("COILCN", 11) = {sCoils(5),sCoils(10)};
+
+
+Physical Line("Noflux" , 12) = {bnd_sbot(),bnd_mtop()};
+
+Physical Line("MoverPerMaster" , 13) = {bnd_mlft()};
+Physical Line("MoverPerSlave"  , 14) = {bnd_mrgh()};
+Physical Line("StatorPerMaster", 15) = {bnd_slft()};
+Physical Line("StatorPerSlave" , 16) = {bnd_srgh()};
+Physical Line("SlidingMaster"  , 17) = {lagm()};
+Physical Line("SlidingSlave"   , 18) = {lagsz()};
+
+Physical Point("Sliding_Submaster", 20) = {pHz};
+Physical Point("Sliding_Subslave",  21) = {pH};
+
+
+// Ensure identical meshes on the periodic faces
+For num In {0:#bnd_mlft()-1}
+  Periodic Line { bnd_mrgh(num) } 
+                 = { bnd_mlft(num) } Translate {L,0,0} ;
+EndFor
+For num In {0:#bnd_slft()-1}
+  Periodic Line { bnd_srgh(num) } 
+                 = { bnd_slft(num) } Translate {L,0,0} ;
+EndFor
+
+nicepos[] = Boundary{ Surface { Surface '*'};};
+Physical Line("NICEPOS", 19) = {nicepos[]};
diff --git a/SlidingSurface2DLin/mrvl.pro b/SlidingSurface2DLin/mrvl.pro
new file mode 100644
index 0000000000000000000000000000000000000000..b9837fa45034403dfa68accf1216ce7b15f42cef
--- /dev/null
+++ b/SlidingSurface2DLin/mrvl.pro
@@ -0,0 +1,310 @@
+// ALSTOM linear reluctance motor
+// Fr. Henrotte
+
+Include "mrvl_common.pro";
+
+DefineConstant[
+  R_ = {"Static", Choices {"Static", "QuasiStatic"}, Visible 1,
+	Name "GetDP/1ResolutionChoices"},
+  C_ = {"-solve -v 4 -pos -2", Name "GetDP/9ComputeCommand", Visible 0}
+  P_ = { "", Choices {"Fields", "Check_Periodicity"}, Visible 0,
+	 Name "GetDP/2PostOperationChoices"}
+];
+
+Flag_QuasiStatic = !StrCmp[ R_,"QuasiStatic"] ;
+MoverPosition = mm*
+  DefineNumber[0, Name "Options/Mover position [mm]",
+	       Visible !Flag_QuasiStatic];
+TranslationStep = mm*
+  DefineNumber[1, Name "Options/Translation step [mm]",
+	       Visible Flag_QuasiStatic];
+NumStep = 
+  DefineNumber[20, Name "Options/Number of steps",
+	       Visible Flag_QuasiStatic];
+
+velocity = 1 ; // m/s 
+Mag_DTime = TranslationStep/velocity ;
+Mag_TimeMax = Mag_DTime*NumStep; 
+
+Group {
+  // Geometrical regions
+  StatorCore = Region[ 1 ] ;
+  MoverCore  = Region[ 2 ] ;
+  AirStator  = Region[ 3 ] ;
+  AirLayer   = Region[ 4 ] ;
+  AirMover   = Region[ 5 ] ;
+
+  CoilAP     = Region[ 6 ] ; 
+  CoilAN     = Region[ 7 ] ; 
+  CoilBP     = Region[ 8 ] ; 
+  CoilBN     = Region[ 9 ] ; 
+  CoilCP     = Region[ 10 ] ; 
+  CoilCN     = Region[ 11 ] ; 
+
+  NoFlux     = Region[ 12 ] ; 
+
+  Sur_MoverPerMaster  = Region[ 13 ] ;
+  Sur_MoverPerSlave   = Region[ 14 ] ;  
+  Sur_StatorPerMaster = Region[ 15 ] ;
+  Sur_StatorPerSlave  = Region[ 16 ] ;
+  Sur_SlidingSlave    = Region[ 17 ] ;  
+  Sur_SlidingMaster   = Region[ 18 ] ;
+ 
+  NICEPOS = Region[ 19 ] ;
+
+  Lin_SlidingSubslave  = Region[ 20 ] ;
+  Lin_SlidingSubmaster = Region[ 21 ] ;
+
+  // Abstract regions
+  Inductors = Region[ {CoilAP, CoilBP, CoilCP, CoilAN, CoilBN, CoilCN} ] ;
+  Iron = Region[ {StatorCore, MoverCore} ] ;
+  Air = Region[ {AirStator, AirMover, AirLayer} ] ;
+
+  Vol_Conductors  = Region[ { Inductors } ] ;
+  Vol_Mag = Region[ { Air, Iron, Inductors } ] ;
+  Sur_Dirichlet = Region[ { NoFlux } ] ;
+  Vol_Moving = Region[ { MoverCore, AirMover, Inductors } ] ;
+
+  Sur_Link = Region[ {Sur_SlidingMaster, Sur_SlidingSlave, 
+		      Sur_StatorPerMaster, Sur_StatorPerSlave,
+		      Sur_MoverPerMaster, Sur_MoverPerSlave} ] ; 
+
+  Dom_Hcurl_a = Region[ {Vol_Mag, Sur_Dirichlet, Sur_Link} ] ;
+}
+
+Function {
+  mu0 = 4.e-7*Pi ;
+  murFer = 1000 ;
+  nu [ Air ]  = 1. / mu0 ;
+  nu [ Inductors ]  = 1. / mu0 ;
+  nu [ Iron ]  = 1. / (murFer * mu0) ;
+
+  NbTurns = 120 ;
+  Iphase = 1; 
+  phase = -60*deg;
+  js[ CoilAP ] = Vector[ 0,0, Iphase * Cos[phase +   0*deg] * NbTurns / SurfaceArea[]{6} ];
+  js[ CoilBP ] = Vector[ 0,0, Iphase * Cos[phase +  60*deg] * NbTurns / SurfaceArea[]{7} ];
+  js[ CoilCP ] = Vector[ 0,0, Iphase * Cos[phase + 120*deg] * NbTurns / SurfaceArea[]{8} ];
+  js[ CoilAN ] = Vector[ 0,0,-Iphase * Cos[phase +   0*deg] * NbTurns / SurfaceArea[]{6} ];
+  js[ CoilBN ] = Vector[ 0,0,-Iphase * Cos[phase +  60*deg] * NbTurns / SurfaceArea[]{7} ];
+  js[ CoilCN ] = Vector[ 0,0,-Iphase * Cos[phase + 120*deg] * NbTurns / SurfaceArea[]{8} ];
+}
+
+
+Function {
+  // Sliding surface:
+  // a1 is the span of Region and RegionRef. 
+  // a0 is the mesh step of the meshes of the sliding surfaces
+  // a2[] is the position of the mover
+  // relative to its reference position (as in the msh file)
+  // assumed to be aligned with the stator. 
+  // a3[] is the shear angle of region AIRBM 
+  // (smaller than half the discretization step of the sliding surface
+  // to adapt to a2[] values that are not multiple of this step). 
+  // AlignWithMaster[] maps a point of coordinates {X[], Y[], Z[]} onto
+  // its image in the open set RegionRef-SubRegionRef by the symmetry mapping.
+  // Coef[] is evaluated on Master nodes
+  // fFloor[] is a safe version of Floor[] for real represented int variables
+  // fRem[a,b] substracts from a multiple of b so that the result is in [0,1[
+
+  Periodicity = 1 ;  // -1 for antiperiodicity, 1 for periodicity
+  TranslatePZ[] = Vector[ X[]+$1,Y[], Z[]] ;
+  Tol = 1e-8 ; fFloor[] = Floor[ $1 + Tol ] ; fRem[] = $1 - fFloor[ $1 / $2 ] * $2; 
+
+  a1 = L ; 
+  a0 = a1/NbrDiv ; // mesh stepsize on the sliding surface
+  a2[] = $MoverPosition ;
+  a3[] = ( ( fRem[ a2[], a0 ]#2 <= 0.5*a0 ) ? #2 : #2-a0 ) ;
+  AlignWithMaster[] = TranslatePZ[ - fFloor[ ( X[] - a3[] )/a1 ] * a1 ] ;
+  RestoreRef[] = XYZ[] - Vector[ 0, 0, SlidingSurfaceShift ] ;
+  Coef[] = ( fFloor[ ((X[] - a2[] )/a1) ] % 2 ) ? Periodicity : 1. ;
+}
+
+Group {
+  DefineGroup[ DomainInf ];
+  DefineVariable[ Val_Rint, Val_Rext ];
+}
+
+Jacobian {
+  { Name Vol ;
+    Case { { Region DomainInf ;
+             Jacobian VolSphShell {Val_Rint, Val_Rext} ; }
+           { Region All ; Jacobian Vol ; }
+    }
+  }
+  { Name Sur ;
+    Case { { Region All ; Jacobian Sur ; }
+    }
+  }
+}
+
+Integration {
+  { Name Int ;
+    Case { {Type Gauss ;
+	Case { 
+	  { GeoElement Line        ; NumberOfPoints  4 ; }
+	  { GeoElement Triangle    ; NumberOfPoints  4 ; }
+	  { GeoElement Quadrangle  ; NumberOfPoints  4 ; } }
+      }
+    }
+  }
+}
+
+Constraint {
+  { Name MagneticVectorPotential_2D ; Type Assign ;
+    Case {
+      { Region Sur_Dirichlet ; Value 0. ; }
+
+      // Periodicity boundary condition on lateral faces
+      { Type Link ; Region Sur_StatorPerSlave ; RegionRef Sur_StatorPerMaster ; 
+      	ToleranceFactor 1e-8; 
+      	Coefficient Periodicity ; Function TranslatePZ[ -a1 ] ; }
+
+      { Type Link ; Region Sur_MoverPerSlave ; RegionRef Sur_MoverPerMaster ; 
+      	ToleranceFactor 1e-8; 
+      	Coefficient Periodicity ; Function TranslatePZ[ -a1 ] ; }
+     
+      // Sliding surface
+      { Type Link ; Region Sur_SlidingSlave ; SubRegion Lin_SlidingSubslave ;
+        RegionRef Sur_SlidingMaster ; SubRegionRef Lin_SlidingSubmaster ; 
+		ToleranceFactor 1e-8; 
+		Coefficient Coef[] ; Function AlignWithMaster[] ; FunctionRef RestoreRef[] ; }
+    }
+  }
+}
+
+FunctionSpace {
+  { Name Hcurl_a ; Type Form1P ;
+    BasisFunction {
+      { Name se ; NameOfCoef ae ; Function BF_PerpendicularEdge ;
+        Support Dom_Hcurl_a ; Entity NodesOf[ All ] ; }
+    }
+    Constraint {
+      { NameOfCoef ae ; EntityType NodesOf ; //EntitySubType Not ;
+        NameOfConstraint MagneticVectorPotential_2D ; }
+    }
+  }
+}
+
+Formulation {
+  { Name Magnetostatics ; Type FemEquation ;
+    Quantity {
+      { Name a  ; Type Local  ; NameOfSpace Hcurl_a ; }
+    }
+    Equation {
+      Galerkin { [ nu[] * Dof{d a} , {d a} ] ; In Vol_Mag ;
+                 Jacobian Vol ; Integration Int ; }
+      Galerkin { [ -js[] , {a} ] ; In Vol_Conductors ;
+                 Jacobian Vol ; Integration Int ; }
+    }
+  }
+}
+
+Resolution {
+  { Name Static ;
+    System {
+      { Name Sys_Mag ; NameOfFormulation Magnetostatics ;}
+    }
+    Operation {
+      Evaluate[$MoverPosition = MoverPosition];
+      ChangeOfCoordinates[ NodesOf[ Vol_Moving ], TranslatePZ[ a2[] ] ] ;
+      ChangeOfCoordinates[ NodesOf[ Sur_SlidingMaster ], TranslatePZ[ a3[] ] ] ;
+      Evaluate[ $a2 = a2[] ];
+      Evaluate[ $a3 = a3[] ];
+      Evaluate[ $aa = Fmod[ a2[], a0 ] ];
+      Evaluate[ $bb = fRem[ a2[], a0 ] ];
+      Print[ {$MoverPosition, a0, $a3, $aa, $bb}, 
+	     Format "wt=a2=%e a0=%e a3=%e %e %e"] ;
+
+      UpdateConstraint[Sys_Mag];
+      Generate Sys_Mag ; Solve Sys_Mag ; SaveSolution Sys_Mag ;
+      PostOperation [Fields];
+    }
+  }
+
+  { Name QuasiStatic ;
+    System {
+      { Name Sys_Mag ; NameOfFormulation Magnetostatics ; }
+    }
+    Operation {
+      Evaluate[$MoverPosition = MoverPosition];
+      Generate Sys_Mag ; Solve Sys_Mag ; SaveSolution Sys_Mag ;
+      PostOperation [Fields];
+      TimeLoopTheta{
+		Time0 0 ; TimeMax Mag_TimeMax ; DTime Mag_DTime ; Theta 1. ;
+		Operation {
+		  Evaluate[$MoverPosition = MoverPosition + velocity*$Time];
+		  ChangeOfCoordinates[ NodesOf[ Vol_Moving ], TranslatePZ[ velocity*$DTime ] ] ;
+		  ChangeOfCoordinates[ NodesOf[ Sur_SlidingMaster ], TranslatePZ[ a3[] ] ] ;
+		  UpdateConstraint[Sys_Mag];
+		  Generate Sys_Mag ; Solve Sys_Mag ; SaveSolution Sys_Mag ;
+		  PostOperation [Fields];
+		  ChangeOfCoordinates[ NodesOf[ Sur_SlidingMaster ], TranslatePZ[ -a3[] ] ] ;
+		}
+      }
+    }
+  }
+}
+
+PostProcessing {
+  { Name MagSta_a ; NameOfFormulation Magnetostatics ;
+    PostQuantity {
+      { Name a ; Value { Term { [ {a} ] ; 
+	    In Vol_Mag ; Jacobian Vol ; } } }
+      { Name az ; Value { Term { [ CompZ[{a}] ] ; 
+	    In Vol_Mag ; Jacobian Vol ; } } }
+      { Name b ; Value { Term { [ {d a} ] ; 
+	    In Vol_Mag ; Jacobian Vol ; } } }
+      { Name h ; Value { Term { [ nu[] * {d a} ] ; 
+	    In Vol_Mag ; } } }
+      { Name bsurf ; Value { 
+	  Local { [ {d a} ]; In Sur_Link ; Jacobian Sur; } } }
+      { Name un ; Value { Term { [ 1 ] ; 
+	    In Vol_Mag ; Jacobian Vol ; } } }
+    }
+  }
+}
+
+PostOperation Fields UsingPost MagSta_a {
+
+  Print[ b, OnElementsOf Region[ Vol_Mag ], 
+	 LastTimeStepOnly, File "b.pos"] ;
+  /*
+  Echo[ Str["l=PostProcessing.NbViews-1;",
+	    "View[l].ArrowSizeMax = 100;",
+	    "View[l].CenterGlyphs = 1;",
+	    "View[l].GlyphLocation = 1;",
+	    "View[l].LineWidth = 2;",
+	    "View[l].VectorType = 4;" ] ,
+  	File "tmp.geo", LastTimeStepOnly] ;
+  */
+
+  Print[ un, OnElementsOf Region[ NICEPOS ], 
+	 LastTimeStepOnly, File "un.pos"] ;
+  Echo[ Str["l=PostProcessing.NbViews-1;",
+			"View[l].LineWidth = 2;",
+			"View[l].ColormapNumber = 0;",
+			"View[l].ShowScale = 0;",
+			"Geometry.Lines = 0;",
+			"Geometry.Points = 0;"] ,
+  	File "tmp.geo", LastTimeStepOnly] ;
+
+  Print[ az, OnElementsOf Region[ Vol_Mag ], 
+	 LastTimeStepOnly, File "a.pos"] ;
+  Echo[ Str["l=PostProcessing.NbViews-1;",
+	    "View[l].IntervalsType = 1;",
+	    "View[l].NbIso = 40;"] ,
+  	File "tmp.geo", LastTimeStepOnly] ;
+}
+
+PostOperation Check_Periodicity UsingPost MagSta_a {
+  Print[ bsurf, OnElementsOf Region[ {Sur_SlidingMaster, Sur_SlidingSlave} ], 
+	 LastTimeStepOnly, File "bs.pos"] ;
+  Echo[ Str["l=PostProcessing.NbViews-1;",
+	    "View[l].ArrowSizeMax = 100;",
+	    "View[l].CenterGlyphs = 0;",
+	    "View[l].GlyphLocation = 2;",
+	    "View[l].VectorType = 2;" ] ,
+  	File "tmp.geo", LastTimeStepOnly] ;
+}
+
diff --git a/SlidingSurface2DLin/mrvl_common.pro b/SlidingSurface2DLin/mrvl_common.pro
new file mode 100644
index 0000000000000000000000000000000000000000..1a9e6088047d082499358a1d31925b69e30f1531
--- /dev/null
+++ b/SlidingSurface2DLin/mrvl_common.pro
@@ -0,0 +1,45 @@
+mm = 1.e-3 ;
+deg = Pi/180.;
+
+lc = mm * DefineNumber[2, Name "Options/Global mesh size (mm)"];
+If(lc == 0)
+  Error("Glabal mesh size cannot be zero. Reset to default."); lc=2*mm;
+EndIf
+
+
+// Geometrical parameters
+wd = 40*mm;
+ag =  2*mm; // 1*mm
+
+// Rail-stator
+ws = 15*mm;
+cs = 15*mm;
+vs = 21*mm;
+hs = 10*mm;
+Ps = 36*mm;
+
+// Translateur - rotor
+wt = 12*mm;
+ct = 12*mm;
+vt = 12*mm;
+ht = 33*mm;
+Pt = 24*mm;
+
+// Bobines - windings
+hw = 20*mm; // max 30*mm
+vw = 4*mm; // max 5.5*mm
+
+// Air box
+hb = ag+ht+ct+20*mm;
+
+NbrStaPer = 7;
+L = NbrStaPer*(ws+vs);
+Lm = 6*wt+5*vt;
+ym = cs+hs+ag;
+
+
+// Number of elements on the sliding surface in rotation direction
+NbrDiv = L/lc; 
+
+SlidingSurfaceShift = 1.e-4;
+