Skip to content

Basics

In this chapter, we'll explore how to use femwell for more accurate waveguide modeling. Unlike simpler analytical models, FEMWELL allows us to solve Maxwell's equations directly on the waveguide geometry.

Using femwell, you can mesh any component cross-section and solve PDEs with its powerful mode solver. Unlike other solvers that rely on predefined geometries, femwell works directly with the actual component geometry. You can compute the modes of a GDSFactory cross-section, which internally defines a "uz" mesh perpendicular to a straight component using the provided cross-section.

  1. import all the necessary packages:

```python import doModels.RefractiveIndex as ri from doModels import fem, PhotonicStack

import matplotlib.pyplot as plt import numpy as np

```

  1. Define photonic stack:

python stack = PhotonicStack.create( total_film_thickness=0.210, etch_depth=0.210, top_width=0.450, side_wall_angle=0, top_oxide_thickness=2.0, bottom_oxide_thickness=2.0, )

  1. Mesh the geometry and visualize the stack

```python m = fem.mesh_waveguide(total_film_thickness=stack.total_film_thickness.target, etch_depth=stack.etch_depth.target, top_width=stack.top_width.target, side_wall_angle=stack.side_wall_angle.target, buffer_size=1.0, core_resolution=0.04, core_distance=1, default_resolution_max=0.6,

show_plot=True)

```

png

png

  1. Run the FEM

```python wavelength = 1.55 core_index = ri.silicon(wavelength) box_index = ri.silica(wavelength) clad_index = ri.silica(wavelength)

modes = fem.fem_waveguide(mesh=m, n_core=ri.silicon, n_clad=ri.silica, n_box=ri.silica, wavelength=wavelength, num_modes=4)

```

  1. Visualize

```python for mode in modes: tem = "TE" if mode.te_fraction > 0.5 else "TM"

_, ax = plt.subplots(figsize=(5, 4))
mode.plot_intensity(ax=ax, normalize=False)
ax.set_title(f"neff={mode.n_eff.real:.4f}  ({tem})")
ax.set_xlim(-1.5*stack.top_width.target, 1.5*stack.top_width.target)
ax.set_ylim(-1.5*stack.top_width.target, 1.5*stack.top_width.target)

plt.show() ```

png

png

png

png

```python

```