Note
Click here to download the full example code
EMIT: HFSS to EMIT coupling#
This example shows how you can use PyAEDT to open an AEDT project with an HFSS design, create an EMIT design in the project, and link the HFSS design as a coupling link in the EMIT design.
Perform required imports#
Perform required imports.
import os
# Import required modules
import pyaedt
from pyaedt.generic.filesystem import Scratch
- # Set non-graphical mode
Set non-graphical mode.
"PYAEDT_NON_GRAPHICAL"
is needed to generate documentation only. You can setnon_graphical
either toTrue
orFalse
. The Boolean parameternew_thread
defines whether to create a new instance of AEDT or try to connect to an existing instance of it.The following code uses AEDT 2023 R1.
non_graphical = False
NewThread = True
desktop_version = "2023.1"
scratch_path = pyaedt.generate_unique_folder_name()
Launch AEDT with EMIT#
Launch AEDT with EMIT. The Desktop
class initializes AEDT and starts it
on the specified version and in the specified graphical mode.
d = pyaedt.launch_desktop(desktop_version, non_graphical, NewThread)
temp_folder = os.path.join(scratch_path, ("EmitHFSSExample"))
if not os.path.exists(temp_folder):
os.mkdir(temp_folder)
example_name = "Cell Phone RFI Desense"
example_aedt = example_name + ".aedt"
example_lock = example_aedt + ".lock"
example_pdf_file = example_name + " Example.pdf"
example_dir = os.path.join(d.install_path, "Examples\\EMIT")
example_project = os.path.join(example_dir, example_aedt)
example_pdf = os.path.join(example_dir, example_pdf_file)
# If the ``Cell Phone RFT Defense`` example is not in the installation directory, exit from this example.
if not os.path.exists(example_project):
msg = """
Cell phone RFT Desense example file is not in the
Examples/EMIT directory under the EDT installation. You cannot run this example.
"""
print(msg)
d.release_desktop(True, True)
exit()
my_project = os.path.join(temp_folder, example_aedt)
my_project_lock = os.path.join(temp_folder, example_lock)
my_project_pdf = os.path.join(temp_folder, example_pdf_file)
if os.path.exists(my_project):
os.remove(my_project)
if os.path.exists(my_project_lock):
os.remove(my_project_lock)
with Scratch(scratch_path) as local_scratch:
local_scratch.copyfile(example_project, my_project)
if os.path.exists(example_pdf):
local_scratch.copyfile(example_pdf, my_project_pdf)
aedtapp = pyaedt.Emit(my_project)
C:\actions-runner\_work\PyAEDT\PyAEDT\pyaedt\desktop.py:778: ResourceWarning: unclosed <socket.socket fd=7188, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 54482)>
self.port = _find_free_port()
Create and connect EMIT components#
Create two radios with antennas connected to each one.
rad1, ant1 = aedtapp.modeler.components.create_radio_antenna("Bluetooth Low Energy (LE)")
rad2, ant2 = aedtapp.modeler.components.create_radio_antenna("Bluetooth Low Energy (LE)")
Define coupling among RF systems#
Define coupling among the RF systems.
Run EMIT simulation#
Run the EMIT simulation. This portion of the EMIT API is not yet implemented.
This part of the example requires Ansys AEDT 2023 R2.
if desktop_version > "2023.1":
rev = aedtapp.analyze()
modeRx = aedtapp.tx_rx_mode().rx
modeTx = aedtapp.tx_rx_mode().tx
modeEmi = aedtapp.result_type().emi
rx_bands = aedtapp.results.get_band_names(rad1.name, modeRx)
tx_bands = aedtapp.results.get_band_names(rad2.name, modeTx)
domain = aedtapp.interaction_domain()
domain.set_receiver(rad1.name, rx_bands[0], -1)
domain.set_interferers([rad2.name],[tx_bands[0]],[-1])
interaction = rev.run(domain)
worst = interaction.get_worst_instance(modeEmi)
if worst.has_valid_values():
emi = worst.get_value(modeEmi)
print("Worst case interference is: {} dB".format(emi))
Save project and close AEDT#
After the simulation completes, you can close AEDT or release it using the
pyaedt.Desktop.force_close_desktop()
method.
All methods provide for saving the project before closing.
aedtapp.save_project()
aedtapp.release_desktop(close_projects=True, close_desktop=True)
True
Total running time of the script: ( 0 minutes 22.785 seconds)