diff --git a/tidy3d/__init__.py b/tidy3d/__init__.py index b7804d3744..9c049c2bf4 100644 --- a/tidy3d/__init__.py +++ b/tidy3d/__init__.py @@ -63,4 +63,4 @@ # make all stdout and errors pretty pretty.install() -traceback.install(suppress=[ProcessPoolExecutor]) +# traceback.install(suppress=[ProcessPoolExecutor]) diff --git a/tidy3d/components/data.py b/tidy3d/components/data.py index 6eddaf3de9..e789c805e9 100644 --- a/tidy3d/components/data.py +++ b/tidy3d/components/data.py @@ -658,7 +658,7 @@ def __getitem__(self, monitor_name: str) -> Union[Tidy3dDataArray, xr.Dataset]: """ monitor_data = self.monitor_data.get(monitor_name) if not monitor_data: - raise DataError(f"monitor {monitor_name} not found") + raise DataError(f"monitor '{monitor_name}' not found") if isinstance(monitor_data, MonitorData): return monitor_data.data return monitor_data diff --git a/tidy3d/components/source.py b/tidy3d/components/source.py index 5eb1048ab8..e3f138d8f4 100644 --- a/tidy3d/components/source.py +++ b/tidy3d/components/source.py @@ -434,9 +434,12 @@ class GaussianBeam(DirectionalSource): Specifies the sign of propagation. Must be in ``{'+', '-'}``. Note: propagation occurs along dimension normal to plane. - waist_radius: float + waist_radius: float = 1.0 Radius of the beam at the waist (um). Must be positive. + waist_distance: float = 0.0 + Distance (um) from the beam waist along the propagation direction. + Must be non-negative. angle_theta: float = 0.0 Angle of propagation of the beam with respect to the normal axis (rad). angle_phi: float = 0.0 @@ -457,7 +460,8 @@ class GaussianBeam(DirectionalSource): ... waist_radius=1.0) """ - waist_radius: pydantic.PositiveFloat + waist_radius: pydantic.PositiveFloat = 1.0 + waist_distance: pydantic.NonNegativeFloat = 0.0 angle_theta: float = 0.0 angle_phi: float = 0.0 pol_angle: float = 0.0 diff --git a/tidy3d/convert.py b/tidy3d/convert.py index 848af153ea..571fddb2d6 100644 --- a/tidy3d/convert.py +++ b/tidy3d/convert.py @@ -8,7 +8,7 @@ from tidy3d import Box, Sphere, Cylinder, PolySlab from tidy3d import Medium, AnisotropicMedium from tidy3d.components.medium import DispersiveMedium, PECMedium -from tidy3d import VolumeSource, ModeSource, PlaneWave +from tidy3d import VolumeSource, ModeSource, PlaneWave, GaussianBeam from tidy3d import GaussianPulse from tidy3d import PML, Absorber, StablePML from tidy3d import FieldMonitor, FieldTimeMonitor, FluxMonitor, FluxTimeMonitor @@ -279,26 +279,28 @@ def old_json_sources(sim: Simulation) -> List[Dict]: "polarization": source.polarization[1], "amplitude": source.source_time.amplitude, } + elif isinstance(source, GaussianBeam): + normal_index = [s == 0 for s in source.size].index(True) + injection_axis = source.direction + "xyz"[normal_index] + direction = "forward" if source.direction == "+" else "backward" + src = { + "name": name, + "type": "GaussianBeam", + "source_time": src_time, + "center": list(source.center), + "normal": "xyz"[normal_index], + "direction": direction, + "angle_theta": float(source.angle_theta), + "angle_phi": float(source.angle_phi), + "waist_radius": float(source.waist_radius), + "waist_distance": float(source.waist_distance), + "pol_angle": float(source.pol_angle), + "amplitude": source.source_time.amplitude + } + if src: src_list.append(src) - # """ TODO: Support GaussianBeam """ - # elif isinstance(source, GaussianBeam): - # src = { - # "name": src_data.name, - # "type": "GaussianBeam", - # "source_time": src_time, - # "position": source.position, - # "normal": source.normal, - # "direction": source.direction, - # "angle_theta": float(source.angle_theta), - # "angle_phi": float(source.angle_phi), - # "waist_radius": float(source.waist_radius), - # "waist_distance": float(source.waist_distance), - # "pol_angle": float(source.pol_angle), - # "amplitude": float(source.amplitude) - # } - return src_list diff --git a/tidy3d/web/config.py b/tidy3d/web/config.py index 0508b569b3..63d961be38 100644 --- a/tidy3d/web/config.py +++ b/tidy3d/web/config.py @@ -4,7 +4,7 @@ from dataclasses import dataclass # automate this later? -SOLVER_VERSION = "release-21.4.0" +SOLVER_VERSION = "release-21.4.2" @dataclass