.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "examples\06-Multiphysics\Hfss_Mechanical.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_examples_06-Multiphysics_Hfss_Mechanical.py: Multiphysics: HFSS-Mechanical multiphysics analysis --------------------------------------------------- This example shows how you can use PyAEDT to create a multiphysics workflow that includes Circuit, HFSS, and Mechanical. .. GENERATED FROM PYTHON SOURCE LINES 9-12 Perform required imports ~~~~~~~~~~~~~~~~~~~~~~~~ Perform required imports. .. GENERATED FROM PYTHON SOURCE LINES 12-16 .. code-block:: default import os import pyaedt .. GENERATED FROM PYTHON SOURCE LINES 17-21 Set non-graphical mode ~~~~~~~~~~~~~~~~~~~~~~ Set non-graphical mode. You can set ``non_graphical`` either to ``True`` or ``False``. .. GENERATED FROM PYTHON SOURCE LINES 21-24 .. code-block:: default non_graphical = False .. GENERATED FROM PYTHON SOURCE LINES 25-28 Download and open project ~~~~~~~~~~~~~~~~~~~~~~~~~ Download and open the project. Save it to the temporary folder. .. GENERATED FROM PYTHON SOURCE LINES 28-31 .. code-block:: default project_temp_name = pyaedt.downloads.download_via_wizard(pyaedt.generate_unique_folder_name()) .. GENERATED FROM PYTHON SOURCE LINES 32-35 Start HFSS ~~~~~~~~~~ Start HFSS and initialize the PyAEDT object. .. GENERATED FROM PYTHON SOURCE LINES 35-41 .. code-block:: default version = "2023.2" hfss = pyaedt.Hfss(projectname=project_temp_name, specified_version=version, non_graphical=non_graphical, new_desktop_session=True) pin_names = hfss.excitations .. rst-class:: sphx-glr-script-out .. code-block:: none Initializing new desktop! .. GENERATED FROM PYTHON SOURCE LINES 42-45 Start Circuit ~~~~~~~~~~~~~ Start Circuit and add the HFSS dynamic link component to it. .. GENERATED FROM PYTHON SOURCE LINES 45-49 .. code-block:: default circuit = pyaedt.Circuit() hfss_comp = circuit.modeler.schematic.add_subcircuit_dynamic_link(hfss) .. rst-class:: sphx-glr-script-out .. code-block:: none Returning found desktop with PID 11284! .. GENERATED FROM PYTHON SOURCE LINES 50-54 Set up dynamic link options ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set up dynamic link options. The argument for the ``set_sim_option_on_hfss_subcircuit`` method can be the component name, component ID, or component object. .. GENERATED FROM PYTHON SOURCE LINES 54-60 .. code-block:: default circuit.modeler.schematic.refresh_dynamic_link(hfss_comp.composed_name) circuit.modeler.schematic.set_sim_option_on_hfss_subcircuit(hfss_comp) hfss_setup_name = hfss.setups[0].name + " : " + hfss.setups[0].sweeps[0].name circuit.modeler.schematic.set_sim_solution_on_hfss_subcircuit(hfss_comp.composed_name, hfss_setup_name) .. rst-class:: sphx-glr-script-out .. code-block:: none True .. GENERATED FROM PYTHON SOURCE LINES 61-65 Create ports and excitations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Create ports and excitations. Find component pin locations and create interface ports on them. Define the voltage source on the input port. .. GENERATED FROM PYTHON SOURCE LINES 65-86 .. code-block:: default circuit.modeler.schematic.create_interface_port( name="Excitation_1", location=[hfss_comp.pins[0].location[0], hfss_comp.pins[0].location[1]] ) circuit.modeler.schematic.create_interface_port( name="Excitation_2", location=[hfss_comp.pins[1].location[0], hfss_comp.pins[1].location[1]] ) circuit.modeler.schematic.create_interface_port( name="Port_1", location=[hfss_comp.pins[2].location[0], hfss_comp.pins[2].location[1]] ) circuit.modeler.schematic.create_interface_port( name="Port_2", location=[hfss_comp.pins[3].location[0], hfss_comp.pins[3].location[1]] ) voltage = 1 phase = 0 ports_list = ["Excitation_1", "Excitation_2"] source = circuit.assign_voltage_sinusoidal_excitation_to_ports(ports_list) source.ac_magnitude = voltage source.phase = phase .. GENERATED FROM PYTHON SOURCE LINES 87-90 Create setup ~~~~~~~~~~~~ Create a setup. .. GENERATED FROM PYTHON SOURCE LINES 90-100 .. code-block:: default setup_name = "MySetup" LNA_setup = circuit.create_setup(setupname=setup_name) bw_start = 4.3 bw_stop = 4.4 n_points = 1001 unit = "GHz" sweep_list = ["LINC", str(bw_start) + unit, str(bw_stop) + unit, str(n_points)] LNA_setup.props["SweepDefinition"]["Data"] = " ".join(sweep_list) .. GENERATED FROM PYTHON SOURCE LINES 101-105 Solve and push excitations ~~~~~~~~~~~~~~~~~~~~~~~~~~ Solve the circuit and push excitations to the HFSS model to calculate the correct value of losses. .. GENERATED FROM PYTHON SOURCE LINES 105-110 .. code-block:: default circuit.analyze() circuit.push_excitations(instance_name="S1", setup_name=setup_name) .. rst-class:: sphx-glr-script-out .. code-block:: none True .. GENERATED FROM PYTHON SOURCE LINES 111-114 Start Mechanical ~~~~~~~~~~~~~~~~ Start Mechanical and copy bodies from the HFSS project. .. GENERATED FROM PYTHON SOURCE LINES 114-119 .. code-block:: default mech = pyaedt.Mechanical() mech.copy_solid_bodies_from(hfss) .. rst-class:: sphx-glr-script-out .. code-block:: none Returning found desktop with PID 11284! True .. GENERATED FROM PYTHON SOURCE LINES 120-123 Get losses from HFSS and assign convection to Mechanical ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Get losses from HFSS and assign the convection to Mechanical. .. GENERATED FROM PYTHON SOURCE LINES 123-136 .. code-block:: default mech.assign_em_losses( designname=hfss.design_name, setupname=hfss.setups[0].name, sweepname="LastAdaptive", map_frequency=hfss.setups[0].props["Frequency"], surface_objects=hfss.get_all_conductors_names(), ) diels = ["1_pd", "2_pd", "3_pd", "4_pd", "5_pd"] for el in diels: mech.assign_uniform_convection(objects_list=[mech.modeler[el].top_face_y, mech.modeler[el].bottom_face_y], convection_value=3) .. GENERATED FROM PYTHON SOURCE LINES 137-140 Plot model ~~~~~~~~~~ Plot the model. .. GENERATED FROM PYTHON SOURCE LINES 140-143 .. code-block:: default mech.plot(show=False, export_path=os.path.join(mech.working_directory, "Mech.jpg"), plot_air_objects=False) .. image-sg:: /examples/06-Multiphysics/images/sphx_glr_Hfss_Mechanical_001.png :alt: Hfss Mechanical :srcset: /examples/06-Multiphysics/images/sphx_glr_Hfss_Mechanical_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 144-147 Solve and plot thermal results ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Solve and plot the thermal results. .. GENERATED FROM PYTHON SOURCE LINES 147-156 .. code-block:: default mech.create_setup() mech.save_project() mech.analyze() surfaces = [] for name in mech.get_all_conductors_names(): surfaces.extend(mech.modeler.get_object_faces(name)) mech.post.create_fieldplot_surface(objlist=surfaces, quantityName="Temperature") .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 157-160 Release AEDT ~~~~~~~~~~~~ Release AEDT. .. GENERATED FROM PYTHON SOURCE LINES 160-162 .. code-block:: default mech.release_desktop(True, True) .. rst-class:: sphx-glr-script-out .. code-block:: none True .. rst-class:: sphx-glr-timing **Total running time of the script:** (3 minutes 19.932 seconds) .. _sphx_glr_download_examples_06-Multiphysics_Hfss_Mechanical.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: Hfss_Mechanical.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: Hfss_Mechanical.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_