/* * METRIC-Application: * A curved dielectric slab waveguide, bend mode analysis */ #include #include #include #include"metric.h" #define Pol TE #define Pnb 1.0 // background refractive index #define Png 1.5 // core refractive index #define Pd 0.5 // core thickness #define PR 10.0 // bend radius, outer rim /mum #define Wavel 1.55 // vacuum wavelength /mum #define DWz 9.5 // display window, z-extension [-DWx, DW] #define DWx 6.0 // display window, x-extension [R-DWx, R+DWx] /* ------------------------------------------------------------------------ */ /* container for the radial dielectric profile, interface positions relative to the bend radius */ Waveguide rwgdef() { Waveguide rwg(1); rwg.hx(1) = 0.0; rwg.hx(0) = -Pd; rwg.n(2) = Pnb; rwg.n(1) = Png; rwg.n(0) = Pnb; rwg.lambda = Wavel; return rwg; } /* ------------------------------------------------------------------------ */ /* bend mode analysis */ int main() { BDModeArray bdm; Waveguide rwg = rwgdef(); bdmsolve(rwg, PR, 0.0, 0.0, Pol, 1, -1, -1, bdm, 1); // bdmsolve(rwg, PR, 0.0, 0.0, Pol, 1, 50, 10, bdm, 0); // for(int j=0; j<=bdm.num-1; ++j) bdm(j).reverse(); for(int j=0; j<=bdm.num-1; ++j) bdm(j).discretize(0, PR+2*DWx, 500); for(int j=0; j<=bdm.num-1; ++j) { Complex neff = bdm(j).c_neff(); fprintf(stderr, "[%d] %s: neff = %g + i %g\n", j, bdm(j).ids, neff.re, neff.im); Fcomp cp = principalcomp(Pol); bdm(j).plot(cp, REP, PR-DWx, PR+DWx, -DWz, DWz, 250, 350, dig10(j), dig1(j)); bdm(j).plot(cp, MOD, PR-DWx, PR+DWx, -DWz, DWz, 250, 350, dig10(j), dig1(j)); bdm(j).viewer(PR-DWx, PR+DWx, -DWz, DWz, 250, 350, dig10(j), dig1(j)); /* Cvector p(1001); Dvector rv(1001); for(int ri=0; ri<=1000; ++ri) { double r = ((double)ri)/1000.0*(PR+10.0); rv(ri) = r; p(ri) = bdm(j).profile(r); } char name[10] = "mprf____"; name[4] = dig10(j); name[5] = dig1(j); name[6] = 'r'; name[7] = 'e'; toxyf(name, rv, p.re()); name[6] = 'i'; name[7] = 'm'; toxyf(name, rv, p.im()); name[6] = 'a'; name[7] = 'b'; toxyf(name, rv, p.abs()); */ } fprintf(stderr, "\nOk.\n"); return 0; }