.. 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 <sphx_glr_download_examples_06-Multiphysics_Hfss_Mechanical.py>`
        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:: Python


    import os
    import pyaedt








.. GENERATED FROM PYTHON SOURCE LINES 17-20

Set AEDT version
~~~~~~~~~~~~~~~~
Set AEDT version.

.. GENERATED FROM PYTHON SOURCE LINES 20-23

.. code-block:: Python


    aedt_version = "2024.1"








.. GENERATED FROM PYTHON SOURCE LINES 24-28

Set non-graphical mode
~~~~~~~~~~~~~~~~~~~~~~
Set non-graphical mode. 
You can set ``non_graphical`` either to ``True`` or ``False``.

.. GENERATED FROM PYTHON SOURCE LINES 28-31

.. code-block:: Python


    non_graphical = False








.. GENERATED FROM PYTHON SOURCE LINES 32-35

Download and open project
~~~~~~~~~~~~~~~~~~~~~~~~~
Download and open the project. Save it to the temporary folder.

.. GENERATED FROM PYTHON SOURCE LINES 35-38

.. code-block:: Python


    project_temp_name = pyaedt.downloads.download_via_wizard(pyaedt.generate_unique_folder_name())








.. GENERATED FROM PYTHON SOURCE LINES 39-42

Start HFSS
~~~~~~~~~~
Start HFSS and initialize the PyAEDT object.

.. GENERATED FROM PYTHON SOURCE LINES 42-48

.. code-block:: Python


    hfss = pyaedt.Hfss(projectname=project_temp_name, specified_version=aedt_version, non_graphical=non_graphical,
                       new_desktop_session=True)
    pin_names = hfss.excitations
    hfss.change_material_override(True)





.. rst-class:: sphx-glr-script-out

 .. code-block:: none

    C:\actions-runner\_work\_tool\Python\3.10.9\x64\lib\subprocess.py:1072: ResourceWarning: subprocess 7524 is still running
      _warn("subprocess %s is still running" % self.pid,
    C:\actions-runner\_work\pyaedt\pyaedt\.venv\lib\site-packages\pyaedt\generic\settings.py:383: ResourceWarning: unclosed file <_io.TextIOWrapper name='D:\\Temp\\pyaedt_ansys.log' mode='a' encoding='cp1252'>
      self._logger = val

    True



.. GENERATED FROM PYTHON SOURCE LINES 49-52

Start Circuit
~~~~~~~~~~~~~
Start Circuit and add the HFSS dynamic link component to it.

.. GENERATED FROM PYTHON SOURCE LINES 52-56

.. code-block:: Python


    circuit = pyaedt.Circuit()
    hfss_comp = circuit.modeler.schematic.add_subcircuit_dynamic_link(hfss)








.. GENERATED FROM PYTHON SOURCE LINES 57-61

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 61-67

.. code-block:: Python


    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 68-72

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 72-93

.. code-block:: Python


    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 94-97

Create setup
~~~~~~~~~~~~
Create a setup.

.. GENERATED FROM PYTHON SOURCE LINES 97-107

.. code-block:: Python


    setup_name = "MySetup"
    LNA_setup = circuit.create_setup(name=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 108-112

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 112-117

.. code-block:: Python


    circuit.analyze()
    circuit.push_excitations(instance="S1", setup=setup_name)






.. rst-class:: sphx-glr-script-out

 .. code-block:: none


    True



.. GENERATED FROM PYTHON SOURCE LINES 118-121

Start Mechanical
~~~~~~~~~~~~~~~~
Start Mechanical and copy bodies from the HFSS project.

.. GENERATED FROM PYTHON SOURCE LINES 121-126

.. code-block:: Python


    mech = pyaedt.Mechanical()
    mech.copy_solid_bodies_from(hfss)
    mech.change_material_override(True)





.. rst-class:: sphx-glr-script-out

 .. code-block:: none


    True



.. GENERATED FROM PYTHON SOURCE LINES 127-130

Get losses from HFSS and assign convection to Mechanical
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Get losses from HFSS and assign the convection to Mechanical.

.. GENERATED FROM PYTHON SOURCE LINES 130-138

.. code-block:: Python


    mech.assign_em_losses(design=hfss.design_name, setup=hfss.setups[0].name, sweep="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(assignment=[mech.modeler[el].top_face_y, mech.modeler[el].bottom_face_y],
                                       convection_value=3)








.. GENERATED FROM PYTHON SOURCE LINES 139-142

Plot model
~~~~~~~~~~
Plot the model.

.. GENERATED FROM PYTHON SOURCE LINES 142-145

.. code-block:: Python


    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


    <pyaedt.generic.plot.ModelPlotter object at 0x0000022668790070>



.. GENERATED FROM PYTHON SOURCE LINES 146-149

Solve and plot thermal results
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Solve and plot the thermal results.

.. GENERATED FROM PYTHON SOURCE LINES 149-158

.. code-block:: Python


    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(assignment=surfaces, quantity="Temperature")





.. rst-class:: sphx-glr-script-out

 .. code-block:: none


    <pyaedt.modules.solutions.FieldPlot object at 0x000002266875D2D0>



.. GENERATED FROM PYTHON SOURCE LINES 159-162

Release AEDT
~~~~~~~~~~~~
Release AEDT.

.. GENERATED FROM PYTHON SOURCE LINES 162-164

.. code-block:: Python


    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:** (4 minutes 52.629 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-jupyter

      :download:`Download Jupyter notebook: Hfss_Mechanical.ipynb <Hfss_Mechanical.ipynb>`

    .. container:: sphx-glr-download sphx-glr-download-python

      :download:`Download Python source code: Hfss_Mechanical.py <Hfss_Mechanical.py>`


.. only:: html

 .. rst-class:: sphx-glr-signature

    `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_