From 894ace7b3e1c4acde267a4ae96d95e9411bb92f4 Mon Sep 17 00:00:00 2001
From: Guillaume Demesy <guillaume.demesy@fresnel.fr>
Date: Thu, 21 Nov 2019 10:28:19 +0100
Subject: [PATCH] new inc - better

---
 DiffractionGratings/grating3D.pro | 72 +++++++++++++++++++++++--------
 1 file changed, 54 insertions(+), 18 deletions(-)

diff --git a/DiffractionGratings/grating3D.pro b/DiffractionGratings/grating3D.pro
index f82f27f..0851ba9 100644
--- a/DiffractionGratings/grating3D.pro
+++ b/DiffractionGratings/grating3D.pro
@@ -125,9 +125,6 @@ Function{
 	epsr[PMLbot]  = Re[epsr2[]]*TensorDiag[sz[]*sy/sx,sx*sz[]/sy,sx*sy/sz[]];
 	mur[PMLbot]   =             TensorDiag[sz[]*sy/sx,sx*sz[]/sy,sx*sy/sz[]];
 
-	// epsr[PMLbot]  = epsr2[];
-	// mur[PMLbot]   = TensorDiag[1,1,1];
-  
 	// epsr[PMLtop]     = TensorDiag[sz_bermutop[]*sy/sx,sx*sz_bermutop[]/sy,sx*sy/sz_bermutop[]];
 	// mur[PMLtop]      = TensorDiag[sz_bermutop[]*sy/sx,sx*sz_bermutop[]/sy,sx*sy/sz_bermutop[]];
 	// epsr[PMLbot]     = TensorDiag[sz_bermubot[]*sy/sx,sx*sz_bermubot[]/sy,sx*sy/sz_bermubot[]];
@@ -147,25 +144,64 @@ Function{
            -Sqrt[k0^2*epsr2[]-CompX[k1[]]^2-CompY[k1[]]^2]
         ];
   k1r[]  = Vector[CompX[k1[]], CompY[k1[]], -CompZ[k1[]]];
-  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.] ;
 
   rs[] = (CompZ[k1[]]-CompZ[k2[]])/(CompZ[k1[]]+CompZ[k2[]]);
-  ts[] =           2.*CompZ[k1[]] /(CompZ[k1[]]+CompZ[k2[]]);
+  ts[] =            2.*CompZ[k1[]] /(CompZ[k1[]]+CompZ[k2[]]);
   rp[] = (CompZ[k1[]]*epsr2[]-CompZ[k2[]]*epsr1[])/(CompZ[k1[]]*epsr2[]+CompZ[k2[]]*epsr1[]);
