Compare commits
No commits in common. "a7d0f4d3b84d179e903d4aa763dc74857a8b0e60" and "9ffe57b4d06ecacdd93e89aec9998dd93b622950" have entirely different histories.
a7d0f4d3b8
...
9ffe57b4d0
@ -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_cyl, functional, scpml
|
from meanas.fdfd import waveguide_mode, functional, scpml
|
||||||
from meanas.fdfd.solvers import generic as generic_solver
|
from meanas.fdfd.solvers import generic as generic_solver
|
||||||
|
|
||||||
import gridlock
|
import gridlock
|
||||||
@ -37,34 +37,29 @@ def test1(solver=generic_solver):
|
|||||||
xyz_max = numpy.array([800, y_max, z_max]) + (pml_thickness + 2) * dx
|
xyz_max = numpy.array([800, y_max, z_max]) + (pml_thickness + 2) * dx
|
||||||
|
|
||||||
# Coordinates of the edges of the cells.
|
# Coordinates of the edges of the cells.
|
||||||
half_edge_coords = [numpy.arange(dx / 2, m + dx / 2, step=dx) for m in xyz_max]
|
half_edge_coords = [numpy.arange(dx/2, m + dx/2, step=dx) for m in xyz_max]
|
||||||
edge_coords = [numpy.hstack((-h[::-1], h)) for h in half_edge_coords]
|
edge_coords = [numpy.hstack((-h[::-1], h)) for h in half_edge_coords]
|
||||||
edge_coords[0] = numpy.array([-dx, dx])
|
edge_coords[0] = numpy.array([-dx, dx])
|
||||||
|
|
||||||
# #### 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], foreground=n_wg**2)
|
grid.draw_cuboid(epsilon, center=center, dimensions=[8e3, w, th], eps=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 = scpml.stretch_with_scpml(
|
dxes = scmpl.stretch_with_scpml(dxes, omega=omega, axis=a, polarity=p,
|
||||||
dxes,
|
thickness=pml_thickness)
|
||||||
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(epsilon.transpose([0, 2, 3, 1])),
|
'epsilon': vec(g.transpose([1, 2, 0]) for g in epsilon),
|
||||||
'r0': r0,
|
'r0': r0,
|
||||||
}
|
}
|
||||||
|
|
||||||
wg_results = waveguide_cyl.solve_mode(mode_number=0, **wg_args)
|
wg_results = waveguide_mode.solve_waveguide_mode_cylindrical(mode_number=0, **wg_args)
|
||||||
|
|
||||||
E = wg_results['E']
|
E = wg_results['E']
|
||||||
|
|
||||||
@ -75,17 +70,20 @@ def test1(solver=generic_solver):
|
|||||||
'''
|
'''
|
||||||
Plot results
|
Plot results
|
||||||
'''
|
'''
|
||||||
def pcolor(fig, ax, v, title):
|
def pcolor(v):
|
||||||
vmax = numpy.max(numpy.abs(v))
|
vmax = numpy.max(numpy.abs(v))
|
||||||
mappable = ax.pcolormesh(v.T, cmap='seismic', vmin=-vmax, vmax=vmax)
|
pyplot.pcolor(v.T, cmap='seismic', vmin=-vmax, vmax=vmax)
|
||||||
ax.set_aspect('equal', adjustable='box')
|
pyplot.axis('equal')
|
||||||
ax.set_title(title)
|
pyplot.colorbar()
|
||||||
ax.figure.colorbar(mappable)
|
|
||||||
|
|
||||||
fig, axes = pyplot.subplots(2, 2)
|
pyplot.figure()
|
||||||
pcolor(fig, axes[0][0], numpy.real(E[0]), 'Ex')
|
pyplot.subplot(2, 2, 1)
|
||||||
pcolor(fig, axes[0][1], numpy.real(E[1]), 'Ey')
|
pcolor(numpy.real(E[0][:, :]))
|
||||||
pcolor(fig, axes[1][0], numpy.real(E[2]), 'Ez')
|
pyplot.subplot(2, 2, 2)
|
||||||
|
pcolor(numpy.real(E[1][:, :]))
|
||||||
|
pyplot.subplot(2, 2, 3)
|
||||||
|
pcolor(numpy.real(E[2][:, :]))
|
||||||
|
pyplot.subplot(2, 2, 4)
|
||||||
pyplot.show()
|
pyplot.show()
|
||||||
|
|
||||||
|
|
||||||
|
@ -25,9 +25,6 @@ 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]`.
|
||||||
|
Loading…
Reference in New Issue
Block a user