.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "examples\01-HFSS3DLayout\Hfss3DComponent.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_01-HFSS3DLayout_Hfss3DComponent.py: HFSS: 3D Components ------------------- This example shows how you can use PyAEDT to place 3D Components in Hfss and in Hfss 3D Layout. .. GENERATED FROM PYTHON SOURCE LINES 6-9 .. code-block:: default import os import pyaedt .. GENERATED FROM PYTHON SOURCE LINES 10-14 Set non-graphical mode ~~~~~~~~~~~~~~~~~~~~~~ Set non-graphical mode. You can set ``non_graphical`` either to ``True`` or ``False``. .. GENERATED FROM PYTHON SOURCE LINES 14-17 .. code-block:: default non_graphical = False .. GENERATED FROM PYTHON SOURCE LINES 18-21 Common Properties ~~~~~~~~~~~~~~~~~ Set common properties. .. GENERATED FROM PYTHON SOURCE LINES 21-31 .. code-block:: default trace_width = 0.6 trace_length = 30 diel_height = "121mil" sig_height = "5mil" max_steps = 3 freq = "3GHz" desktop_version = "2023.2" new_session = True .. GENERATED FROM PYTHON SOURCE LINES 32-35 3D Component Definition ~~~~~~~~~~~~~~~~~~~~~~~ File to be used in the example .. GENERATED FROM PYTHON SOURCE LINES 35-38 .. code-block:: default component3d = pyaedt.downloads.download_file("component_3d", "SMA_RF_Jack.a3dcomp",) .. GENERATED FROM PYTHON SOURCE LINES 39-43 Hfss Example ------------ This example will create a stackup in Hfss place a 3d component, build a ground plane, a trace, create excitation and solve it in Hfss. .. GENERATED FROM PYTHON SOURCE LINES 45-48 Launch Hfss ~~~~~~~~~~~ Launch HFSS application .. GENERATED FROM PYTHON SOURCE LINES 48-53 .. code-block:: default hfss = pyaedt.Hfss(new_desktop_session=True, specified_version="2023.2", non_graphical=non_graphical) hfss.solution_type = "Terminal" .. rst-class:: sphx-glr-script-out .. code-block:: none Initializing new desktop! .. GENERATED FROM PYTHON SOURCE LINES 54-57 Insert 3d Component ~~~~~~~~~~~~~~~~~~~ To insert a 3d component we need to read parameters and then import in Hfss. .. GENERATED FROM PYTHON SOURCE LINES 57-61 .. code-block:: default comp_param = hfss.get_components3d_vars(component3d) hfss.modeler.insert_3d_component(component3d, comp_param) .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 62-65 Add a new Stackup ~~~~~~~~~~~~~~~~~ Pyaedt has a Stackup class which allows to parametrize stacked structures. .. GENERATED FROM PYTHON SOURCE LINES 65-71 .. code-block:: default stackup = hfss.add_stackup_3d() s1 = stackup.add_signal_layer("L1", thickness=sig_height) d1 = stackup.add_dielectric_layer("D1", thickness=diel_height) g1 = stackup.add_ground_layer("G1", thickness=sig_height) .. GENERATED FROM PYTHON SOURCE LINES 72-75 Define stackup extensions ~~~~~~~~~~~~~~~~~~~~~~~~~~ Define stackup elevation and size. Defines also the stackup origin. .. GENERATED FROM PYTHON SOURCE LINES 75-82 .. code-block:: default stackup.start_position = "-131mil" stackup.dielectric_width = "20mm" stackup.dielectric_length = "40mm" stackup.dielectric_y_position = "-dielectric_width/2" stackup.dielectric_x_position = "-dielectric_length/4" .. GENERATED FROM PYTHON SOURCE LINES 83-87 Padstack Definition ~~~~~~~~~~~~~~~~~~~ Padstacks are needed to create a clearance around 3d component since intersections are not allowed. There will be 1 padstack for Gnd and 1 for pin. .. GENERATED FROM PYTHON SOURCE LINES 87-107 .. code-block:: default p1 = stackup.add_padstack("gnd_via", material="cloned_copper") p1.set_start_layer("L1") p1.set_stop_layer("G1") p1.set_all_antipad_value(1.3) p1.set_all_pad_value(0) p1.num_sides = 8 p1.add_via(-3.2, -3.2) p1.add_via(-3.2, 3.2) p1.add_via(3.2, -3.2) p1.add_via(3.2, 3.2) p2 = stackup.add_padstack("signal_via", material="cloned_copper") p2.set_start_layer("L1") p2.set_stop_layer("G1") p2.set_all_antipad_value(0.7) p2.set_all_pad_value(0) p2.padstacks_by_layer["L1"].pad_radius = 0.3048 p2.add_via(0, 0) .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 108-111 Trace Definition ~~~~~~~~~~~~~~~~ The trace will connect the pin to the port on layer L1. .. GENERATED FROM PYTHON SOURCE LINES 111-118 .. code-block:: default t1 = s1.add_trace(trace_width, trace_length) rect1 = hfss.modeler.create_rectangle(csPlane=hfss.PLANE.YZ, position=["0.75*dielectric_length", "-5*" + t1.width.name, "0mm"], dimension_list=["15*" + t1.width.name, "-3*" + stackup.thickness.name]) p1 = hfss.wave_port(signal=rect1, reference="G1", name="P1") .. GENERATED FROM PYTHON SOURCE LINES 119-122 Set Simulation Boundaries ~~~~~~~~~~~~~~~~~~~~~~~~~ Define regione and simulation boundaries. .. GENERATED FROM PYTHON SOURCE LINES 122-128 .. code-block:: default hfss.change_material_override(True) region = hfss.modeler.create_region([0, 0, 0, 0, 0, 100]) sheets = [i for i in region.faces] hfss.assign_radiation_boundary_to_faces(sheets) .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 129-132 Create Setup ~~~~~~~~~~~~ Iterations will be reduced to reduce simulation time. .. GENERATED FROM PYTHON SOURCE LINES 132-138 .. code-block:: default setup1 = hfss.create_setup() sweep1 = hfss.create_linear_count_sweep(setup1.name, "GHz", 0.01, 8, 1601, sweep_type="Interpolating") setup1.props["Frequency"] = freq setup1.props["MaximumPasses"] = max_steps .. GENERATED FROM PYTHON SOURCE LINES 139-142 Solve Setup ~~~~~~~~~~~ Save the project first and then solve the setup. .. GENERATED FROM PYTHON SOURCE LINES 142-146 .. code-block:: default hfss.save_project() hfss.analyze() .. rst-class:: sphx-glr-script-out .. code-block:: none True .. GENERATED FROM PYTHON SOURCE LINES 147-150 Plot results ~~~~~~~~~~~~ Plot the results when analysis is completed. .. GENERATED FROM PYTHON SOURCE LINES 150-155 .. code-block:: default traces = hfss.get_traces_for_plot(category="S") solutions = hfss.post.get_solution_data(traces) solutions.plot(traces, math_formula="db20") .. image-sg:: /examples/01-HFSS3DLayout/images/sphx_glr_Hfss3DComponent_001.png :alt: Simulation Results Plot :srcset: /examples/01-HFSS3DLayout/images/sphx_glr_Hfss3DComponent_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none
.. GENERATED FROM PYTHON SOURCE LINES 156-160 Hfss 3D Layout Example ---------------------- Previous example will be repeated this time in Hfss 3d Layout. Small differences are expected in layout but results should be similar. .. GENERATED FROM PYTHON SOURCE LINES 162-165 Launch Hfss3dLayout ~~~~~~~~~~~~~~~~~~~ Launch HFSS3dLayout application .. GENERATED FROM PYTHON SOURCE LINES 165-168 .. code-block:: default h3d = pyaedt.Hfss3dLayout() .. rst-class:: sphx-glr-script-out .. code-block:: none Returning found desktop with PID 4240! .. GENERATED FROM PYTHON SOURCE LINES 169-172 Add stackup layers ~~~~~~~~~~~~~~~~~~ Add stackup layers. .. GENERATED FROM PYTHON SOURCE LINES 172-177 .. code-block:: default l1 = h3d.modeler.layers.add_layer("L1", "signal", thickness=sig_height) h3d.modeler.layers.add_layer("diel", "dielectric", thickness=diel_height, material="FR4_epoxy") h3d.modeler.layers.add_layer("G1", "signal", thickness=sig_height, isnegative=True) .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 178-181 Place 3d Component ~~~~~~~~~~~~~~~~~~ Place a 3d component by specifying the .a3dcomp file path. .. GENERATED FROM PYTHON SOURCE LINES 181-187 .. code-block:: default comp = h3d.modeler.place_3d_component( component_path=component3d, number_of_terminals=1, placement_layer="G1", component_name="my_connector", pos_x=0.000, pos_y=0.000 ) .. GENERATED FROM PYTHON SOURCE LINES 188-191 Create signal net and ground planes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Create a signal net and ground planes. .. GENERATED FROM PYTHON SOURCE LINES 191-197 .. code-block:: default h3d["len"] = str(trace_length) + "mm" h3d["w1"] = str(trace_width) + "mm" line = h3d.modeler.create_line("L1", [[0, 0], ["len", 0]], lw="w1", netname="microstrip", name="microstrip") h3d.create_edge_port(line, h3d.modeler[line].top_edge_x, iswave=True, wave_horizontal_extension=15, ) .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 198-201 Create void on Ground plane for pin ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Create a void. .. GENERATED FROM PYTHON SOURCE LINES 201-204 .. code-block:: default h3d.modeler.create_circle("G1", 0, 0, 0.5) .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 205-208 Create Setup ~~~~~~~~~~~~ Iterations will be reduced to reduce simulation time. .. GENERATED FROM PYTHON SOURCE LINES 208-217 .. code-block:: default h3d.set_meshing_settings(mesh_method="PhiPlus", enable_intersections_check=False) h3d.edit_hfss_extents(diel_extent_horizontal_padding="0.2", air_vertical_positive_padding="0", air_vertical_negative_padding="2", airbox_values_as_dim=False) setup1 = h3d.create_setup() sweep1 = h3d.create_linear_count_sweep(setup1.name, "GHz", 0.01, 8, 1601, sweep_type="Interpolating") setup1.props["AdaptiveSettings"]["SingleFrequencyDataList"]["AdaptiveFrequencyData"]["AdaptiveFrequency"] = freq setup1.props["AdaptiveSettings"]["SingleFrequencyDataList"]["AdaptiveFrequencyData"]["MaxPasses"] = max_steps .. GENERATED FROM PYTHON SOURCE LINES 218-220 Solve Setup ~~~~~~~~~~~ .. GENERATED FROM PYTHON SOURCE LINES 220-223 .. code-block:: default h3d.analyze() .. rst-class:: sphx-glr-script-out .. code-block:: none True .. GENERATED FROM PYTHON SOURCE LINES 224-226 Plot results ~~~~~~~~~~~~ .. GENERATED FROM PYTHON SOURCE LINES 226-233 .. code-block:: default traces = h3d.get_traces_for_plot(category="S") solutions = h3d.post.get_solution_data(traces) solutions.plot(traces, math_formula="db20") h3d.save_project() h3d.release_desktop() .. image-sg:: /examples/01-HFSS3DLayout/images/sphx_glr_Hfss3DComponent_002.png :alt: Simulation Results Plot :srcset: /examples/01-HFSS3DLayout/images/sphx_glr_Hfss3DComponent_002.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none True .. rst-class:: sphx-glr-timing **Total running time of the script:** (4 minutes 26.471 seconds) .. _sphx_glr_download_examples_01-HFSS3DLayout_Hfss3DComponent.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: Hfss3DComponent.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: Hfss3DComponent.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_