SPLayout (Silicon Photonics Layout Design Tools) is a package for silicon photonics structures design. It provides commonly used silicon photonics structure classes for fast integration and pixelized blocks for inverse design and optimization. Some inverse design algorithms are also integrated in it like DBS (Direct Binary Search) and BBA (Binary Bat Algorithm).
The GDSII streaming is based on gdspy and FDTD simulation is executed on Ansys Lumerical.
- Python3.6/ 3.7/ 3.8
- gdspy
- scipy
- numpy
- (Ansys Lumerical for FDTDSimulation and MODESimulation)
use pip:
pip install splayout
or download from the source and build/install with:
python setup.py install
The documentation can be found here.
A polarization beam splitter inverse design example can be found here .The Extinction Ratio and Transmission are comparable to the original paper.
[1] Mirjalili, S., Mirjalili, S.M. & Yang, XS. Binary bat algorithm. Neural Comput &Applic 25, 663–681 (2014). https://doi.org/10.1007/s00521-013-1525-5
[2] Shen, B., Wang, P., Polson, R. et al. An integrated-nanophotonics polarization beamsplitter with 2.4 × 2.4 μm2 footprint. Nature Photon 9, 378–382 (2015). https://doi.org/10.1038/nphoton.2015.80
[3] Christopher M. Lalau-Keraly, Samarth Bhargava, Owen D. Miller, and Eli Yablonovitch. Adjoint shape optimization applied to electromagnetic design. Opt. Express 21, 21693-21701 (2013). https://doi.org/10.1364/OE.21.021693 & https://github.com/chriskeraly/lumopt
- Initial release
- Fix a fatal bug in version 0.0.1 that Selfdefinecomponent can not work with multi-components.
- Add document.
- Fix a bug that the microring can not return the right pad point when it is rotated.
- Fix a bug horizonal -> horizontal.
- Fix a bug Point._eq_ will return False when other==None.
- Lift restrictions on taper length.
- Support coordinate transfer for MAKE_COMPONENT.
- Add self.get_start_point() for AEMD_grating.
- New Class: SBend & ASBend.
- Add a constant: pi = math.pi.
- SBend docs update.
- Variable names: angle -> radian.
- AEMD gratings can have multiple definitions in a file.
- AEMD Grating default relative position: RIGHT.
- New cell function: self.remove_components().
- If the input filename of "make_gdsii_file" is not "*.gds", it will automatically add ".gds" to the tail.
- New class: Circle, Rectangle.
- Add port points definition for Polygon.
- FDTD API added.
- Binary Bat Algorithm & Direct Binary Search Algorithm for inverse design.
- README.rst for pypi ducumentation.
- Support numpy array for Polygon definition.
- Annotation for DBS run.
- Support cell flatten.
- Fix a bug: initial_solution in DirectBianrySearchAlgorithm can not be properly defined.
- Able to derive phase information from monitor.
- Able to create rectangle&circle pixels with fdtd functions.
- Pixels region for inverse design.
- Variable names: point1 -> bottom_left_corner_point, point2 -> top_right_corner_point.
- Component drawing functions on fdtd_engine with z_start, z_end and material. .
- Tuple support for definitions.
- Float index to define material in fdtd (object defined dielectric).
- Lumerical script eval for fdtd.
- ArbitraryAngleWaveguide class.
- Example for DBS.
- Width property for waveguides.
- Fix a bug for unexpected rotation in SelfDefineComponent.
- Self.start_point -> self.start_point_for_return in func:get_start_point of SelfDefineComponent.
- Able to get backward transmission from mode expansion monitor.
- ASBend & SBend bugs fixed for 'z_start' attribute missing.
- AQuarBend & QuarBend bugs fixed for unacceptable 'tuple' parameters.
- DoubleBendConnector bugs fixed for wrong type definition.
- Fix bugs for MAKE_COMPONENT rotation errors.
- Microring add_heater should generate conductor layer on the heater layer.
- More functions for MODE varFDTD simulation tools.
- Rename a function in fdtdapi: add_source -> add_mode_source.
- Function for removing cells.
- Function for renaming all drawing on Lumerical CAD.
- Anti-Symmetry boundary condition choice for FDTD simulation region.
- Fix bugs for material definition with float type parameter.
- Fix bugs for putting round on Lumerical CAD.
- Support Fundamental TE mode for add_mode_source in fdtdapi.
- Anti-Symmetry boundary condition choice for FDTD simulation region.
- Fix bugs for material definition with float type parameters.
- Fix bugs for putting round on Lumerical CAD.
- Support fundamental TE mode for add_mode_source in fdtdapi.
- add_index_region, add_field_region, add_mesh_region can be defined by z_min&z_max.
- Support Fundamental TE mode for add_mode_expansion in fdtdapi.
- Fix a bug for get_transmission error.
- Fix a bug for mismatching axises in pixelsregion.
- Fix a bug for wrong data-pass with Scientific notation.
- Able to set amplitude and phase for mode source.
- New Function for fdtdapi: reset_source_amplitude and reset_source_phase.
- Fix a bug for wrong SelfMadeComponent rotation.
- New Classes for Inverse Design with Adjoint Method: ShapeOptRegion2D, ShapeOptRegion3D, TopologyOptRegion2D, TopologyOptRegion3D, AdjointForShapeOpt, AdjointForTO.
- Fix a bug for mesh region error in FDTDSimulation.
- Add draw functions for CirclePixelsRegion&RectanglePixelsRegion.
- load_file param for FDTDSimulation & MODESimulation.
- Periodic boundary condition in y-axis direction for FDTD region.
- Fix a bug for wrong SelfMadeComponent rotation.
- Fix a bug for wrong field region definition in z-axis.
- Fix a bug for wrong initialization of RectanglePixelsRegion.
- New heuristic algorithms for inverse design: BPSO & BGA.
- Refine variable names for cost functions in heuristic methods.
- Optimize pixels regions for faster updating.
- Able to save the fdtdfile without changing working path.
- Able to create inexistent folders to save figures.
- Alternative show for figure plot.
- Able to reset targets for adjoint methods.
- Add use('AGG') for matplotlib.
- Enhance reliability for executing simulations.
- Able to get eigenmode distribution from mode monitor.
- Enhance reliability for executing simulations.
- Figures can be shown when it is required in the inverse design regions.
- Able to get magnetic field intensity from field regions.
- Able to get power of the sources with specific wavelengths.
- Able to set items enable/disable for those saved in list or numpy.ndarray.
- Optimize pixels regions for faster creating.
- Support vertical sources and monitors.
- 2D index monitor regions and 2D field monitor regions.
- Support custom source distribution.
- FDTD regions can be defined with z_min&z_max.