diff --git a/doc/changelog.d/6358.added.md b/doc/changelog.d/6358.added.md new file mode 100644 index 00000000000..37f39707d88 --- /dev/null +++ b/doc/changelog.d/6358.added.md @@ -0,0 +1 @@ +Assign wave port in driven terminal \ No newline at end of file diff --git a/src/ansys/aedt/core/hfss.py b/src/ansys/aedt/core/hfss.py index dd82bde696f..71dcefef93a 100644 --- a/src/ansys/aedt/core/hfss.py +++ b/src/ansys/aedt/core/hfss.py @@ -377,6 +377,7 @@ def _get_unique_source_name(self, source_name, root_name): @pyaedt_function_handler(objectname="assignment", portname="port_name") def _create_lumped_driven(self, assignment, int_line_start, int_line_stop, impedance, port_name, renorm, deemb): assignment = self.modeler.convert_to_selections(assignment, True) + # TODO: Integration line should be consistent with _create_waveport_driven start = [str(i) + self.modeler.model_units for i in int_line_start] stop = [str(i) + self.modeler.model_units for i in int_line_stop] props = {} @@ -6876,7 +6877,14 @@ def lumped_port( name = self._get_unique_source_name(name, "Port") - if "Modal" in self.solution_type: + if ( + self.solution_type == SolutionsHfss.DrivenModal + or ( + self.solution_type in [SolutionsHfss.DrivenTerminal, SolutionsHfss.Transient] + and self.desktop_class.aedt_version_id >= "2024.1" + ) + and not reference + ): return self._create_lumped_driven(sheet_name, point0, point1, impedance, name, renormalize, deembed) else: faces = self.modeler.get_object_faces(sheet_name) @@ -7074,7 +7082,14 @@ def wave_port( self._create_pec_cap(face, assignment, dist / 10) name = self._get_unique_source_name(name, "Port") - if self.solution_type == SolutionsHfss.DrivenModal: + if ( + self.solution_type == SolutionsHfss.DrivenModal + or ( + self.solution_type in [SolutionsHfss.DrivenTerminal, SolutionsHfss.Transient] + and self.desktop_class.aedt_version_id >= "2024.1" + ) + and not reference + ): if isinstance(characteristic_impedance, str): characteristic_impedance = [characteristic_impedance] * modes elif modes != len(characteristic_impedance): @@ -7082,7 +7097,7 @@ def wave_port( return self._create_waveport_driven( sheet_name, int_start, int_stop, impedance, name, renormalize, modes, deembed, characteristic_impedance ) - elif reference: + elif reference: # pragma: no cover if isinstance(sheet_name, int): faces = [sheet_name] else: @@ -7103,7 +7118,8 @@ def wave_port( impedance=impedance, terminals_rename=terminals_rename, ) - else: + + else: # pragma: no cover raise AEDTRuntimeError("Reference conductors are missing.") @pyaedt_function_handler() diff --git a/tests/system/general/test_20_HFSS.py b/tests/system/general/test_20_HFSS.py index 2964ad0208e..dfd369d3f65 100644 --- a/tests/system/general/test_20_HFSS.py +++ b/tests/system/general/test_20_HFSS.py @@ -133,9 +133,6 @@ def test_05_create_wave_port_from_sheets(self): o5 = self.aedtapp.modeler.create_circle(Plane.YZ, udp, 10, name="sheet1") self.aedtapp.solution_type = "Terminal" outer_1 = self.aedtapp.modeler["outer_1"] - # TODO: Consider allowing a TEM port to be created. - with pytest.raises(AEDTRuntimeError, match="Reference conductors are missing."): - self.aedtapp.wave_port(o5) port = self.aedtapp.wave_port( assignment=o5, @@ -176,7 +173,6 @@ def test_05_create_wave_port_from_sheets(self): assert port.props["DoDeembed"] is False # Get the object for "outer_1". - outer_1 = self.aedtapp.modeler["outer_1"] bottom_port = self.aedtapp.wave_port( outer_1.bottom_face_z, reference=outer_1.name, create_pec_cap=True, name="bottom_probe_port" ) @@ -2022,3 +2018,27 @@ def test_boundaries_layered_impedance(self): coat4 = self.aedtapp.assign_layered_impedance([b.id, b.name, b.faces[0]], **args) assert coat4.properties["Layer 2/Material"] == "vacuum" + + def test_port_driven(self): + self.aedtapp.insert_design("hfss_wave_port") + circle = self.aedtapp.modeler.create_circle(Plane.YZ, [0, 0, 0], 10, name="sheet1") + + self.aedtapp.solution_type = "Terminal" + port = self.aedtapp.wave_port(assignment=circle) + assert port.name in self.aedtapp.ports + port.delete() + + self.aedtapp.solution_type = "Eigenmode" + with pytest.raises(AEDTRuntimeError): + self.aedtapp.wave_port(assignment=circle) + + self.aedtapp.solution_type = "Modal" + start = [0.0, -10.0, 0.0] + end = [0.0, 10.0, 0.0] + port = self.aedtapp.lumped_port(assignment=circle, integration_line=[start, end]) + assert port.name in self.aedtapp.ports + port.delete() + + self.aedtapp.solution_type = "Eigenmode" + with pytest.raises(AEDTRuntimeError): + self.aedtapp.lumped_port(assignment=circle)