Compare commits

...

2 Commits

Author SHA1 Message Date
a7d0f4d3b8 fixup cylindrical wg example 2024-07-18 01:03:51 -07:00
afcac0659c add notes on references 2024-07-18 01:03:42 -07:00
2 changed files with 24 additions and 19 deletions

View File

@ -3,7 +3,7 @@ import numpy
from numpy.linalg import norm from numpy.linalg import norm
from meanas.fdmath import vec, unvec from meanas.fdmath import vec, unvec
from meanas.fdfd import waveguide_mode, functional, scpml from meanas.fdfd import waveguide_cyl, functional, scpml
from meanas.fdfd.solvers import generic as generic_solver from meanas.fdfd.solvers import generic as generic_solver
import gridlock import gridlock
@ -44,22 +44,27 @@ def test1(solver=generic_solver):
# #### Create the grid and draw the device #### # #### Create the grid and draw the device ####
grid = gridlock.Grid(edge_coords) grid = gridlock.Grid(edge_coords)
epsilon = grid.allocate(n_air**2, dtype=numpy.float32) epsilon = grid.allocate(n_air**2, dtype=numpy.float32)
grid.draw_cuboid(epsilon, center=center, dimensions=[8e3, w, th], eps=n_wg**2) grid.draw_cuboid(epsilon, center=center, dimensions=[8e3, w, th], foreground=n_wg**2)
dxes = [grid.dxyz, grid.autoshifted_dxyz()] dxes = [grid.dxyz, grid.autoshifted_dxyz()]
for a in (1, 2): for a in (1, 2):
for p in (-1, 1): for p in (-1, 1):
dxes = scmpl.stretch_with_scpml(dxes, omega=omega, axis=a, polarity=p, dxes = scpml.stretch_with_scpml(
thickness=pml_thickness) dxes,
omega=omega,
axis=a,
polarity=p,
thickness=pml_thickness,
)
wg_args = { wg_args = {
'omega': omega, 'omega': omega,
'dxes': [(d[1], d[2]) for d in dxes], 'dxes': [(d[1], d[2]) for d in dxes],
'epsilon': vec(g.transpose([1, 2, 0]) for g in epsilon), 'epsilon': vec(epsilon.transpose([0, 2, 3, 1])),
'r0': r0, 'r0': r0,
} }
wg_results = waveguide_mode.solve_waveguide_mode_cylindrical(mode_number=0, **wg_args) wg_results = waveguide_cyl.solve_mode(mode_number=0, **wg_args)
E = wg_results['E'] E = wg_results['E']
@ -70,20 +75,17 @@ def test1(solver=generic_solver):
''' '''
Plot results Plot results
''' '''
def pcolor(v): def pcolor(fig, ax, v, title):
vmax = numpy.max(numpy.abs(v)) vmax = numpy.max(numpy.abs(v))
pyplot.pcolor(v.T, cmap='seismic', vmin=-vmax, vmax=vmax) mappable = ax.pcolormesh(v.T, cmap='seismic', vmin=-vmax, vmax=vmax)
pyplot.axis('equal') ax.set_aspect('equal', adjustable='box')
pyplot.colorbar() ax.set_title(title)
ax.figure.colorbar(mappable)
pyplot.figure() fig, axes = pyplot.subplots(2, 2)
pyplot.subplot(2, 2, 1) pcolor(fig, axes[0][0], numpy.real(E[0]), 'Ex')
pcolor(numpy.real(E[0][:, :])) pcolor(fig, axes[0][1], numpy.real(E[1]), 'Ey')
pyplot.subplot(2, 2, 2) pcolor(fig, axes[1][0], numpy.real(E[2]), 'Ez')
pcolor(numpy.real(E[1][:, :]))
pyplot.subplot(2, 2, 3)
pcolor(numpy.real(E[2][:, :]))
pyplot.subplot(2, 2, 4)
pyplot.show() pyplot.show()

View File

@ -25,6 +25,9 @@ def cylindrical_operator(
""" """
Cylindrical coordinate waveguide operator of the form Cylindrical coordinate waveguide operator of the form
(NOTE: See 10.1364/OL.33.001848)
TODO: consider 10.1364/OE.20.021583
TODO TODO
for use with a field vector of the form `[E_r, E_y]`. for use with a field vector of the form `[E_r, E_y]`.