Skip to content

Commit

Permalink
Raise an error if far_field_approx=False enabled for 2D simulations.
Browse files Browse the repository at this point in the history
  • Loading branch information
QimingFlex committed Mar 5, 2025
1 parent d7aeafb commit 4a274b6
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 0 deletions.
45 changes: 45 additions & 0 deletions tests/test_components/test_field_projection.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""Test near field to far field transformations."""

import numpy as np
import pydantic.v1 as pydantic
import pytest
import tidy3d as td
from tidy3d.components.field_projection import FieldProjector
Expand Down Expand Up @@ -597,6 +598,50 @@ def test_2d_proj_clientside():
make_2d_proj(plane)


def test_2d_sim_with_proj_monitors_near():
"""Creates near-field projection monitors by modifying proj_distance and far_field_approx."""
center = [0, 0, 0]
freqs = 1e13
monitor_size = (0, 2, td.inf)
plane = "xy"
f0 = 1e13
sim_size = (5, 5, 0)
# boundary conditions
boundary_conds = td.BoundarySpec(
x=td.Boundary.pml(),
y=td.Boundary.pml(),
z=td.Boundary.periodic(),
)

monitors = make_2d_proj_monitors(center, monitor_size, freqs, plane)

# Modify only proj_distance and far_field_approx
proj_monitors_near = [
monitor.__class__(
proj_distance=R_FAR / 50, # Adjust projection distance
far_field_approx=False, # Disable far-field approximation
**{
k: v
for k, v in monitor.__dict__.items()
if k not in ["proj_distance", "far_field_approx"]
},
)
for monitor in monitors
]

with pytest.raises(
pydantic.ValidationError,
match="Exact far-field projection for 2D simulations is not yet available",
):
_ = td.Simulation(
size=sim_size,
grid_spec=td.GridSpec.auto(wavelength=td.C_0 / f0),
boundary_spec=boundary_conds,
monitors=proj_monitors_near,
run_time=1e-12,
)


@pytest.mark.parametrize(
"array, pts, axes, expected",
[
Expand Down
6 changes: 6 additions & 0 deletions tidy3d/components/simulation.py
Original file line number Diff line number Diff line change
Expand Up @@ -3258,6 +3258,12 @@ def _projection_mnts_2d(cls, val, values):
f"Monitor '{monitor.name}' is not supported in 1D simulations."
)

if not monitor.far_field_approx:
raise SetupError(
f"Exact far-field projection for 2D simulations is not yet available for Monitor '{monitor.name}'. "
"Currently, only 'far_field_approx = True' is supported."
)

if isinstance(monitor, FieldProjectionAngleMonitor):
config = {
"y-z": {"valid_value": [np.pi / 2, 3 * np.pi / 2], "coord": "phi"},
Expand Down

0 comments on commit 4a274b6

Please sign in to comment.