.. DO NOT EDIT.
.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
.. "examples\02-HFSS\HFSS_Spiral.py"
.. LINE NUMBERS ARE GIVEN BELOW.

.. only:: html

    .. note::
        :class: sphx-glr-download-link-note

        :ref:`Go to the end <sphx_glr_download_examples_02-HFSS_HFSS_Spiral.py>`
        to download the full example code.

.. rst-class:: sphx-glr-example-title

.. _sphx_glr_examples_02-HFSS_HFSS_Spiral.py:


HFSS: spiral inductor
---------------------
This example shows how you can use PyAEDT to create a spiral inductor, solve it, and plot results.

.. GENERATED FROM PYTHON SOURCE LINES 8-11

Perform required imports
~~~~~~~~~~~~~~~~~~~~~~~~
Perform required imports.

.. GENERATED FROM PYTHON SOURCE LINES 11-17

.. code-block:: Python


    import os
    import pyaedt

    project_name = pyaedt.generate_unique_project_name(project_name="spiral")








.. GENERATED FROM PYTHON SOURCE LINES 18-21

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

.. GENERATED FROM PYTHON SOURCE LINES 21-24

.. code-block:: Python


    aedt_version = "2024.1"








.. GENERATED FROM PYTHON SOURCE LINES 25-29

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

.. GENERATED FROM PYTHON SOURCE LINES 29-32

.. code-block:: Python


    non_graphical = False








.. GENERATED FROM PYTHON SOURCE LINES 33-37

Launch HFSS
~~~~~~~~~~~
Launch HFSS 2023 R2 in non-graphical mode and change the
units to microns.

.. GENERATED FROM PYTHON SOURCE LINES 37-44

.. code-block:: Python


    hfss = pyaedt.Hfss(specified_version=aedt_version, non_graphical=non_graphical, designname="A1",
                       new_desktop_session=True)
    hfss.solution_type = "Modal"
    hfss.modeler.model_units = "um"
    p = hfss.modeler








.. GENERATED FROM PYTHON SOURCE LINES 45-49

Define variables
~~~~~~~~~~~~~~~~
Define input variables. You can use the values that follow or edit
them.

.. GENERATED FROM PYTHON SOURCE LINES 49-60

.. code-block:: Python


    rin = 10
    width = 2
    spacing = 1
    thickness = 1
    Np = 8
    Nr = 10
    gap = 3
    hfss["Tsub"] = "6" + hfss.modeler.model_units









.. GENERATED FROM PYTHON SOURCE LINES 61-65

Standardize polyline
~~~~~~~~~~~~~~~~~~~~
Standardize the polyline using the ``create_line`` method to fix
the width, thickness, and material.

.. GENERATED FROM PYTHON SOURCE LINES 65-71

.. code-block:: Python


    def create_line(pts):
        p.create_polyline(pts, material="copper", xsection_type="Rectangle", xsection_width=width,
                          xsection_height=thickness)









.. GENERATED FROM PYTHON SOURCE LINES 72-76

Create spiral inductor
~~~~~~~~~~~~~~~~~~~~~~
Create the spiral inductor. This spiral inductor is not
parametric, but you could parametrize it later.

.. GENERATED FROM PYTHON SOURCE LINES 76-88

.. code-block:: Python


    ind = hfss.modeler.create_spiral(
        internal_radius=rin,
        width=width,
        spacing=spacing,
        turns=Nr,
        faces=Np,
        thickness=thickness,
        material="copper",
        name="Inductor1",
    )








.. GENERATED FROM PYTHON SOURCE LINES 89-92

Center return path
~~~~~~~~~~~~~~~~~~
Center the return path.

.. GENERATED FROM PYTHON SOURCE LINES 92-98

