Skip to content
Snippets Groups Projects
Commit ae553cd1 authored by Guillaume Demesy's avatar Guillaume Demesy
Browse files

up

parent 1772890c
No related branches found
No related tags found
No related merge requests found
Pipeline #5167 passed
...@@ -151,7 +151,7 @@ If (tag_geom==5) ...@@ -151,7 +151,7 @@ If (tag_geom==5)
EndIf EndIf
If (tag_geom==7) 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 EndIf
...@@ -209,10 +209,13 @@ EndIf ...@@ -209,10 +209,13 @@ EndIf
// Start with coarsest // Start with coarsest
Characteristic Length{:} = lc_PML; Characteristic Length{:} = lc_PML;
For k In {0:8} For k In {0:8}
which_dom = meshing_sequence(k); which_dom = meshing_sequence(k);
Characteristic Length{PointsOf{Physical Volume{which_dom};}} = list_lc(which_dom-1); Characteristic Length{PointsOf{Physical Volume{which_dom};}} = list_lc(which_dom-1);
EndFor EndFor
If (tag_geom==3) // Split torus weird otherwise If (tag_geom==3) // Split torus weird otherwise
Mesh.Algorithm = 6; Mesh.Algorithm = 6;
EndIf EndIf
......
...@@ -181,6 +181,35 @@ Function{ ...@@ -181,6 +181,35 @@ Function{
H1d[Omega_super] = Hr[]; H1d[Omega_super] = Hr[];
H1d[Omega_subs] = Ht[]; 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[]; source[] = (om0/cel)^2*(epsr[]-epsr_annex[])*E1[];
// Bloch phase shifts // Bloch phase shifts
...@@ -326,9 +355,10 @@ PostProcessing { ...@@ -326,9 +355,10 @@ PostProcessing {
{ Name u ; Value { Local { [ {u} ]; In Omega; Jacobian JVol; } } } { Name u ; Value { Local { [ {u} ]; In Omega; Jacobian JVol; } } }
{ Name Etot ; Value { Local { [ {u}+E1[] ]; 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 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 Edif ; Value { Local { [ {u}+E1d[] ]; In Omega; Jacobian JVol; } } }
{ Name E1 ; Value { Local { [ E1[] ]; 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 Em ; Value { Local { [ E1d[] ]; In Omega; Jacobian JVol; } } }
{ Name source ; Value { Local { [ source[] ]; In Omega; Jacobian JVol; } } } { Name source ; Value { Local { [ source[] ]; In Omega; Jacobian JVol; } } }
{ Name epsr_xx; Value { Local { [ CompXX[epsr[]] ]; In Omega; Jacobian JVol; } } } { Name epsr_xx; Value { Local { [ CompXX[epsr[]] ]; In Omega; Jacobian JVol; } } }
...@@ -408,9 +438,10 @@ PostOperation { ...@@ -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 { {-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"]; 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 EndIf
// // // For DEBUG // // // // For DEBUG
// Print [ H1y , OnElementsOf Omega, File StrCat[myDir,"H1y.pos"]]; // Print [ H1x , OnElementsOf Omega, File StrCat[myDir,"H1x.pos"]];
// Print [ Etot , OnElementsOf Omega, File StrCat[myDir,"Etot.pos"]]; // Print [ Etot , OnElementsOf Omega, File StrCat[myDir,"Etot.pos"]];
// Print [ Htotx , OnElementsOf Omega, File StrCat[myDir,"Htotx.pos"]];
For k In {2:6} For k In {2:6}
Print[ Abs_L~{k}[L~{k}], OnGlobal, File > StrCat[myDir,Sprintf["temp-Q_L_%g.txt",k]], Format Table ]; Print[ Abs_L~{k}[L~{k}], OnGlobal, File > StrCat[myDir,Sprintf["temp-Q_L_%g.txt",k]], Format Table ];
EndFor EndFor
......
...@@ -8,20 +8,20 @@ pp6 = "6Output"; ...@@ -8,20 +8,20 @@ pp6 = "6Output";
DefineConstant[ DefineConstant[
lambda0 = {1000 , Name StrCat[pp1,"/1lambda0 [nm]"]}, lambda0 = {1000 , Name StrCat[pp1,"/1lambda0 [nm]"]},
thetadeg = {30 , Name StrCat[pp1,"/2theta0 [deg]"]}, 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]"]}, psideg = {0 , Name StrCat[pp1,"/4psi0 [deg]"]},
period_x = {1000 , Name StrCat[pp2,"/1X period [nm]"]}, period_x = {10 , Name StrCat[pp2,"/1X period [nm]"]},
period_y = {20 , Name StrCat[pp2,"/2Y 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_1 = {200 , Name StrCat[pp2,"/3thickness layer 1 [nm] (superstrate)"]},
thick_L_2 = {200 , Name StrCat[pp2,"/4thickness layer 2 [nm]"]}, thick_L_2 = {200 , Name StrCat[pp2,"/4thickness layer 2 [nm]"]},
thick_L_3 = {1050 , Name StrCat[pp2,"/5thickness layer 3 [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_4 = {20 , Name StrCat[pp2,"/6thickness layer 4 [nm]"]},
thick_L_5 = {50 , Name StrCat[pp2,"/7thickness layer 5 [nm]"]}, thick_L_5 = {20 , Name StrCat[pp2,"/7thickness layer 5 [nm]"]},
thick_L_6 = {100 , Name StrCat[pp2,"/8thickness layer 6 [nm] (substrate)"]}, 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"}}, 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"]}, rx = { 0 , Name StrCat[pp3,"/1rx"]},
ry = {0 , Name StrCat[pp3,"/2ry"]}, ry = {500 , Name StrCat[pp3,"/2ry"]},
rz = {1000 , Name StrCat[pp3,"/3rz"]}, 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)"} }, 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"]}, eps_re_Scat = {-44.9757 , Name StrCat[pp3,"/7eps_re_Scat"]},
...@@ -45,20 +45,26 @@ DefineConstant[ ...@@ -45,20 +45,26 @@ DefineConstant[
eps_im_L_5 = {2.9524 , Name StrCat[pp4,"/layer 5: imag part of relative permittivity"]}, 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_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_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"} }, og = {0 , Name StrCat[pp5,"/0geometrical order [-]"] , Choices {0="1",1="2"} },
oi = {1 , Name StrCat[pp5,"/0interpolation 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 [-]"]}, paramaille = {20 , Name StrCat[pp5,"/1Number of mesh elements per wavelength [-]"]},
lc_scat = {30 , Name StrCat[pp5,"/2Scatterer absolute mesh size [nm]"]}, lc_scat = {15 , Name StrCat[pp5,"/2Scatterer absolute mesh size [nm]"]},
PML_top = {lambda0 , Name StrCat[pp5,"/4PML top thickness [nm]"]}, PML_top = {lambda0*1 , Name StrCat[pp5,"/4PML top thickness [nm]"]},
PML_bot = {lambda0/5 , Name StrCat[pp5,"/5PML bot 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 [-]"]}, 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_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_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_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_4= {0.3 , 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_5= {0.3 , 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_6= {0.3 , Name StrCat[pp5,"/7refine layers/6refine mesh layer 6 [-]"]},
InterpSampling = { 30 , Name StrCat[pp6,"/0Interpolation grid step [nm]"]}, InterpSampling = { 30 , Name StrCat[pp6,"/0Interpolation grid step [nm]"]},
Flag_interp_cubic = { 0 , Name StrCat[pp6,"/1Interpolate on cubic grid?"], Choices {0,1} }, Flag_interp_cubic = { 0 , Name StrCat[pp6,"/1Interpolate on cubic grid?"], Choices {0,1} },
......
GMSHDIR="/home/demesy/programs/gmsh-4.4.1-Linux64/bin" GMSHDIR="/home/demesy/programs/gmsh-4.4.1-Linux64/bin"
# for t in bisin checker halfellipsoid hole pyramid torus 2Dlamellar for t in bisin checker halfellipsoid hole pyramid torus 2Dlamellar
# do do
# $GMSHDIR/gmsh grating3D.pro -setstring test_case $t - $GMSHDIR/gmsh grating3D.pro -setstring test_case $t -
# mv res3D res3D_$t mv res3D res3D_$t
# done done
for t in bisin checker halfellipsoid hole pyramid torus 2Dlamellar for t in bisin checker halfellipsoid hole pyramid torus 2Dlamellar
do do
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment