|
|
import numpy as np |
|
|
import matplotlib.pyplot as plt |
|
|
import plotly.tools as tls |
|
|
import plotly.io as pio |
|
|
import warnings |
|
|
from bpm.mode_solver import slab_mode_source |
|
|
|
|
|
def test_slab_mode_plot(): |
|
|
|
|
|
x = np.linspace(-10, 10, 1000) |
|
|
w = 5.0 |
|
|
n_WG = 1.1 |
|
|
n0 = 1.0 |
|
|
wavelength = 0.532 |
|
|
|
|
|
|
|
|
num_modes = 5 |
|
|
mode_fields = [] |
|
|
mode_indices = [] |
|
|
|
|
|
for m in range(num_modes): |
|
|
try: |
|
|
E_mode = slab_mode_source(x, w, n_WG, n0, wavelength, ind_m=m) |
|
|
mode_fields.append(E_mode) |
|
|
mode_indices.append(m) |
|
|
except Exception as err: |
|
|
warnings.warn(f"Mode {m} not found: {err}. Stopping mode search.") |
|
|
break |
|
|
|
|
|
|
|
|
plt.rcParams.update({'font.size': 14}) |
|
|
fig, ax = plt.subplots(figsize=(8, 6)) |
|
|
offset = 1.0 |
|
|
for i, E_mode in enumerate(mode_fields): |
|
|
ax.plot(x, np.real(E_mode) + i * offset, label=f"Mode {mode_indices[i]}") |
|
|
ax.set_xlabel("x (µm)") |
|
|
ax.set_ylabel("Field amplitude (Real part)") |
|
|
ax.set_title("Slab Waveguide TE Modes") |
|
|
ax.legend() |
|
|
plt.grid(True) |
|
|
plt.tight_layout() |
|
|
|
|
|
plt.savefig("test_mode_solver.png") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
test_slab_mode_plot() |
|
|
|