-  tp[] =                  (2.*CompZ[k1[]]*epsr2[])/(CompZ[k1[]]*epsr2[]+CompZ[k2[]]*epsr1[]) * Sqrt[epsr1[]/epsr2[]];
-
-  AmplEi[] =      Cos[psi0]* k1p[] +      Sin[psi0]* k1s[];
-  AmplEr[] = rp[]*Cos[psi0]*k1rp[] + rs[]*Sin[psi0]*k1rs[];
-  AmplEt[] = tp[]*Cos[psi0]* k2p[] + ts[]*Sin[psi0]* k2s[];
+  tp[] =                   (2.*CompZ[k1[]]*epsr2[])/(CompZ[k1[]]*epsr2[]+CompZ[k2[]]*epsr1[]);
+
+  Vecs[] = Vector[Sin[phi0],-Cos[phi0],0];
+  AmplEis[] =       Vecs[];
+  AmplErs[] = rs[]*Vecs[];
+  AmplEts[] = ts[]*Vecs[];
+  AmplHis[] = Sqrt[ep0*epsr1[]/mu0]      *Vecs[];
+  AmplHrs[] = Sqrt[ep0*epsr1[]/mu0]*rp[]*Vecs[];
+  AmplHts[] = Sqrt[ep0*epsr1[]/mu0]*tp[]*Vecs[];
+
+  Eis[]     = AmplEis[] * Exp[I[]*k1[] *XYZ[]];
+  Ers[]     = AmplErs[] * Exp[I[]*k1r[]*XYZ[]];
+  Ets[]     = AmplEts[] * Exp[I[]*k2[] *XYZ[]];
+  His[]     = AmplHis[] * Exp[I[]*k1[] *XYZ[]];
+  Hrs[]     = AmplHrs[] * Exp[I[]*k1r[]*XYZ[]];
+  Hts[]     = AmplHts[] * Exp[I[]*k2[] *XYZ[]];
+  Eip[]     = -1/(om0*ep0*epsr1[]) * k1[]  /\ His[];
+  Erp[]     = -1/(om0*ep0*epsr1[]) * k1r[] /\ Hrs[];
+  Etp[]     = -1/(om0*ep0*epsr2[]) * k2[]  /\ Hts[];
+  Hip[]     =  1/(om0*mu0*mur[])   * k1[]  /\ Ei[];
+  Hrp[]     =  1/(om0*mu0*mur[])   * k1r[] /\ Er[];
+  Htp[]     =  1/(om0*mu0*mur[])   * k2[]  /\ Et[];
+
+  E1sa[Omega_super]  = Eis[]+Ers[];
+  E1sa[Omega_subs]   = Ets[];
+  E1pa[Omega_super]  = Eip[]+Erp[];
+  E1pa[Omega_subs]   = Etp[];
+  H1sa[Omega_super]  = His[]+Hrs[];
+  H1sa[Omega_subs]   = Hts[];
+  H1pa[Omega_super]  = Hip[]+Hrp[];
+  H1pa[Omega_subs]   = Htp[];
+
+  E1[] = Cos[psi0]*E1p[]-Sin[psi0]*E1s[];
+  H1[] = Cos[psi0]*H1p[]-Sin[psi0]*H1s[];
+  
+  // 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.] ;
+
+  // rs[] = (CompZ[k1[]]-CompZ[k2[]])/(CompZ[k1[]]+CompZ[k2[]]);
+  // ts[] =           2.*CompZ[k1[]] /(CompZ[k1[]]+CompZ[k2[]]);
+  // rp[] = (CompZ[k1[]]*epsr2[]-CompZ[k2[]]*epsr1[])/(CompZ[k1[]]*epsr2[]+CompZ[k2[]]*epsr1[]);
+  // tp[] =                  (2.*CompZ[k1[]]*epsr2[])/(CompZ[k1[]]*epsr2[]+CompZ[k2[]]*epsr1[]) * Sqrt[epsr1[]/epsr2[]];
+
+  // AmplEi[] =      Cos[psi0]* k1p[] +      Sin[psi0]* k1s[];
+  // AmplEr[] = rp[]*Cos[psi0]*k1rp[] + rs[]*Sin[psi0]*k1rs[];
+  // AmplEt[] = tp[]*Cos[psi0]* k2p[] + ts[]*Sin[psi0]* k2s[];
   
-  Ei[]     = Ae*AmplEi[] * Exp[I[]*k1[]*XYZ[]];
-  Et[]     = Ae*AmplEt[] * Exp[I[]*k2[]*XYZ[]];
-  Er[]     = Ae*AmplEr[] * Exp[I[]*k1r[]*XYZ[]];
+  // Ei[]     = Ae*AmplEi[] * Exp[I[]*k1[]*XYZ[]];
+  // Et[]     = Ae*AmplEt[] * Exp[I[]*k2[]*XYZ[]];
+  // Er[]     = Ae*AmplEr[] * Exp[I[]*k1r[]*XYZ[]];
   Hi[]     =  1/(om0*mu0*mur[]) * k1[]  /\ Ei[];
   Hr[]     =  1/(om0*mu0*mur[]) * k1r[] /\ Er[];
   Ht[]     =  1/(om0*mu0*mur[]) * k2[]  /\ Et[];
-- 
GitLab