Release Notes
0.2.1: October 8, 2025
Updated the general anisotropic solver to support bend waveguides and all types of settings like symmetric boundaries, expansion, and PMLs, available with EMode3D.
Added an input parameter to
FDM()
calledmode_filter
. By default, this is set to ‘forward’, but it can also be set to ‘backward’ or ‘none’. This will filter the mode list to select only forward or backward propagating modes (or don’t filter) for the anisotropic mode solver.Improved EME stability and accuracy.
Added a new parameter to
settings
calledeme_scattering
, which specifies whether or not to automatically calculate all scattering losses within the EME calculation, defaults to False.Fixed a bug in the MATLAB connection.
To use MATLAB on macOS, users must install .NET (https://dotnet.microsoft.com/en-us/download/dotnet/9.0). Installation instructions have been updated to include this detail.
Added support for directly saving EME plots with
plot()
andplot_S_matrix()
.Fixed bug with conformal layers defined over multi-masked layers.
Fixed bug with the
reset()
function for resetting shapes.Removed input parameter
label
fromsweep()
because it has not been implement yet.Updated the
confinement()
function, which now includes the background shape and returns a dictionary of the confinement factors for each mode.Updated
orthogonality()
so that it returns the orthogonality value.For taper and gds section types, the default
minimum_z_step
is now ‘auto’, which uses 1/8th of the wavelength.Default
overlap_variation
is now 0.02.Added option
lossless
to taper and gds section types. Defaults to False.Added the following parameters to the
add_material()
function: thermal_conductivity, resistivity, dn_dT, eps_r_dc, phi, and theta. See the documentation for details.Added the following parametrs to the
shape()
function: fem_resolution, current, voltage, and heat_only. See the documentation for details.Added a parameter
taper_algorithm
for the taper and gds section types. This is intended to be used for slowly varying structures that are known to be adiabatic.
0.2.0: June 27, 2025
Added an explicit restriction on the
tolerance
parameter so that it cannot be set to be smaller than the machine precision. The default fortolerance
is 1e-12.Removed a bug in EME for symmetric section simulations.
Optimized and improved the underlying EME algorithm, improving simulation accuracy.
Added beta support for macOS and Linux.
Improved the subpixel averaging algorithm.
Added general anisotropic solver for straight waveguides, available with EMode3D.
The shape() function input
refractive_index
has been changed tomaterial
. Similarly, thefill_refractive_index
has been changed tofill_material
.All scattering loss results are now stored under the
meta_data
dictionary of the shape.Added a progress bar for meshing and solving.
Added the ability to return material properties from database materials using
get("material_name")
.Added two special types available to the user for defining materials and material properties:
MaterialSpec
andMaterialProperties
.The crystal orientation of a material can now be rotated relative to the simulation window axis by defining a
MaterialSpec
and specifying rotation parameterstheta
andphi
.Changes to biaxial materials: extraordinary index is always aligned with the z-axis (ordinary is aligned with the x and y axes). Rotations can be performed to orient a crystal to the simulation axes as desired. Affected materials: BBO, LN_z –> LN, LN_MgO_z –> LN_MgO, TiO2_rutile.
When EMode encounters errors, emodeconnection.py (1.0.11) will now raise an exception instead of just printing an error message.
0.1.2: March 16, 2025
Fixed a bug where
num_modes
was reset after modes are automatically removed from the pml regions.Fixed a bug with the
label()
function when using thefill_refractive_index
parameter.Fixed a bug in the
plot()
function whenfill_refractive_index
was set on conformal layers.Fixed a bug with EModeLogin when displaying error messages.
Updated the EModeLogin GUI layout.
For both the Python and the MATLAB interfaces, a static function called
EModeLogin()
was added, which replaces the previous EModeLogin executable for running the EMode Login GUI. New instructions are added to the website for running the EMode Login GUI.
0.1.1: May 7, 2024
Fixed a bug with the MATLAB connection.
Fixed a bug with the
shape()
argumentposition
.Fixed a bug with the
scattering()
calculate that was overestimating the scattering loss.
0.1.0: April 24, 2024
The EME module has been added, including
section()
,EME()
, andplot_S_matrix()
. These are only available with an active EMode3D license.EME solver is limited to only use field_to_solve of ‘Et’.
EME length sweeps are solved in the reverse order.
Changed the parameter
length_nm
tolength
for all EME sections and functions.EME sections automatically re-solved after a shape change and label reset.
Materials added to the material database: InGaAs, InGaP, InP, InSb, PMMA, SU8, TiO2_rutile, HfO2, H2O, GGG, GaSb, GaP, BBO, and InSb.
Material explorer: fixed bug saving certain filetypes, fixed bug with logo placement in saved files, and added gridlines.
Updated
material_explorer()
plot display and saving resolution.The
add_material()
function now accepts citation and wavelength_range as an inputs.Updated
add_material()
so that is accepts a list of three equations for defining anisotropic materials with dispersion.New function
import_database()
added, which supports the import of a custom database text file.The west boundary condition has been re-defined to reflect the Ex (a)symmetry, so it matches the south boundary condition.
The default y-position has been changed from -1 to ‘auto’.
In the
plot()
function, scaling is added to the cursor data-value for field plotting.Fixed a plot error following a call to
group_index()
.Fixed a bug when iteratively updating a shape setting.
MATLAB connection now outputs text to the MATLAB command window.
Updated the scattering loss tool to make the calculation more consistent.
Fixed bugs with saving and opening EMode simulation files with MATLAB.
Added the new parameter
propagation_resolution
to thesettings()
function.
0.0.7-b5: December 12, 2023
Fixed bugs with conformal layers.
Added arbitrary number of masks for each shape.
Added input parameters to shape:
mask_offset
andtone
. Eithermask
,mask_offset
, or both can be a list. The length of each parameter will be matched by padding with the last value. Settings fromtone
andetch
are applied to allmask
/mask_offset
values.Added etch functionality to conformal layers.
Fixed the bug the made incorrect mode list ordering.
Added the function
orthogonality
to test the othogonality of the mode list. This is helpful to determine if the mode list is sufficiently accurate.Added the input parameter
label
toget()
, so users can extract data from labeled datasets.The
label()
function now saves all settings and field data under in a Python dictionary or a MATLAB structure array calleddataset_LABEL
.Changed the default operation in
confinement()
to only include areas of a shape that define the refractive index, not including areas that are overlapped by other shapes with higher priority.Added a boolean option
ignore_priority
toconfinement()
that toggles ignoring overlapping shapes with higher priority.Added user-accessible variables
shape_materials
,priority_indices
, andshape_vertices
.Added support for iPython.
Added functionality to use an existing material name to define a custom material. This will override the EMode database material during the session.
FDM()
now takes the input parameterlabel
to automatically save the simulation result as a labaled dataset.Updated
group_index()
so it will run without runningFDM()
first.Added ‘min’ as an option for
slice_op
parameter inscattering()
.Shapes and associated properties are now saved as dictionaries. This also includes the scattering loss results.
Interfacial roughness and correlation length values are now specified in the shape parameters:
correlation_length
(aliasLc_nm
) androughness_rms
(aliasst_dev_nm
).Added the new function
reset()
to clear all shapes, reset settings, or both.Shape argument
position
now accepts a single float to specify only the x-position and automatically place the y-position of a planar layer on top of the previous layer.Added boundary conditions options ‘TE-h’, ‘TE-v’, ‘TM-h’, and ‘TM-v’ to specify only horizontal or vertical symmetry for TE or TM modes.
Fixed bugs with MATLAB connection: default
file_type
is now ‘.mat’ forclose()
, and ‘.eph’ file is preserved aftersave()
.
0.0.6-b4: March 13, 2023
Added an option to remove the legend from
plot
.Now planar layers do not add fill material by default, only if
fill_refractive_index
is defined.Updated meshing algorithm to fix bugs at shape interfaces.
plot
now shows positive and negative field values on the colorbar.Fixed error when setting
wavelength
units to ‘um’ inadd_material
.Added options to improve sidewall scattering accuracy. See details in the documentation for the
scattering
function.
0.0.5-b3: February 3, 2023
Scattering loss now works with angled sidewalls.
For
scattering
, the default formode
is ‘all’.Added imaginary index capability to
add_material
.Bend mode solver updated so field patterns and loss are now more accurate.
Switched from uniaxial pml to stretched-coordinate pml.
User-defined materials now override EMode database materials.
plot
now shows shapes with the same refractive index in a different color.Added capability to solve for the magnetic field instead of the electric field. See the
field_to_solve
parameter insettings
.Removed the field_calc option from
FDM
. Now the fields will always be available, but they will not be stored in memory. This reduces the memory usage by about 7x.Saved .eph files do not contain the raw field data by default. This can be controlled with the
save_all_fields
parameter insave
andclose
.material_explorer
now shows user added materials.