.. code-block:: Python


    x0, y0, z0 = ind.points[0]
    x1, y1, z1 = ind.points[-1]
    create_line([(x0 - width / 2, y0, -gap), (abs(x1) + 5, y0, -gap)])
    p.create_box([x0 - width / 2, y0 - width / 2, -gap - thickness / 2], [width, width, gap + thickness], material="copper")





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

 .. code-block:: none


    <pyaedt.modeler.cad.object3d.Object3d object at 0x000002264CBD25C0>



.. GENERATED FROM PYTHON SOURCE LINES 99-102

Create port 1
~~~~~~~~~~~~~
Create port 1.

.. GENERATED FROM PYTHON SOURCE LINES 102-110

.. code-block:: Python


    p.create_rectangle(orientation=pyaedt.constants.PLANE.YZ,
                       origin=[abs(x1) + 5, y0 - width / 2, -gap - thickness / 2],
                       sizes=[width, "-Tsub+{}{}".format(gap, hfss.modeler.model_units)],
                       name="port1"
                       )
    hfss.lumped_port(assignment="port1", integration_line=pyaedt.constants.AXIS.Z)





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

 .. code-block:: none


    <pyaedt.modules.Boundary.BoundaryObject object at 0x000002264CBD0E50>



.. GENERATED FROM PYTHON SOURCE LINES 111-114

Create port 2
~~~~~~~~~~~~~
Create port 2.

.. GENERATED FROM PYTHON SOURCE LINES 114-121

.. code-block:: Python


    create_line([(x1 + width / 2, y1, 0), (x1 - 5, y1, 0)])
    p.create_rectangle(pyaedt.constants.PLANE.YZ, [x1 - 5, y1 - width / 2, -thickness / 2],
                       [width, "-Tsub"],
                       name="port2")
    hfss.lumped_port(assignment="port2", integration_line=pyaedt.constants.AXIS.Z)





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

 .. code-block:: none


    <pyaedt.modules.Boundary.BoundaryObject object at 0x000002264CBD2590>



.. GENERATED FROM PYTHON SOURCE LINES 122-125

Create silicon substrate and ground plane
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Create the silicon substrate and the ground plane.

.. GENERATED FROM PYTHON SOURCE LINES 125-132

.. code-block:: Python


    p.create_box([x1 - 20, x1 - 20, "-Tsub-{}{}/2".format(thickness, hfss.modeler.model_units)],
                 [-2 * x1 + 40, -2 * x1 + 40, "Tsub"], material="silicon")

    p.create_box([x1 - 20, x1 - 20, "-Tsub-{}{}/2".format(thickness, hfss.modeler.model_units)],
                 [-2 * x1 + 40, -2 * x1 + 40, -0.1], material="PEC")





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

 .. code-block:: none


    <pyaedt.modeler.cad.object3d.Object3d object at 0x000002264CBD3AF0>



.. GENERATED FROM PYTHON SOURCE LINES 133-136

Assign airbox and radiation
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Assign the airbox and the radiation.

.. GENERATED FROM PYTHON SOURCE LINES 136-143

.. code-block:: Python


    box = p.create_box(
        [x1 - 20, x1 - 20, "-Tsub-{}{}/2 - 0.1{}".format(thickness, hfss.modeler.model_units, hfss.modeler.model_units)],
        [-2 * x1 + 40, -2 * x1 + 40, 100], name="airbox", material="air")

    hfss.assign_radiation_boundary_to_objects("airbox")





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

 .. code-block:: none


    <pyaedt.modules.Boundary.BoundaryObject object at 0x000002264CBD1B10>



.. GENERATED FROM PYTHON SOURCE LINES 144-148

Assign material override
~~~~~~~~~~~~~~~~~~~~~~~~
Assign a material override so that the validation check does
not fail.

.. GENERATED FROM PYTHON SOURCE LINES 148-151

.. code-block:: Python


    hfss.change_material_override()





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

 .. code-block:: none


    True



.. GENERATED FROM PYTHON SOURCE LINES 152-155

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

.. GENERATED FROM PYTHON SOURCE LINES 155-158

