Skip to content
Snippets Groups Projects
Commit dbd9c846 authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

Merge branch 'master' of https://gitlab.onelab.info/doc/models

parents 70639dc9 f9356dee
No related branches found
No related tags found
No related merge requests found
Pipeline #9547 passed
///////////////////////////////
// Author : Guillaume Demesy //
///////////////////////////////
Include "QNM_expansion_dispersive_media_data.geo";
lc_cell = lambda_m/paramaille;
lc_sq = lc_cell/2.;
lc_src = lc_cell;
Point(1) = {-a_lat , -a_lat/2, 0. , lc_cell};
Point(2) = {-a_lat , a_lat/2, 0. , lc_cell};
Point(3) = { 0 , -a_lat/2, 0. , lc_sq};
Point(4) = { 0 , a_lat/2, 0. , lc_sq};
Point(5) = { a_lat , -a_lat/2, 0. , lc_cell};
Point(6) = { a_lat , a_lat/2, 0. , lc_cell};
Point(12) = {-a_lat+0.7 *2*a_lat , -a_lat/2, 0. , lc_sq};
Point(13) = {-a_lat+0.48*2*a_lat , a_lat/2, 0. , lc_sq};
Point(7) = { cx_src , cy_src , 0. , lc_src};
Point(8) = { cx_src+r_src , cy_src , 0. , lc_src};
Point(9) = { cx_src , cy_src+r_src , 0. , lc_src};
Point(10) = { cx_src-r_src , cy_src , 0. , lc_src};
Point(11) = { cx_src , cy_src-r_src , 0. , lc_src};
Circle(8) = {10, 7, 9};
Circle(9) = {9, 7, 8};
Circle(10) = {8, 7, 11};
Circle(11) = {11, 7, 10};
Line(12) = {7, 8};
Line(13) = {7, 9};
Line(14) = {7, 10};
Line(15) = {7, 11};
Line Loop(1) = {8, -13, 14};
Plane Surface(1) = {-1};
Line Loop(2) = {13, 9, -12};
Plane Surface(2) = {-2};
Line Loop(3) = {10, -15, 12};
Plane Surface(3) = {-3};
Line Loop(4) = {14, -11, -15};
Plane Surface(4) = {4};
Line(16) = {1, 3};
Line(17) = {3, 12};
Line(18) = {12, 5};
Line(19) = {5, 6};
Line(20) = {6, 4};
Line(21) = {4, 13};
Line(22) = {13, 2};
Line(23) = {2, 1};
Line(24) = {3, 13};
Line(25) = {12, 4};
Curve Loop(5) = {23, 16, 24, 22};
Plane Surface(5) = {5};
Curve Loop(6) = {24, -21, -25, -17};
Plane Surface(6) = {-6};
Curve Loop(7) = {25, -20, -19, -18};
Curve Loop(8) = {8, 9, 10, 11};
Plane Surface(7) = {-7, 8};
Physical Surface(1) = {6}; // Dispersive medium
Physical Surface(2) = {5,7}; // Background
Physical Surface(3) = {1,2,3,4}; // disk green
Physical Line(10) = {16,17,18,19,20,21,22,23}; // Outer box
Physical Line(20) = {24,25}; // bound lag
Physical Line(30) = {12}; // Edge Source Green X
Physical Line(31) = {13}; // Edge Source Green Y
Physical Point(100) = {7};
// dummy lines to see expansion and direct solutions side by side
pp=newp;
Point(pp+1) = {-a_lat+ xshift*2*a_lat , -a_lat/2 , 0. , lc_cell};
Point(pp+2) = {-a_lat+ xshift*2*a_lat , a_lat/2 , 0. , lc_cell};
Point(pp+3) = { 0+ xshift*2*a_lat , -a_lat/2 , 0. , lc_sq};
Point(pp+4) = { 0+ xshift*2*a_lat , a_lat/2 , 0. , lc_sq};
Point(pp+5) = { a_lat+ xshift*2*a_lat , -a_lat/2 , 0. , lc_cell};
Point(pp+6) = { a_lat+ xshift*2*a_lat , a_lat/2 , 0. , lc_cell};
Point(pp+12) = {-a_lat+0.7 *2*a_lat+ xshift*2*a_lat , -a_lat/2, 0. , lc_sq};
Point(pp+13) = {-a_lat+0.48*2*a_lat+ xshift*2*a_lat , a_lat/2, 0. , lc_sq};
c=newl;
Line(c+16) = {pp+1, pp+3};
Line(c+17) = {pp+3, pp+12};
Line(c+18) = {pp+12, pp+5};
Line(c+19) = {pp+5, pp+6};
Line(c+20) = {pp+6, pp+4};
Line(c+21) = {pp+4, pp+13};
Line(c+22) = {pp+13, pp+2};
Line(c+23) = {pp+2, pp+1};
Line(c+24) = {pp+3, pp+13};
Line(c+25) = {pp+12, pp+4};
// dummy point to enforce window center
pp=newp;
Point(pp+1) = {-a_lat+ xshift*2*a_lat , 1.5*a_lat , 0. , lc_cell};
Geometry.Points = 0;
This diff is collapsed.
///////////////////////////////
// Author : Guillaume Demesy //
///////////////////////////////
pp = "Model Options/";
DefineConstant[
flag_vector_case = {1 , Name StrCat[pp, "0polarization case"], Choices {0="(0,0,Ez)",1="(Ex,Ey,0)"} },
flag_o2 = {1 , Name StrCat[pp, "1FE order"], Choices {0="order 1",1="order 2"} },
neig = {100 , Name StrCat[pp, "0number of eigenvalues"]}
];
nm = 0.1;
N_true_poles = 1;
paramaille = 5;
a_lat = 482.5*nm;
lambda_m = a_lat;
eps0 = 8.854187817e-3*nm;
mu0 = 400.*Pi*nm;
cel = 1.0/Sqrt[eps0 * mu0];
norm = a_lat/(2.*Pi*cel);
om_p_josab = .4*norm;
om_0_josab = 0.3*norm;
gama_josab = 0.05*norm;
om_lorentz_1_im = -gama_josab/2;
om_lorentz_1_re = Sqrt[om_0_josab^2-om_lorentz_1_im^2];
a_lorentz_1 = -om_p_josab^2/(2*om_lorentz_1_re);
om_lorentz_1_mod = Sqrt[om_lorentz_1_re^2+om_lorentz_1_im^2];
eig_target_re = om_lorentz_1_im/4;
eig_target_im = 1/norm;
eig_max_im = 8/norm;
eig_min_im = 0.01/norm;
eig_min_re = 0;
eig_max_re = 0.8*Fabs[om_lorentz_1_im];
cx_src = 0.75*2*a_lat - a_lat;
cy_src = 0.75*a_lat - a_lat/2;
r_src = a_lat/100;
nb_Omegas = 50;
RealOmega_min = 0.1;
RealOmega_max = 1.1;
tabrealomegasexpansion = LinSpace[RealOmega_min,RealOmega_max,nb_Omegas];
Freq = 0;
xshift = 1.1;
ONELAB models for the expansion of electromagnetic problems in Quasi-Normal Modes in open and/or dispersive media.
## Quick Install
Open `QNM_expansion_dispersive_media.pro` with e.g. your precompiled version of [ONELAB](https://onelab.info) to compute Quasi-Normal Modes of a dispersive structure. The numerical resolvent [1] is then applied to a specific source and the results are compared to those of the corresponding direct problem side by side [2].
## What's inside
These models heavily rely on slepc for the solving of non-linear eigenvalue problems [1-3].
## Authors
Guillaume Demésy
## References
[1] See [slepc doc](https://slepc.upv.es/documentation/current/docs/manualpages/NEP/NEPApplyResolvent.html).
[2] See "[Photonics in highly dispersive media: The exact modal expansion](https://arxiv.org/abs/1807.02355)" for details about Dispersive QNMs.
[3] See "[NEP: a module for the parallel solution of nonlinear eigenvalue problems in SLEPc](https://arxiv.org/abs/1910.11712)".
QuasiNormalModeExpansion/screenshot1_512.png

568 KiB

QuasiNormalModeExpansion/screenshot2_512.png

442 KiB

*.pos
*.msh
*.pre
*.db
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment