Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Added
- Added support for `tidy3d-extras`, an optional plugin that enables more accurate local mode solving via subpixel averaging.
- Added `MicrowaveModeSpec` for RF-specific mode information with customizable characteristic impedance calculations through `ImpedanceSpec`.
- Added `MicrowaveModeMonitor` and `MicrowaveModeSolverMonitor` for microwave and RF mode analysis with transmission line data.
- Added `MicrowaveModeData` and `MicrowaveModeSolverData` extending mode solver results with characteristic impedance, voltage coefficients, and current coefficients.
- Added `AutoImpedanceSpec` for automatic transmission line impedance calculation based on simulation geometry.
- Added `CustomImpedanceSpec` for user-defined voltage and current path specifications in impedance calculations.
- Added voltage integral specification classes: `AxisAlignedVoltageIntegralSpec` and `Custom2DVoltageIntegralSpec`.
- Added current integral specification classes: `AxisAlignedCurrentIntegralSpec`, `CompositeCurrentIntegralSpec`, and `Custom2DCurrentIntegralSpec`.

### Changed
- Improved performance of antenna metrics calculation by utilizing cached wave amplitude calculations instead of recomputing wave amplitudes for each port excitation in the `TerminalComponentModelerData`.
- Changed hashing method in `Tidy3dBaseModel` from sha256 to md5.
- All RF and microwave specific components now inherit from `MicrowaveBaseModel`.
- **[BREAKING]** Renamed path integral classes in `tidy3d.plugins.microwave` for improved consistency. Please see our migration guide for details on updating your code.
- `VoltageIntegralAxisAligned` → `AxisAlignedVoltageIntegral`
- `CurrentIntegralAxisAligned` → `AxisAlignedCurrentIntegral`
- `CustomPathIntegral2D` → `Custom2DPathIntegral`
- `CustomVoltageIntegral2D` → `Custom2DVoltageIntegral`
- `CustomCurrentIntegral2D` → `Custom2DCurrentIntegral`
- Path integral and impedance calculator classes have been refactored and moved from `tidy3d.plugins.microwave` to `tidy3d.components.microwave`. They are now publicly exported via the top-level package `__init__.py`, so you can import them directly, e.g. `from tidy3d import ImpedanceCalculator, AxisAlignedVoltageIntegral, AxisAlignedCurrentIntegral, Custom2DVoltageIntegral, Custom2DCurrentIntegral, Custom2DPathIntegral`.

### Fixed
- More robust `Sellmeier` and `Debye` material model, and prevent very large pole parameters in `PoleResidue` material model.
Expand Down
6 changes: 6 additions & 0 deletions docs/api/microwave/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ Overview

RF simulations will be subject to new license requirements in the future.

.. warning::

Breaking changes were introduced in ``v2.10.0``, please see the migration guide for help migrating your code.

+ `Migration Guide <microwave_migration.html>`_

This page consolidates Tidy3D features related to microwave and RF simulation. While microwave/RF and optical simulations have many properties in common, there are some differences in the typical RF user workflow that deserve special consideration.

The following sections discuss:
Expand Down
130 changes: 130 additions & 0 deletions docs/api/microwave/microwave_migration.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
.. _microwave_migration:

v2.10 Refactor Migration
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is very good thanks

-------------------------

In version ``v2.10.0``, microwave plugin path integral classes were renamed for improved consistency and clarity. Additionally, these classes (and the impedance calculator) were refactored out of the plugin and moved into ``tidy3d.components.microwave`` and re-exported at the top-level package for convenience. This guide helps you update your scripts to use the new class names and imports.

Key Changes
~~~~~~~~~~~

* **Renamed Classes**: Path integral classes have been renamed to follow a consistent naming pattern.
* **New Import Path (simplified)**: The path integral classes and impedance calculator are now exported at the top level. Prefer importing directly from ``tidy3d`` (e.g., ``from tidy3d import AxisAlignedVoltageIntegral, ImpedanceCalculator``). Existing plugin imports continue to work for backwards compatibility where applicable.

Class Name Changes
~~~~~~~~~~~~~~~~~~

The following classes have been renamed for consistency:

**Voltage Integrals:**

* ``VoltageIntegralAxisAligned`` → ``AxisAlignedVoltageIntegral``
* ``CustomVoltageIntegral2D`` → ``Custom2DVoltageIntegral``

**Current Integrals:**

* ``CurrentIntegralAxisAligned`` → ``AxisAlignedCurrentIntegral``
* ``CustomCurrentIntegral2D`` → ``Custom2DCurrentIntegral``

**Path Integrals:**

* ``CustomPathIntegral2D`` → ``Custom2DPathIntegral``

Migration Examples
~~~~~~~~~~~~~~~~~~

**Before (v2.9.x):**

.. code-block:: python
from tidy3d.plugins.microwave import (
VoltageIntegralAxisAligned,
CurrentIntegralAxisAligned,
)
voltage_path = VoltageIntegralAxisAligned(
center=(0, 0, 0),
size=(0, 0, 1),
sign="+",
)
current_path = CurrentIntegralAxisAligned(
center=(0, 0, 0),
size=(2, 1, 0),
sign="+",
)
**After (v2.10+):**

.. code-block:: python
from tidy3d import (
AxisAlignedVoltageIntegral,
AxisAlignedCurrentIntegral,
)
voltage_path = AxisAlignedVoltageIntegral(
center=(0, 0, 0),
size=(0, 0, 1),
sign="+",
)
current_path = AxisAlignedCurrentIntegral(
center=(0, 0, 0),
size=(2, 1, 0),
sign="+",
)
Custom 2D Path Integrals
~~~~~~~~~~~~~~~~~~~~~~~~~

**Before:**

.. code-block:: python
from tidy3d.plugins.microwave import (
CustomVoltageIntegral2D,
CustomCurrentIntegral2D,
)
vertices = [[0, 0], [1, 0], [1, 1], [0, 1]]
voltage_path = CustomVoltageIntegral2D(
axis=2,
position=0.0,
vertices=vertices,
)
current_path = CustomCurrentIntegral2D(
axis=2,
position=0.0,
vertices=vertices,
)
**After:**

.. code-block:: python
from tidy3d import (
Custom2DVoltageIntegral,
Custom2DCurrentIntegral,
)
vertices = [[0, 0], [1, 0], [1, 1], [0, 1]]
voltage_path = Custom2DVoltageIntegral(
axis=2,
position=0.0,
vertices=vertices,
)
current_path = Custom2DCurrentIntegral(
axis=2,
position=0.0,
vertices=vertices,
)
Summary
~~~~~~~

All functionality remains the same—only class names and preferred import paths have changed. Update your imports to the top level (``from tidy3d import ...``) and class names according to the table above, and your code will work with v2.10. For impedance calculations, import ``ImpedanceCalculator`` directly via ``from tidy3d import ImpedanceCalculator``.
14 changes: 7 additions & 7 deletions docs/api/microwave/ports/wave.rst
Original file line number Diff line number Diff line change
Expand Up @@ -46,27 +46,27 @@ If it is desired to only solve for the 2D port mode, one can use the ``to_mode_s
:toctree: ../_autosummary/
:template: module.rst

tidy3d.plugins.microwave.VoltageIntegralAxisAligned
tidy3d.plugins.microwave.CurrentIntegralAxisAligned
tidy3d.plugins.microwave.CustomVoltageIntegral2D
tidy3d.plugins.microwave.CustomCurrentIntegral2D
tidy3d.plugins.microwave.AxisAlignedVoltageIntegral
tidy3d.plugins.microwave.AxisAlignedCurrentIntegral
tidy3d.plugins.microwave.Custom2DVoltageIntegral
tidy3d.plugins.microwave.Custom2DCurrentIntegral
tidy3d.plugins.microwave.AxisAlignedPathIntegral
tidy3d.plugins.microwave.CustomPathIntegral2D
tidy3d.plugins.microwave.Custom2DPathIntegral
tidy3d.plugins.microwave.ImpedanceCalculator

The classes above are used to define the voltage/current integration paths for impedance calculation.

.. code-block:: python

# Define voltage integration line
my_voltage_integral = VoltageIntegralAxisAligned(
my_voltage_integral = AxisAlignedVoltageIntegral(
center=(0,0,0), # center of integration line
size=(5, 0, 0), # length of integration line
sign='+', # sign of integral
)

# Define current integration loop
my_current_integral = CurrentIntegralAxisAligned(
my_current_integral = AxisAlignedCurrentIntegral(
center=(0,0,0), # center of integration loop
size=(20, 20, 0), # size of integration loop
sign='+', # sign of integral (should match wave port direction)
Expand Down
10 changes: 5 additions & 5 deletions docs/api/plugins/microwave.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ Microwave
:template: module.rst

tidy3d.plugins.microwave.AxisAlignedPathIntegral
tidy3d.plugins.microwave.VoltageIntegralAxisAligned
tidy3d.plugins.microwave.CurrentIntegralAxisAligned
tidy3d.plugins.microwave.CustomPathIntegral2D
tidy3d.plugins.microwave.CustomVoltageIntegral2D
tidy3d.plugins.microwave.CustomCurrentIntegral2D
tidy3d.plugins.microwave.AxisAlignedVoltageIntegral
tidy3d.plugins.microwave.AxisAlignedCurrentIntegral
tidy3d.plugins.microwave.Custom2DPathIntegral
tidy3d.plugins.microwave.Custom2DVoltageIntegral
tidy3d.plugins.microwave.Custom2DCurrentIntegral
tidy3d.plugins.microwave.ImpedanceCalculator
tidy3d.plugins.microwave.RectangularAntennaArrayCalculator
tidy3d.plugins.microwave.LobeMeasurer
Loading