From 0b6981d8c89a6c50fad09141ffd609c25ce24230 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Thu, 16 Jan 2025 11:42:18 +0100 Subject: [PATCH 01/13] Add hertzian dipole --- src/ansys/aedt/core/hfss.py | 102 ++++++++++++++++++ .../aedt/core/modules/boundary/common.py | 4 + tests/system/general/test_20_HFSS.py | 21 ++++ 3 files changed, 127 insertions(+) diff --git a/src/ansys/aedt/core/hfss.py b/src/ansys/aedt/core/hfss.py index a8e8cc0a262..e98124ee297 100644 --- a/src/ansys/aedt/core/hfss.py +++ b/src/ansys/aedt/core/hfss.py @@ -6766,6 +6766,108 @@ def plane_wave( return self._create_boundary(name, inc_wave_args, "Plane Incident Wave") + @pyaedt_function_handler() + def hertzian_dipole_wave( + self, + assignment=None, + origin=None, + polarization=None, + is_electric=True, + radius="10mm", + name=None, + ) -> BoundaryObject: + """Create a hertzian dipole wave excitation. The excitation is assigned in the assigned sphere, inside this + sphere, the field magnitude is equal to the field magnitude calculated on the surface of the sphere. + + Parameters + ---------- + assignment : str or list, optional + One or more objects or faces to assign finite conductivity to. The default is ``None``, in which + case the excitation is assigned to anything. + origin : list, optional + Excitation location. The default is ``["0mm", "0mm", "0mm"]``. + polarization : list, optional + Electric field polarization vector. + The default is ``[0, 0, 1]``. + is_electric : bool, optional + Type of dipole. Electric dipole if ``True``, magnetic dipole if ``False``. The default is ``True``. + radius : str or float, optional + Radius of surrounding sphere. The default is "10mm". + name : str, optional + Name of the boundary. + + Returns + ------- + :class:`pyaedt.modules.Boundary.BoundaryObject` + Port object. + + References + ---------- + >>> oModule.AssignHertzianDipoleWave + + Examples + -------- + + Create a hertzian dipole wave excitation. + >>> from ansys.aedt.core import Hfss + >>> hfss = Hfss() + >>> sphere = hfss.modeler.primitives.create_sphere([0, 0, 0], 10) + >>> port1 = hfss.hertzian_dipole_wave(assignment=sphere, radius=10) + """ + userlst = self.modeler.convert_to_selections(assignment, True) + lstobj = [] + lstface = [] + for selection in userlst: + if selection in self.modeler.model_objects: + lstobj.append(selection) + elif isinstance(selection, int) and self.modeler._find_object_from_face_id(selection): + lstface.append(selection) + + props = {"Objects": [], "Faces": []} + + if lstobj: + props["Objects"] = lstobj + if lstface: + props["Faces"] = lstface + + if not origin: + origin = ["0mm", "0mm", "0mm"] + elif not isinstance(origin, list) or len(origin) != 3: + self.logger.error("Invalid value for `origin`.") + return False + + x_origin, y_origin, z_origin = self.modeler._pos_with_arg(origin) + + name = self._get_unique_source_name(name, "IncPWave") + + hetzian_wave_args = {"OriginX": x_origin, "OriginY": y_origin, "OriginZ": z_origin} + + if not polarization: + polarization = [0, 0, 1] + elif not isinstance(polarization, list) or len(polarization) != 3: + self.logger.error("Invalid value for `polarization`.") + return False + + new_hertzian_args = { + "IsCartesian": True, + "EoX": polarization[0], + "EoY": polarization[1], + "EoZ": polarization[2], + "kX": polarization[0], + "kY": polarization[1], + "kZ": polarization[2], + } + + hetzian_wave_args["IsElectricDipole"] = False + if is_electric: + hetzian_wave_args["IsElectricDipole"] = True + + hetzian_wave_args["SphereRadius"] = radius + hetzian_wave_args.update(new_hertzian_args) + hetzian_wave_args.update(props) + + return self._create_boundary(name, hetzian_wave_args, "Hertzian Dipole Wave") + @pyaedt_function_handler() def set_radiated_power_calc_method(self, method="Auto"): """Set the radiated power calculation method in Hfss. diff --git a/src/ansys/aedt/core/modules/boundary/common.py b/src/ansys/aedt/core/modules/boundary/common.py index 8027747eb4f..caffda84eaa 100644 --- a/src/ansys/aedt/core/modules/boundary/common.py +++ b/src/ansys/aedt/core/modules/boundary/common.py @@ -537,6 +537,8 @@ def create(self): self._app.oboundary.AssignFluxTangential(self._get_args()) elif bound_type == "Plane Incident Wave": self._app.oboundary.AssignPlaneWave(self._get_args()) + elif bound_type == "Hertzian Dipole Wave": + self._app.oboundary.AssignHertzianDipoleWave(self._get_args()) elif bound_type == "ResistiveSheet": self._app.oboundary.AssignResistiveSheet(self._get_args()) else: @@ -681,6 +683,8 @@ def update(self): self._app.oboundary.EditTerminal(self.name, self._get_args()) elif bound_type == "Plane Incident Wave": self._app.oboundary.EditIncidentWave(self.name, self._get_args()) + elif bound_type == "Hertzian Dipole Wave": + self._app.oboundary.EditIncidentWave(self.name, self._get_args()) elif bound_type == "ResistiveSheet": self._app.oboundary.EditResistiveSheet(self.name, self._get_args()) else: diff --git a/tests/system/general/test_20_HFSS.py b/tests/system/general/test_20_HFSS.py index aba5db2bdfd..dd1f314337e 100644 --- a/tests/system/general/test_20_HFSS.py +++ b/tests/system/general/test_20_HFSS.py @@ -1804,3 +1804,24 @@ def test_72_import_table(self, add_app): assert aedtapp.import_table(input_file=file_no_header, name="Table2") assert "Table2" in aedtapp.table_names + + def test_73_plane_wave(self, add_app): + aedtapp = add_app(project_name="test_73") + assert not aedtapp.hertzian_dipole_wave(origin=[0, 0]) + assert not aedtapp.hertzian_dipole_wave(polarization=[1]) + + sphere = aedtapp.modeler.create_sphere([0, 0, 0], 10) + sphere2 = aedtapp.modeler.create_sphere([10, 100, 0], 10) + + assignment = [sphere, sphere2.faces[0].id] + + exc = aedtapp.hertzian_dipole_wave(assignment=assignment, is_electric=True) + assert len(aedtapp.excitations) == 1 + assert exc.properties["Electric Dipole"] + exc.props["IsElectricDipole"] = False + assert not exc.properties["Electric Dipole"] + + exc2 = aedtapp.hertzian_dipole_wave(polarization=[1, 0, 0], name="dipole", radius=20) + assert len(aedtapp.excitations) == 2 + assert exc2.name == "dipole" + aedtapp.close_project(save=False) From 9d7efee51239d2d470c06f26d4db8532a4278b87 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Thu, 16 Jan 2025 16:03:24 +0100 Subject: [PATCH 02/13] Create report from a table --- src/ansys/aedt/core/visualization/report/common.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ansys/aedt/core/visualization/report/common.py b/src/ansys/aedt/core/visualization/report/common.py index e75df8225a6..9939d949989 100644 --- a/src/ansys/aedt/core/visualization/report/common.py +++ b/src/ansys/aedt/core/visualization/report/common.py @@ -1323,7 +1323,11 @@ def create(self, name=None): self.plot_name = generate_unique_name("Plot") else: self.plot_name = name - if self.setup not in self._post._app.existing_analysis_sweeps and "AdaptivePass" not in self.setup: + if ( + self.setup not in self._post._app.existing_analysis_sweeps + and "AdaptivePass" not in self.setup + and " : Table" not in self.setup + ): self._post._app.logger.error("Setup doesn't exist in this design.") return False self._post.oreportsetup.CreateReport( From 0782bf1305780b940a2ba301a5889da3771002f8 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Thu, 16 Jan 2025 17:26:00 +0100 Subject: [PATCH 03/13] SE extension --- .../workflows/hfss/images/large/shielding.png | Bin 0 -> 1729 bytes .../workflows/hfss/shielding_effectiveness.py | 485 ++++++++++++++++++ .../core/workflows/hfss/toolkits_catalog.toml | 7 + 3 files changed, 492 insertions(+) create mode 100644 src/ansys/aedt/core/workflows/hfss/images/large/shielding.png create mode 100644 src/ansys/aedt/core/workflows/hfss/shielding_effectiveness.py diff --git a/src/ansys/aedt/core/workflows/hfss/images/large/shielding.png b/src/ansys/aedt/core/workflows/hfss/images/large/shielding.png new file mode 100644 index 0000000000000000000000000000000000000000..72360307cb51b8e2d75a7658008e4ed0e26ea288 GIT binary patch literal 1729 zcmV;y20r*6_7)aV-$!-)KbJ-AvQW#t7%h>jZWI?cqF536LmC)Y1&wA ztVZL}M59jAD8tkoMukLC5k&qsH1iR7P7uT#uh%CW`|LC? zEt-!&*cS?i%RO#)sin8~SZYd&gU2B72u`OFKdDEIoyyX@yM4AB#3Rn)K8mZkOBpX}=ilwrI7wo`(?V!-c9USw=?YFFMWU^$v$E zyP?rYZCwLrDyuQ~Scy+cA~|g+216X}t?jfL@6prMNlJ18CC|=eWZnoy=VphM3dQkI zD7-0d;K1udAP|8rHAlT~`@5GtK2J`Y={_}A>QL!)R99VLAs9v~wEb!=)%yrKW*W@8)s z_8(#Craz#~%wodRBbmKyF}E&XL#zV?L9

yR3VAJKh`fu6r)>bkzhT^d}P$nngGxrc> z7>pG36YvMTL?9;uQ4sAmyVK(i$<>v$MtU87thY^Q^s(q;G^|Oe>9*L& z9iGK+UR=PgZLhO>-JeKIPv=OD5fOpXx>lYWKbS6aubBwsL|`^v3mIEXrlA?CbXzdQ z0J(rXE{^z=WF}88VDF()sxQ{C^0&VtF<~$lFW0eb^#*XQGJf7wI`Xm0Ib?3fW0 zjDMPiOIFj|)`?=~96HXQqhHP_3^p^v)H05heYxG**?gM^$moMNtTq%*7&q%?eIu^n zWAU8)7xwYfNt0Z}sFd_ttnA$V5q7JCgGY{`)9bJ}y~Gzzp*9rFfW|tSVv_i|EI$!|%fka?^g%+^9u(!PX5^)d6)g@7u{zr7uOrK!j_YzIm1oX#V9!?4GSbm% zqS>+gL$W4L=88T8sq6saxS8mh8+c(-9=rA(In{ovYCjRk=!4|7I&5Bf`mEw9BLhvh zX}H^h;(8U`H?EPDoJdki5;7q~VqyYkFJ5Ip!VpYGBW(b>f{8Tk6UWX(q347cq)X^ZyC@VeA=UYVo?< z#HgZ}T|AW~(?;WPx!Jw<;0af^<8>)uB@!7AA$crLr(bAw`J{OZN{W~?eiV)Ox@a?X zAxR;0`dDNN1u?Px@pwFV{1OXFX0iBZMRZ$iY zJ$BE8r*bkGk(r7rDvBGo8VMmHQ$*qMdWq3!S+#TldBcWKf2)yKH@xHRG@0i3d+*ir z5HcPmED;O~6(-YteW%6#qv2U;jLFL+e@rfRryGmaK}qo>RxX*xz}OhRDzD^^f8OEl zF?Y@LTU*L`1R0M(@;Y#PrLVfoJ=X7x9n&?MXfY)zo>4g&Bn{FtxnK;fZ6@CR>mL5` zNm+}_VV@PSwVvfM2z*c4!P)tS#33K%<_^y;o>qWLsi5MU^L%-tBJ6ZH4od;=%Rz_9 z!ebKn0hIbQrCO_9VMvHyYqeP7Z5B&qNb+w8xbB}L=;Oae8JnV1=u Date: Fri, 17 Jan 2025 12:45:07 +0100 Subject: [PATCH 04/13] Add unit test --- src/ansys/aedt/core/modeler/modeler_3d.py | 5 +- .../workflows/hfss/shielding_effectiveness.py | 50 +++++++++++++++---- tests/system/solvers/test_45_workflows.py | 42 ++++++++++++++++ 3 files changed, 86 insertions(+), 11 deletions(-) diff --git a/src/ansys/aedt/core/modeler/modeler_3d.py b/src/ansys/aedt/core/modeler/modeler_3d.py index 73e8c283898..7726e1182da 100644 --- a/src/ansys/aedt/core/modeler/modeler_3d.py +++ b/src/ansys/aedt/core/modeler/modeler_3d.py @@ -776,6 +776,9 @@ def create_waveguide( } if wgmodel in WG: + original_model_units = self.model_units + self.model_units = "mm" + wgwidth = WG[wgmodel][0] wgheight = WG[wgmodel][1] if not wg_thickness: @@ -840,7 +843,7 @@ def create_waveguide( wgbox = self.create_box(origin, [wg_length, wb, hb], name=name) self.subtract(wgbox, airbox, False) wgbox.material_name = wg_material - + self.model_units = original_model_units return wgbox, p1, p2 else: return None diff --git a/src/ansys/aedt/core/workflows/hfss/shielding_effectiveness.py b/src/ansys/aedt/core/workflows/hfss/shielding_effectiveness.py index af1e3c41833..a9a20e2da4c 100644 --- a/src/ansys/aedt/core/workflows/hfss/shielding_effectiveness.py +++ b/src/ansys/aedt/core/workflows/hfss/shielding_effectiveness.py @@ -32,6 +32,7 @@ from ansys.aedt.core.workflows.misc import get_port from ansys.aedt.core.workflows.misc import get_process_id from ansys.aedt.core.workflows.misc import is_student +import numpy as np port = get_port() version = get_aedt_version() @@ -94,7 +95,7 @@ def frontend(): # pragma: no cover sphere_size = tkinter.Text(master, width=20, height=1) sphere_size.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) - sphere_size.insert(tkinter.END, "10.0") + sphere_size.insert(tkinter.END, "0.01") sphere_size.grid(row=0, column=1, pady=10, padx=5) label = ttk.Label(master, text="X Polarization:", style="PyAEDT.TLabel") @@ -150,7 +151,7 @@ def frontend(): # pragma: no cover points = tkinter.Text(master, width=20, height=1) points.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) - points.insert(tkinter.END, "1.0") + points.insert(tkinter.END, "10") points.grid(row=7, column=1, pady=10, padx=5) label = ttk.Label(master, text="Electric dipole:", style="PyAEDT.TLabel") @@ -223,8 +224,8 @@ def callback(): master.units_ui = units.get("1.0", tkinter.END).strip() master.start_freq_ui = float(start_freq.get("1.0", tkinter.END).strip()) master.stop_freq_ui = float(stop_freq.get("1.0", tkinter.END).strip()) - master.points_ui = float(points.get("1.0", tkinter.END).strip()) - master.cores_ui = float(cores.get("1.0", tkinter.END).strip()) + master.points_ui = int(points.get("1.0", tkinter.END).strip()) + master.cores_ui = int(cores.get("1.0", tkinter.END).strip()) master.dipole = "Electric" if dipole.get() == 1 else "Magnetic" master.destroy() @@ -284,13 +285,35 @@ def main(extension_args): ) active_project = app.active_project() + + if not active_project: # pragma: no cover + app.logger.error("Not active project.") + if not extension_args["is_test"]: + app.release_desktop(False, False) + return False + active_design = app.active_design() project_name = active_project.GetName() + + if not active_design: # pragma: no cover + app.logger.error("Not active design.") + if not extension_args["is_test"]: + app.release_desktop(False, False) + return False + design_name = active_design.GetName() aedtapp = get_pyaedt_app(project_name, design_name) + if aedtapp.design_type != "HFSS": # pragma: no cover + app.logger.error("Active design is not HFSS.") + if not extension_args["is_test"]: + app.release_desktop(False, False) + return False + + aedtapp.solution_type = "Terminal" + aedtapp.modeler.model_units = "meter" aedtapp.modeler.set_working_coordinate_system("Global") @@ -298,8 +321,12 @@ def main(extension_args): if len(object_names) != 1: aedtapp.logger.error("There should be only one object in the design.") + if not extension_args["is_test"]: # pragma: no cover + app.release_desktop(False, False) return False + aedtapp.logger.info("Add Hertzian dipole excitation.") + shielding = aedtapp.modeler[object_names[0]] shielding_name = shielding.name b = shielding.bounding_box @@ -313,7 +340,7 @@ def main(extension_args): # Assign incident wave is_electric = False if dipole_type == "Electric": - is_electric = False + is_electric = True aedtapp.hertzian_dipole_wave( assignment=sphere, @@ -323,6 +350,8 @@ def main(extension_args): radius=f"{sphere_size}meter", ) + aedtapp.logger.info("Create setup.") + # Compute frequency mesh freq_med = (stop_frequency + start_frequency) / 2 @@ -339,9 +368,10 @@ def main(extension_args): setup = aedtapp.create_setup() setup.properties["Solution Freq"] = freq_mesh + setup_name = setup.name aedtapp.create_linear_count_sweep( - setup.name, + setup_name, units=frequency_units, start_frequency=start_frequency, stop_frequency=stop_frequency, @@ -356,6 +386,7 @@ def main(extension_args): # Duplicate design + aedtapp.logger.info("Duplicate design without enclosure.") original_design = aedtapp.design_name aedtapp.duplicate_design(f"{original_design}_free_space") free_space_design = aedtapp.design_name @@ -370,13 +401,14 @@ def main(extension_args): # Analyze free space free_space = ansys.aedt.core.Hfss(design=free_space_design, new_desktop=False) - free_space.analyze(cores=cores) + free_space.analyze(cores=cores, setup=setup_name) # Analyze original original = ansys.aedt.core.Hfss(design=original_design, new_desktop=False) - original.analyze(cores=cores) + original.analyze(cores=cores, setup=setup_name) # Get data + aedtapp.logger.info("Get data from both designs.") free_space_1meter = free_space.post.get_solution_data("Sphere1meter", report_category="Emission Test") free_space_3meters = free_space.post.get_solution_data("Sphere3meters", report_category="Emission Test") @@ -463,8 +495,6 @@ def main(extension_args): plot_name="Shielding Sphere3meters", ) - original.release_desktop(False, False) - if not extension_args["is_test"]: # pragma: no cover app.release_desktop(False, False) return True diff --git a/tests/system/solvers/test_45_workflows.py b/tests/system/solvers/test_45_workflows.py index a04d3757256..7a3846321ab 100644 --- a/tests/system/solvers/test_45_workflows.py +++ b/tests/system/solvers/test_45_workflows.py @@ -573,3 +573,45 @@ def test_17_choke_designer(self, local_scratch): } extension_args = {"is_test": True, "choke_config": choke_config} assert main(extension_args) + + def test_18_shielding_effectiveness(self, add_app, local_scratch): + aedtapp = add_app(application=ansys.aedt.core.Hfss, project_name="se") + + from ansys.aedt.core.workflows.hfss.shielding_effectiveness import main + + assert not main( + { + "is_test": True, + "sphere_size": 0.01, + "x_pol": 0.0, + "y_pol": 0.1, + "z_pol": 1.0, + "dipole_type": "Electric", + "frequency_units": "GHz", + "start_frequency": 0.1, + "stop_frequency": 1, + "points": 5, + "cores": 4, + } + ) + + aedtapp.modeler.create_waveguide(origin=[0, 0, 0], wg_direction_axis=0) + + assert main( + { + "is_test": True, + "sphere_size": 0.01, + "x_pol": 0.0, + "y_pol": 0.1, + "z_pol": 1.0, + "dipole_type": "Electric", + "frequency_units": "GHz", + "start_frequency": 0.1, + "stop_frequency": 0.2, + "points": 2, + "cores": 4, + } + ) + + assert len(aedtapp.post.all_report_names) == 2 + aedtapp.close_project(aedtapp.project_name) From 9d0a80d8ae5f89beeaca2f1ef9a8a851d9ac6b47 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Fri, 17 Jan 2025 14:33:06 +0100 Subject: [PATCH 05/13] Fix codacy --- .../aedt/core/workflows/hfss/shielding_effectiveness.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/ansys/aedt/core/workflows/hfss/shielding_effectiveness.py b/src/ansys/aedt/core/workflows/hfss/shielding_effectiveness.py index a9a20e2da4c..0aa9b7b554e 100644 --- a/src/ansys/aedt/core/workflows/hfss/shielding_effectiveness.py +++ b/src/ansys/aedt/core/workflows/hfss/shielding_effectiveness.py @@ -443,8 +443,9 @@ def main(extension_args): input_file_1meter = Path(original.toolkit_directory) / "Shielding_Sphere1meter.csv" list_data = [[frequency_units, "V_per_meter"]] - for cont in range(len(frequencies)): - list_data.append([frequencies[cont], shielding_1meter_db[cont]]) + + for idx, frequency in enumerate(frequencies): + list_data.append([frequency, shielding_1meter_db[idx]]) write_csv(str(input_file_1meter), list_data, delimiter=",") @@ -452,8 +453,8 @@ def main(extension_args): input_file_3meters = Path(original.toolkit_directory) / "Shielding_Sphere3meters.csv" list_data = [[frequency_units, "V_per_meter"]] - for cont in range(len(frequencies)): - list_data.append([frequencies[cont], shielding_3meters_db[cont]]) + for idx, frequency in enumerate(frequencies): + list_data.append([frequency, shielding_3meters_db[idx]]) write_csv(str(input_file_3meters), list_data, delimiter=",") From 7ec904b5e464714661be5a7ddd616eb8b069afcb Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Wed, 29 Jan 2025 08:41:06 +0100 Subject: [PATCH 06/13] Modify test number --- tests/system/solvers/test_45_workflows.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system/solvers/test_45_workflows.py b/tests/system/solvers/test_45_workflows.py index 6c3cd11d101..33cd46ffe1d 100644 --- a/tests/system/solvers/test_45_workflows.py +++ b/tests/system/solvers/test_45_workflows.py @@ -595,7 +595,7 @@ def test_18_via_merging(self, local_scratch): } assert main(_input_) - def test_18_shielding_effectiveness(self, add_app, local_scratch): + def test_19_shielding_effectiveness(self, add_app, local_scratch): aedtapp = add_app(application=ansys.aedt.core.Hfss, project_name="se") from ansys.aedt.core.workflows.hfss.shielding_effectiveness import main From 7ae5537444a5375653510adf4615397803f008a7 Mon Sep 17 00:00:00 2001 From: samuel Date: Wed, 29 Jan 2025 11:21:28 +0100 Subject: [PATCH 07/13] Change 2 cores --- tests/system/solvers/test_45_workflows.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system/solvers/test_45_workflows.py b/tests/system/solvers/test_45_workflows.py index 6c3cd11d101..5fd7d6d4974 100644 --- a/tests/system/solvers/test_45_workflows.py +++ b/tests/system/solvers/test_45_workflows.py @@ -630,7 +630,7 @@ def test_18_shielding_effectiveness(self, add_app, local_scratch): "start_frequency": 0.1, "stop_frequency": 0.2, "points": 2, - "cores": 4, + "cores": 2, } ) From a4ea97afb3a5c6046593e44737ae73bd56ea9d6f Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Wed, 29 Jan 2025 12:44:26 +0100 Subject: [PATCH 08/13] Skip test in Linux, simulation is taking too long --- tests/system/solvers/test_45_workflows.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/system/solvers/test_45_workflows.py b/tests/system/solvers/test_45_workflows.py index a3cca655499..f367f11c272 100644 --- a/tests/system/solvers/test_45_workflows.py +++ b/tests/system/solvers/test_45_workflows.py @@ -595,6 +595,7 @@ def test_18_via_merging(self, local_scratch): } assert main(_input_) + @pytest.mark.skipif(is_linux, reason="Simulation takes too long in Linux machine.") def test_19_shielding_effectiveness(self, add_app, local_scratch): aedtapp = add_app(application=ansys.aedt.core.Hfss, project_name="se") From bed43e4e0de8777e9bdebe8601ac42da18a94965 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Wed, 29 Jan 2025 14:05:32 +0100 Subject: [PATCH 09/13] Add doc --- .../pyaedt_extensions_doc/hfss/shielding.rst | 50 ++++++++++++++++++ .../_static/extensions/shielding_ui.png | Bin 0 -> 18438 bytes 2 files changed, 50 insertions(+) create mode 100644 doc/source/User_guide/pyaedt_extensions_doc/hfss/shielding.rst create mode 100644 doc/source/_static/extensions/shielding_ui.png diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss/shielding.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss/shielding.rst new file mode 100644 index 00000000000..d5496b50ed6 --- /dev/null +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss/shielding.rst @@ -0,0 +1,50 @@ +Shielding Effectiveness +======================= + +The **Shielding Effectiveness** extension computes the shielding effectiveness of an enclosure. +It calculates the attenuation of an electromagnetic field inside the enclosure due to the presence of a shield. + +The extension provides a graphical user interface (GUI) for configuration, +or it can be used in batch mode via command line arguments. + +The following image shows the extension GUI: + +.. image:: ../../../_static/extensions/shielding_ui.png + :width: 800 + :alt: Shielding Effectiveness GUI + + +Features +-------- + +- Configure input parameters including source sphere radius, polarization, start and stop frequency and dipole type. +- Automatic HFSS setup. +- Switch between light and dark themes in the GUI. + + +Using the extension +------------------- + +1. Open the **Automation** tab in the HFSS interface. +2. Locate and click the **Choke designer** icon under the Extension Manager. +3. In the GUI, users can interact with the following elements: + - **Source sphere radius**: Source sphere radius in meters. It must fit inside the shielding. + - **Polarization**: X, Y, Z polarization component. + - **Frequency**: Start and stop frequency and the number of steps to analyze. + - **Electric dipole**: Dipole type selection. Electric or magnetic dipole are available. + - **Cores**: Number of cores for the simulation. +4. Click on **Launch** to start the automated workflow. + + +Command line +------------ + +The extension can also be used directly via the command line for batch processing. + + +Use the following syntax to run the extension: + +.. toctree:: + :maxdepth: 2 + + ../commandline diff --git a/doc/source/_static/extensions/shielding_ui.png b/doc/source/_static/extensions/shielding_ui.png new file mode 100644 index 0000000000000000000000000000000000000000..fb276c1dea0b666b67612008dcf5dd67c1a98d1c GIT binary patch literal 18438 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 literal 0 HcmV?d00001 From 467ca3ea3aab082b1766d7ae24e9aa523bde5641 Mon Sep 17 00:00:00 2001 From: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> Date: Fri, 31 Jan 2025 12:14:13 +0100 Subject: [PATCH 10/13] Update src/ansys/aedt/core/hfss.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sébastien Morais <146729917+SMoraisAnsys@users.noreply.github.com> --- src/ansys/aedt/core/hfss.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/ansys/aedt/core/hfss.py b/src/ansys/aedt/core/hfss.py index e98124ee297..87b3c29a81e 100644 --- a/src/ansys/aedt/core/hfss.py +++ b/src/ansys/aedt/core/hfss.py @@ -6776,8 +6776,10 @@ def hertzian_dipole_wave( radius="10mm", name=None, ) -> BoundaryObject: - """Create a hertzian dipole wave excitation. The excitation is assigned in the assigned sphere, inside this - sphere, the field magnitude is equal to the field magnitude calculated on the surface of the sphere. + """Create a hertzian dipole wave excitation. + + The excitation is assigned in the assigned sphere. Inside this sphere, the field magnitude + is equal to the field magnitude calculated on the surface of the sphere. Parameters ---------- From 1beeadfe48fdd7ab13fcc89abc65faa1b386d2f1 Mon Sep 17 00:00:00 2001 From: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> Date: Fri, 31 Jan 2025 12:14:38 +0100 Subject: [PATCH 11/13] Update doc/source/User_guide/pyaedt_extensions_doc/hfss/shielding.rst MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sébastien Morais <146729917+SMoraisAnsys@users.noreply.github.com> --- doc/source/User_guide/pyaedt_extensions_doc/hfss/shielding.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss/shielding.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss/shielding.rst index d5496b50ed6..eab32b879a6 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss/shielding.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss/shielding.rst @@ -26,7 +26,7 @@ Using the extension ------------------- 1. Open the **Automation** tab in the HFSS interface. -2. Locate and click the **Choke designer** icon under the Extension Manager. +2. Locate and click the **Shielding Effectiveness** icon under the Extension Manager. 3. In the GUI, users can interact with the following elements: - **Source sphere radius**: Source sphere radius in meters. It must fit inside the shielding. - **Polarization**: X, Y, Z polarization component. From 28294796eccf0567f7b27965f56afe1907869426 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 31 Jan 2025 11:15:37 +0000 Subject: [PATCH 12/13] CHORE: Auto fixes from pre-commit.com hooks For more information, see https://pre-commit.ci --- src/ansys/aedt/core/hfss.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ansys/aedt/core/hfss.py b/src/ansys/aedt/core/hfss.py index 87b3c29a81e..9ccfc9c65d7 100644 --- a/src/ansys/aedt/core/hfss.py +++ b/src/ansys/aedt/core/hfss.py @@ -6777,7 +6777,7 @@ def hertzian_dipole_wave( name=None, ) -> BoundaryObject: """Create a hertzian dipole wave excitation. - + The excitation is assigned in the assigned sphere. Inside this sphere, the field magnitude is equal to the field magnitude calculated on the surface of the sphere. From 42aa6f1dd4005242bf8eb6892b8c3c7a7e692890 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Fri, 31 Jan 2025 12:16:49 +0100 Subject: [PATCH 13/13] Add comments --- doc/source/User_guide/pyaedt_extensions_doc/hfss/shielding.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss/shielding.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss/shielding.rst index eab32b879a6..cbe0741877f 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss/shielding.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss/shielding.rst @@ -31,8 +31,9 @@ Using the extension - **Source sphere radius**: Source sphere radius in meters. It must fit inside the shielding. - **Polarization**: X, Y, Z polarization component. - **Frequency**: Start and stop frequency and the number of steps to analyze. - - **Electric dipole**: Dipole type selection. Electric or magnetic dipole are available. + - **Electric dipole**: Activate electric dipole. Electric or magnetic dipole are available. - **Cores**: Number of cores for the simulation. + - Toggle between light and dark themes. 4. Click on **Launch** to start the automated workflow.