Description
Current
For legacy reasons, our mode solver is closely linked to FDTD, as it is also used to run simulations for ModeSources
and ModeMonitors
. However, this architecture has led to some usability issues when users focus solely on mode simulations.
The interaction between the simulation bounding box (inherited from the original coupling with FDTD) and the mode plane is not very convenient and can be challenging to understand. Additionally, there are configuration settings that depend on the 3D bounding box, such as symmetry and mesh. This creates some challenges when defining a simulation plane for conducting mode analysis on a specific cross-section of more complex structures containing asymmetries, such as active devices. Generally, if the mode analysis is not coupled with an underlying FDTD simulation, users expect the simulation plane to be entirely independent of the surrounding medium.
Below we provide some examples of situations where the setup of mode plane symmetry is not convenient for users.
Here, we have an example of a situation where the user would expect a symmetric mesh in the mode plane. However, it turns out to be asymmetric due to the impact of other structures outside the mode plane. Users might not easily perceive this behavior, which could potentially generate inaccurate results.
Lastly, the 3D Bounding Box crops the model plane in Python. This is managed in the GUI by extending the 3D Bounding Box based on the model plane's position and size. However, the differing behaviors between the GUI and Python clients are not ideal.
Requirement
Python Client
Some changes would be required on the Python side. Ideally, we should have a mode solver decoupled from the FDTD simulation needs. Perhaps the new ModeSimulation
class could serve this purpose if we could develop a new, independent solver. This new solver should:
- Assign symmetry directly to the mode plane.
- Create the simulation mesh considering only the mode plane domain.
- Enforce a finite mode plane.
- Doesn't crop the mode plane by the 3D bounding box.
- Add a method to create a 2D simulation limited to the mode plane domain. Automatically slice the structures and apply the correct boundary conditions in zero-dimensional directions. That would be useful for reducing the mode simulation upload time from Tidy3D and PhotonForge Python users when working with very large models.
Web Client
Once the new mode solver is available in Python, we will need to reorganize the left panel, removing unused settings and making the setup workflow very intuitive and straightforward.
Potential changes:
- Remove the "3D Bounding Box"
- Move "Background Medium" into "Medium"
- Split "Mode Specification" into "Mode" and "Wavelength".
- Replace "Configuration" with "Solver Settings".