def tri_rods(): # Import the ModeSolver defined in the mpb_tri_rods.py example from mpb_tri_rods import ms as tr_ms efields = [] # Band function to collect the efields def get_efields(tr_ms, band): efields.append(tr_ms.get_efield(band)) tr_ms.run_tm( mpb.output_at_kpoint(mp.Vector3(1 / -3, 1 / 3), mpb.fix_efield_phase, get_efields)) # Create an MPBData instance to transform the efields md = mpb.MPBData(rectify=True, resolution=32, periods=3) converted = [] for f in efields: # Get just the z component of the efields f = f[..., 0, 2] converted.append(md.convert(f)) tr_ms.run_te() eps = tr_ms.get_epsilon() plt.imshow(eps.T, interpolation='spline36', cmap='binary') plt.axis('off') plt.show() md = mpb.MPBData(rectify=True, resolution=32, periods=3) rectangular_data = md.convert(eps) plt.imshow(rectangular_data.T, interpolation='spline36', cmap='binary') plt.axis('off') plt.show() for i, f in enumerate(converted): plt.subplot(331 + i) plt.contour(rectangular_data.T, cmap='binary') plt.imshow(np.real(f).T, interpolation='spline36', cmap='RdBu', alpha=0.9) plt.axis('off') plt.show()
def tri_rods(): # Import the ModeSolver defined in the mpb_tri_rods.py example from mpb_tri_rods import ms as tr_ms efields = [] # Band function to collect the efields def get_efields(tr_ms, band): efields.append(tr_ms.get_efield(band)) tr_ms.run_tm(mpb.output_at_kpoint(mp.Vector3(1 / -3, 1 / 3), mpb.fix_efield_phase, get_efields)) # Create an MPBData instance to transform the efields md = mpb.MPBData(rectify=True, resolution=32, periods=3) converted = [] for f in efields: # Get just the z component of the efields f = f[..., 0, 2] converted.append(md.convert(f)) tr_ms.run_te() eps = tr_ms.get_epsilon() plt.imshow(eps.T, interpolation='spline36', cmap='binary') plt.axis('off') plt.show() md = mpb.MPBData(rectify=True, resolution=32, periods=3) rectangular_data = md.convert(eps) plt.imshow(rectangular_data.T, interpolation='spline36', cmap='binary') plt.axis('off') plt.show() for i, f in enumerate(converted): plt.subplot(331 + i) plt.contour(rectangular_data.T, cmap='binary') plt.imshow(np.real(f).T, interpolation='spline36', cmap='RdBu', alpha=0.9) plt.axis('off') plt.show()
def main(): efields = [] # Band function to collect the efields def get_efields(ms, band): efields.append(ms.get_efield(band, output=True)) ms.run_tm(mpb.output_at_kpoint(mp.Vector3(1 / -3, 1 / 3), mpb.fix_efield_phase, get_efields)) # Create an MPBData instance to transform the efields md = mpb.MPBData(ms.get_lattice(), rectify=True, resolution=32, periods=3) converted = [] for f in efields: # Get just the z component of the efields f = f[:, :, 2] converted.append(md.convert(f, ms.k_points[10])) ms.run_te() eps = ms.get_epsilon() plt.imshow(eps.T, interpolation='spline36', cmap='binary') plt.axis('off') plt.show() md = mpb.MPBData(ms.get_lattice(), rectify=True, resolution=32, periods=3) rectangular_data = md.convert(eps) plt.imshow(rectangular_data.T, interpolation='spline36', cmap='binary') plt.axis('off') plt.show() for i, f in enumerate(converted): plt.subplot(331 + i) plt.contour(rectangular_data.T, cmap='binary') plt.imshow(np.real(f).T, interpolation='spline36', cmap='RdBu', alpha=0.9) plt.axis('off') plt.show()