.. code-block:: Python


    hfss.plot(show=False, export_path=os.path.join(hfss.working_directory, "Image.jpg"), plot_air_objects=False)




.. image-sg:: /examples/02-HFSS/images/sphx_glr_HFSS_Spiral_001.png
   :alt: HFSS Spiral
   :srcset: /examples/02-HFSS/images/sphx_glr_HFSS_Spiral_001.png
   :class: sphx-glr-single-img


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

 .. code-block:: none


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



.. GENERATED FROM PYTHON SOURCE LINES 159-162

Create setup
~~~~~~~~~~~~
Create the setup and define a frequency sweep to solve the project.

.. GENERATED FROM PYTHON SOURCE LINES 162-170

.. code-block:: Python


    setup1 = hfss.create_setup(name="setup1")
    setup1.props["Frequency"] = "10GHz"
    hfss.create_linear_count_sweep(setup="setup1", units="GHz", start_frequency=1e-3, stop_frequency=50,
                                   num_of_freq_points=451, sweep_type="Interpolating")
    hfss.save_project()
    hfss.analyze()





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

 .. code-block:: none


    True



.. GENERATED FROM PYTHON SOURCE LINES 171-175

Get report data
~~~~~~~~~~~~~~~
Get report data and use the following formulas to calculate
the inductance and quality factor.

.. GENERATED FROM PYTHON SOURCE LINES 175-179

.. code-block:: Python


    L_formula = "1e9*im(1/Y(1,1))/(2*pi*freq)"
    Q_formula = "im(Y(1,1))/re(Y(1,1))"








.. GENERATED FROM PYTHON SOURCE LINES 180-183

Create output variable
~~~~~~~~~~~~~~~~~~~~~~
Create output variable

.. GENERATED FROM PYTHON SOURCE LINES 183-185

.. code-block:: Python

    hfss.create_output_variable("L", L_formula, solution="setup1 : LastAdaptive")





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

 .. code-block:: none


    True



.. GENERATED FROM PYTHON SOURCE LINES 186-189

Plot calculated values in Matplotlib
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Plot the calculated values in Matplotlib.

.. GENERATED FROM PYTHON SOURCE LINES 189-193

.. code-block:: Python


    data = hfss.post.get_solution_data([L_formula, Q_formula])
    data.plot(curves=[L_formula, Q_formula], formula="re", x_label="Freq", y_label="L and Q")




.. image-sg:: /examples/02-HFSS/images/sphx_glr_HFSS_Spiral_002.png
   :alt: Simulation Results Plot
   :srcset: /examples/02-HFSS/images/sphx_glr_HFSS_Spiral_002.png
   :class: sphx-glr-single-img


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

 .. code-block:: none

    No artists with labels found to put in legend.  Note that artists whose label start with an underscore are ignored when legend() is called with no argument.

    <Figure size 2000x1000 with 1 Axes>



.. GENERATED FROM PYTHON SOURCE LINES 194-197

Export results to csv file
~~~~~~~~~~~~~~~~~~~~~~~~~~
Export results to csv file

.. GENERATED FROM PYTHON SOURCE LINES 197-199

.. code-block:: Python

    data.export_data_to_csv(os.path.join(hfss.toolkit_directory, "output.csv"))





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

 .. code-block:: none


    True



.. GENERATED FROM PYTHON SOURCE LINES 200-203

Save project and close AEDT
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Save the project and close AEDT.

.. GENERATED FROM PYTHON SOURCE LINES 203-206

.. code-block:: Python


    hfss.save_project(project_name)
    hfss.release_desktop()




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

 .. code-block:: none


    True




.. rst-class:: sphx-glr-timing

   **Total running time of the script:** (1 minutes 48.453 seconds)


.. _sphx_glr_download_examples_02-HFSS_HFSS_Spiral.py:

.. only:: html

  .. container:: sphx-glr-footer sphx-glr-footer-example

    .. container:: sphx-glr-download sphx-glr-download-jupyter

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

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

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


.. only:: html

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

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