diff --git a/DiffractionGratings/grating3D.geo b/DiffractionGratings/grating3D.geo
index 27e27170362032ee4a0e98ca2f62cafd880c637d..c2b429d36dece9d30532d375f0bb55006e9a0c82 100644
--- a/DiffractionGratings/grating3D.geo
+++ b/DiffractionGratings/grating3D.geo
@@ -151,7 +151,7 @@ If (tag_geom==5)
 EndIf
 
 If (tag_geom==7)
-  Box(9) = {-rx/2,-period_y/2, hh_L_3, rx, period_y, rz};
+  Box(9) = {-period_x/2,-ry/2, hh_L_3, period_x, ry, rz};
 EndIf
 
 
@@ -209,11 +209,14 @@ EndIf
 
 // Start with coarsest
 Characteristic Length{:} = lc_PML;
+
 For k In {0:8}
   which_dom = meshing_sequence(k);
   Characteristic Length{PointsOf{Physical Volume{which_dom};}} = list_lc(which_dom-1);
 EndFor
-  If (tag_geom==3) // Split torus weird otherwise
+
+
+If (tag_geom==3) // Split torus weird otherwise
   Mesh.Algorithm = 6;
 EndIf
 // Mesh.Optimimze3D=1;
diff --git a/DiffractionGratings/grating3D.pro b/DiffractionGratings/grating3D.pro
index c82f7ed6f2f1f6ecfd74066fc4dc66d8d28beeca..4cc35dca96827ceaf10ed837a7d8a1205069855d 100644
--- a/DiffractionGratings/grating3D.pro
+++ b/DiffractionGratings/grating3D.pro
@@ -181,6 +181,35 @@ Function{
   H1d[Omega_super] = Hr[];
   H1d[Omega_subs]  = Ht[];
 
+  // ////////////////////////:
+  // k1s[]  = (Abs[theta0]>1e-12) ?      k1[]/\zhat[] / Norm[    k1[]/\zhat[]] : Vector[-Sin[phi0], Cos[phi0], 0.] ;
+  // k2s[]  = (Abs[theta0]>1e-12) ?  Re[k2[]]/\zhat[] / Norm[ Re[k2[]]/\zhat[]] : Vector[-Sin[phi0], Cos[phi0], 0.] ;
+  // k1rs[] = (Abs[theta0]>1e-12) ?     k1r[]/\zhat[] / Norm[    k1r[]/\zhat[]] : Vector[-Sin[phi0], Cos[phi0], 0.] ;
+  // k1p[]  = (Abs[theta0]>1e-12) ?      k1[]/\k1s[]  / Norm[     k1[]/\k1s[]]  : Vector[ Cos[phi0], Sin[phi0], 0.] ;
+  // k2p[]  = (Abs[theta0]>1e-12) ?  Re[k2[]]/\k2s[]  / Norm[ Re[k2[]]/\k2s[]]  : Vector[ Cos[phi0], Sin[phi0], 0.] ;
+  // k1rp[] = (Abs[theta0]>1e-12) ?     k1r[]/\k1rs[] / Norm[    k1r[]/\k1rs[]] : Vector[-Cos[phi0],-Sin[phi0], 0.] ;
+  // rsa[] = (CompZ[k1[]]-CompZ[k2[]])/(CompZ[k1[]]+CompZ[k2[]]);
+  // tsa[] =           2.*CompZ[k1[]] /(CompZ[k1[]]+CompZ[k2[]]);
+  // rpa[] = (CompZ[k1[]]*epsr2[]-CompZ[k2[]]*epsr1[])/(CompZ[k1[]]*epsr2[]+CompZ[k2[]]*epsr1[]);
+  // tpa[] =                  (2.*CompZ[k1[]]*epsr2[])/(CompZ[k1[]]*epsr2[]+CompZ[k2[]]*epsr1[]) * Sqrt[epsr1[]/epsr2[]];
+  // AmplEi[] =       Cos[psi0]* k1p[] +       Sin[psi0]* k1s[];
+  // AmplEr[] = rpa[]*Cos[psi0]*k1rp[] + rsa[]*Sin[psi0]*k1rs[];
+  // AmplEt[] = tpa[]*Cos[psi0]* k2p[] + tsa[]*Sin[psi0]* k2s[];
+  // Eia[]     = Ae*AmplEi[] * Exp[I[]*k1[]*XYZ[]];
+  // Eta[]     = Ae*AmplEt[] * Exp[I[]*k2[]*XYZ[]];
+  // Era[]     = Ae*AmplEr[] * Exp[I[]*k1r[]*XYZ[]];
+  // Hia[]     =  1/(om0*mu0*mur[]) * k1[]  /\ Ei[];
+  // Hra[]     =  1/(om0*mu0*mur[]) * k1r[] /\ Er[];
+  // Hta[]     =  1/(om0*mu0*mur[]) * k2[]  /\ Et[];
+  // E1a[Omega_super]  = Eia[]+Era[];
+  // E1a[Omega_subs]   = Eta[];
+  // E1da[Omega_super] = Era[];
+  // E1da[Omega_subs]  = Eta[];
+  // H1a[Omega_super]  = Hia[]+Hra[];
+  // H1a[Omega_subs]   = Hta[];
+  // H1da[Omega_super] = Hra[];
+  // H1da[Omega_subs]  = Hta[];
+  // /////////////////////
   source[] = (om0/cel)^2*(epsr[]-epsr_annex[])*E1[];
   
   // Bloch phase shifts
@@ -326,9 +355,10 @@ PostProcessing {
       { Name u      ; Value { Local { [ {u}       ]; In Omega; Jacobian JVol; } } }
       { Name Etot   ; Value { Local { [ {u}+E1[]  ]; In Omega; Jacobian JVol; } } }
       { Name Htot   ; Value { Local { [ H1[]-I[]/(mur[]*mu0*om0)*{Curl u}]; In Omega; Jacobian JVol; } } }
+      { Name Htotx  ; Value { Local { [CompX[ H1[]-I[]/(mur[]*mu0*om0)*{Curl u}]]; In Omega; Jacobian JVol; } } }
       { Name Edif   ; Value { Local { [ {u}+E1d[] ]; In Omega; Jacobian JVol; } } }
       { Name E1     ; Value { Local { [     E1[]  ]; In Omega; Jacobian JVol; } } }
-      { Name H1y     ; Value { Local { [CompY[H1[]]  ]; In Omega; Jacobian JVol; } } }
+      { Name H1x     ; Value { Local { [CompX[H1[]]  ]; In Omega; Jacobian JVol; } } }
       { Name Em     ; Value { Local { [     E1d[] ]; In Omega; Jacobian JVol; } } }
       { Name source ; Value { Local { [  source[] ]; In Omega; Jacobian JVol; } } }
       { Name epsr_xx; Value { Local { [  CompXX[epsr[]] ]; In Omega; Jacobian JVol; } } }
@@ -408,9 +438,10 @@ PostOperation {
         Print [ Poy_tot , OnPlane { {-period_x/2,0,hh_L_6} {period_x/2,0,hh_L_6} {-period_x/2,0,hh_L_1+thick_L_1} } {npts_interpX,npts_interpZTot} , File StrCat[myDir,"Poy_tot_cut_Y=0.pos"], Name "Poy_tot_cut_Y=0"];
         Print [ Poy_tot , OnPlane { {0,-period_y/2,hh_L_6} {0,period_y/2,hh_L_6} {0,-period_y/2,hh_L_1+thick_L_1} } {npts_interpY,npts_interpZTot} , File StrCat[myDir,"Poy_tot_cut_X=0.pos"], Name "Poy_tot_cut_X=0"];
       EndIf
-      // // // For DEBUG
-      // Print [ H1y , OnElementsOf Omega, File StrCat[myDir,"H1y.pos"]];
+      // // // // For DEBUG
+      // Print [ H1x , OnElementsOf Omega, File StrCat[myDir,"H1x.pos"]];
       // Print [ Etot , OnElementsOf Omega, File StrCat[myDir,"Etot.pos"]];
+      // Print [ Htotx , OnElementsOf Omega, File StrCat[myDir,"Htotx.pos"]];
       For k In {2:6}
         Print[ Abs_L~{k}[L~{k}], OnGlobal, File > StrCat[myDir,Sprintf["temp-Q_L_%g.txt",k]], Format Table ];
       EndFor
diff --git a/DiffractionGratings/grating3D_data_2Dlamellar.geo b/DiffractionGratings/grating3D_data_2Dlamellar.geo
index 2572da07b80271d0ff0550f892bf4f8eb075fc45..69ccbe5e93b0cbf3117c8e8eb4ef9bc15c04ad57 100644
--- a/DiffractionGratings/grating3D_data_2Dlamellar.geo
+++ b/DiffractionGratings/grating3D_data_2Dlamellar.geo
@@ -8,20 +8,20 @@ pp6 = "6Output";
 DefineConstant[
     lambda0       = {1000  , Name StrCat[pp1,"/1lambda0 [nm]"]},
     thetadeg      = {30    , Name StrCat[pp1,"/2theta0 [deg]"]},
-    phideg        = {0     , Name StrCat[pp1,"/3phi0 [deg]"]},
+    phideg        = {90     , Name StrCat[pp1,"/3phi0 [deg]"]},
     psideg        = {0     , Name StrCat[pp1,"/4psi0 [deg]"]},
-    period_x      = {1000  , Name StrCat[pp2,"/1X period [nm]"]},
-    period_y      = {20    , Name StrCat[pp2,"/2Y period [nm]"]},
+    period_x      = {10    , Name StrCat[pp2,"/1X period [nm]"]},
+    period_y      = {1000  , Name StrCat[pp2,"/2Y period [nm]"]},
     thick_L_1     = {200    , Name StrCat[pp2,"/3thickness layer 1 [nm] (superstrate)"]},
     thick_L_2     = {200    , Name StrCat[pp2,"/4thickness layer 2 [nm]"]},
     thick_L_3     = {1050   , Name StrCat[pp2,"/5thickness layer 3 [nm]"]},
-    thick_L_4     = {50     , Name StrCat[pp2,"/6thickness layer 4 [nm]"]},
-    thick_L_5     = {50     , Name StrCat[pp2,"/7thickness layer 5 [nm]"]},
-    thick_L_6     = {100    , Name StrCat[pp2,"/8thickness layer 6 [nm] (substrate)"]},
+    thick_L_4     = {20     , Name StrCat[pp2,"/6thickness layer 4 [nm]"]},
+    thick_L_5     = {20     , Name StrCat[pp2,"/7thickness layer 5 [nm]"]},
+    thick_L_6     = {50    , Name StrCat[pp2,"/8thickness layer 6 [nm] (substrate)"]},
 
     tag_geom      = {  7      , Name StrCat[pp3,"/0Shape"], Choices {1="Pyramid",2="Cylindrical Hole",3="Torus",4="HalfEllipspoid",5="Checkerboard",6="bi-sinusoidal",7="2D lamellar"}},
-    rx            = {500      , Name StrCat[pp3,"/1rx"]},
-    ry            = {0        , Name StrCat[pp3,"/2ry"]},
+    rx            = { 0     , Name StrCat[pp3,"/1rx"]},
+    ry            = {500        , Name StrCat[pp3,"/2ry"]},
     rz            = {1000     , Name StrCat[pp3,"/3rz"]},
     flag_mat_scat = { 0       , Name StrCat[pp3,"/4Scatterer permittivity model"], Choices {0="Custom (Value Below)",1="SiO2",2="Ag (palik)",3="Al (palik)",4="Au (johnson)",5="Nb2O5",6="ZnSe",7="MgF2",8="TiO2",9="PMMA",10="Si",11="ITO",12="Cu (palik)"} },
     eps_re_Scat   = {-44.9757  , Name StrCat[pp3,"/7eps_re_Scat"]},
@@ -45,20 +45,26 @@ DefineConstant[
     eps_im_L_5    = {2.9524       , Name StrCat[pp4,"/layer 5: imag part of relative permittivity"]},
     eps_re_L_6    = {-44.9757 , Name StrCat[pp4,"/layer 6: real part of relative permittivity"]},
     eps_im_L_6    = {2.9524   , Name StrCat[pp4,"/layer 6: imag part of relative permittivity"]},
+    // eps_re_L_4    = {1  , Name StrCat[pp4,"/layer 4: real part of relative permittivity"]},
+    // eps_im_L_4    = {0  , Name StrCat[pp4,"/layer 4: imag part of relative permittivity"]},
+    // eps_re_L_5    = {1  , Name StrCat[pp4,"/layer 5: real part of relative permittivity"]},
+    // eps_im_L_5    = {0  , Name StrCat[pp4,"/layer 5: imag part of relative permittivity"]},
+    // eps_re_L_6    = {-44.9757 , Name StrCat[pp4,"/layer 6: real part of relative permittivity"]},
+    // eps_im_L_6    = {2.9524   , Name StrCat[pp4,"/layer 6: imag part of relative permittivity"]},
     
     og            = {0          , Name StrCat[pp5,"/0geometrical order [-]"]  , Choices {0="1",1="2"} },
     oi            = {1          , Name StrCat[pp5,"/0interpolation order [-]"], Choices {0="1",1="2"} },
-    paramaille    = {10         , Name StrCat[pp5,"/1Number of mesh elements per wavelength [-]"]},
-    lc_scat       = {30         , Name StrCat[pp5,"/2Scatterer absolute mesh size [nm]"]},
-    PML_top       = {lambda0    , Name StrCat[pp5,"/4PML top thickness [nm]"]},
+    paramaille    = {20         , Name StrCat[pp5,"/1Number of mesh elements per wavelength [-]"]},
+    lc_scat       = {15         , Name StrCat[pp5,"/2Scatterer absolute mesh size [nm]"]},
+    PML_top       = {lambda0*1  , Name StrCat[pp5,"/4PML top thickness [nm]"]},
     PML_bot       = {lambda0/5  , Name StrCat[pp5,"/5PML bot thickness [nm]"]},
     Nmax          = {1          , Name StrCat[pp5,"/6Number of non specular order to output [-]"]},
     refine_mesh_L_1= {1         , Name StrCat[pp5,"/7refine layers/1refine mesh layer 1 [-]"]},
     refine_mesh_L_2= {1         , Name StrCat[pp5,"/7refine layers/2refine mesh layer 2 [-]"]},
     refine_mesh_L_3= {1         , Name StrCat[pp5,"/7refine layers/3refine mesh layer 3 [-]"]},
-    refine_mesh_L_4= {0.5       , Name StrCat[pp5,"/7refine layers/4refine mesh layer 4 [-]"]},
-    refine_mesh_L_5= {0.5       , Name StrCat[pp5,"/7refine layers/5refine mesh layer 5 [-]"]},
-    refine_mesh_L_6= {0.5       , Name StrCat[pp5,"/7refine layers/6refine mesh layer 6 [-]"]},
+    refine_mesh_L_4= {0.3       , Name StrCat[pp5,"/7refine layers/4refine mesh layer 4 [-]"]},
+    refine_mesh_L_5= {0.3       , Name StrCat[pp5,"/7refine layers/5refine mesh layer 5 [-]"]},
+    refine_mesh_L_6= {0.3       , Name StrCat[pp5,"/7refine layers/6refine mesh layer 6 [-]"]},
     
     InterpSampling     = { 30   , Name StrCat[pp6,"/0Interpolation grid step [nm]"]},
     Flag_interp_cubic  = { 0    , Name StrCat[pp6,"/1Interpolate on cubic grid?"], Choices {0,1} },
diff --git a/DiffractionGratings/grating3D_runall.sh b/DiffractionGratings/grating3D_runall.sh
index d0f5ed8346e3eb016b49dc492d824a20b70b99c1..6aa7ab871474bc4d059ec59b05560ec28bcd0041 100644
--- a/DiffractionGratings/grating3D_runall.sh
+++ b/DiffractionGratings/grating3D_runall.sh
@@ -1,9 +1,9 @@
 GMSHDIR="/home/demesy/programs/gmsh-4.4.1-Linux64/bin"
-# for t in bisin checker halfellipsoid hole pyramid torus 2Dlamellar
-# do
-#     $GMSHDIR/gmsh grating3D.pro -setstring test_case $t -
-#     mv res3D res3D_$t
-# done
+for t in bisin checker halfellipsoid hole pyramid torus 2Dlamellar
+do
+    $GMSHDIR/gmsh grating3D.pro -setstring test_case $t -
+    mv res3D res3D_$t
+done
 
 for t in bisin checker halfellipsoid hole pyramid torus 2Dlamellar
 do