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

.. only:: html

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

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

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

.. _sphx_glr_examples_01-HFSS3DLayout_HFSS3DLayout_Via.py:


HFSS 3D Layout: parametric via analysis
---------------------------------------
This example shows how you can use HFSS 3D Layout to create and solve a
parametric via analysis.

.. GENERATED FROM PYTHON SOURCE LINES 9-12

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

.. GENERATED FROM PYTHON SOURCE LINES 12-15

.. code-block:: Python

    import pyaedt
    import os








.. GENERATED FROM PYTHON SOURCE LINES 16-19

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

.. GENERATED FROM PYTHON SOURCE LINES 19-22

.. code-block:: Python


    aedt_version = "2024.1"








.. GENERATED FROM PYTHON SOURCE LINES 23-27

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

.. GENERATED FROM PYTHON SOURCE LINES 27-30

.. code-block:: Python


    non_graphical = True








.. GENERATED FROM PYTHON SOURCE LINES 31-34

Launch AEDT
~~~~~~~~~~~
Launch AEDT 2023 R2 in graphical mode.

.. GENERATED FROM PYTHON SOURCE LINES 34-37

.. code-block:: Python


    h3d = pyaedt.Hfss3dLayout(specified_version=aedt_version, new_desktop_session=True, non_graphical=non_graphical)








.. GENERATED FROM PYTHON SOURCE LINES 38-41

Set up variables
~~~~~~~~~~~~~~~~
Set up all parametric variables to use in the layout.

.. GENERATED FROM PYTHON SOURCE LINES 41-48

.. code-block:: Python


    h3d["viatotrace"] = "5mm"
    h3d["viatovia"] = "10mm"
    h3d["w1"] = "1mm"
    h3d["sp"] = "0.5mm"
    h3d["len"] = "50mm"








.. GENERATED FROM PYTHON SOURCE LINES 49-52

Add stackup layers
~~~~~~~~~~~~~~~~~~
Add stackup layers.

.. GENERATED FROM PYTHON SOURCE LINES 52-58

.. code-block:: Python


    h3d.modeler.layers.add_layer(layer="GND", layer_type="signal", thickness="0", isnegative=True)
    h3d.modeler.layers.add_layer(layer="diel", layer_type="dielectric", thickness="0.2mm", material="FR4_epoxy")
    h3d.modeler.layers.add_layer(layer="TOP", layer_type="signal", thickness="0.035mm", elevation="0.2mm")






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

 .. code-block:: none


    <pyaedt.modules.LayerStackup.Layer object at 0x000002263F2D79A0>



.. GENERATED FROM PYTHON SOURCE LINES 59-62

Create signal net and ground planes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Create a signal net and ground planes.

.. GENERATED FROM PYTHON SOURCE LINES 62-71

.. code-block:: Python


    h3d.modeler.create_line(layer="TOP",
                            center_line_coordinates=[[0, 0], ["len", 0]],
                            lw="w1",
                            name="microstrip",
                            net="microstrip")
    h3d.modeler.create_rectangle(layer="TOP", origin=[0, "-w1/2-sp"], sizes=["len", "-w1/2-sp-20mm"])
    h3d.modeler.create_rectangle(layer="TOP", origin=[0, "w1/2+sp"], sizes=["len", "w1/2+sp+20mm"])





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

 .. code-block:: none


    <pyaedt.modeler.pcb.object3dlayout.Rect3dLayout object at 0x000002263F2D6200>



.. GENERATED FROM PYTHON SOURCE LINES 72-75

Create vias
~~~~~~~~~~~
Create vias with parametric positions.

.. GENERATED FROM PYTHON SOURCE LINES 75-83

.. code-block:: Python


    h3d.modeler.create_via(x="viatovia", y="-viatotrace", name="via1")
    h3d.modeler.create_via(x="viatovia", y="viatotrace", name="via2")
    h3d.modeler.create_via(x="2*viatovia", y="-viatotrace")
    h3d.modeler.create_via(x="2*viatovia", y="viatotrace")
    h3d.modeler.create_via(x="3*viatovia", y="-viatotrace")
    h3d.modeler.create_via(x="3*viatovia", y="viatotrace")





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

 .. code-block:: none


    <pyaedt.modeler.pcb.object3dlayout.Pins3DLayout object at 0x0000022638CB6D40>



.. GENERATED FROM PYTHON SOURCE LINES 84-87

Create circuit ports
~~~~~~~~~~~~~~~~~~~~
Create circuit ports.

.. GENERATED FROM PYTHON SOURCE LINES 87-91

.. code-block:: Python


    h3d.create_edge_port("microstrip", 0)
    h3d.create_edge_port("microstrip", 2)





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

 .. code-block:: none


    <pyaedt.modules.Boundary.BoundaryObject3dLayout object at 0x0000022638CB6EC0>



.. GENERATED FROM PYTHON SOURCE LINES 92-95

Create setup and sweep
~~~~~~~~~~~~~~~~~~~~~~
Create a setup and a sweep.

.. GENERATED FROM PYTHON SOURCE LINES 95-101

.. code-block:: Python


    setup = h3d.create_setup()
    h3d.create_linear_count_sweep(setup=setup.name, unit="GHz", start_frequency=3, stop_frequency=7,
                                  num_of_freq_points=1001, save_fields=False, sweep_type="Interpolating",
                                  interpolation_tol_percent=1, interpolation_max_solutions=255, use_q3d_for_dc=False)





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

 .. code-block:: none


    <pyaedt.modules.SolveSweeps.SweepHFSS3DLayout object at 0x000002263F2D5BD0>



.. GENERATED FROM PYTHON SOURCE LINES 102-105

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

.. GENERATED FROM PYTHON SOURCE LINES 105-110

.. code-block:: Python


    h3d.analyze()
    traces = h3d.get_traces_for_plot(first_element_filter="Port1")
    h3d.post.create_report(traces, variations=h3d.available_variations.nominal_w_values_dict)





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

 .. code-block:: none


    <pyaedt.modules.report_templates.Standard object at 0x000002263F2D52D0>



.. GENERATED FROM PYTHON SOURCE LINES 111-114

Create report outside AEDT
~~~~~~~~~~~~~~~~~~~~~~~~~~
Create a report using Matplotlib.

.. GENERATED FROM PYTHON SOURCE LINES 114-120

.. code-block:: Python


    traces = h3d.get_traces_for_plot(first_element_filter="Port1", category="S")

    solutions = h3d.post.get_solution_data(expressions=traces)
    solutions.plot(formula="db20")




.. image-sg:: /examples/01-HFSS3DLayout/images/sphx_glr_HFSS3DLayout_Via_001.png
   :alt: Simulation Results Plot
   :srcset: /examples/01-HFSS3DLayout/images/sphx_glr_HFSS3DLayout_Via_001.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 121-126

Close AEDT
~~~~~~~~~~
After the simulation completes, you can close AEDT or release it using the
:func:`pyaedt.Desktop.release_desktop` method.
All methods provide for saving the project before closing.

.. GENERATED FROM PYTHON SOURCE LINES 126-128

.. code-block:: Python


    h3d.release_desktop()




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

 .. code-block:: none


    True




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

   **Total running time of the script:** (2 minutes 23.764 seconds)


.. _sphx_glr_download_examples_01-HFSS3DLayout_HFSS3DLayout_Via.py:

.. only:: html

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

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

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

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

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


.. only:: html

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

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